当前位置: 首页 > news >正文

前馈型BP神经网络

1.感知机和激活函数

感知机,是构成神经网络的基本单位,一个感知机可以接收n个输入X=(x1,x2,x3…xn)T(每个输入,可以理解为一种特征),n个输入对应n个权值W=(w1,w2,w3…wn),此外还有一个偏置项b,学过矩阵的人应该可以看出,这其实是一个y=WX+b的函数,实际上就是对所有的输入,根据权值和偏置量进行求和运算,然后作为一个神经元的输出。如下图:
在这里插入图片描述
通过上图可以看出,神经元里,其实是一个线性函数,我们现在先不讨论他是如何学习数据的特征,我们可以通过极限的思想,想象一下这么一个场景,要实现通过特征,进行设备分类,每个设备种类,是一个多维空间中的点,我们要做的就是用函数画出每种设备所在的多维空间中的位置,那么现在再回头看我们神经元中的这个函数,他只是一个线性函数,所以无论我们有多少个神经元和多少个网络深度,他终究在极限的边缘处,只能表示线性关系,如果想象不出来看下面的推导:

在这里插入图片描述
红框中就是输出层的推到公式,很明显,也是线性关系,所以为了让预测的情况更加准确,我们需要一个激活函数,把线性关系,转化为非线性关系,我们就需要把神经元设计成如下:
在这里插入图片描述
常见的激活函数有(科学家研究出来的): sigmoid,对数几率logistic,双曲正切Tanh,以及现在用的最多的ReLu和Leaky-ReLu,softMax。
一般分类问题,都是用softMax函数作为激活函数,因为它可以把每种输出作为概率输出
在这里插入图片描述
(具体的激活函数,这里不做解释了)

2.梯度下降法

梯度下降法,是我们用来计算损失函数误差,和更新w,b的常用算法,他的原理其实很简单,如下图:
在这里插入图片描述

假如损失函数,是一个一元2次函数,只需要随机获取2个点f(X1),f(X0)的值,进行比较,我们就可以知道大小,极小值点肯定是朝着数值小的地方,假如f(x1)<f(x0),那么就说明x1更接近极小值点,那么我们只需要朝着x1的方向,再取一个x2,慢慢的就可以向极小值靠近,这个x1和x2的距离,我们就叫步长 ,但是选择步长,是个问题,步长过小,迭代次数过多步长过大,会产生震荡,导致在极小值点来回跳跃,所以我们就需要一个可以自动更新步长的方法,我们都知道在一个曲线的地方,这点的斜率,代表了他的抖度,当越接近极小值的时候,斜率就越小,所以用步长*这点的偏导数,就可以自动调节步长了,如果是二元函数也是一个道理,如下图:
在这里插入图片描述

3.BP神经网络结构

在这里插入图片描述
输入层:输入的其实就是数据集中的特征,一种特征代表一种输入
隐含层:就是上面说的神经元,其中隐含层的层数和神经元个数,是需要通过试验来确定的
输出层:数据集中的分类有几个,就有几个输出层神经元
在多层神经网络中,每一层的输出,代表的是上一层的输入,只要有足够多的隐含层,且每层有足够多的神经元,那么神经网络就可以拟合出任意复杂函数或空间分布,就比如下面这个:
在这里插入图片描述
隐含层中有三个神经元,可以看出拟合出来了三条直线,通过激活函数,就可以把线性关系转化为非线性关系。

4.损失函数:

在训练神经网络的时候,我们知道是用已经的Y和X,去训练寻找W和B,那么我们就需要知道什么情况下,W和B是已经训练的差不多了,其实就是当我们训练出来的y0和真实的y之间的差距越小,说明训练的W和B就越好,那么我们就需要定义一个损失函数,用来评估我们的模型训练质量。
这里就介绍两个常用的损失函数:
交叉熵损失函数:
在这里插入图片描述
均方误差函数:
在这里插入图片描述

5.独热编码

直接举个通俗易懂的例子,我们在训练数据的时候,有很多抽象的数据,比如设备重要程度,我们不能直接使用1,2,3来区分它的重要程度,也不能直接使用它的编码如A1,A2,A3,因为使用这些编码作为输入,计算机它理解不了,所以我们需要把他转化为欧式距离,例如设备重要程度分为,一般设备,重要设备,那么我们就应该给他们设置独热编码为[0,1],[1,0],这其实代表的是这个这两个分类到原点的欧式距离。

6.误差反向传播算法:

