梯度的看法
危害
- 梯度消失会导致我们的神经网络中前面层的网络权重无法得到更新,也就停止了学习。
- 梯度爆炸会使得学习不稳定, 参数变化太大导致无法获取最优参数
根本原因
求解损失函数对参数的偏导数时,在反向传播,梯度的连续乘法(x中间值可能特别大或特别小,激活函数导数可能特别大、已经更新过的参数w也可能特别大或特别小(初始参数太大了))中总是遇上很大的绝对值(很小的绝对值),部分参数的梯度因为乘了很多较大(较小)的数而变得非常大(小)
具体表现
loss表现:梯度消失时loss几乎不变。梯度爆炸时loss非常大,甚至为nan
解决办法
1 减少网络层数
2 调节学习率(消失增大,爆炸减少)
3 激活函数调整为relu leakyrelu
4 归一化,bn或ln
5 resnet
6 l1和l2正则化
7 梯度裁剪
loss变nan的原因
1 没有归一化
2 学习率太大
transformer用到的防治梯度消失和梯度爆炸的方法
1 resnet
2 leakyrelu
3 ln(虽然用了leakyrelu,缓解了梯度消失的问题,但是求注意力系数的时候,softmax的输入过大时,偏导数也会很小,导致梯度消失的问题)
4 梯度裁剪
5 self-attention时q k相乘后处以了根号d