深度学习 | 梯度消散/爆炸
2018-12-29 本文已影响42人
yuanCruise
1.梯度消散/爆炸
原因
- 梯度消散:反向传播是逐层对函数偏导相乘,因此网络很深时,最后的偏差会越来越小直到为0。
- 梯度爆炸:由于初始化权重过大,以及拟合的过程中部分权重会由于样本的波动剧烈而导致梯度过大。
所以根据上述的梯度消散和梯度爆炸的现象,我们可以知道产生梯度消散/爆炸的主要原因有:
- 网络过深:越靠近输入波动越小,靠近输出波动越大。
- 采用了不合适的激活函数
用sigmoid激活函数时,其梯度不超过0.25,因此当链式求导时会更易发生梯度消散。因此tanh要比sigmoid好,但其梯度仍然不到1,而relu激活函数的梯度值为1,可以预防梯度消散。
解决办法
- 剪切梯度,正则化能防止梯度爆炸
- relu:梯度为1,防止梯度消散。但由于负数部分恒为0,导致部分神经元不激活。
- leakrelu:解决了relu负数部分恒为0的问题。
- BatchNorm:Google团队提出的策略,利用批归一化有效抑制了梯度问题。
- 残差网络:resnet中的shortcut策略也能有效解决梯度回传问题。