首页 > 其他分享 >BP神经网络

BP神经网络

时间:2023-10-10 11:08:27浏览次数:42  
标签:输出 函数 Sigmoid 梯度 神经网络 BP 神经元


一、感知器(机)

BP神经网络_激活函数

上图的圆圈就代表一个感知器。它接受多个输入(x1,x2,x3…),产生一个输出(output),好比神经末梢感受各种外部环境的变化,最后产生电信号。

为了简化模型,我们约定每种输入只有两种可能:1 或 0。如果所有输入都是1,表示各种条件都成立,输出就是1;如果所有输入都是0,表示条件都不成立,输出就是0。

对于输入信号,它们对于输出信号的重要性是不一样的,这种重要性可以用权值来描述。这时,还需要指定一个阈值(threshold)。如果总和大于阈值,感知器输出1,否则输出0。假定阈值为8,那么 12 > 8,小明决定去参观。阈值的高低代表了意愿的强烈,阈值越低就表示越想去,越高就越不想去。

上面的决策过程,使用数学表达如下:

BP神经网络_激活函数_02


上面公式中,x表示各种外部因素,w表示对应的权重。

二、神经网络

神经网络其实就是按照一定规则连接起来的多个神经元。下图展示了一个全连接(full connected, FC)神经网络:

BP神经网络_BP神经网络_03

1、神经网络的特点

1. 神经元按照层来布局。最左边的层叫做输入层,负责接收输入数据;最右边的层叫输出层,我们可以从这层获取神经网络输出数据。输入层和输出层之间的层叫做隐藏层,因为它们对于外部来说是不可见的;

2. 同一层的神经元之间没有连接;

3. 第N层的每个神经元和第N-1层的所有神经元相连(这就是full connected的含义),第N-1层神经元的输出就是第N层神经元的输入;

4. 每个连接都有一个权值

上面这些规则定义了全连接神经网络的结构。事实上还存在很多其它结构的神经网络,比如卷积神经网络(CNN)、循环神经网络(RNN),他们都具有不同的连接规则

2、激活函数

BP神经网络_感知器_04


BP神经网络_神经网络_05

(1)sigmoid激活函数

神经元和感知器本质上是一样的,只不过我们说感知器的时候,它的激活函数是阶跃函数;而当我们说神经元时,激活函数往往选择为sigmoid函数或tanh函数。如下图所示:

BP神经网络_神经网络_06

BP神经网络_神经网络_07

(3)常用的激活函数

1)Sigmoid :

BP神经网络_BP神经网络_08


Sigmoid 函数的主要缺陷:

1. 梯度消失: 注意:Sigmoid 函数趋近 0 和 1 的时候变化率会变得平坦,也就是说,Sigmoid 的梯度趋近于 0。神经网络使用 Sigmoid 激活函数进行反向传播时,输出接近 0 或 1 的神经元其梯度趋近于 0。这些神经元叫作饱和神经元。因此,这些神经元的权重不会更新。此外,与此类神经元相连的神经元的权重也更新得很慢。该问题叫作梯度消失。因此,想象一下,如果一个大型神经网络包含 Sigmoid 神经元,而其中很多个都处于饱和状态,那么该网络无法执行反向传播;

2. 不以零为中心: Sigmoid 输出不以零为中心的;

3. 计算成本高昂: exp() 函数与其他非线性激活函数相比,计算成本高昂。下一个要讨论的非线性激活函数解决了 Sigmoid 函数中值域期望不为 0 的问题。

2)Tanh:

BP神经网络_激活函数_09


Tanh 函数的主要缺陷:

1. Tanh 函数也会有梯度消失的问题,因此在饱和时也会「杀死」梯度。

3)修正线性单元(ReLU):

BP神经网络_激活函数_10


ReLU的主要缺陷:

1. 不以零为中心:和 Sigmoid 激活函数类似,ReLU 函数的输出不以零为中心;

2. 前向传导(forward pass)过程中,如果 x < 0,则神经元保持非激活状态,且在后向传导(backward pass)中「杀死」梯度。这样权重无法得到更新,网络无法学习。当 x = 0 时,该点的梯度未定义,但是这个问题在实现中得到了解决,通过采用左侧或右侧的梯度的方式。

3、神经网络的输出

BP神经网络_激活函数_11


BP神经网络_BP神经网络_12


BP神经网络_BP神经网络_13


BP神经网络_激活函数_14

神经网络的计算如果用矩阵来表示会很方便(当然逼格也更高),我们先来看看隐藏层的矩阵表示。

BP神经网络_BP神经网络_15


BP神经网络_激活函数_16


BP神经网络_神经网络_17


