文章目录
- 一.BP神经网络简介
- 1.发展背景
- 2.算法思想
- 3.BP网络模型
- 4.BP神经网络更深的意义
- 二.Delta学习规则
- 三.激活函数
- 1.激活函数的意义
- 2.非线性激活函数的意义
- 4.激活函数的选取
- 四.BP网络模型和公式推导
- 1.简单网络模型计算
- 2.算法推导
- 3.复杂网络模型推导
- 4.BP算法推导总结
- 四.梯度消失和梯度爆炸
- 1.梯度消失(Vanishing Gradient)
- 2.梯度爆炸(Exploding Gradient)
- 3.问题解决
一.BP神经网络简介
1.发展背景
神经网络是一种按照误差逆向传播算法训练的多层前馈神经网络,是深度学习算法的基础。感知器的结构简单,只有输入层和输出层,不能解决非线性问题的,能够求解非线性问题的网络应该具有隐藏层,但是对隐藏层神经元的学习规则还没有完善。感知器的学习规则,其权值的调整取决于期望输出与实际输出之差:,但是对于各个隐藏层的节点来说,不存在已知的期望输出,因而该学习规则不能用于隐藏层的权值调整,这时候就要用到
2.算法思想
算法学习过程由信号的正向传播和误差的反向传播两个过程组成。
正向传播时,把样本的特征从输入层进行输入,信号经各个隐藏层处理后,通过逐层计算,最后从输出层传出。反向传播时,对于网络的期望输出与实际输出之间的误差,把误差从最后一层逐层反传,从而获得各个层的误差学习信号,再根据误差学习信号来修正各个层神经元的权值。
这种信号正向传播与误差反向传播,然后各个层调整权值的过程是周而复始的进行的,权值不断调整的过程也就是网络训练学习的过程。此过程直到网络输出误差减小到预先设置的阈值以下,或者是达到预先设置的最大训练次数就算学习结束。
3.BP网络模型
算法是在Delta学习规则基础上进一步的推广,是对多层神经网络定义了计算流程和代价函数,然后使用梯度下降法来最小化代价函数。 网络由输入层、输出层、隐藏层、组成,下面为简单神经网络示意图。
4.BP神经网络更深的意义
在一定范围内,使用更“深”的网络模型,主要由以下两点原因。
- 在神经元数量相同的情况下,深层网络结构具有更大容量,分层组合可以带来指数级的表达空间,能够组合成更多不同类型的子结构,这样可以更容易地学习和表达各种特征。
- 隐藏层增加就意味着,只要由激活函数带来的非线性变换的层数越多,网络就能构造更复杂的映射关系。
二.Delta学习规则
学习规则是一种利用梯度下降法来最小化代价函数的学习规则,也可以称为连续感知器学习规则,本质就是利用梯度下降法来最小化代价函数,
:
误差 是关于 的函数,使用梯度下降法来最小化 的值,权值矩阵变化 等于负学习率 乘以 对 求导:
表示,没有特殊意义,
,不难发现对应的 ,是因为感知器中最常用的激活函数为 线性激活函数。那么对于复杂的深层次的
三.激活函数
激活函数(Activate Function)是在神经网络的神经元上运行的函数,功能类似于生物神经元信号在轴突上进行的线性或非线性的变化,负责将神经网络神经元的输入以某种形式映射到输出端。
1.激活函数的意义
- 激活函数对模型学习、理解非常复杂和非线性的函数具有重要作用。
- 激活函数可以引入非线性因素。如果不使用激活函数,输出信号只是一个简单的线性函数,线性功能从数据中学习复杂函数映射的能力很小,如果没有激活函数,神经网络将无法学习和模拟其他复杂类型的数据,例如语音、图像、视频等。
- 激活函数可以把当前特征空间通过一定的线性映射转换到另一个空间,让数据能够更好的被分类。
2.非线性激活函数的意义
神经网络中的激活函数一般都是非线性的,主要有两个原因。
- 假设网络中全都是线性元件,那么组合之后依然是线性的,与一个单独的线性网络毫无区别,这样神经网络就无法逼近任意函数了。
- 使用非线性激活函数,可以使网络更加强大,可以学习更加复杂的事物,更加复杂的数据,可以使输入与输出之间生成非线性映射。
4.激活函数的选取
- 隐藏层:优先 ,其次 ,可以 ,不能使用
- 输出层:
- 二分类:
- 多分类:
- 回归:线性
- 其他:
- 遇到死神经元问题:使用
四.BP网络模型和公式推导
1.简单网络模型计算
假设现在有如下所示的一个BP网络结构:
网络的参数如下:
- :输入向量,
- :隐藏层的输出向量,
- :输出层的输出向量。
- :真实期望输出。
- :输入层到隐藏层的权重;:矩阵中第 行第
- :隐藏层到输出层的权重;:矩阵中第 行第
- :激活函数。
再定义:
- :隐藏层中权值 乘以输入信号
- :隐藏层中第 个神经元得到的输入信号
- :输出层中权值 乘以隐藏信号
- :输出层中第
可以得出:
- 对于隐藏层:
- 对于输出层:
2.算法推导
。假定单个样本的均方误差为:
(2).将以上误差公式展开到隐藏层:
(3).再进一步展开到输入层:
从公式(6)可以看出,网络的误差 和 网络各层的权值 相关,因此调整各层的权值就可以改变误差的值。调整的目的是得到较小的误差 ,所以可以采用梯度下降法来进行调整,根据梯度下降法可以得到: (4).由于,根据微积分链式法则可以得到:
(5).由于,根据微积分链式法则可以得到:
(6).由于,对于输出层来说:
(7).由于,对于隐藏层来说: 代入公式(11)得到: (8).接下来便是激活函数求导的计算
当激活函数为 时,其导数为 ,因此:
(9).将公式(16)代入公式(13)和(15)可得:
令 ,称其为学习信号,则公式(22)简化为:
3.复杂网络模型推导
网络模型一般有很多层隐藏层,设置多层网络的参数如下:
- :各隐藏层的节点数。
- :输入神经元个数。
- :输出神经元个数。
- :各隐藏层的输出。
- :输入层输入。
- :输出层输出。
- :各隐藏层的节点数;:最后一个隐藏层到输出层的权值矩阵。
- :各层学习信号,
根据公式(17)可以推导出输出层的权值计算公式:
根据公式(19)可以推导出第 :
4.BP算法推导总结
表示矩阵中的元素对应相乘。 在使用 算法的时候,需要先根据网络预测的误差计算出输出层的学习信号 ,然后再计算出最后一个隐藏层的学习信号,再计算倒数第二个隐藏层的学习信号,以此类推,从后向前计算,因此
四.梯度消失和梯度爆炸
1.梯度消失(Vanishing Gradient)
等作为激活函数时,它们的导数值最大不超过1,学习信号 乘以一个小于1的数时就会减小。学习信号从输出层一层层向前传播时,会导致学习信号慢慢变小,最终接近于0, 接近于0的话意味着整个网络不能再继续优化了。学习信号随着网络传播逐渐减小的问题称为梯度消失问题。
函数导数图:
2.梯度爆炸(Exploding Gradient)
作为激活函数时,它们的导数值最大不超过1,会导致梯度消失,但是有些激活函数的导数值会大于1,学习信号 乘以一个大于1的数时就会变大。学习信号从输出层一层层向前传播时,会导致学习信号慢慢变大,最终接近无穷大, 接近于无穷大的话,意味着该层的参数处于一种极不稳定的状态,此时网络就不能正常工作了。学习信号随着网络传播逐渐增大的问题称为梯度爆炸问题。
3.问题解决
- 梯度剪切:对梯度设定阈值
梯度剪切这个方案主要是针对梯度爆炸提出的,其思想是设置一个梯度剪切阈值,然后更新梯度的时候,如果梯度超过这个阈值,那么就将其强制限制在这个范围之内,这可以防止梯度爆炸。 - 权重正则化
权重正则化(weithts regularization)也是一种解决梯度爆炸的手段,正则化主要是通过对网络权重做正则来限制过拟合。如果发生梯度爆炸,那么权值就会变的非常大,反过来,通过正则化项来限制权重的大小,也可以在一定程度上防止梯度爆炸的发生。比较常见的是 正则和 - 选择 等梯度大部分落在常数上的激活函数
- BatchNormalization