文章目录

  • 一.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.发展背景

keras搭建bp神经网络参数详解 bp神经网络gradient_神经网络神经网络是一种按照误差逆向传播算法训练的多层前馈神经网络,是深度学习算法的基础。感知器的结构简单,只有输入层和输出层,不能解决非线性问题的,能够求解非线性问题的网络应该具有隐藏层,但是对隐藏层神经元的学习规则还没有完善。感知器的学习规则,其权值的调整取决于期望输出与实际输出之差:keras搭建bp神经网络参数详解 bp神经网络gradient_深度学习_02,但是对于各个隐藏层的节点来说,不存在已知的期望输出,因而该学习规则不能用于隐藏层的权值调整,这时候就要用到 keras搭建bp神经网络参数详解 bp神经网络gradient_keras搭建bp神经网络参数详解_03

2.算法思想

keras搭建bp神经网络参数详解 bp神经网络gradient_keras搭建bp神经网络参数详解_03 算法学习过程由信号的正向传播误差的反向传播两个过程组成。
  正向传播时,把样本的特征从输入层进行输入,信号经各个隐藏层处理后,通过逐层计算,最后从输出层传出。反向传播时,对于网络的期望输出与实际输出之间的误差,把误差从最后一层逐层反传,从而获得各个层的误差学习信号,再根据误差学习信号来修正各个层神经元的权值。
  这种信号正向传播与误差反向传播,然后各个层调整权值的过程是周而复始的进行的,权值不断调整的过程也就是网络训练学习的过程。此过程直到网络输出误差减小到预先设置的阈值以下,或者是达到预先设置的最大训练次数就算学习结束。

3.BP网络模型

keras搭建bp神经网络参数详解 bp神经网络gradient_keras搭建bp神经网络参数详解_03 算法是在Delta学习规则基础上进一步的推广,是对多层神经网络定义了计算流程和代价函数,然后使用梯度下降法来最小化代价函数。keras搭建bp神经网络参数详解 bp神经网络gradient_keras搭建bp神经网络参数详解_03 网络由输入层输出层隐藏层、组成,下面为简单神经网络示意图。


keras搭建bp神经网络参数详解 bp神经网络gradient_人工智能_07

4.BP神经网络更深的意义

  在一定范围内,使用更“深”的网络模型,主要由以下两点原因。

  • 在神经元数量相同的情况下,深层网络结构具有更大容量,分层组合可以带来指数级的表达空间,能够组合成更多不同类型的子结构,这样可以更容易地学习和表达各种特征。
  • 隐藏层增加就意味着,只要由激活函数带来的非线性变换的层数越多,网络就能构造更复杂的映射关系。

二.Delta学习规则

keras搭建bp神经网络参数详解 bp神经网络gradient_人工智能_08 学习规则是一种利用梯度下降法来最小化代价函数的学习规则,也可以称为连续感知器学习规则,本质就是利用梯度下降法来最小化代价函数,keras搭建bp神经网络参数详解 bp神经网络gradient_keras搭建bp神经网络参数详解_03

keras搭建bp神经网络参数详解 bp神经网络gradient_keras搭建bp神经网络参数详解_10
keras搭建bp神经网络参数详解 bp神经网络gradient_人工智能_11
  误差 keras搭建bp神经网络参数详解 bp神经网络gradient_keras搭建bp神经网络参数详解_12 是关于 keras搭建bp神经网络参数详解 bp神经网络gradient_计算机视觉_13 的函数,使用梯度下降法来最小化 keras搭建bp神经网络参数详解 bp神经网络gradient_keras搭建bp神经网络参数详解_12 的值,权值矩阵变化 keras搭建bp神经网络参数详解 bp神经网络gradient_人工智能_15 等于负学习率 keras搭建bp神经网络参数详解 bp神经网络gradient_计算机视觉_16 乘以 keras搭建bp神经网络参数详解 bp神经网络gradient_keras搭建bp神经网络参数详解_12keras搭建bp神经网络参数详解 bp神经网络gradient_计算机视觉_13 求导:
keras搭建bp神经网络参数详解 bp神经网络gradient_神经网络_19

keras搭建bp神经网络参数详解 bp神经网络gradient_计算机视觉_20

keras搭建bp神经网络参数详解 bp神经网络gradient_keras搭建bp神经网络参数详解_21 表示keras搭建bp神经网络参数详解 bp神经网络gradient_深度学习_22,没有特殊意义,keras搭建bp神经网络参数详解 bp神经网络gradient_计算机视觉_23

keras搭建bp神经网络参数详解 bp神经网络gradient_计算机视觉_24,不难发现对应的 keras搭建bp神经网络参数详解 bp神经网络gradient_keras搭建bp神经网络参数详解_25 ,是因为感知器中最常用的激活函数为 keras搭建bp神经网络参数详解 bp神经网络gradient_计算机视觉_26 线性激活函数。那么对于复杂的深层次的keras搭建bp神经网络参数详解 bp神经网络gradient_keras搭建bp神经网络参数详解_03

三.激活函数

  激活函数(Activate Function)是在神经网络的神经元上运行的函数,功能类似于生物神经元信号在轴突上进行的线性或非线性的变化,负责将神经网络神经元的输入以某种形式映射到输出端。

1.激活函数的意义

  • 激活函数对模型学习、理解非常复杂和非线性的函数具有重要作用。
  • 激活函数可以引入非线性因素。如果不使用激活函数,输出信号只是一个简单的线性函数,线性功能从数据中学习复杂函数映射的能力很小,如果没有激活函数,神经网络将无法学习和模拟其他复杂类型的数据,例如语音、图像、视频等。
  • 激活函数可以把当前特征空间通过一定的线性映射转换到另一个空间,让数据能够更好的被分类。

2.非线性激活函数的意义

  神经网络中的激活函数一般都是非线性的,主要有两个原因。

  • 假设网络中全都是线性元件,那么组合之后依然是线性的,与一个单独的线性网络毫无区别,这样神经网络就无法逼近任意函数了。
  • 使用非线性激活函数,可以使网络更加强大,可以学习更加复杂的事物,更加复杂的数据,可以使输入与输出之间生成非线性映射。

keras搭建bp神经网络参数详解 bp神经网络gradient_计算机视觉_28

4.激活函数的选取

  • 隐藏层:优先 keras搭建bp神经网络参数详解 bp神经网络gradient_计算机视觉_29,其次 keras搭建bp神经网络参数详解 bp神经网络gradient_神经网络_30,可以 keras搭建bp神经网络参数详解 bp神经网络gradient_人工智能_31,不能使用 keras搭建bp神经网络参数详解 bp神经网络gradient_深度学习_32
  • 输出层:
  • 二分类:keras搭建bp神经网络参数详解 bp神经网络gradient_计算机视觉_33
  • 多分类:keras搭建bp神经网络参数详解 bp神经网络gradient_计算机视觉_34
  • 回归:线性
  • 其他:keras搭建bp神经网络参数详解 bp神经网络gradient_计算机视觉_35
  • 遇到死神经元问题:使用 keras搭建bp神经网络参数详解 bp神经网络gradient_神经网络_30

四.BP网络模型和公式推导

1.简单网络模型计算

  假设现在有如下所示的一个BP网络结构:


keras搭建bp神经网络参数详解 bp神经网络gradient_keras搭建bp神经网络参数详解_37