BP神经网络_神经网络_18

4、神经网络的训练

现在,我们需要知道一个神经网络的每个连接上的权值是如何得到的。我们可以说神经网络是一个模型,那么这些权值就是模型的参数,也就是模型要学习的东西。然而,一个神经网络的连接方式、网络的层数、每层的节点数这些参数,则不是学习出来的,而是人为事先设置的。对于这些人为设置的参数,我们称之为超参数(Hyper-Parameters)。接下来,我们将要介绍神经网络的训练算法:反向传播算法

(1)反向传播算法(Back Propagation)

BP神经网络_感知器_19


  我们首先直观的介绍反向传播算法,最后再来介绍这个算法的推导。当然读者也可以完全跳过推导部分,因为即使不知道如何推导,也不影响你写出来一个神经网络的训练代码。事实上,现在神经网络成熟的开源实现多如牛毛,除了练手之外,你可能都没有机会需要去写一个神经网络。

BP神经网络_感知器_20


BP神经网络_感知器_21


BP神经网络_神经网络_22

(2)反向传播算法的推导

反向传播算法其实就是链式求导法则的应用。按照机器学习的通用套路,我们先确定神经网络的目标函数,然后用随机梯度下降优化算法去求目标函数最小值时的参数值。

BP神经网络_感知器_23


BP神经网络_感知器_24


BP神经网络_BP神经网络_25


BP神经网络_激活函数_26


BP神经网络_激活函数_27


BP神经网络_感知器_28


三、BP神经网络的流程

BP神经网络_激活函数_29


BP神经网络_激活函数_30


BP神经网络_感知器_31


BP神经网络_神经网络_32


BP神经网络_激活函数_33

四、BP神经网络的总结

1、神经网络的主要概念

1. 单元/神经元;

2. 连接/权重/参数;

3. 偏置项;

4. 激活函数;

5. 输入层、隐藏层、输出层;

6. 反向传播。

2、BP神经网络重要参数

1. 学习率:首先,我们选择在训练数据上的代价立即开始下降而非震荡或者增加时的作为 η 阈值的估计,不需要太过精确,确定量级即可。如果代价在训练的前面若干回合开始下降,你就可以逐步增加 η 的量级,直到你找到一个的值使得在开始若干回合代价就开始震荡或者增加;相反,如果代价函数曲线开始震荡或者增加,那就尝试减小量级直到你找到代价在开始回合就下降的设定,取阈值的一半就确定了学习速率 。在这里使用训练数据的原因是学习速率主要的目的是控制梯度下降的步长,监控训练代价是最好的检测步长过大的方法;

2. 迭代次数:我们需要再明确一下什么叫做分类准确率不再提升,这样方可实现提前停止。正如我们已经看到的,分类准确率在整体趋势下降的时候仍旧会抖动或者震荡。如果我们在准确度刚开始下降的时候就停止,那么肯定会错过更好的选择。一种不错的解决方案是如果分类准确率在一段时间内不再提升的时候终止。建议在更加深入地理解 网络训练的方式时,仅仅在初始阶段使用 10 回合不提升规则,然后逐步地选择更久的回合,比如 20 回合不提升就终止,30回合不提升就终止,以此类推;

3. 隐藏层的选取

BP神经网络_激活函数_34

其中h为隐含层节点数目,m为输入层节点数目,n为输出层节点数目,a为1~10之间的调节常数。

3、关于BP神经网络的几点思考

1. 反向传播算法传播的是什么:传播的是误差项;

2. 隐藏层的作用:多层神经网络,可以认为将原始输入数据,在每一层隐含层上做了多个二分类,二分类的个数即为该隐含层的神经元个数。多个隐藏层就是为了让线性不可分的数据变得线性可分;

3. 神经网络和感知器的区别:神经网络的隐层神经元使用的是连续的Sigmoid非线性函数,而感知器使用阶梯函数这一非线性函数。这意味着神经网络函数对网络参数来说是可微的,这一性质在神经网络训练过程中起这重要的作用;

4. 隐藏层的激活函数不可以取线性函数的原因:如果所有隐藏层神经元的激活函数都取线性函数的话,那么我们将总能找到一个没有隐藏层的网络与之等价。这是因为,多个线性变换的组合,也是一个线性变换(多个线性变换的组合可以用一个线性变换代替)。此时,如果隐藏层神经元的数量少于输入或输出神经元的数量,那么这个网络所产生的变换就不是一般意义上的从输入到输出的线性变换,这是因为隐含单元出现的维度降低造成了信息丢失;

