梯度爆炸与梯度消失

在这之前先回顾一下梯度下降是如何更新的

输入层输入x并经过多个隐藏层最后到输出层
假设第i层的权重为偏移为 激活函数为
那么整个神经网络可以看作为:

目的是不断优化目标函数J=损失函数+正则项s的最小值
通过不断的求偏导来更新

梯度爆炸

当深度神经网络的层数较多,而每一层的偏导都大于1时,根据链式法则,他们相乘会导致指数爆炸,模型无法收敛

梯度消失

与梯度爆炸相反,当每一层的偏导都小于1时,根据链式法则,他们相乘会导致更新过小,模型训练进展拖慢甚至无法训练

导致梯度爆炸和消失的因素

  1. 参数初始化的值太大或太小
  2. 深度神经网络的层数太多了
  3. 激活函数的选择

参数初始化

解决上述问题的方法之一是参数初始化

默认初始化

默认情况下框架会根据层的类型自动初始化权重
大多数默认采用Xavier初始化(均匀分布)

  • nn.Linear(全连接层):均匀分布(uniform distribution),即Xavier均匀初始化
  • nnConv2d(卷积层):均匀分布(uniform distribution),与全连接层相同
  • nn.BatchNorm2d(批量归一化层):权重初始化为1

Xavier初始化