网络的参数如下:

  • keras搭建bp神经网络参数详解 bp神经网络gradient_人工智能_38:输入向量,keras搭建bp神经网络参数详解 bp神经网络gradient_神经网络_39
  • keras搭建bp神经网络参数详解 bp神经网络gradient_人工智能_40:隐藏层的输出向量,keras搭建bp神经网络参数详解 bp神经网络gradient_神经网络_41
  • keras搭建bp神经网络参数详解 bp神经网络gradient_深度学习_42:输出层的输出向量。
  • keras搭建bp神经网络参数详解 bp神经网络gradient_神经网络_43:真实期望输出。
  • keras搭建bp神经网络参数详解 bp神经网络gradient_计算机视觉_44:输入层到隐藏层的权重;keras搭建bp神经网络参数详解 bp神经网络gradient_人工智能_45keras搭建bp神经网络参数详解 bp神经网络gradient_计算机视觉_44矩阵中第 keras搭建bp神经网络参数详解 bp神经网络gradient_keras搭建bp神经网络参数详解_47 行第 keras搭建bp神经网络参数详解 bp神经网络gradient_keras搭建bp神经网络参数详解_48
  • keras搭建bp神经网络参数详解 bp神经网络gradient_深度学习_49:隐藏层到输出层的权重;keras搭建bp神经网络参数详解 bp神经网络gradient_神经网络_50keras搭建bp神经网络参数详解 bp神经网络gradient_深度学习_49矩阵中第 keras搭建bp神经网络参数详解 bp神经网络gradient_keras搭建bp神经网络参数详解_48 行第 keras搭建bp神经网络参数详解 bp神经网络gradient_计算机视觉_53
  • keras搭建bp神经网络参数详解 bp神经网络gradient_神经网络_54:激活函数。

再定义:

  • keras搭建bp神经网络参数详解 bp神经网络gradient_keras搭建bp神经网络参数详解_55:隐藏层中权值 keras搭建bp神经网络参数详解 bp神经网络gradient_计算机视觉_44 乘以输入信号 keras搭建bp神经网络参数详解 bp神经网络gradient_keras搭建bp神经网络参数详解_57
  • keras搭建bp神经网络参数详解 bp神经网络gradient_神经网络_58:隐藏层中第 keras搭建bp神经网络参数详解 bp神经网络gradient_keras搭建bp神经网络参数详解_48 个神经元得到的输入信号 keras搭建bp神经网络参数详解 bp神经网络gradient_keras搭建bp神经网络参数详解_57
  • keras搭建bp神经网络参数详解 bp神经网络gradient_计算机视觉_61:输出层中权值 keras搭建bp神经网络参数详解 bp神经网络gradient_深度学习_49 乘以隐藏信号 keras搭建bp神经网络参数详解 bp神经网络gradient_计算机视觉_63
  • keras搭建bp神经网络参数详解 bp神经网络gradient_神经网络_64:输出层中第 keras搭建bp神经网络参数详解 bp神经网络gradient_计算机视觉_53

可以得出:

  • 对于隐藏层:
  • keras搭建bp神经网络参数详解 bp神经网络gradient_深度学习_66
  • keras搭建bp神经网络参数详解 bp神经网络gradient_计算机视觉_67
  • 对于输出层:
  • keras搭建bp神经网络参数详解 bp神经网络gradient_keras搭建bp神经网络参数详解_68
  • keras搭建bp神经网络参数详解 bp神经网络gradient_神经网络_69

2.算法推导