5. 实际应用中的神经网络结构:输入层单元数 = 特征的维度;输出层单元数 = 类别个数;隐层单元数理论上是越多越好,但是单元数越多意味着计算量越大,故其取值一般稍大于传入特征数或者几倍关系也可以。基于隐藏层的数目,一般默认使用1个隐层的神经网络,也可以使用多个隐层的神经网络,若为多层神经网路一般默认所有隐层具有相同的单元数

6. 神经网络中的参数更新:一般使用随机梯度下降法(SGD),而非批量梯度下降,原因是:1. SGD可以更加高效的处理数据中的冗余性(假设我们将数据集中所有样本都复制一次,这样包含了一半的冗余信息,使用PGD的计算量也会增大一倍,而SGD不受影响);2. 有机会跳出局部最小值到达全局最小值(因为整个数据集的关于误差函数的驻点通常不会是每个数据点各自的驻点)。

参考:http://www.ruanyifeng.com/blog/2017/07/neural-network.html
https://www.zybuluo.com/hanbingtao/note/476663



标签:输出,函数,Sigmoid,梯度,神经网络,BP,神经元
From: https://blog.51cto.com/u_6526235/7789274

相关文章

  • Python | subprocess.call(c)返回值的意思
    subprocess.call(c)返回的是被调用命令的退出状态码(或返回码)。退出状态码是一个整数,通常表示命令执行的结果。通常情况下,返回值的含义如下:如果返回值为0:表示命令成功执行,没有错误。如果返回值非零:通常表示命令执行时发生了错误或出现了异常情况,返回值的具体值可能会有不同的......
  • 00webpack之前期准备
    1环境准备1.1安装git(可选)Git官网下载地址Git安装步骤1.2安装nodeNode官网下载地址安装完成后,查看node版本node-vnpm是随同node一起安装的包管理工具,安装完node以后,就可以直接使用了安装淘宝镜像:使用cnpm命令(可选)npminstall-gcnpm--registry=https://......
  • 01webpack基础知识
    1概述1.1什么是webpack1、webpack是一种前端资源构建工具,一个静态模块打包器(modulebundler)。在webpack看来,前端的所有资源文件(js/json/css/img/less/...)都会作为模块处理。它将根据模块的依赖关系进行静态分析,打包生成对应的静态资源(bundle)2、webpack是一个前......
  • 使用 Webpack 的 require.context 来获取组件
    代码constrequireComponent=require.context('@/views',//组件文件夹的相对路径true,//是否查找子文件夹/\.vue$///匹配组件文件的正则表达式)输出console.log(requireComponent.keys())原理require.context在生产环境中也能获......
  • webpack配置删除console
    1.删除所有的console.logvue.config.js:module.exports=defineConfig({configureWebpack:(config)=>{//删除consoleconfig.optimization.minimizer[0].options.minimizer.options.compress=Object.assign(config.optimization.minimizer[0]......
  • pytorch(8-1) 循环神经网络 序列模型
    https://zh.d2l.ai/chapter_recurrent-neural-networks/sequence.html     #%matplotlibinlineimporttorchfromtorchimportnnfromd2limporttorchasd2lfromAPI_Drawimport*T=1000#总共产生1000个点#time[0,1...,999]time=torch.arange(......
  • 深度学习算法原理实现——自写神经网络和训练模型
    代码来自:https://weread.qq.com/web/reader/33f32c90813ab71c6g018fffkd3d322001ad3d9446802347《python深度学习》fromtensorflow.keras.datasetsimportmnistfromtensorflow.kerasimportoptimizersimporttensorflowastfimportnumpyasnpclassNaiveDense:......
  • 神经网络量化
    神经网络量化是将神经网络中的参数表示为低精度的数据类型,例如8位整数或浮点数。好处:减少存储需求:将参数从32位浮点数量化为8位整数,可以将存储需求减少为原来的1/4。加速计算速度:低精度的数据类型可以在硬件上更快地进行计算。相比于32位浮点数,8位整数的计算速度可以......
  • adb端口转发-adbportforward
    adb端口转发-adbportforward   目录概述配置参考 概述一台Android设备连接着一台远程服务器,然后本地计算机可以使用adb来连接远程服务器的Android设备,来进行调试。配置背景:虚拟机Ubuntu电脑,编译了sdk_phone_x86镜像,使用emulator-verbose-show-kernel运行了......
  • 基于卷积神经网络的图像识别技术研究与实践
    基于卷积神经网络的图像识别技术研究与实践卷积神经网络(CNN)是一种深度学习模型,它在图像识别领域取得了显著的成果。本文旨在探讨基于卷积神经网络的图像识别技术研究与实践。一、卷积神经网络概述卷积神经网络是一种深度学习模型,它通过卷积运算对图像进行特征提取,然后使用全连......