行莫
行莫
发布于 2026-01-07 / 181 阅读
2
0

梯度下降优化-Momentum动量法

梯度下降优化-Momentum动量法

1. 问题引入

在优化复杂的损失函数时,普通的梯度下降法会遇到以下问题:

  • 收敛速度慢:在平坦区域,梯度很小,更新步长很小
  • 容易陷入鞍点:在鞍点处梯度接近0,算法可能停滞不前
  • 震荡问题:在狭窄山谷中容易来回震荡,收敛慢
  • 学习率敏感:需要精心调整学习率

Momentum(动量法) 通过引入"动量"的概念,模拟物理世界中物体运动的惯性,能够有效解决这些问题。

2. 物理类比:理解动量的直觉

2.1 生活中的类比

想象一个球从山坡上滚下来:

普通梯度下降(SGD)

  • 球只根据当前位置的坡度来决定下一步的方向和速度
  • 如果遇到平坦区域,球会立即减速甚至停止
  • 如果遇到小坑(局部最优),球可能会被困住
  • 在狭窄山谷中,球会在两侧来回震荡

Momentum(动量法)

  • 球有"惯性"(动量),会记住之前的运动方向和速度
  • 即使遇到平坦区域,由于惯性,球仍能继续前进
  • 如果遇到小坑,之前的动量可以帮助球越过障碍
  • 在狭窄山谷中,动量可以平滑路径,减少震荡

2.2 物理学的动量概念

在物理学中,动量(Momentum) 定义为:

$$
p = m \cdot v
$$

其中:

  • $p$:动量(Momentum)
  • $m$:质量(Mass)
  • $v$:速度(Velocity)

动量的特点:

  • 动量是矢量,有方向性
  • 动量越大,物体越难改变运动状态
  • 在没有外力的情况下,动量守恒

类比到优化问题:

  • 参数 $\theta$ 相当于物体的位置
  • 梯度 $\nabla L(\theta)$ 相当于作用在物体上的力
  • 动量 $v$ 相当于物体的速度
  • 学习率 $\alpha$ 相当于时间步长

3. 普通梯度下降法回顾

3.1 标准梯度下降更新公式

对于损失函数 $L(\theta)$,标准梯度下降的更新公式为:

$$
\theta_{t+1} = \theta_t - \alpha \cdot \nabla_\theta L(\theta_t)
$$

公式详细说明:

  • $\theta_t$:第 $t$ 步的参数值(向量)
  • $\theta_{t+1}$:第 $t+1$ 步的参数值(更新后)
  • $\alpha$:学习率(learning rate),控制更新步长,通常取 0.01, 0.001 等
  • $\nabla_\theta L(\theta_t)$:损失函数在 $\theta_t$ 处的梯度(偏导数向量)

更新方向: 沿负梯度方向(函数下降最快的方向)

更新步长: $\alpha \cdot |\nabla_\theta L(\theta_t)|$

3.2 普通梯度下降的问题

  1. 在平坦区域:梯度很小,更新步长很小,收敛慢
  2. 在鞍点:梯度接近0,可能被困住
  3. 在狭窄山谷:容易在两侧来回震荡
  4. 学习率敏感:需要精心调整学习率

3.3 鞍点问题示例

鞍点(Saddle Point)是优化中的一个重要概念:

  • 定义:在某个方向上是最小值,在另一个方向上是最大值
  • 特点:梯度接近0,但不是全局最优
  • 问题:普通梯度下降可能在鞍点处停滞

数学定义:

  • 对于函数 $f(x, y)$,如果 $\frac{\partial f}{\partial x} = 0$ 且 $\frac{\partial f}{\partial y} = 0$,但 $f$ 不是局部最小值,则 $(x, y)$ 是鞍点

4. Momentum(动量法)的数学推导

4.1 Momentum 的核心思想

Momentum 通过引入动量项来累积历史梯度信息,形成"惯性"效应。