keras搭建bp神经网络参数详解 bp神经网络gradient_keras搭建bp神经网络参数详解_12。假定单个样本的均方误差为:
keras搭建bp神经网络参数详解 bp神经网络gradient_计算机视觉_71  (2).将以上误差公式展开到隐藏层:
keras搭建bp神经网络参数详解 bp神经网络gradient_人工智能_72  (3).再进一步展开到输入层:
keras搭建bp神经网络参数详解 bp神经网络gradient_神经网络_73  从公式(6)可以看出,网络的误差 keras搭建bp神经网络参数详解 bp神经网络gradient_keras搭建bp神经网络参数详解_12 和 网络各层的权值 keras搭建bp神经网络参数详解 bp神经网络gradient_计算机视觉_75 相关,因此调整各层的权值就可以改变误差的值。调整的目的是得到较小的误差 keras搭建bp神经网络参数详解 bp神经网络gradient_keras搭建bp神经网络参数详解_12,所以可以采用梯度下降法来进行调整,根据梯度下降法可以得到:keras搭建bp神经网络参数详解 bp神经网络gradient_人工智能_77keras搭建bp神经网络参数详解 bp神经网络gradient_深度学习_78  (4).由于keras搭建bp神经网络参数详解 bp神经网络gradient_计算机视觉_79,根据微积分链式法则可以得到:
keras搭建bp神经网络参数详解 bp神经网络gradient_人工智能_80keras搭建bp神经网络参数详解 bp神经网络gradient_深度学习_81  (5).由于keras搭建bp神经网络参数详解 bp神经网络gradient_神经网络_82,根据微积分链式法则可以得到:
keras搭建bp神经网络参数详解 bp神经网络gradient_深度学习_83keras搭建bp神经网络参数详解 bp神经网络gradient_计算机视觉_84  (6).由于keras搭建bp神经网络参数详解 bp神经网络gradient_计算机视觉_85,对于输出层来说:
keras搭建bp神经网络参数详解 bp神经网络gradient_keras搭建bp神经网络参数详解_86  (7).由于keras搭建bp神经网络参数详解 bp神经网络gradient_神经网络_87,对于隐藏层来说:keras搭建bp神经网络参数详解 bp神经网络gradient_神经网络_88  代入公式(11)得到:keras搭建bp神经网络参数详解 bp神经网络gradient_神经网络_89  (8).接下来便是激活函数求导的计算
  当激活函数为 keras搭建bp神经网络参数详解 bp神经网络gradient_keras搭建bp神经网络参数详解_90 时,其导数为 keras搭建bp神经网络参数详解 bp神经网络gradient_人工智能_91,因此:
keras搭建bp神经网络参数详解 bp神经网络gradient_人工智能_92  (9).将公式(16)代入公式(13)和(15)可得:
keras搭建bp神经网络参数详解 bp神经网络gradient_计算机视觉_93keras搭建bp神经网络参数详解 bp神经网络gradient_计算机视觉_94  令 keras搭建bp神经网络参数详解 bp神经网络gradient_keras搭建bp神经网络参数详解_95,称其为学习信号,则公式(22)简化为:
keras搭建bp神经网络参数详解 bp神经网络gradient_keras搭建bp神经网络参数详解_96

3.复杂网络模型推导

  网络模型一般有很多层隐藏层,设置多层网络的参数如下:

  • keras搭建bp神经网络参数详解 bp神经网络gradient_计算机视觉_97:各隐藏层的节点数。
  • keras搭建bp神经网络参数详解 bp神经网络gradient_人工智能_98:输入神经元个数。
  • keras搭建bp神经网络参数详解 bp神经网络gradient_深度学习_99:输出神经元个数。
  • keras搭建bp神经网络参数详解 bp神经网络gradient_深度学习_100:各隐藏层的输出。
  • keras搭建bp神经网络参数详解 bp神经网络gradient_神经网络_101:输入层输入。
  • keras搭建bp神经网络参数详解 bp神经网络gradient_神经网络_102:输出层输出。
  • keras搭建bp神经网络参数详解 bp神经网络gradient_计算机视觉_103:各隐藏层的节点数;keras搭建bp神经网络参数详解 bp神经网络gradient_人工智能_104:最后一个隐藏层到输出层的权值矩阵。
  • keras搭建bp神经网络参数详解 bp神经网络gradient_keras搭建bp神经网络参数详解_105:各层学习信号,keras搭建bp神经网络参数详解 bp神经网络gradient_深度学习_106

  根据公式(17)可以推导出输出层的权值计算公式
keras搭建bp神经网络参数详解 bp神经网络gradient_神经网络_107
  根据公式(19)可以推导出keras搭建bp神经网络参数详解 bp神经网络gradient_keras搭建bp神经网络参数详解_108
keras搭建bp神经网络参数详解 bp神经网络gradient_人工智能_109

4.BP算法推导总结

