文章目录
一、理论知识
1.神经网络的梯度
考虑如下有d层的神经网络
计算损失l关于参数Wt的梯度(链式法则)
2.数值稳定性常见的两个问题
3.梯度爆炸
4.梯度爆炸的问题
- 值超出阈值
- 对于16位浮点数尤为严重
- 对学习率敏感
- 如果学习率太大-> 大参数值 -> 更大的梯度
- 如果学习率太小->训练无进展
- 我们可能需要在训练过程中不断调整学习率
5.梯度消失
- 使用sigmoid作为激活函数
6.梯度消失的问题 - 梯度值变为0
- 对16位浮点数尤为严重
- 训练没有进展
- 不管如何选择学习率
- 对于底部层尤为严重
- 仅仅顶部层训练的较好
- 无法让神经网络更深
7.让训练更加稳定
- 目标:让梯度值在合理的范围内,ex[1e-6,1e3]
- 将乘法变加法
- ResNet,LSTM
- 归一化
- 梯度归一化,梯度裁剪
- 合理的权重初始和激活函数
8.让每层的方差是一个常数
9.权重初始化 - 在合理值区间里随机初始化参数
- 训练开始的时候更容易有数值不稳定
- 远离最优解的地方损失函数表面可能很复杂
- 最优解附近表面会比较平
使用来初始化可能对小网络没问题,但不能保证深度神经网络