1 参数说明
2 反向传播
为了弄清楚为何会出现消失的梯度,来看看一个极简单的深度神经网络(详细理论推导请看本博客第7节内容):每一层都只有一个单一的神经元。下面就是有三层隐藏层的神经网络:
σ
表示sigmoid激活函数,
L(Loss)
也可以用
C(Cost)
表示
Note:导数值小于0.25
其中
z1=xw1+b1
a1=σ(z1)
z2=a1w2+b2
a2=σ(z2)
z3=a2w3+b3
a3=σ(z3)
z4=a3w4+b4
a4=y=σ(z4)
代入推导出:
y=a4=σ(z4)=σ(a3w4+b4)=σ(σ(a2w3+b3)w4+b4)=σ(σ(σ(a1w2+b2)w3+b3)w4+b4)=σ(σ(σ(σ(xw1+b1)w2+b2)w3+b3)w4+b4)
C=f(y)
eg:
C=(y−y^)2
则
C=f(σ(σ(σ(σ(xw1+b1)w2+b2)w3+b3)w4+b4))
部分变量求导关系:
∂a4∂a3=σ′(z4)w4
∂a3∂a2=σ′(z3)w3
∂a2∂a1=σ′(z2)w2
则
C
对
w1
求导结果为:
∂C∂w1=∂C∂a4∂a4∂a3∂a3∂w1=…=∂C∂a4∂a4∂a3∂a3∂a2∂a2∂a1∂a1∂w1
=∂C∂a4σ′(z4)w4σ′(z3)w3σ′(z2)w2σ′(z1)x
同理
C
对
b1
求导结果为:
∂C∂b1=∂C∂a4σ′(z4)w4σ′(z3)w3σ′(z2)w2σ′(z1)
C
对
w2
求导结果为:
∂C∂w2=∂C∂a4∂a4∂a3∂a3∂w2=…=∂C∂a4∂a4∂a3∂a3∂a2∂a2∂w2
=∂C∂a4σ′(z4)w4σ′(z3)w3σ′(z2)a1
同理
C
对
b2
求导结果为:
∂C∂b2=∂C∂a4σ′(z4)w4σ′(z3)w3σ′(z2)
3 梯度消失
比较一下
∂C∂b1
和
∂C∂b3
可知,
∂C∂b1
要远远小于
∂C∂b3
。
因此,梯度消失的本质原因是:
wjσ′(zj)<14
的约束。
4 梯度爆炸(激增)
网络的权重设置的比较大且偏置使得
σ′(zj)
项不会太小。
5 梯度不稳定
不稳定的梯度问题:根本的问题其实并非是消失的梯度问题或者激增的梯度问题,而是在前面的层上的梯度是来自后面的层上项的乘积。当存在过多的层次时,就出现了内在本质上的不稳定场景。唯一让所有层都接近相同的学习速度的方式是所有这些项的乘积都能得到一种平衡。如果没有某种机制或者更加本质的保证来达成平衡,那网络就很容易不稳定了。简而言之,真实的问题就是神经网络受限于不稳定梯度的问题。所以,如果我们使用标准的基于梯度的学习算法,在网络中的不同层会出现按照不同学习速度学习的情况。
6 梯度消失、爆炸的解决方案
详解机器学习中的梯度消失、爆炸原因及其解决方法
- 方案1 预训练加微调(Hinton)
- 方案2 梯度剪切(设置阈值,控制爆炸)、正则(控制爆炸)
- 方案3 relu、leakrelu、elu等激活函数
- 方案4 batchnorm(batchnorm全名是batch normalization,简称BN,批规范化,通过规范化操作将输出信号x规范化到均值为0,方差为1保证网络的稳定性)
- 方案5 残差结构
- 方案6 LSTM
7 反向传播公式推导
第2节用一个简单的网络推导了反向传播公式,本节用复杂的网络进行详细的推导(内容来自Backpropagation)
7.1 问题描述
7.2 Chain rule
第二节我们采用
∂C∂w=∂C∂a∂a∂w
链式法则,比较直观一点,此节,我们采用
∂C∂w=∂C∂z∂z∂w
链式法则,大同小异!
a
和
z
都是中间变量而已,一个作为layer的输出,一个作为layer的输入!
7.2.1 First Term
链式求导法则的第一部分,分两种情况,一种是layer大于1,一种是layer等于1时
7.2.2 Second Term
用符号
δ
来代替链式求导的第二部分
结合下图可以看出,Second Term的求解落脚到两个问题
- How to compute
δL
- The relation of
δl
and
δl+1
1) How to compute
δL
2) The relation of
δl
and
δl+1
化简一下
反向传播浮现庐山真面目
进一步化简,用向量表示
7.3 Summary
7.4 Compare with forward propagation
7.5 Verification
第2节
C
对
w1
求导结果为:
∂C∂w1=∂C∂a4σ′(z4)w4σ′(z3)w3σ′(z2)w2σ′(z1)x
第7节
C
对
w1
求导结果为:
∂C∂w1=∂C∂z1∂z1∂w1=δ1x
=σ′(z1)w2δ2x
=σ′(z1)w2σ′(z2)w3δ3x
=σ′(z1)w2σ′(z2)w3σ′(z3)w4δ4x
=σ′(z1)w2σ′(z2)w3σ′(z3)w4σ′(z4)∂C∂yx
=σ′(z1)w2σ′(z2)w3σ′(z3)w4σ′(z4)∂C∂a4x
结果一样,推导没问题,美滋滋!!!
参考资料
【1】[Machine Learning] 深度学习中消失的梯度
【2】神经网络梯度消失的解释
【3】梯度下降法解神经网络
【4】详解机器学习中的梯度消失、爆炸原因及其解决方法
【5】Backpropagation(李宏毅老师上课PPT)