梯度爆炸与梯度消失
在这之前先回顾一下梯度下降是如何更新的
输入层输入x并经过多个隐藏层最后到输出层
假设第i层的权重为偏移为 激活函数为
那么整个神经网络可以看作为:
目的是不断优化目标函数J=损失函数+正则项s的最小值
通过不断的求偏导来更新
梯度爆炸
当深度神经网络的层数较多,而每一层的偏导都大于1时,根据链式法则,他们相乘会导致指数爆炸,模型无法收敛
梯度消失
与梯度爆炸相反,当每一层的偏导都小于1时,根据链式法则,他们相乘会导致更新过小,模型训练进展拖慢甚至无法训练
导致梯度爆炸和消失的因素
- 参数初始化的值太大或太小
- 深度神经网络的层数太多了
- 激活函数的选择
参数初始化
解决上述问题的方法之一是参数初始化
默认初始化
默认情况下框架会根据层的类型自动初始化权重
大多数默认采用Xavier初始化(均匀分布)
- nn.Linear(全连接层):均匀分布(uniform distribution),即Xavier均匀初始化
- nnConv2d(卷积层):均匀分布(uniform distribution),与全连接层相同
- nn.BatchNorm2d(批量归一化层):权重初始化为1
- …