核心思路:

  • 不仅使用当前梯度,还使用历史梯度的加权平均
  • 当梯度方向一致时,动量累积,加速收敛
  • 当梯度方向变化时,动量平滑变化,减少震荡

4.2 Momentum 的更新公式

Momentum 的更新公式(标准形式):

$$
v_t = \beta \cdot v_{t-1} + \nabla_\theta L(\theta_t)
$$

$$
\theta_{t+1} = \theta_t - \alpha \cdot v_t
$$

公式详细说明:

第一步:计算动量项 $v_t$

  • $v_t$:第 $t$ 步的动量(累积梯度),是一个向量
  • $v_{t-1}$:第 $t-1$ 步的动量(历史动量)
  • $\beta$:动量系数(momentum coefficient),通常取 0.9 或 0.99
    • $\beta$ 越大,历史信息权重越大,惯性越强
    • $\beta$ 越小,当前梯度权重越大,变化越敏感
  • $\nabla_\theta L(\theta_t)$:当前梯度
  • 物理意义:$v_t$ 是历史梯度的加权累积,$\beta$ 控制历史信息的衰减速度

第二步:参数更新

  • $\theta_{t+1}$:更新后的参数
  • $\theta_t$:当前参数
  • $\alpha$:学习率
  • 更新方向:沿负动量方向(而不是负梯度方向)

注意:有些文献中 Momentum 的公式略有不同,我们会在后面讨论。

4.3 Momentum 公式的完整推导

让我们从初始状态开始,逐步推导 Momentum 的更新过程。

初始条件:

$$
v_0 = 0
$$

第1步:

$$
v_1 = \beta \cdot v_0 + \nabla_\theta L(\theta_1) = \nabla_\theta L(\theta_1)
$$

$$
\theta_2 = \theta_1 - \alpha \cdot v_1 = \theta_1 - \alpha \cdot \nabla_\theta L(\theta_1)
$$

第2步:

$$
v_2 = \beta \cdot v_1 + \nabla_\theta L(\theta_2)
$$

$$
= \beta \cdot \nabla_\theta L(\theta_1) + \nabla_\theta L(\theta_2)
$$

$$
\theta_3 = \theta_2 - \alpha \cdot v_2 = \theta_2 - \alpha[\beta \cdot \nabla_\theta L(\theta_1) + \nabla_\theta L(\theta_2)]
$$

第3步:

$$
v_3 = \beta \cdot v_2 + \nabla_\theta L(\theta_3)
$$

$$
= \beta[\beta \cdot \nabla_\theta L(\theta_1) + \nabla_\theta L(\theta_2)] + \nabla_\theta L(\theta_3)
$$

$$
= \beta^2 \cdot \nabla_\theta L(\theta_1) + \beta \cdot \nabla_\theta L(\theta_2) + \nabla_\theta L(\theta_3)
$$

$$
\theta_4 = \theta_3 - \alpha \cdot v_3
$$

第t步(一般形式):

$$
v_t = \beta^{t-1} \cdot \nabla_\theta L(\theta_1) + \beta^{t-2} \cdot \nabla_\theta L(\theta_2) + ... + \beta \cdot \nabla_\theta L(\theta_{t-1}) + \nabla_\theta L(\theta_t)
$$

$$
v_t = \sum_{i=1}^{t} \beta^{t-i} \cdot \nabla_\theta L(\theta_i)
$$

关键洞察:

  • $v_t$ 是历史梯度的加权和
  • 越近的梯度权重越大($\beta^0 = 1$ 最大)
  • 越远的梯度权重越小($\beta^{t-i}$ 指数衰减)
  • 当梯度方向一致时,动量会累积,更新步长增大
  • 当梯度方向变化时,动量会平滑变化,减少震荡

4.4 权重分析

让我们分析一下不同历史梯度的权重:

假设 $\beta = 0.9$,则:

  • 第 $t$ 步(当前)的权重:$\beta^0 = 1$
  • 第 $t-1$ 步的权重:$\beta^1 = 0.9$
  • 第 $t-2$ 步的权重:$\beta^2 = 0.81$
  • 第 $t-3$ 步的权重:$\beta^3 = 0.729$
  • ...
  • 第 $t-k$ 步的权重:$\beta^k = 0.9^k$

有效窗口大小:

  • 当 $\beta = 0.9$ 时,$\beta^{10} \approx 0.35$,$\beta^{20} \approx 0.12$
  • 通常认为前 $\frac{1}{1-\beta}$ 步的梯度对当前动量有显著影响
  • 当 $\beta = 0.9$ 时,有效窗口约为 10 步

4.5 Momentum 公式的另一种形式

有些文献中,Momentum 的公式会写成:

$$
v_t = \beta \cdot v_{t-1} + (1 - \beta) \cdot \nabla_\theta L(\theta_t)
$$

$$
\theta_{t+1} = \theta_t - \alpha \cdot v_t
$$

区别:

  • 标准形式:$v_t = \beta \cdot v_{t-1} + \nabla_\theta L(\theta_t)$
  • 另一种形式:$v_t = \beta \cdot v_{t-1} + (1 - \beta) \cdot \nabla_\theta L(\theta_t)$

两种形式的关系:

  • 如果我们将学习率调整为 $\alpha' = \frac{\alpha}{1-\beta}$,两种形式等价
  • 另一种形式中,$v_t$ 是梯度的指数移动平均(EMA)
  • 标准形式更常用,因为实现更简单

本教程使用标准形式:

$$
v_t = \beta \cdot v_{t-1} + \nabla_\theta L(\theta_t)
$$

$$
\theta_{t+1} = \theta_t - \alpha \cdot v_t
$$

5. Momentum 的优势分析

5.1 加速收敛

场景: 在梯度方向一致的区域

普通梯度下降:

  • 每一步的更新步长为 $\alpha \cdot |\nabla L(\theta_t)|$
  • 如果梯度大小不变,每一步的步长相同

Momentum:

  • 第1步:$v_1 = \nabla L(\theta_1)$,步长 = $\alpha \cdot |\nabla L(\theta_1)|$
  • 第2步:$v_2 = \beta \cdot \nabla L(\theta_1) + \nabla L(\theta_2) \approx (1+\beta) \cdot \nabla L$(假设梯度相同)
  • 第3步:$v_3 = \beta^2 \cdot \nabla L(\theta_1) + \beta \cdot \nabla L(\theta_2) + \nabla L(\theta_3) \approx (1+\beta+\beta^2) \cdot \nabla L$

结论: 在梯度方向一致时,Momentum 的更新步长会逐渐增大,加速收敛。

5.2 减少震荡

场景: 在狭窄山谷中,梯度方向来回变化

普通梯度下降:

  • 梯度方向变化时,参数更新方向立即改变
  • 容易在两侧来回震荡

Momentum:

  • 即使当前梯度方向改变,历史梯度仍会影响更新方向
  • 动量会平滑路径,减少震荡

数学分析:
假设梯度在 $+g$ 和 $-g$ 之间交替:

  • 第1步:$v_1 = +g$
  • 第2步:$v_2 = \beta \cdot (+g) + (-g) = (\beta - 1) \cdot g$
  • 第3步:$v_3 = \beta \cdot (\beta - 1) \cdot g + (+g) = (\beta^2 - \beta + 1) \cdot g$

当 $\beta = 0.9$ 时:

  • $v_2 = -0.1 \cdot g$(震荡减小)
  • $v_3 = 0.91 \cdot g$(方向恢复)

5.3 帮助逃离鞍点

场景: 在鞍点处,梯度接近0

普通梯度下降:

  • 梯度接近0,更新步长接近0
  • 可能被困在鞍点

