优化方法
- 梯度下降
- 梯度下降是一种优化算法,通过迭代的方式寻找模型的最优参数;
- 所谓最优参数指的是使目标函数达到最小值时的参数;
- 当目标函数是凸函数时,梯度下降的解是全局最优解;但在一般情况下,梯度下降无法保证全局最优
- 梯度仅仅指示了对于每个参数各自增长最快的方向;因此,梯度无法保证全局方向就是函数为了达到最小值应该前进的方向
- 正负号在告诉输入向量应该调大还是调小(正调大,负调小)
- 每一项的相对大小表明每个参数对函数值达到最值的影响程度;
- 随机梯度下降
- 上一个梯度下降的问题在于每次使用全部的数据进行计算,当数据量很大的时候,需要很大的计算资源。
- 随机梯度下降每次取一个数据进行计算,计算速度快。
- 小批量SGD的更新过程
每次选择一批数据放到网络中。
- 使用批训练的另一个主要目的,是为了利用高度优化的矩阵运算以及并行计算框架
批的大小对于批量SGD的影响
-
大的批量:得到更加精确的梯度估计
-
小的批量:能得到更好的泛化误差,原因是添加了干扰,但是意味着更长的训练时间。
-
批的大小为2的n次方时候,充分利用矩阵运算。
批运算计算公式
image.png -
存在的问题:
* 放弃了梯度的准确性,仅采用一部分样本来估计当前的梯度;因此 SGD 对梯度的估计常常出现偏差,造成目标函数收敛不稳定,甚至不收敛的情况。- 容易陷入局部最小值,例如峡谷和鞍点
梯度下降的改进:
- 惯性保持(动量)
- 环境感知(自适应的调整学习率)
带动量的SGD算法
动量的概念:例如纸团在峡谷中会很慢,来回反弹,但是如果换成铁球会很快,
公式
image.png
动量的迭代更新公式如下
image.png
添加了一个以往的更新方向,假设其上一次的方向和本次方向相同,则会在相同的方向上不断加速。
NAG算法
NAG算法把梯度计算放在对参数附加当前速度之后。
image.png
自适应的梯度更新方法:
AdaGrad
基本思想:
- 较大的偏导具有较大的学习率,较小的偏导有较小的学习率
问题: - 学习率是单调递减的,训练后期学习率过小会导致训练困难,甚至提前结束
RMSProp
基本思想:解决AdaGrad后期的学习率较小,导致难以训练的问题。
- 使用指数衰减平均(递归定义)以丢弃遥远的历史,也就是代替r,使其能够在找到某个“凸”结构后快速收敛;此外,RMSProp 还加入了一个超参数 ρ 用于控制衰减速。
问题: - 仍然需要设置一个全局衰减率,还有一个全局学习率。
AdaDelta
- AdaDelta 进一步解决了 AdaGrad 需要设置一个全局学习率的问题
Adam
- 除了加入历史梯度平方的指数衰减平均(r)外,还保留了历史梯度的指数衰减平均(s),相当于动量。
基于二阶梯度的牛顿法
- 梯度下降算法本质上是使用一阶梯度去拟合,而牛顿法使用的是二阶梯度,二阶梯度是一个曲面,反应的是梯度的变化率,一阶梯度是平面。
- 通常情况下,二次曲面的拟合会比平面更好,所以牛顿法选择的下降路径会更符合真实的最优下降路径。
- 通俗理解
比如你想找一条最短的路径走到一个盆地的最底部,
梯度下降法每次只从你当前所处位置选一个坡度最大的方向走一步;
牛顿法在选择方向时,不仅会考虑坡度是否够大,还会考虑你走了一步之后,坡度是否会变得更大。
所以,牛顿法比梯度下降法看得更远,能更快地走到最底部。 - 牛顿法优点
更新速度更快
-牛顿法缺点:
每一次都需要计算二阶导数,速度过慢。
网友评论