作者:Double_V_
原文地址:https://blog.csdn.net/qq_25737169/article/details/78847691
前言
本文主要深入介绍深度学习中的梯度消失和梯度爆炸的问题以及解决方案。本文分为三部分,第一部分主要直观的介绍深度学习中为什么使用梯度更新,第二部分主要介绍深度学习中梯度消失及爆炸的原因,第三部分对提出梯度消失及爆炸的解决方案。有基础的同鞋可以跳着阅读。
其中,梯度消失爆炸的解决方案主要包括以下几个部分。
- 预训练加微调
- 梯度剪切、权重正则(针对梯度爆炸)
- 使用不同的激活函数
- 使用batchnorm
- 使用残差结构
- 使用LSTM网络
- 1
- 2
- 3
- 4
- 5
- 6
#第一部分:为什么要使用梯度更新规则
在介绍梯度消失以及爆炸之前,先简单说一说梯度消失的根源—–深度神经网络和反向传播。目前深度学习方法中,深度神经网络的发展造就了我们可以构建更深层的网络完成更复杂的任务,深层网络比如深度卷积网络,LSTM等等,而且最终结果表明,在处理复杂任务上,深度网络比浅层的网络具有更好的效果。但是,目前优化神经网络的方法都是基于反向传播的思想,即根据损失函数计算的误差通过梯度反向传播的方式,指导深度网络权值的更新优化。这样做是有一定原因的,首先,深层网络由许多非线性层堆叠而来,每一层非线性层都可以视为是一个非线性函数 f ( x ) f ( x ) f ( x ) f(x)f(x) f(x) f(x)f(x)f(x)l2正则损失:
l2_loss = tf.add_n([tf.nn.l2_loss(var) for var in tf.trainable_variables() if 'weights' in var.name])
- 1
- 2
正则化是通过对网络权重做正则限制过拟合,仔细看正则项在损失函数的形式:
L
o
s
s
=
(
y
−
W
T
x
)
2
+
α
∣
∣
W
∣
∣
2
L
o
s
s
=
(
y
−
W
T
x
)
2
+
α
∣
∣
W
∣
∣
2
L
o
s
s
=
(
y
−
W
T
x
)
2
+
α
∣
∣
W
∣
∣
2
Loss=(y−WTx)2+α∣∣W∣∣2Loss=(y−WTx)2+α∣∣W∣∣2 Loss=(y-W^Tx)^2+ \alpha ||W||^2
Loss=(y−WTx)2+α∣∣W∣∣2Loss=(y−WTx)2+α∣∣W∣∣2Loss=(y−WTx)2+α∣∣W∣∣2∂xL∂loss 表示的损失函数到达 L 的梯度,小括号中的1表明短路机制可以无损地传播梯度,而另外一项残差梯度则需要经过带有weights的层,梯度不是直接传递过来的。残差梯度不会那么巧全为-1,而且就算其比较小,有1的存在也不会导致梯度消失。所以残差学习会更容易。
注:上面的推导并不是严格的证明。
- 1
###2.6 解决方案6-LSTM
LSTM全称是长短期记忆网络(long-short term memory networks),是不那么容易发生梯度消失的,主要原因在于LSTM内部复杂的“门”(gates),如下图,LSTM通过它内部的“门”可以接下来更新的时候“记住”前几次训练的”残留记忆“,因此,经常用于生成文本中。目前也有基于CNN的LSTM,感兴趣的可以尝试一下。
参考资料:
1.《Neural networks and deep learning》
2.《机器学习》周志华
3. https://www.cnblogs.com/willnote/p/6912798.html
4. https://www.zhihu.com/question/38102762
5. http://www.jianshu.com/p/9dc9f41f0b29