keras搭建bp神经网络参数详解 bp神经网络gradient_人工智能_110 表示矩阵中的元素对应相乘。keras搭建bp神经网络参数详解 bp神经网络gradient_神经网络_111keras搭建bp神经网络参数详解 bp神经网络gradient_神经网络_112keras搭建bp神经网络参数详解 bp神经网络gradient_人工智能_113  在使用 keras搭建bp神经网络参数详解 bp神经网络gradient_keras搭建bp神经网络参数详解_03 算法的时候,需要先根据网络预测的误差计算出输出层的学习信号 keras搭建bp神经网络参数详解 bp神经网络gradient_keras搭建bp神经网络参数详解_115,然后再计算出最后一个隐藏层的学习信号,再计算倒数第二个隐藏层的学习信号,以此类推,从后向前计算,因此 keras搭建bp神经网络参数详解 bp神经网络gradient_keras搭建bp神经网络参数详解_03

四.梯度消失和梯度爆炸

keras搭建bp神经网络参数详解 bp神经网络gradient_人工智能_15

1.梯度消失(Vanishing Gradient)

keras搭建bp神经网络参数详解 bp神经网络gradient_计算机视觉_118 等作为激活函数时,它们的导数值最大不超过1,学习信号 keras搭建bp神经网络参数详解 bp神经网络gradient_keras搭建bp神经网络参数详解_21 乘以一个小于1的数时就会减小。学习信号从输出层一层层向前传播时,会导致学习信号慢慢变小,最终接近于0,keras搭建bp神经网络参数详解 bp神经网络gradient_人工智能_15 接近于0的话意味着整个网络不能再继续优化了。学习信号随着网络传播逐渐减小的问题称为梯度消失问题。

keras搭建bp神经网络参数详解 bp神经网络gradient_keras搭建bp神经网络参数详解_90


keras搭建bp神经网络参数详解 bp神经网络gradient_神经网络_122

keras搭建bp神经网络参数详解 bp神经网络gradient_keras搭建bp神经网络参数详解_123 函数导数图:

keras搭建bp神经网络参数详解 bp神经网络gradient_神经网络_124

2.梯度爆炸(Exploding Gradient)

keras搭建bp神经网络参数详解 bp神经网络gradient_计算机视觉_118 作为激活函数时,它们的导数值最大不超过1,会导致梯度消失,但是有些激活函数的导数值会大于1,学习信号 keras搭建bp神经网络参数详解 bp神经网络gradient_keras搭建bp神经网络参数详解_21 乘以一个大于1的数时就会变大。学习信号从输出层一层层向前传播时,会导致学习信号慢慢变大,最终接近无穷大,keras搭建bp神经网络参数详解 bp神经网络gradient_人工智能_15 接近于无穷大的话,意味着该层的参数处于一种极不稳定的状态,此时网络就不能正常工作了。学习信号随着网络传播逐渐增大的问题称为梯度爆炸问题。

3.问题解决

  • 梯度剪切:对梯度设定阈值
      梯度剪切这个方案主要是针对梯度爆炸提出的,其思想是设置一个梯度剪切阈值,然后更新梯度的时候,如果梯度超过这个阈值,那么就将其强制限制在这个范围之内,这可以防止梯度爆炸。
  • 权重正则化
      权重正则化(weithts regularization)也是一种解决梯度爆炸的手段,正则化主要是通过对网络权重做正则来限制过拟合。如果发生梯度爆炸,那么权值就会变的非常大,反过来,通过正则化项来限制权重的大小,也可以在一定程度上防止梯度爆炸的发生。比较常见的是 keras搭建bp神经网络参数详解 bp神经网络gradient_计算机视觉_128 正则和 keras搭建bp神经网络参数详解 bp神经网络gradient_深度学习_129
  • 选择 keras搭建bp神经网络参数详解 bp神经网络gradient_计算机视觉_130 等梯度大部分落在常数上的激活函数
      keras搭建bp神经网络参数详解 bp神经网络gradient_计算机视觉_130
  • BatchNormalization
      keras搭建bp神经网络参数详解 bp神经网络gradient_计算机视觉_132