神经网络中,每个神经元相连接的线上都有自己的权值w和偏置量b,我们在进行一次训练后,应该根据损失函数,使用最小梯度下降法,来返回去更w和b, 然后使用更新后的w和b,再用新的数据进行训练,就这样一直重复,从而拟合出最佳的网络。
在这里插入图片描述

上图为一次误差反向传播的过程,隐含层和输出层使用的激活函数为softMax函数,损失函数使用的是均方误差函数,可以看到Loss函数中,它是一个带平方的函数,所以我们就可以用最小梯度下降法,来求它的下一个落脚位置,慢慢的就可以靠近loss的极小值点 ,前面我们说过,怎么求解下一个落脚点,如下图
在这里插入图片描述
这里只是把x和y,换成了w和b,因为x和y是我们数据集中的已知量,而w和b是我们要求的未知量,关于求w0和b0的偏导数,使用的是链式求导法则:
在这里插入图片描述
以上就是更新神经网络中W和B的全过程。

7.BP神经网络训练过程:

初始化网络权值和神经元的阑值,一般通过随机的方式进行初始化
前向传播:计算隐层神经元和输出层神经元的输出
后向传播:根据目标函数公式修正W和B

参考:慕课网-神经网络与深度学习(牟琦),深度学习及其应用(赵卫亮)

相关文章:

前馈型BP神经网络

1.感知机和激活函数 感知机&#xff0c;是构成神经网络的基本单位&#xff0c;一个感知机可以接收n个输入X&#xff08;x1,x2,x3…xn)T&#xff08;每个输入&#xff0c;可以理解为一种特征&#xff09;,n个输入对应n个权值W&#xff08;w1,w2,w3…wn),此外还有一个偏置项b&am…...

数据库实验一:学生信息管理系统数据库结构搭建和表的创建

实验项目名称&#xff1a;学生信息管理系统数据库结构搭建和表的创建 实验目的与要求实验原理与内容1. 数据库的组织结构2. 数据库的分离和附加3. 数据库表的创建&#xff0c;修改和删除 实验过程与结果1. 根据学生信息管理系统创建相关的数据库2. 数据库表初步设计及实现3. 实…...

解决 vscode使用Prettier格式化js文件报错:Cannot find module ‘./parser-babylon‘

报错如下&#xff1a; ["ERROR" - 11:48:58] Error formatting document. ["ERROR" - 11:48:58] Cannot find module ./parser-babylon Require stack: - d:\VueCode\VueProject\myqqmusic\node_modules\prettier\index.js - c:\Users\Administrator.SKY-2…...

汉服商城小程序的作用是什么

汉服在日常生活中越来越常见&#xff0c;大街小巷也有不少年轻人装扮甚是漂亮帅气&#xff0c;有些地区甚至还有相关的比赛等&#xff0c;作为近几年曝光的服饰&#xff0c;汉服市场规模持续增加中&#xff0c;各地线上线下商家也多了起来。 然而在实际经营中&#xff0c;汉服…...

9月大型语言模型研究论文总结

大型语言模型(llm)在今年发展迅速&#xff0c;随着新一代模型不断地被开发&#xff0c;研究人员和工程师了解最新进展变得非常重要。本文总结9-10月期间发布了一些重要的LLM论文。 这些论文涵盖了一系列语言模型的主题&#xff0c;从模型优化和缩放到推理、基准测试和增强性能…...

微信小程序--小程序框架

目录 前言&#xff1a; 一.框架基本介绍 1.整体结构&#xff1a; 2.页面结构&#xff1a; 3.生命周期&#xff1a; 4.事件系统&#xff1a; 5.数据绑定&#xff1a; 6.组件系统&#xff1a; 7.API&#xff1a; 8.路由&#xff1a; 9.模块化&#xff1a; 10.全局配置&…...

Java 全栈体系(三)

第一章 Java 基础语法 八、标识符 业内大多数程序员都在遵守阿里巴巴的命名规则。 1. 硬性要求 必须要这么做&#xff0c;否则代码会报错。 必须由数字、字母、下划线_、美元符号$组成。数字不能开头不能是关键字区分大小写的。 2. 软性建议 如果不这么做&#xff0c;代…...

爬虫学习日记第七篇(爬取github搜索仓库接口,其实不算爬虫)

github提供的搜索仓库的API https://api.github.com/ # 连接数据库 db mysql.connector.connect(host"***",user"***",password"***",database"***" ) # 创建游标 cursor db.cursor() # 从数据库中读取CVE ID cursor.execute("…...

子组件监听父组件消息,随之变化与不变化

