淘先锋技术网

首页 1 2 3 4 5 6 7

一.BP神经网络简介

1.发展背景

   B P ( B a c k w a r d P r o p a g a t i o n ) BP(Backward Propagation) BPBackwardPropagation神经网络是一种按照误差逆向传播算法训练的多层前馈神经网络,是深度学习算法的基础。感知器的结构简单,只有输入层和输出层,不能解决非线性问题的,能够求解非线性问题的网络应该具有隐藏层,但是对隐藏层神经元的学习规则还没有完善。感知器的学习规则,其权值的调整取决于期望输出与实际输出之差: Δ w i = η ( t − y ) x i \Delta w_i = \eta(t-y)x_i Δwi=η(ty)xi,但是对于各个隐藏层的节点来说,不存在已知的期望输出,因而该学习规则不能用于隐藏层的权值调整,这时候就要用到 B P BP BP 神经网络的学习规则来调整隐藏层的权值。

2.算法思想

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

3.BP网络模型

  不同于简单的感知器结构, B P BP BP 算法是在Delta学习规则基础上进一步的推广,是对多层神经网络定义了计算流程和代价函数,然后使用梯度下降法来最小化代价函数。 B P BP BP 网络由输入层输出层隐藏层、组成,下面为简单神经网络示意图。

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

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

  • 在神经元数量相同的情况下,深层网络结构具有更大容量,分层组合可以带来指数级的表达空间,能够组合成更多不同类型的子结构,这样可以更容易地学习和表达各种特征。

  • 隐藏层增加就意味着,只要由激活函数带来的非线性变换的层数越多,网络就能构造更复杂的映射关系。

二.Delta学习规则

   δ ( D e l t a ) δ (Delta) δ(Delta) 学习规则是一种利用梯度下降法来最小化代价函数的学习规则,也可以称为连续感知器学习规则,本质就是利用梯度下降法来最小化代价函数, B P BP BP 网络的训练就是采用这种规则。

  假设样本的代价函数为均方差 M S E MSE MSE
E = 1 2 ( T − Y ) 2 = 1 2 ( t − y ) 2 = 1 2 ( t − f ( W X ) ) 2 E = \frac{1}{2}(T-Y)^2 = \frac{1}{2}(t-y)^2 = \frac{1}{2}(t-f(WX))^2 E=21(TY)2=21(ty)2=21(tf(WX))2
  误差 E E E 是关于 W W W 的函数,使用梯度下降法来最小化 E E E 的值,权值矩阵变化 Δ W \Delta W ΔW 等于负学习率 − η -\eta η 乘以 E E E W W W 求导:
矩 阵 形 式 : Δ W = − η E ′ = η X T ( t − y ) f ′ ( W X ) = η X T δ 矩阵形式:\Delta W = -\eta E' = \eta X^T(t-y)f'(WX) = \eta X^T \delta ΔW=ηE=ηXT(ty)f(WX)=ηXTδ

代 数 形 式 : Δ w i = − η E ′ = η x i ( t − y ) f ′ ( W X ) = η x i δ 代数形式:\Delta w_i = -\eta E' = \eta x_i(t-y)f'(WX) = \eta x_i \delta Δwi=ηE=ηxi(ty)f(WX)=ηxiδ

  其中 δ \delta δ 表示 ( t − y ) f ′ ( W X ) (t-y)f'(WX) (ty)f(WX),没有特殊意义, f ′ ( W X ) f'(WX) f(WX) 表示激活函数求导的值。

  回顾一下感知器,其学习规则为 Δ w i = η ( t − y ) x i \Delta w_i = \eta (t-y)x_i Δwi=η(ty)xi,不难发现对应的 f ′ ( W X ) = 1 f'(WX)=1 f(WX)=1 ,是因为感知器中最常用的激活函数为 y = x y=x y=x 线性激活函数。那么对于复杂的深层次的 B P BP BP 神经网络,采取什么样的激活函数才合适呢?

三.激活函数

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

1.激活函数的意义

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

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

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

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

4.激活函数的选取

  • 隐藏层:优先 R e l u Relu Relu,其次 L e a k y R e l u LeakyRelu LeakyRelu,可以 t a n h tanh tanh,不能使用 s i g m o i d sigmoid sigmoid
  • 输出层:
    • 二分类: s i g m o i d sigmoid sigmoid
    • 多分类: s o f t m a x softmax softmax
    • 回归:线性
    • 其他: t a n h tanh tanh
  • 遇到死神经元问题:使用 L e a k y R e l u LeakyRelu LeakyRelu

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