Momentum:

  • 即使当前梯度接近0,历史动量仍存在
  • 动量可以帮助参数越过鞍点

数学分析:
假设在鞍点附近,梯度很小:$\nabla L(\theta_t) \approx 0$

  • 第 $t$ 步:$v_t = \beta \cdot v_{t-1} + 0 = \beta \cdot v_{t-1}$
  • 只要 $v_{t-1} \neq 0$,参数仍会更新
  • 动量会逐渐衰减,但不会立即停止

6. 带有鞍点的损失函数示例

为了对比普通梯度下降和 Momentum 的效果,我们使用一个经典的鞍点函数:

$$
f(x, y) = x^2 - y^2
$$

函数特点:

  • 在 $x$ 方向上:$f(x, y) = x^2$,是凸函数,最小值在 $x=0$
  • 在 $y$ 方向上:$f(x, y) = -y^2$,是凹函数,最大值在 $y=0$
  • 鞍点:$(0, 0)$,梯度为0,但不是全局最优
  • 全局最优:不存在(函数无下界)

梯度:

$$
\frac{\partial f}{\partial x} = 2x
$$

$$
\frac{\partial f}{\partial y} = -2y
$$

在鞍点 $(0, 0)$ 处:

  • $\frac{\partial f}{\partial x} = 0$
  • $\frac{\partial f}{\partial y} = 0$
  • 梯度为0,普通梯度下降会停滞

Momentum 的优势:

  • 如果从某个方向接近鞍点,动量可以帮助越过鞍点
  • 在 $x$ 方向上,梯度指向原点,动量会累积
  • 在 $y$ 方向上,梯度远离原点,动量会帮助逃离

7. 对比实验:普通梯度下降 vs Momentum

7.1 实验设置

目标: 从不同起始点优化鞍点函数,对比两种方法的效果

实验参数:

  • 学习率:$\alpha = 0.1$
  • 动量系数:$\beta = 0.9$
  • 最大迭代次数:100
  • 起始点:选择几个不同的起始位置

预期结果:

  • 普通梯度下降可能在鞍点附近停滞
  • Momentum 应该能够更好地处理鞍点问题

================================================================================
详细计算过程:前10步
================================================================================

起始点: (2.000, 0.500)
学习率 α = 0.1, 动量系数 β = 0.9

普通梯度下降:
--------------------------------------------------------------------------------
步数     参数 (x, y)                 梯度 (gx, gy)               更新 (Δx, Δy)               损失      
--------------------------------------------------------------------------------
1      ( 2.00000,  0.50000)  ( 4.00000, -1.00000)  (-0.40000,  0.10000)   3.75000
2      ( 1.60000,  0.60000)  ( 3.20000, -1.20000)  (-0.32000,  0.12000)   2.20000
3      ( 1.28000,  0.72000)  ( 2.56000, -1.44000)  (-0.25600,  0.14400)   1.12000
4      ( 1.02400,  0.86400)  ( 2.04800, -1.72800)  (-0.20480,  0.17280)   0.30208
5      ( 0.81920,  1.03680)  ( 1.63840, -2.07360)  (-0.16384,  0.20736)  -0.40387
6      ( 0.65536,  1.24416)  ( 1.31072, -2.48832)  (-0.13107,  0.24883)  -1.11844
7      ( 0.52429,  1.49299)  ( 1.04858, -2.98598)  (-0.10486,  0.29860)  -1.95415
8      ( 0.41943,  1.79159)  ( 0.83886, -3.58318)  (-0.08389,  0.35832)  -3.03387
9      ( 0.33554,  2.14991)  ( 0.67109, -4.29982)  (-0.06711,  0.42998)  -4.50952
10     ( 0.26844,  2.57989)  ( 0.53687, -5.15978)  (-0.05369,  0.51598)  -6.58378