父组件通过props传递给子组件消息&#xff0c;子组件有两种情况接收处理&#xff1a; 1、子组件监听父组件props的变化&#xff0c;同时随之变化【可以直接取props中的值展示&#xff0c;也可以监听值得变化处理】 2、子组件初始化时更新&#xff0c;随后不再随父组件变化 示…...

计算机操作系统面试题自用

什么是操作系统&#xff1a; 操作系统是管理硬件和软件的一种应用程序。操作系统是运行在计算机上最重要的一种软件 操作系统的主要功能 解释一下操作系统的主要目的是什么 操作系统是一种软件&#xff0c;它的主要目的有三种 1 管理计算机资源&#xff0c;这些资源包括 C…...

redis作为消息队列的缺点

Redis作为消息队列的不足。 1、基于内存 Redis是一种基于内存的数据库产品&#xff0c;这意味着数据存储在内存中&#xff0c;当内存不足时&#xff0c;Redis会使用基于磁盘的虚拟内存来存储数据。虽然这种虚拟内存机制可以增加Redis的存储容量&#xff0c;但也会降低Redis的…...

Redis五大数据类型的底层设计

SDS 无论是 Redis 的 Key 还是 Value&#xff0c;其基础数据类型都是字符串。虽然 Redis是使用标准 C 语言开发的&#xff0c;但并没有直接使用 C 语言中传统的字符串表示&#xff0c;而是自定义了一 种字符串。这种字符串本身的结构比较简单&#xff0c;但功能却非常强大&…...

logback的简单配置详解

<?xml version"1.0" encoding"UTF-8"?> <!--logback配置的根元素。scantrue表示logback将定期扫描配置文件以检测更改。scanPeriod"30 Period" 扫描间隔为30s--> <configuration scan"true" scanPeriod"30 seco…...

TatukGIS Developer Kernel使用教程:如何为FMX创建第一个应用程序

概述&#xff1a;TatukGIS Developer Kernel&#xff08;DK&#xff09;是一个用于开发自定义地理信息系统&#xff08;GIS&#xff09;应用程序以及解决方案的综合性软件开发工具包&#xff08;SDK&#xff09;。本篇文章主要介绍用DK11为FMX创建一个应用程序&#xff0c;现在…...

Ant Design Vue设置表格滚动 宽度自适应 不换行

Ant Design Vue设置表格滚动 宽度自适应 不换行 添加以下属性即可解决这个问题&#xff1a; <a-table :columns"columns" :data-source"list":pagination"false"bordered:scroll"{ x: max-content }" >...

在Linux上开启文件服务,需要安装并配置Samba

在Linux上开启文件服务&#xff0c;需要安装并配置Samba。以下是具体步骤&#xff1a; 安装Samba软件包&#xff1a;在终端中输入以下命令进行安装&#xff1a; 复制代码 sudo apt-get update && sudo apt-get install samba 配置Samba&#xff1a;编辑Samba配置文件…...

TypeScript 类型兼容性

TypeScript 类型兼容性 在前端开发中&#xff0c;使用 TypeScript 可以提供更强大的类型检查和类型安全。然而&#xff0c;了解 TypeScript 中的类型兼容性是至关重要的&#xff0c;因为它涉及如何处理不同类型之间的关系&#xff0c;以及在这些类型之间进行无缝的交互。本文将…...

【多线程】线程的状态

我们可以通过下面的这段代码来查看线程一共有哪几种状态 //线程的状态是一个枚举类型 Thread.State for(Thread.State state : Thread.State.values()){System.out.println(state); }NEW&#xff08;新建状态&#xff09;&#xff1a; 当线程对象已经被创建&#xff0c;但是 s…...

pytorch 对图片进行归一化处理

如题&#xff0c;神经网络通常使用浮点数张量作为输入&#xff0c;我们要做的第一件事情就是将图片转化为浮点数&#xff0c;并且做归一化操作。 import torch import imageio import osdata_dirF:\\work\\deep_learning\\pytorch\\dlwpt-code-master\\data\\p1ch4\\image-cat…...

零售数据分析师熬夜整理:人、货、场、供、财这样做

在零售数据分析中&#xff0c;人、货、场、供、财数据分析非常重要&#xff0c;它们分别是指人员、商品、场所、供应和财务&#xff0c;对这些要素进行数据分析&#xff0c;可以更好地了解市场需求、优化商品供应链、调整销售策略和提高盈利能力。零售数据量大、分析指标多且复…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...

windows系统MySQL安装文档

概览&#xff1a;本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容&#xff0c;为学习者提供全面的操作指导。关键要点包括&#xff1a; 解压 &#xff1a;下载完成后解压压缩包&#xff0c;得到MySQL 8.…...