1.简单网络模型计算

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

网络的参数如下:

  • X = ( x 0 , x 1 , x 2 , . . . , x n ) X=(x_0,x_1,x_2,...,x_n) X=(x0,x1,x2,...,xn):输入向量, x 0 = 1 x_0=1 x0=1 表示输入层的偏置。
  • Y 1 = ( y 0 1 , y 1 1 , y 2 1 , . . . , y m 1 ) Y^1=(y_0^1,y_1^1,y_2^1,...,y_m^1) Y1=(y01,y11,y21,...,ym1):隐藏层的输出向量, y 0 1 = 1 y_0^1=1 y01=1 表示隐藏层的偏置。
  • Y 2 = ( y 1 2 , y 2 2 , . . . , y l 2 ) Y^2=(y_1^2,y_2^2,...,y_l^2) Y2=(y12,y22,...,yl2):输出层的输出向量。
  • T = ( t 1 , t 2 , . . . , t l ) T=(t_1,t_2,...,t_l) T=(t1,t2,...,tl):真实期望输出。
  • W 1 W^1 W1:输入层到隐藏层的权重; W i j 1 W_{ij}^1 Wij1 W 1 W^1 W1矩阵中第 i i i 行第 j j j 列的权值。
  • W 2 W^2 W2:隐藏层到输出层的权重; W j k 2 W_{jk}^2 Wjk2 W 2 W^2 W2矩阵中第 j j j 行第 k k k 列的权值。
  • f f f:激活函数。

再定义:

  • n e t 1 net^1 net1:隐藏层中权值 W 1 W^1 W1 乘以输入信号 X X X 的总和。
  • n e t j 1 net_j^1 netj1:隐藏层中第 j j j 个神经元得到的输入信号 X X X 的总和。
  • n e t 2 net^2 net2:输出层中权值 W 2 W^2 W2 乘以隐藏信号 Y 1 Y^1 Y1 的总和。
  • n e t k 2 net_k^2 netk2:输出层中第 k k k 个神经元得到的输入信号的总和。

可以得出:

  • 对于隐藏层:

    • n e t j 1 = ∑ i = 0 n w i j 1 x i j = 1 , 2 , . . . , m net_j^1=\sum_{i=0}^{n}w_{ij}^1x_i \quad j=1,2,...,m netj1=i=0nwij1xij=1,2,...,m
    • y j 1 = f ( n e t j 1 ) j = 1 , 2 , . . . , m y_j^1=f(net_j^1) \quad j=1,2,...,m yj1=f(netj1)j=1,2,...,m
  • 对于输出层:

    • n e t k 2 = ∑ j = 0 m w j k 2 y j 1 k = 1 , 2 , . . . , l net_k^2=\sum_{j=0}^{m}w_{jk}^2y_j^1 \quad k=1,2,...,l netk2=j=0mwjk2yj1k=1,2,...,l
    • y k 2 = f ( n e t k 2 ) k = 1 , 2 , . . . , l y_k^2=f(net_k^2) \quad k=1,2,...,l yk2=f(netk2)k=1,2,...,l

2.算法推导

  (1).当网络输出与期望输出不同时,会存在输出误差 E E E。假定单个样本的均方误差为:
