梯度消失与爆炸
介绍
直观理解是:
权重W只比1(即单位矩阵)大一点,深度神经网络的激活函数将爆炸式增长。
权重W只比1(即单位矩阵)小一点,深度神经网络的激活函数将指数式递减。
虽然我(吴恩达老师)只是论述了对L函数的激活函数以指数级增长或下降,但它也适用于与层数L相关的导数或梯度函数也是呈指数增长或呈指数递减。
如果作为L的函数的激活函数或梯度函数以指数级增长或递减(我的理解是,L作为指数),它们的值会变得极大或极小,从而导致训练难度上升。尤其是梯度与L相差指数级,梯度下降算法的步长会非常非常小,梯度下降算法将花费很长时间来学习。
解决
梯度消失和梯度爆炸的解决见:1.11神经网络的权重初始化
梯度检测
原理
目的是,检测函数g(θ)是否正确实现了函数f的偏导,从而检测反向传播是否正确实施。
使用双边误差的方法逼近导数
数学推倒可以证明:
用双边误差,误差为O(epsilon2)。
用单边误差,误差为O(epsilon)。
梯度检验应用于神经网络
梯度检验的实用技巧和注意事项
- 不要在训练中使用梯度检验,它只用于调试(Don’t use in trainning, only to debug)。(因为它太慢了)
- 如果算法的梯度检验失败,要检查所有项(If algorithm fails grad check, look at components to try to identify bug)。
- 在实施梯度检验时,如果使用正则化请注意正则项。
- 梯度检验不能与dropout同时使用。
因为在每次迭代过程中,dropout会随机清除隐藏单元的不同子集,从而难以计算dropout在梯度下降上的代价函数J。所以一般不同时使用梯度检验和dropout。如果想这样做,可以把dropout中的keep prob设置为1。然后打开dropout并希望dropout的实施是正确的。
但更好的做法是关闭dropout,用梯度检验进行double check。