优化(经验风险最小)、正则化(降低模型复杂度)
7.1 网络优化
7.1.1 网络优化的难点
- 结构差异大
- 没有通用的优化算法
- 超参数多
- 非凸优化问题
- 参数初始化
- 逃离局部最优
- 梯度消失(爆炸)问题
7.1.2 高维变量的非凸优化问题
- 鞍点(Saddle Point)、驻点(Stationary Point)
- 平坦最小值
- 一个平坦最小值的邻域内,所有点对应的训练损失都比较接近
- 大部分的局部最小解是等价的
- 局部最小解对应的训练损失都可能非常接近于全局最小解对应的训练损失
7.1.3 神经网络优化的改善方法
- 更有效的优化算法来提高优化方法的效率和稳定性
- 动态学习率调整
- 梯度估计修正
- 更好的参数初始化方法、数据预处理方法来提高优化效率修改网络结构来得到更好的优化地形
- 优化地形( Optimization Landscape )指在高维空间中损失函数的曲面形状
- 好的优化地形通常比较平滑
- 使用 ReLU 激活函数、残差连接、逐层归一化等
- 使用更好的超参数优化方法
7.2 优化算法改进
优化算法:随机梯度下降7.2.1 小批量随机梯度下降
- 选取个训练样本,计算偏导数
- 定义梯度
- 更新参数
其中,为学习率.
7.2.2 批量大小的选择
批量大小不影响随机梯度的期望,但是会影响随机梯度的方差.
- 批量越大,随机梯度的方差越小,引入的噪声也越小,训练也越稳定,因此可以设置较大的学习率.
- 而批量较小时,需要设置较小的学习率,否则模型会不收敛.
7.2.3 学习率调整
- 标准的(小批量)梯度下降
- 自适应学习率
- Adagrad
- Adadelta
- RMSprop
- 梯度修正估计
- Momentum
- 计算负梯度的“加权移动平均”作为参数的更新方向
- Nesterov accelerated gradient
- 梯度截断
7.2.3.1 学习率衰减
学习率对训练结果的影响:
7.2.3.2 学习率预热
- 在小批量梯度下降法中,当批量大小的设置比较大时,通常需要比较大的学习率.但在刚开始训练时,由于参数是随机初始化的,梯度往往也比较大,再加上比较大的初始学习率, 会使得训练不稳定.
- 为了提高训练稳定性, 我们可以在最初几轮迭代时, 采用比较小的学习率, 等梯度下降到一定程度后再恢复到初始的学习率, 这种方法称为学习率预热( Learning Rate Warmup).
7.2.3.3 周期性学习率调整
- 循环学习率
- 带热重启的随机梯度下降
7.2.3.4 AdaGrad算法
- 在 AdaGrad 算法中,如果某个参数的偏导数累积比较大,其学习率相对较小; 相反, 如果其偏导数累积较小, 其学习率相对较大.但整体是随着迭代次数的增加,学习率逐渐缩小.
- AdaGrad 算法的缺点是在经过一定次数的迭代依然没有找到最优点时, 由于这时的学习率已经非常小,很难再继续找到最优点
7.2.3.5 RMSprop算法
在有些情况下避免 AdaGrad 算法中学习率不断单调下降以至于过早衰减的缺点.
7.2.3.6 AdaDelta算法
AdaDelta 算法[Zeiler, 2012] 也是 AdaGrad 算法的一个改进.和RMSprop算法类似,AdaDelta 算法通过梯度平方的指数衰减移动平均来调整学习率. 此外,AdaDelta算法还引入了每次参数更新差值Δ的平方的指数衰减权移动平均.7.2.4 梯度方向优化
7.2.4.1 动量法
- 用之前积累动量来替代真正的梯度。每次迭代的梯度可以看作是加速度
7.2.4.2 Nesterov加速梯度
7.2.4.3 Adam算法
Adama算法动量法+RMSprop
- 先计算两个移动平均
- 偏差修正
- 更新
7.2.4.4 梯度截断
- 梯度截断是一种比较简单的启发式方法,把梯度的模限定在一个区间,当梯度的模小于或大于这个区间时就进行截断.
- 按值截断
在第 次迭代时, 梯度为, 给定一个区间 [, ], 如果一个参数的梯度小于时, 就将其设为; 如果大于时, 就将其设为. - 按模截断
按模截断是将梯度的模截断到一个给定的截断阈值b,如果, 保持不变. 如果,
7.2.5 算法优化小结
本节介绍的几种优化方法大体上可以分为两类:
1) 调整学习率, 使得优化更稳定
2) 梯度估计修正, 优化训练速度