E = 1 2 ( T − Y 2 ) 2 = 1 2 ∑ k = 1 l ( t k − y k 2 ) 2 ( 注 意 Y 2 和 y k 2 是 上 文 网 络 模 型 计 算 中 的 含 义 , 并 不 是 平 方 的 意 思 ) E=\frac{1}{2}(T-Y^2)^2=\frac{1}{2}\sum_{k=1}^{l}(t_k-y_k^2)^2 \\(注意Y^2和y_k^2是上文网络模型计算中的含义,并不是平方的意思) E=21(TY2)2=21k=1l(tkyk2)2(Y2yk2)  (2).将以上误差公式展开到隐藏层:
E = 1 2 ∑ k = 1 l ( t k − f ( n e t k 2 ) ) 2 = 1 2 ∑ k = 1 l ( t k − f ( ∑ j = 0 m w j k 2 y j 1 ) ) 2 E=\frac{1}{2}\sum_{k=1}^{l}(t_k-f(net_k^2))^2=\frac{1}{2}\sum_{k=1}^{l}(t_k-f(\sum_{j=0}^{m}w_{jk}^2y_j^1))^2 E=21k=1l(tkf(netk2))2=21k=1l(tkf(j=0mwjk2yj1))2  (3).再进一步展开到输入层:
E = 1 2 ∑ k = 1 l ( t k − f ( ∑ j = 0 m w j k 2 f ( n e t j 1 ) ) ) 2 = 1 2 ∑ k = 1 l ( t k − f ( ∑ j = 0 m w j k 2 f ( ∑ i = 0 n w i j 1 x i ) ) ) 2 E=\frac{1}{2}\sum_{k=1}^{l}(t_k-f(\sum_{j=0}^{m}w_{jk}^2f(net_j^1)))^2=\\\frac{1}{2}\sum_{k=1}^{l}(t_k-f(\sum_{j=0}^{m}w_{jk}^2f(\sum_{i=0}^{n}w_{ij}^1x_i)))^2 E=21k=1l(tkf(j=0mwjk2f(netj1)))2=21k=1l(tkf(j=0mwjk2f(i=0nwij1xi)))2  从公式(6)可以看出,网络的误差 E E E 和 网络各层的权值 w i j 1 , w i j 2 w_{ij}^1,w_{ij}^2 wij1,wij2 相关,因此调整各层的权值就可以改变误差的值。调整的目的是得到较小的误差 E E E,所以可以采用梯度下降法来进行调整,根据梯度下降法可以得到: Δ w i j 1 = − η ∂ E ∂ w i j 1 i = 0 , 1 , . . . , n ; j = 1 , 2 , . . . , m \Delta w_{ij}^1=-\eta\frac{\partial E}{\partial w_{ij}^1}\\i=0,1,...,n;j=1,2,...,m Δwij1=ηwij1Ei=0,1,...,n;j=1,2,...,m Δ w j k 2 = − η ∂ E ∂ w j k 2 j = 0 , 1 , . . . , m ; k = 1 , 2 , . . . , l \Delta w_{jk}^2=-\eta\frac{\partial E}{\partial w_{jk}^2}\\j=0,1,...,m;k=1,2,...,l Δwjk2=ηwjk2Ej=0,1,...,m;k=1,2,...,l  (4).由于 n e t j 1 = ∑ i = 0 n w i j 1 x i , n e t k 2 = ∑ j = 0 m w j k 2 y j 1 net_j^1=\sum_{i=0}^{n}w_{ij}^1x_i,net_k^2=\sum_{j=0}^{m}w_{jk}^2y_j^1 netj1=i=0nwij1xi,netk2=j=0mwjk2yj1,根据微积分链式法则可以得到:
对 于 隐 藏 层 : Δ w i j 1 = − η ∂ E ∂ n e t j 1 ∂ n e t j 1 ∂ w i j 1 = − η ∂ E ∂ n e t j 1 x i 对于隐藏层:\Delta w_{ij}^1=-\eta\frac{\partial E}{\partial net_j^1}\frac{\partial net_j^1}{\partial w_{ij}^1}=-\eta\frac{\partial E}{\partial net_j^1}x_i Δwij1=ηnetj1Ewij1netj1=ηnetj1Exi 对 于 输 出 层 : Δ w j k 2 = − η ∂ E ∂ n e t k 2 ∂ n e t k 2 ∂ w j k 2 = − η ∂ E ∂ n e t k 2 y j 1 对于输出层:\Delta w_{jk}^2=-\eta\frac{\partial E}{\partial net_k^2}\frac{\partial net_k^2}{\partial w_{jk}^2}=-\eta\frac{\partial E}{\partial net_k^2}y_j^1 Δwjk2=ηnetk2Ewjk2netk2=ηnetk2Eyj1  (5).由于 y j 1 = f ( n e t j 1 ) , y k 2 = f ( n e t k 2 ) y_j^1=f(net_j^1),y_k^2=f(net_k^2) yj1=f(netj1),yk2=f(netk2),根据微积分链式法则可以得到:
对 于 隐 藏 层 : Δ w i j 1 = − η ∂ E ∂ y j 1 ∂ y j 1 ∂ n e t j 1 x i = − η ∂ E ∂ y j 1 f ′ ( n e t j 1 ) x i 对于隐藏层:\Delta w_{ij}^1=-\eta\frac{\partial E}{\partial y_j^1}\frac{\partial y_j^1}{\partial net_j^1}x_i=-\eta\frac{\partial E}{\partial y_j^1}f'(net_j^1)x_i Δwij1=ηyj1Enetj1yj1xi=ηyj1Ef(netj1)xi 对 于 输 出 层 : Δ w j k 2 = − η ∂ E ∂ y k 2 ∂ y k 2 ∂ n e t k 2 y j 1 = − η ∂ E ∂ y k 2 f ′ ( n e t k 2 ) y j 1 对于输出层:\Delta w_{jk}^2=-\eta\frac{\partial E}{\partial y_k^2}\frac{\partial y_k^2}{\partial net_k^2}y_j^1=-\eta\frac{\partial E}{\partial y_k^2}f'(net_k^2)y_j^1 Δwjk2=ηyk2Enetk2yk2yj1=ηyk2Ef(netk2)yj1  (6).由于 E = 1 2 ∑ k = 1 l ( t k − y k 2 ) 2 E=\frac{1}{2}\sum_{k=1}^{l}(t_k-y_k^2)^2 E=21k=1l(tkyk2)2,对于输出层来说:
Δ w j k 2 = − η ∂ E ∂ y k 2 f ′ ( n e t k 2 ) y j 1 = η ( t k − y k 2 ) f ′ ( n e t k 2 ) y j 1 \Delta w_{jk}^2=-\eta\frac{\partial E}{\partial y_k^2}f'(net_k^2)y_j^1\\=\eta(t_k-y_k^2)f'(net_k^2)y_j^1 Δwjk2=ηyk2Ef(netk2)yj1=η(tkyk2)f(netk2)yj1  (7).由于 E = 1 2 ∑ k = 1 l ( t k − y k 2 ) 2 , n e t k 2 = ∑ j = 0 m w j k 2 y j 1 , y k 2 = f ( n e t k 2 ) E=\frac{1}{2}\sum_{k=1}^{l}(t_k-y_k^2)^2,net_k^2=\sum_{j=0}^{m}w_{jk}^2y_j^1,y_k^2=f(net_k^2) E=21k=1l(tkyk2)2,netk2=j=0mwjk2yj1,yk2=f(netk2),对于隐藏层来说: ∂ E ∂ y j 1 = ∂ 1 2 ∑ k = 1 l ( t k − f ( ∑ j = 0 m w j k 2 y j 1 ) ) 2 ∂ y j 1 = − ∑ k = 1 l ( t k − f ( ∑ j = 0 m w j k 2 y j 1 ) ) f ′ ( w j k 2 y j 1 ) w j k 2 = − ∑ k = 1 l ( t k − y k 2 ) f ′ ( n e t k 2 ) w j k 2 \frac{\partial E}{\partial y_j^1}=\frac{\partial\frac{1}{2}\sum_{k=1}^{l}(t_k-f(\sum_{j=0}^{m}w_{jk}^2y_j^1))^2}{\partial y_j^1}\\=- \sum_{k=1}^{l}(t_k-f(\sum_{j=0}^{m}w_{jk}^2y_j^1))f'(w_{jk}^2y_j^1)w_{jk}^2\\=-\sum_{k=1}^{l}(t_k-y_k^2)f'(net_k^2)w_{jk}^2 yj1E=yj121k=1l(tkf(j=0mwjk2yj1))2=k=1l(tkf(j=0mwjk2yj1))f(wjk2yj1)wjk2=k=1l(tkyk2)f(netk2)wjk2  代入公式(11)得到: Δ w i j 1 = η ( ∑ k = 1 l ( t k − y k 2 ) f ′ ( n e t k 2 ) w j k 2 ) f ′ ( n e t j 1 ) x i \Delta w_{ij}^1=\eta(\sum_{k=1}^{l}(t_k-y_k^2)f'(net_k^2)w_{jk}^2)f'(net_j^1)x_i Δwij1=η(k=1l(tkyk2)f(netk2)wjk2)f(netj1)xi  (8).接下来便是激活函数求导的计算
  当激活函数为 s i g m o i d sigmoid sigmoid 时,其导数为 f ′ ( t ) = f ( t ) ( 1 − f ( t ) ) f'(t)=f(t)(1-f(t)) f(t)=f(t)(1f(t)),因此:
f ′ ( n e t k 2 ) = y k 2 ( 1 − y k 2 ) f ′ ( n e t j 1 ) = y j 1 ( 1 − y j 1 ) f'(net_k^2)=y_k^2(1-y_k^2)\\f'(net_j^1)=y_j^1(1-y_j^1) f(netk2)=yk2(1yk2)f(netj1)=yj1(1yj1)  (9).将公式(16)代入公式(13)和(15)可得:
Δ w j k 2 = η ( t k − y k 2 ) y k 2 ( 1 − y k 2 ) y j 1 \Delta w_{jk}^2=\eta(t_k-y_k^2)y_k^2(1-y_k^2)y_j^1 Δwjk2=η(tkyk2)yk2(1yk2)yj1 Δ w i j 1 = η ( ∑ k = 1 l ( t k − y k 2 ) y k 2 ( 1 − y k 2 ) w j k 2 ) y j 1 ( 1 − y j 1 ) x i \Delta w_{ij}^1=\eta(\sum_{k=1}^{l}(t_k-y_k^2)y_k^2(1-y_k^2)w_{jk}^2)y_j^1(1-y_j^1)x_i Δwij1=η(k=1l(tkyk2)yk2(1yk2)wjk2)yj1(1yj1)xi  令 δ k 2 = ( t k − y k 2 ) y k 2 ( 1 − y k 2 ) \delta _k^2=(t_k-y_k^2)y_k^2(1-y_k^2) δk2=(tkyk2)yk2(1yk2),称其为学习信号,则公式(22)简化为:
Δ w i j 1 = η ( ∑ k = 1 l δ k 2 w j k 2 ) y j 1 ( 1 − y j 1 ) x i \Delta w_{ij}^1=\eta(\sum_{k=1}^{l}\delta _k^2w_{jk}^2)y_j^1(1-y_j^1)x_i Δwij1=η(k=1lδk2wjk2)yj1(1yj1)xi

3.复杂网络模型推导

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

  • m 1 , m 2 , . . . , m h m_1,m_2,...,m_h m1,m2,...,mh:各隐藏层的节点数。

  • n n n:输入神经元个数。

  • l l l:输出神经元个数。

  • Y 1 , Y 2 , . . . , Y h Y_1,Y_2,...,Y_h Y1,Y2,...,Yh:各隐藏层的输出。

  • X X X:输入层输入。

  • Y h + 1 Y^{h+1} Yh+1:输出层输出。

  • W 1 , W 2 , . . . , W h W^1,W^2,...,W^h W1,W2,...,Wh:各隐藏层的节点数; W h + 1 W^{h+1} Wh+1:最后一个隐藏层到输出层的权值矩阵。

  • δ 1 , δ 2 , . . . , δ h + 1 \delta^1,\delta^2,...,\delta^{h+1} δ1,δ2,...,δh+1:各层学习信号, δ h + 1 \delta^{h+1} δh+1 表示输出层计算出的学习信号。


  根据公式(17)可以推导出输出层的权值计算公式
Δ w j k h + 1 = η ( t k − y k h + 1 ) y k h + 1 ( 1 − y k h + 1 ) y j h j = 0 , 1 , 2 , . . . , m h ; k = 1 , 2 , . . . , l \Delta w_{jk}^{h+1}=\eta(t_k-y_k^{h+1})y_k^{h+1}(1-y_k^{h+1})y_j^h\\j=0,1,2,...,m_h;k=1,2,...,l Δwjkh+1=η(tkykh+1)ykh+1(1ykh+1)yjhj=0,1,2,...,mh;k=1,2,...,l
  根据公式(19)可以推导出 h h h 个隐藏层的权值计算公式
Δ w i j h = η ( ∑ k = 1 l δ k h + 1 w j k h + 1 ) y j h ( 1 − y j h ) y i h − 1 i = 0 , 1 , 2 , . . . , m h − 1 ; j = 1 , 2 , . . . , m h \Delta w_{ij}^h=\eta(\sum_{k=1}^{l}\delta _k^{h+1}w_{jk}^{h+1})y_j^h(1-y_j^h)y_i^{h-1}\\i=0,1,2,...,m_{h-1};j=1,2,...,m_h Δwijh=η(k=1lδkh+1wjkh+1)yjh(1yjh)yih1i=0,1,2,...,mh1;j=1,2,...,mh

4.BP算法推导总结

  现采用矩阵表达形式,根据公式(20)和(21),并将其中激活函数求导的结果还原,得到权值调整公式, ∘ \circ 表示矩阵中的元素对应相乘。 Δ W h = η ( Y h − 1 ) T δ h − − − − 权 值 调 整 公 式 \Delta W^h = \eta (Y^{h-1})^T \delta^h----权值调整公式 ΔWh=η(Yh1)Tδh δ h = δ h + 1 ( W h + 1 ) T ∘ f ′ ( Y h − 1 W h ) − − − − 第 h 层 隐 藏 层 学 习 信 号 \delta^h=\delta^{h+1}(W^{h+1})^T\circ f'(Y^{h-1}W^h)----第 h 层隐藏层学习信号 δh=δh+1(Wh+1)Tf(Yh1Wh)h δ h + 1 = ( T − Y h + 1 ) ∘ f ′ ( Y h W h + 1 ) − − − − 输 出 层 学 习 信 号 \delta^{h+1}=(T-Y^{h+1})\circ f'(Y^hW^{h+1})----输出层学习信号 δh+1=(TYh+1)f(YhWh+1)  在使用 B P BP BP 算法的时候,需要先根据网络预测的误差计算出输出层的学习信号 δ h + 1 \delta^{h+1} δh+1,然后再计算出最后一个隐藏层的学习信号,再计算倒数第二个隐藏层的学习信号,以此类推,从后向前计算,因此 B P BP BP 算法也叫做误差反向传播算法。计算到每一层的学习信号以后,再根据公式(22)来调整每一层的权值即可更新网络参数。

四.梯度消失和梯度爆炸

  从公式(22)、(23)、(24)可知,权值的调整和激活函数的导数密切相关,激活函数的导数值越大, Δ W \Delta W ΔW 的值越大,反之越小。

1.梯度消失(Vanishing Gradient)

  当使用 s i g m o i d , t a n h sigmoid,tanh sigmoidtanh 等作为激活函数时,它们的导数值最大不超过1,学习信号 δ \delta δ 乘以一个小于1的数时就会减小。学习信号从输出层一层层向前传播时,会导致学习信号慢慢变小,最终接近于0, Δ W \Delta W ΔW 接近于0的话意味着整个网络不能再继续优化了。学习信号随着网络传播逐渐减小的问题称为梯度消失问题。

   s i g m o i d sigmoid sigmoid 函数导数图:

   t a n h tanh tanh 函数导数图:

2.梯度爆炸(Exploding Gradient)

  当使用 s i g m o i d , t a n h sigmoid,tanh sigmoidtanh 作为激活函数时,它们的导数值最大不超过1,会导致梯度消失,但是有些激活函数的导数值会大于1,学习信号 δ \delta δ 乘以一个大于1的数时就会变大。学习信号从输出层一层层向前传播时,会导致学习信号慢慢变大,最终接近无穷大, Δ W \Delta W ΔW 接近于无穷大的话,意味着该层的参数处于一种极不稳定的状态,此时网络就不能正常工作了。学习信号随着网络传播逐渐增大的问题称为梯度爆炸问题。

3.问题解决

  • 梯度剪切:对梯度设定阈值
      梯度剪切这个方案主要是针对梯度爆炸提出的,其思想是设置一个梯度剪切阈值,然后更新梯度的时候,如果梯度超过这个阈值,那么就将其强制限制在这个范围之内,这可以防止梯度爆炸。

  • 权重正则化
      权重正则化(weithts regularization)也是一种解决梯度爆炸的手段,正则化主要是通过对网络权重做正则来限制过拟合。如果发生梯度爆炸,那么权值就会变的非常大,反过来,通过正则化项来限制权重的大小,也可以在一定程度上防止梯度爆炸的发生。比较常见的是 L 1 L1 L1 正则和 L 2 L2 L2 正则,在各个深度框架中都有相应的API可以使用正则化。

  • 选择 r e l u relu relu 等梯度大部分落在常数上的激活函数
       r e l u relu relu 激活函数的导数在正数部分恒等于1,因此在深层网络中使用relu激活函数就不会导致梯度消失和爆炸的问题。

  • BatchNormalization
       B N BN BN 就是通过对每一层的输出规范为均值和方差一致的方法,消除了权重参数放大缩小带来的影响,进而解决梯度消失和爆炸的问题。