梯度的看法

危害

  • 梯度消失会导致我们的神经网络中前面层的网络权重无法得到更新,也就停止了学习。
  • 梯度爆炸会使得学习不稳定, 参数变化太大导致无法获取最优参数

根本原因

求解损失函数对参数的偏导数时,在反向传播,梯度的连续乘法(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

你可能感兴趣的:(机器学习)