================================================================================
Momentum:
--------------------------------------------------------------------------------
步数     参数 (x, y)                 梯度 (gx, gy)               动量 (vx, vy)               更新 (Δx, Δy)               损失      
--------------------------------------------------------------------------------
1      ( 2.00000,  0.50000)  ( 4.00000, -1.00000)  ( 4.00000, -1.00000)  (-0.40000,  0.10000)   3.75000
2      ( 1.60000,  0.60000)  ( 3.20000, -1.20000)  ( 6.80000, -2.10000)  (-0.68000,  0.21000)   2.20000
3      ( 0.92000,  0.81000)  ( 1.84000, -1.62000)  ( 7.96000, -3.51000)  (-0.79600,  0.35100)   0.19030
4      ( 0.12400,  1.16100)  ( 0.24800, -2.32200)  ( 7.41200, -5.48100)  (-0.74120,  0.54810)  -1.33255
5      (-0.61720,  1.70910)  (-1.23440, -3.41820)  ( 5.43640, -8.35110)  (-0.54364,  0.83511)  -2.54009
6      (-1.16084,  2.54421)  (-2.32168, -5.08842)  ( 2.57108, -12.60441)  (-0.25711,  1.26044)  -5.12546
7      (-1.41795,  3.80465)  (-2.83590, -7.60930)  (-0.52192, -18.95327)  ( 0.05219,  1.89533)  -12.46479
8      (-1.36576,  5.69998)  (-2.73151, -11.39996)  (-3.20124, -28.45790)  ( 0.32012,  2.84579)  -30.62446
9      (-1.04563,  8.54577)  (-2.09126, -17.09154)  (-4.97238, -42.70365)  ( 0.49724,  4.27036)  -71.93681
10     (-0.54839, 12.81613)  (-1.09679, -25.63227)  (-5.57193, -64.06555)  ( 0.55719,  6.40655)  -163.95252

9.3 实验2:从接近鞍点的位置开始

让我们测试从接近鞍点的位置开始优化,看看两种方法的表现。从接近鞍点的位置 (0.1, 0.1) 开始。

============================================================
实验2:起始点 (0.1, 0.1) - 接近鞍点
============================================================

普通梯度下降:
  初始点: (0.100, 0.100)
  最终点: (0.000000, 8281797.452201)
  最终损失: -68588169039290.585938
  迭代次数: 100
  初始梯度: (0.200000, -0.200000)

Momentum:
  初始点: (0.100, 0.100)
  最终点: (-0.000285, 27104078502347760.000000)
  最终损失: -734631071461429988212410463289344.000000
  迭代次数: 100
  最终动量: (0.002188, -90346928341159200.000000)

注意:由于鞍点函数 $f(x, y) = x^2 - y^2$ 在 y 方向上无下界,
从接近鞍点的位置开始优化时,参数会在 y 方向上发散。
上图只显示了前几步的优化路径(在合理范围内)。

10. 动量的可视化分析

10.1 动量的变化过程

10.2 优化过程对比

10.3 不同动量系数 $\beta$ 对优化效果的影响

不同beta值的总结:
------------------------------------------------------------
β=0 (SGD)       最终距离原点: 41408987.261007, 最终损失: -1714704225982265.000000, 迭代次数: 100
β=0.5           最终距离原点: 565256793155.264038, 最终损失: -319515242208172984762368.000000, 迭代次数: 100
β=0.9           最终距离原点: 135520392511738848.000000, 最终损失: -18365776786535762387446812257550336.000000, 迭代次数: 100
β=0.99          最终距离原点: 3821946198977634816.000000, 最终损失: -14607272747879590553106021257186377728.000000, 迭代次数: 100

11. 总结与关键要点

11.1 Momentum 的核心公式回顾

Momentum 更新公式:
$$v_t = \beta \cdot v_{t-1} + \nabla_\theta L(\theta_t)$$
$$\theta_{t+1} = \theta_t - \alpha \cdot v_t$$

