提出

动量(Momentum)方法最初由 B.T.Polyak 在 1964 年提出。这一方法被用来加速梯度下降算法的收敛,特别是在处理具有较大条件数的优化问题时

B.T.Polyak 在论文《Some methods of speeding up the convergence of iteration methods》中描述了这一方法,这篇论文发表在了《USSR Computational Mathematics and Mathematical Physics》上

动量方法通过在每一步的更新中加入一部分上一步的速度,帮助算法在相关方向上加速,并减少在目标函数的平坦区域中的震荡。这种方法后来被广泛应用于机器学习领域,尤其是在深度学习中,成为了优化算法中的一个重要组成部分

指数加权平均

在介绍 Momentum 算法之前,我们先来了解一下指数加权平均(Exponential Weighted Average)的概念

指数加权平均(Exponentially Weighted Average,EWA)是一种统计方法,用于计算一组数值的加权平均,其中最近的数据点被赋予更高的权重。这种方法在信号处理、时间序列分析、机器学习等领域中非常有用,尤其是在需要对数据的最新变化做出快速反应时

指数加权平均的计算公式如下:

其中:

  • 是在时间点 的指数加权平均值
  • 是介于 0 和 1 之间的衰减系数(decay factor),决定了历史数据的权重
  • 是在时间点 的观测值
  • 是前一时间点的指数加权平均值

衰减系数 的选择对指数加权平均的影响很大。如果 接近 1,那么历史数据的影响会持续很长时间,平滑效果更强;如果 接近 0,则新数据的影响更大,对变化的反应更快

指数加权平均的一个特性是它对异常值(outliers)不太敏感,因为每个数据点的权重都会随着时间的推移而指数级减少。这使得它在处理含有噪声的数据时非常有用

Momentum

动量(Momentum)方法是一种在深度学习中广泛使用的优化策略,它通过引入动量项来加速梯度下降算法的收敛并提高其稳定性。动量方法的核心思想是模拟物理学中的动量概念,通过累积过去梯度的信息来调整参数更新的方向和幅度。动量通过指数加权平均的方式来计算

动量方法的更新公式可以表示为:

其中:

  • 是时间步 的动量项,这个动量项是通过指数加权平均的方式计算得到的
  • 是动量衰减系数,通常设置在 之间,如 0.9 或 0.99
  • 是学习率
  • 是在参数 处的损失函数梯度

动量方法的优势包括:

  1. 加速收敛:通过累积历史梯度,可以在相关方向上加速参数更新
  2. 抑制振荡:有助于减少训练过程中的震荡,特别是在目标函数的平坦区域或接近最小值时
  3. 跳出局部最小值:在某些情况下,动量可以帮助算法跳出局部最小值,从而找到更好的全局最小值

指数加权平均为什么叫“指数”?

之所以被称为“指数”,是因为它在计算平均值时,给予不同时间点的数据以指数级衰减的权重

在每次计算时,新数据 被赋予的权重是 ,而之前的指数加权平均 被赋予的权重是 。由于 接近 1,所以越早的数据其权重会以 的多次方的速度迅速减小,这就是“指数”名称的来源

将其展开计算

一般来讲,超过一定时间步后,前面的数据对最终结果的影响会变得非常小,当 时,,这意味着 中的 对结果的影响几乎可以忽略不计。一般来说,我们最多取到 个时间步的数据,之后的数据对结果的影响可以忽略不计

根据极限公式:

这边,当 时,

Momentum 算法为什么要叫“动量”?

动量算法的命名灵感来源于物理学中的动量概念,它通过在参数更新中加入过去迭代的梯度信息,模拟了物体运动时动量的效果,使得算法在优化过程中能够保持一定的“惯性”,从而在面对目标函数的曲率变化或噪声时,能够更加平滑地调整搜索方向和步长

在物理学中,动量是物体运动状态的量度,它与物体的质量和速度有关。类似地,动量算法在机器学习中的作用可以类比为在优化过程中增加了一种“惯性”,使得算法在迭代过程中能够根据之前的梯度信息调整当前的更新方向和步长,从而在目标函数的曲面上更加平滑地滚动,避免在局部最小值或平坦区域停滞不前