梯度消失与梯度爆炸

假设一个5层神经网络:输入层、3层隐藏层、输出层,其中每层只有一个神经元。

对于第\(i\)层,输出为\(z_i=\sigma (y_i)=\sigma (w_ix_i+b_i)\),其中\(x_i=z_{i-1}\);设损失函数为\(L\),那么在反向传播更新参数时,比如\(b_1\),其梯度为:\(\frac{\partial L}{\partial b_1} =\frac{\partial L}{\partial z_4}\frac{\partial z_4}{\partial y_4}\frac{\partial y_4}{\partial z_3}\frac{\partial z_3}{\partial y_3}\frac{\partial y_3}{\partial z_2}\frac{\partial z_2}{\partial y_2}\frac{\partial y_2}{\partial z_1}\frac{\partial z_1}{\partial y_1}\frac{\partial y_1}{\partial b_1}=\frac{\partial L}{\partial z_4}\sigma '(z_4)w_4\sigma '(z_3)w_3\sigma '(z_2)w_2\sigma '(z_1)\)

在深度学习的深层网络中:
如果权重值比较大,多次连乘会导致梯度指数增加,引起梯度爆炸的问题。
如果权重值比较小,多次连乘会导致梯度指数衰减,引起梯度消失的问题。

此外,如果是sigmoid激活函数,其导数的最大值为0.25,很容易引起梯度消失的问题。

解决梯度爆炸/消失的方法:

  • 使用残差网络结构:即大名鼎鼎的resnet。
  • 选择合适的激活函数以及权重初始值:如使用relu激活函数可以缓解梯度消失(因为其导数值恒为1)。
  • batch normalization:对批样本的同一维度特征做归一化。
  • 梯度剪切:当梯度大于某个阈值时,令其等于这个阈值,从而缓解梯度爆炸。
  • 权重正则化:如L1、L2正则化防止梯度爆炸。L1正则化会使原最优解的元素产生不同量的偏移,并使某些元素为0,从而产生稀疏性;L2正则化的效果是对原最优解的每个元素进行不同比例的放缩。
posted @ 2022-01-06 20:17  MyAJY  阅读(197)  评论(0)    收藏  举报