公式中每一项的含义:

  1. $v_t$(动量项)

    • 第 $t$ 步的动量,是历史梯度的加权累积
    • 物理意义:模拟物体运动的惯性
    • 数学意义:$v_t = \sum_{i=1}^{t} \beta^{t-i} \cdot \nabla_\theta L(\theta_i)$
  2. $\beta$(动量系数)

    • 控制历史信息的权重,通常取 0.9 或 0.99
    • $\beta$ 越大,历史信息权重越大,惯性越强
    • $\beta$ 越小,当前梯度权重越大,变化越敏感
    • 有效窗口大小:$\frac{1}{1-\beta}$ 步
  3. $v_{t-1}$(历史动量)

    • 上一步的动量,保留历史梯度信息
    • 通过 $\beta$ 衰减,但不会立即消失
  4. $\nabla_\theta L(\theta_t)$(当前梯度)

    • 损失函数在当前参数位置的梯度
    • 决定当前时刻的"力"
  5. $\alpha$(学习率)

    • 控制更新步长
    • 与普通梯度下降中的学习率意义相同
  6. $\theta_t$ 和 $\theta_{t+1}$(参数)

    • 优化目标,需要更新的模型参数

11.2 Momentum 的优势

  1. 加速收敛

    • 在梯度方向一致的区域,动量累积,更新步长增大
    • 能够更快地到达最优解附近
  2. 减少震荡

    • 在狭窄山谷中,动量平滑路径,减少来回震荡
    • 提高优化的稳定性
  3. 帮助逃离鞍点

    • 即使当前梯度接近0,历史动量仍存在
    • 可以帮助参数越过鞍点或小的局部最优
  4. 更稳定的训练

    • 对学习率的选择相对不敏感
    • 训练过程更加平滑

11.3 Momentum 的适用场景

适合使用 Momentum 的情况:

  • 损失函数有平坦区域
  • 存在鞍点问题
  • 优化路径需要平滑
  • 需要加速收敛

需要注意的情况:

  • $\beta$ 值需要合理选择(通常 0.9)
  • 在某些情况下,过大的动量可能导致超调
  • 需要与学习率配合调整

11.4 与普通梯度下降的对比

特性普通梯度下降Momentum
更新方向负梯度方向负动量方向
历史信息不使用使用(加权累积)
收敛速度较慢较快
震荡问题容易震荡减少震荡
鞍点问题容易停滞可以越过
实现复杂度简单稍复杂

11.5 数学推导的关键步骤

  1. 初始条件:$v_0 = 0$
  2. 递推关系:$v_t = \beta \cdot v_{t-1} + \nabla_\theta L(\theta_t)$
  3. 展开形式:$v_t = \sum_{i=1}^{t} \beta^{t-i} \cdot \nabla_\theta L(\theta_i)$
  4. 权重分析:越近的梯度权重越大($\beta^0 = 1$),越远的梯度权重越小($\beta^k$ 指数衰减)

11.6 实践建议

  1. 动量系数选择

    • 通常从 $\beta = 0.9$ 开始
    • 如果需要更强的历史信息,可以尝试 $\beta = 0.99$
    • 如果希望更敏感,可以尝试 $\beta = 0.5$
  2. 学习率调整

    • Momentum 通常可以使用稍大的学习率
    • 建议从普通梯度下降的学习率开始,逐步调整
  3. 与其他优化器结合

    • Momentum 是很多高级优化器(如 Adam)的基础
    • 理解 Momentum 有助于理解其他优化算法

12. 参考文献与扩展阅读

  1. 原始论文

    • Polyak, B. T. (1964). Some methods of speeding up the convergence of iteration methods. USSR Computational Mathematics and Mathematical Physics.
  2. 相关优化算法

    • Nesterov Accelerated Gradient (NAG)
    • Adam (Adaptive Moment Estimation)
    • RMSprop
  3. 深入理解

    • 指数移动加权平均(EMA)
    • 梯度下降法的变体
    • 优化理论

评论