想象你在冬天的山顶推一个雪球。普通梯度下降就像一颗刚停下的球:每走一步都要停下来,重新看看脚下的坡度,方向一变就立刻跟着变,遇到小坑就陷进去。而动量法则像已经滚起来的雪球——它积累了向前的速度,遇到小起伏不会轻易改道,顺着斜坡方向越滚越快。这篇内容就用“滚雪球”这个画面,带你读懂动量法的原理:速度如何累积、系数怎么调、为什么能冲出峡谷和鞍点,以及 Nesterov 动量这位“会预判的滑雪高手”和标准动量的区别。读完你会发现,优化算法不是冰冷的公式,而是一颗在山谷中越滚越聪明的雪球。

岗位关联

动量法是训练神经网络最常用的“加速器”之一,理解它,你就能看懂 SGD、Adam 等优化器的核心机制,在模型收敛慢、训练震荡时知道该调哪个旋钮。

目录
  1. 可视化演示
  2. 动量思想:从“走一步看一步”到“滚起雪球”
  3. 动量公式:给雪球一块速度表
  4. 超参选择:调节雪球的“摩擦力”
  5. 峡谷穿越:雪球为何能冲出峡谷
  6. Nesterov动量:会预判的滑雪高手
  7. 实战应用:什么时候该带雪球
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

通过惯性累积(小球带速度滚向最低点)、峡谷加速(GD震荡vs动量平滑前进)与Nesterov对比(标准动量vs前瞻动量)三个模式,展示动量法如何借鉴物理惯性加速梯度下降收敛。

本节配有交互动效(进入视口后自动加载,约 3KB)。

动量法物理直觉与惯性累积 引入速度变量累积历史梯度如同小球带惯性滚下山坡 一致方向上加速前进震荡方向上惯性抵消减速 v = β·v + g, θ = θ - lr·v 动量是历史梯度的指数加权移动平均

动量思想:从“走一步看一步”到“滚起雪球”

让我们先看一个画面:山路上有两个人。一个人推着刚停下的手推车,每次车轮卡进石缝,他都要停下来,重新判断方向,换个角度再推;另一个人推着一个已经滚起来的雪球,雪球自带速度,路面上的小石块会被直接碾过去。优化的世界里,普通 SGD 就是那个推手推车的人,而动量法就是那个滚雪球的人。

从数学上看,普通 SGD 的更新规则是 θ ← θ − η∇L(θ),意思是“看一眼当前位置的梯度,然后往下走一步”。这里没有记忆:每一步的决策都只依赖当前这一瞬间的坡度,历史走过的方向完全被丢掉了。在平坦的损失面上这没什么问题,可一旦遇到“峡谷”或“鞍点”,没有记忆的劣势就暴露了。

峡谷损失面有一个特征:某个方向极其陡峭,另一个方向却非常平缓。比如损失函数:

回到雪球的比喻:雪球的优势不在于它“知道”该往哪走,而在于它“记得”自己正在往哪走。动量法要做的,就是给梯度下降装上一个“速度表”,让参数更新不再是每次从零开始,而是带着历史的速度继续滚动。

f(w1,w2)=12c1w12+12c2w22,c2≫c1>0\displaystyle f(w_1, w_2) = \frac{1}{2}c_1 w_1^2 + \frac{1}{2}c_2 w_2^2, \quad c_2 \gg c_1 > 0
这个公式描述了一个“细长碗”:w₂ 方向的曲率 c₂ 远大于 w₁ 方向的曲率 c₁,就像一道两边是陡峭岩壁、谷底平坦的峡谷。SGD 在陡峭方向来回弹跳,在平坦方向却挪得像蜗牛。
  1. 曲率 c₁控制 w₁ 方向的陡峭程度,值很小说明这个方向又平又缓。
    c1\displaystyle c_1
  2. 曲率 c₂控制 w₂ 方向的陡峭程度,值很大说明这个方向急剧起伏。
    c2\displaystyle c_2
  3. 条件对比 c₂ ≫ c₁两个方向曲率严重失衡,正是 SGD 震荡与缓慢并存的根源。
    c2≫c1\displaystyle c_2 \gg c_1

动量公式:给雪球一块速度表

假设你手里有一块速度表,它能记录雪球当前的滚动速度。每次你给雪球一个推力的同时,速度表会做两件事:把旧速度按比例保留下来,再加上新推力的影响。动量法的更新公式正是这个逻辑:

对比一下就知道差别:SGD 相当于 γ=0 的特例,速度表每次清零,方向完全由当前梯度决定;动量法相当于速度表从不清零,历史方向以指数方式缓慢衰减。梯度方向如果来回变,速度的垂直分量会相互抵消;梯度方向如果始终一致,速度就越来越快。这个特性,正是后面“峡谷穿越”的物理基础。

vt=γvt−1−η∇L(θt−1),θt=θt−1+vt\displaystyle v_t = \gamma v_{t-1} - \eta \nabla L(\theta_{t-1}), \qquad \theta_t = \theta_{t-1} + v_t
第一行公式计算“当前速度”:旧速度 v_{t-1} 乘以衰减系数 γ,再减去梯度方向的新推力;第二行公式让参数沿着速度方向移动。速度,就是动量的核心变量。
  1. 速度 v_t第 t 步的累积速度,它是所有历史梯度的加权和,方向代表参数将要移动的方向。
    vt\displaystyle v_t
  2. 动量系数 γ控制旧速度保留多少,通常取 0.9,表示每一步保留前一步 90% 的速度。
    γvt−1\displaystyle \gamma v_{t-1}
  3. 学习率 η控制新梯度“推力”的强度,它决定当前坡度在多大程度上影响速度。
    η∇L(θt−1)\displaystyle \eta \nabla L(\theta_{t-1})
  4. 参数更新 θ_t参数直接加上速度,而不是直接减去梯度,这就是“带惯性”的移动方式。
    θt=θt−1+vt\displaystyle \theta_t = \theta_{t-1} + v_t

超参选择:调节雪球的“摩擦力”

同样是滚雪球,雪质不同体验完全不同。新雪蓬松,雪球滚两下就减速;冰面光滑,雪球容易越滚越快刹不住。动量系数 γ 就是那个控制“摩擦力”的旋钮——它决定了历史速度能“滑”多远。

经验上 γ 取 0.9 是一个稳健的起点,许多框架的默认值就是它。为什么 0.9 这么常用?我们可以用“有效视野”来理解:

γ 过大会怎样?γ=0.99 意味着速度几乎不衰减,新梯度很难改变方向,雪球遇到急转弯也停不下来,导致参数冲过头甚至震荡发散。γ 过小呢?γ=0.5 时等效记忆只有两步,雪球几乎每次都被“刹停”,加速效果荡然无存。实践中,γ 通常固定在 0.9~0.99 之间,优先调学习率而不是频繁动 γ——这就像先把雪道选好,再决定雪球该滚多快。

Neff=11−γ\displaystyle N_{\text{eff}} = \frac{1}{1-\gamma}
这个公式把衰减系数换算成“等效历史步数”:γ=0.9 时相当于记住约 10 步的历史梯度;γ=0.99 时相当于记住约 100 步。
  1. 等效步数 N_eff历史梯度在速度中的总权重折算,可以理解为“雪球的记忆长度”。
    Neff\displaystyle N_{\text{eff}}
  2. 分母 1−γγ 越接近 1,分母越小,记忆越长;γ=1 时记忆无限长,速度永不衰减。
    1−γ\displaystyle 1-\gamma

峡谷穿越:雪球为何能冲出峡谷

想象一条滑雪峡谷:两侧岩壁几乎垂直,谷底却是一条平缓的下坡。普通滑雪者如果只看脚下,会在两侧岩壁之间来回弹撞,横向的速度消耗在反复的碰撞里,沿着谷底前进的速度却极慢。而一个已经滚起来的雪球呢?它在岩壁上每撞一次,返回的速度就被下一次撞击抵消,但在谷底方向,速度一直在累积。

把峡谷里的梯度分解成两个方向就清楚了:

鞍点也是同样的道理:鞍点处梯度接近零,SGD 像走入了一片平缓高原,走几步就停住了;而动量法带着“冲量”闯进来,即使梯度很小,旧速度仍会推着参数穿过这片平坦区域。这正是动量法能成为 SGD 标准增强的根本原因——它让优化器既稳又快。

vt⊥=γvt−1⊥−ηg⊥,vt∥=γvt−1∥−ηg∥\displaystyle v_t^{\perp} = \gamma v_{t-1}^{\perp} - \eta g^{\perp}, \qquad v_t^{\parallel} = \gamma v_{t-1}^{\parallel} - \eta g^{\parallel}
上标 ⟂ 表示“垂直谷壁方向”(陡峭方向),上标 ∥ 表示“沿谷底方向”(平缓方向)。动量在陡峭方向让反弹相互抵消,在平缓方向让速度越攒越大。
  1. 垂直分量 v_t^⊥陡峭方向的梯度符号会随壁面方向改变,累积速度正负交替,如同撞壁弹回。
    vt⊥=γvt−1⊥−ηg⊥\displaystyle v_t^{\perp} = \gamma v_{t-1}^{\perp} - \eta g^{\perp}
  2. 平行分量 v_t^∥谷底方向的梯度符号基本不变,速度持续累加,雪球越滚越快。
    vt∥=γvt−1∥−ηg∥\displaystyle v_t^{\parallel} = \gamma v_{t-1}^{\parallel} - \eta g^{\parallel}

Nesterov动量:会预判的滑雪高手

现在把画面切换成两位滑雪高手。第一位看的是脚下,滑到哪算哪;第二位会提前半秒把视线投向速度方向的前方,如果发现前方有陡坡,身体已经提前调整重心。Nesterov 动量就是第二位高手。

标准动量的流程是:先算当前位置梯度,再更新速度,最后迈步;Nesterov 动量的流程是:先沿着当前速度方向“试探”跳跃一步,在试跳的位置计算梯度,再用这个梯度更新速度:

为什么预判更好?标准动量像“冲过头再回头”,Nesterov 因为提前看到前方,可以在接近谷底时提前减小速度,少走许多弯路。实践上 Nesterov 通常比标准动量收敛更快、振荡更小,而且在凸问题的理论分析中拥有更优的收敛速率。对大多数任务来说,它就是“更聪明的那只雪球”。

vt=γvt−1−η∇L(θt−1+γvt−1),θt=θt−1+vt\displaystyle v_t = \gamma v_{t-1} - \eta \nabla L(\theta_{t-1} + \gamma v_{t-1}), \qquad \theta_t = \theta_{t-1} + v_t
与标准动量的唯一区别,是梯度计算的位置从 θ_{t-1} 换成了 θ_{t-1} + γv_{t-1}——也就是“预跳一步”后的位置。
  1. 预判位置 θ + γv先按当前速度滑一小段,看看前方地形的坡度是什么样。
    θt−1+γvt−1\displaystyle \theta_{t-1} + \gamma v_{t-1}
  2. 梯度在新位置求值用预判点的坡度决定本次速度更新,能提前“踩刹车”或“加油门”。
    ∇L(θt−1+γvt−1)\displaystyle \nabla L(\theta_{t-1} + \gamma v_{t-1})

实战应用:什么时候该带雪球

不是所有路况都需要推雪球:平直的大道上,小步快走就够了;只有山路崎岖、弯道多、路况噪音大的时候,雪球的惯性才真正发挥威力。神经网络的训练,恰好就是一条“崎岖山路”。

适用场景很明确:损失面崎岖不平、训练曲线剧烈震荡、或者模型收敛慢得像蜗牛爬。具体来说,训练 CNN 做图像分类、用小批量梯度下降(batch size 较小)时,每个 batch 的梯度噪声很大,动量能把噪声平均掉;训练 RNN/LSTM 时,梯度在时间轴上剧烈变化,动量让更新方向更稳定。许多框架里一行代码就能开启:

调参建议是:先固定 γ=0.9,用标准 SGD 找到合适的学习率,再开启动量;如果发现 loss 震荡,再考虑调小学习率或改成 Nesterov。动量还有一个实用意义——它在一致方向的有效步长约为:

回顾整个雪球之旅:动量思想来自物理惯性,动量公式给了梯度一个速度表,γ 决定雪球记忆多长,峡谷穿越解释了为什么它又快又稳,Nesterov 让它学会预判,而实战经验告诉我们该在什么场景打开这个旋钮。下次看到训练 loss 锯齿般震荡、迟迟不收敛时,记得给优化器“滚一个雪球”。

ηeff=η1−γ\displaystyle \eta_{\text{eff}} = \frac{\eta}{1-\gamma}
这个公式说明:在梯度方向一致性很高的区域,动量的“实际步长”被放大了,这正是“平坦方向加速”的定量表达。
  1. 有效步长 η_eff动量在一致方向上真正移动的距离,比普通 SGD 的 η 大得多。
    ηeff\displaystyle \eta_{\text{eff}}
  2. 放大倍数 1/(1−γ)γ=0.9 时放大约 10 倍,γ=0.99 时放大约 100 倍——所以大 γ 时学习率要相应调小。
    η1−γ\displaystyle \frac{\eta}{1-\gamma}
python1 行
optimizer = torch.optim.SGD(model.parameters(), lr=0.01, momentum=0.9, nesterov=True)

AI 应用场景

大规模模型预训练:用动量平滑海量梯度噪声

阶段:模型训练与优化

解决的问题:训练大模型(如 BERT、GPT 系列)时,数据被切成海量 batch,每个 batch 的梯度方向差异很大,噪声像暴风雪一样嘈杂。纯 SGD 每一步都被噪声牵扯,参数路径颠簸,收敛极慢甚至不收敛。动量的速度累积机制相当于给梯度做了“滑动平均”,让更新方向更稳定,训练更平滑。

具体案例:在 PyTorch 里训练一个中等规模的 Transformer 做文本分类,使用 torch.optim.SGD(model.parameters(), lr=0.01, momentum=0.9)。与无动量版本相比,训练 loss 曲线的锯齿明显减少,验证集准确度在相同 epoch 数下提升 1~2 个百分点。

计算机视觉模型训练:穿越崎岖的损失面

阶段:模型调参与迭代

解决的问题:CNN(如 ResNet)的损失面存在大量局部极小和狭窄峡谷,标准 SGD 容易在峡谷壁来回弹跳。动量法在陡峭方向抵消震荡、在平缓方向加速,帮助模型更快找到更优的解。

具体案例:在 CIFAR-10 上训练 ResNet-18,使用带动量的 SGD(momentum=0.9, weight_decay=5e-4),相比普通 SGD,训练到同等精度所需的 epoch 数减少约 30%,且最终准确率更高。

强化学习策略优化:对抗高噪声回报信号

阶段:策略网络训练

解决的问题:强化学习中每一次采样的回报信号方差极大,梯度方向非常不稳定,像是在暴风中骑自行车。动量相当于给策略网络加了“配重”,让更新方向不被单次采样的大噪声带偏。

具体案例:在 OpenAI Gym 的 CartPole 环境训练一个简单的策略梯度智能体,使用带动量的 SGD 更新策略网络参数,训练曲线比普通 SGD 平稳得多,平均回报更快达到满分阈值。

Python 演示

python59 行
# -*- coding: utf-8 -*-"""动量法 vs 普通 SGD:在峡谷损失面上的对比演示""" import math START_X, START_Y = -9.0, 1.4LEARNING_RATE = 0.25MOMENTUM = 0.85STEPS = 100# f(x, y) = 0.02*x^2 + 1.5*y^2, 中心 (0,0) 是最小值# y 方向的曲率是 x 方向的 75 倍, 形成一个峡谷  def grad(x, y):    """返回损失函数的梯度: (0.04*x, 3.0*y)"""    return 0.04 * x, 3.0 * y  def run_sgd():    x, y = START_X, START_Y    trace = [(x, y)]    for _ in range(STEPS):        gx, gy = grad(x, y)        x -= LEARNING_RATE * gx        y -= LEARNING_RATE * gy        trace.append((x, y))    return trace  def run_momentum():    x, y = START_X, START_Y    vx, vy = 0.0, 0.0    trace = [(x, y)]    for _ in range(STEPS):        gx, gy = grad(x, y)        vx = MOMENTUM * vx - LEARNING_RATE * gx        vy = MOMENTUM * vy - LEARNING_RATE * gy        x += vx        y += vy        trace.append((x, y))    return trace  def distance_to_center(x, y):    """用损失值开方衡量与最优点的距离"""    return math.sqrt(0.02 * x * x + 1.5 * y * y)  def main():    sgd = run_sgd()    mom = run_momentum()    print("步数  普通SGD距离  动量法距离")    for i in range(0, STEPS + 1, 20):        print(f"{i:3d}   {distance_to_center(*sgd[i]):8.3f}   "              f"{distance_to_center(*mom[i]):8.3f}")  if __name__ == "__main__":    main()
目的:在一个人造的“峡谷”损失面上,对比普通 SGD 和动量法各自经过 100 步迭代后离最优点的距离,直观展示动量的加速效果。
  1. def grad(x, y):损失函数 0.02x²+1.5y² 的梯度,y 方向是 x 方向的 75 倍,模拟峡谷地貌
  2. x -= LEARNING_RATE * gx普通 SGD 只用当前梯度更新,完全没有历史记忆
  3. vx = MOMENTUM * vx - LEARNING_RATE * gx动量核心:旧速度衰减 + 新梯度推力
  4. vy = MOMENTUM * vy - LEARNING_RATE * gy陡峭方向的梯度符号来回变,速度会相互抵消
  5. x += vx参数沿着速度方向移动,而不是直接沿梯度方向移动
  6. distance_to_center用损失开方衡量当前位置离最优点的距离

常见误区

误区动量法不就是把梯度乘上 1.1 或者 2 倍吗?让每一步走得更远,所以收敛更快。

正解动量不是放大“当前梯度”,而是累积“历史梯度”。区别很大:放大当前梯度只会让一步走得更猛,方向仍是当前坡度决定的;动量则是把过去每一步的方向都记下来,就像雪球的速度是无数次推力的叠加,不是某一步推得特别用力。

为何常见:看到公式里有 γ 和 η 两个系数,容易误以为它们都是对梯度做缩放,忽略了速度 v 这个累积变量的核心地位。

误区γ 越接近 1,惯性越大,收敛应该越快。所以直接设 0.99 甚至 0.999。

正解γ 过大意味着旧速度的“记忆”太长,模型遇到损失面的新变化时,旧方向仍死死拽着参数,导致反应迟钝、冲过最优点。γ=0.99 时等效记忆约 100 步,新梯度根本无法快速纠偏,训练反而发散或剧烈震荡。

为何常见:“惯性越大越好”符合日常直觉,但优化是有“刹车距离”的,惯性过大会让速度成为阻碍而非助力。

误区训练 loss 震荡,加上动量就会立刻变平滑。

正解动量能缓解由“峡谷高曲率方向”导致的震荡,但如果震荡来自学习率过大,动量只会让问题更严重——过大的学习率加动量,参数会像失控的雪球一样冲出去。正确的顺序是先调小学习率,再考虑动量的平滑作用。

为何常见:把动量的“平滑效果”误当成万能过滤器,忽略了震荡的根因可能是步长太大而非方向不一致。

误区Nesterov 动量不就是多写了一个括号吗?效果差不多,随便选一个。

正解多写一个括号意味着本质差别:标准动量的梯度在“当前位置”计算,Nesterov 的梯度在“预跳一步后的位置”计算。这像开车时看脚下还是看前方:Nesterov 能提前感知前方地形变化、及时减速,在凸优化理论中有更优的收敛速率,实践中也通常更快更稳。

为何常见:从公式表面看只有一处位置替换,容易低估“在哪个位置求梯度”这个细节对轨迹的深远影响。

误区动量能加速收敛,那我直接把学习率调大,配合动量一起用,收敛岂不是更快?

正解动量在一致方向上的有效步长是 η/(1−γ),γ=0.9 时已经放大了约 10 倍。再调大学习率,实际步长会被放得更大,很容易越过最优点发散。正确做法是:先用不带动量的 SGD 找到合适的学习率,再开启动量,通常学习率还要略微调小。

为何常见:误以为动量和学习率是两个独立旋钮,忽略了它们在“有效步长”上的乘法关系。

面试题

Q1. 动量法借鉴了下列哪个物理概念?

单选题 · easy

  • A.电磁感应生成感生电流
  • B.物体运动保持惯性← 正确答案
  • C.杠杆原理省力
  • D.光的反射定方向

答案:B。动量法的核心是把历史速度累积下来,让参数带着“旧速度”继续移动,这正是物体惯性——运动中的物体倾向于保持原有运动状态。电磁感应、杠杆、光反射都与“沿一致方向加速”无关。

Q2. 动量法更新公式中 γ 表示什么?

单选题 · easy

  • A.学习率,控制每步新梯度的大小
  • B.动量系数,控制历史速度的保留比例← 正确答案
  • C.正则化系数,抑制过拟合
  • D.批量大小,决定采样数量

答案:B。γ 是动量系数,通常取 0.9,每一步把旧速度乘以 γ 后保留下来。学习率是 η,正则化是 weight decay,批量大小与动量无关。公式 v_t = γv_{t-1} − η∇L 里,γ 管“记住多少旧速度”。

Q3. 在动量法中,历史梯度对当前速度的影响方式是?

单选题 · easy

  • A.每步被完全清零
  • B.按指数衰减逐步淡化← 正确答案
  • C.线性增长无限放大
  • D.随机丢弃大部分

答案:B。速度 v_t = γv_{t-1} + …… 展开后,第 t−k 步的梯度贡献为 γ^k,随 k 增大按指数衰减。γ=0.9 时约 10 步前的梯度仍有相当影响,但更早的梯度几乎可忽略。这就是“指数衰减”的记忆方式。

Q4. 在细长的峡谷损失面上,普通 SGD 的主要表现是?

单选题 · mid

  • A.沿谷底方向直线加速前进
  • B.在陡峭方向来回震荡,沿谷底方向缓慢爬行← 正确答案
  • C.完全静止没有任何更新
  • D.直接跳到损失面之外

答案:B。峡谷的陡峭方向(短轴)曲率大,梯度大,SGD 每一步更新幅度大且符号随位置反复变化,形成震荡;而谷底方向(长轴)梯度小,更新幅度小,所以爬行缓慢。动量正是针对这种“一快一慢”的失衡设计的。

Q5. 动量法为何能帮助参数逃出鞍点?

单选题 · mid

  • A.因为它增大了每一步的梯度值
  • B.因为它累积的速度能带着参数冲过平坦区域← 正确答案
  • C.因为它自动改变了损失函数的形状
  • D.因为它每一步都重新随机初始化参数

答案:B。鞍点附近的梯度接近零,普通 SGD 的更新量趋近于零,于是卡住。动量法的速度 v 是由历史梯度累积而成的,即使当前梯度很小,旧速度仍推着参数前进,从而冲过鞍点的平坦区域。它并不改变梯度本身。

Q6. 动量系数 γ 设为 0.99 时,可能带来哪些影响?

多选题 · mid

  • A.历史速度的影响非常持久← 正确答案
  • B.对新地形变化的适应变慢← 正确答案
  • C.与普通 SGD 的效果完全一致
  • D.雪球容易冲过头难以停下← 正确答案

答案:ABD。γ=0.99 时等效记忆约 100 步,历史速度几乎不衰减,所以影响持久(A 对),也正因如此,参数对新地形反应迟钝(B 对),容易冲过最优点(D 对)。γ=0.99 绝非 SGD,C 错误,因为 SGD 是 γ=0。

Q7. Nesterov 动量与标准动量的关键区别是?

单选题 · mid

  • A.使用更大的动量系数
  • B.先按速度方向预判位置,再在该位置计算梯度← 正确答案
  • C.每一步需要计算两次梯度并取平均
  • D.完全抛弃历史速度,只用当前梯度

答案:B。Nesterov 更新公式中的梯度是在 θ + γv 处求值的,也就是先沿速度方向“试跳”一步,看看前方坡度再决定怎么更新。它不会算两次梯度,也没有强制更大的 γ,更不会抛弃历史速度,因此只有 B 正确。

Q8. 动量系数 γ=0.9 时,历史梯度的等效影响大约覆盖多少步?

单选题 · hard

  • A.约相当于 1 步
  • B.约相当于 5 步
  • C.约相当于 10 步← 正确答案
  • D.约相当于 100 步

答案:C。等效历史步数公式 N_eff = 1/(1−γ),γ=0.9 时 N_eff=10,即约 10 步前的梯度仍然有相当于一步的权重。γ=0.99 时才是 100 步,γ=0.5 时只有 2 步。这个换算帮助理解为什么 0.9 是常用的默认值。

Q9. 关于动量法在峡谷中的行为,下列哪些描述正确?

多选题 · hard

  • A.垂直谷壁方向的累积速度会相互抵消← 正确答案
  • B.沿谷底方向的累积速度会越来越快← 正确答案
  • C.峡谷里的震荡会百分百消失
  • D.能显著加快沿谷底方向的收敛← 正确答案

答案:ABD。垂直谷壁方向梯度符号反复变化,累积速度正负交替、相互抵消(A 对);沿谷底方向梯度符号一致,速度持续累积(B 对),因此整体收敛速度加快(D 对)。但“震荡完全消失”是夸大说法,动量只是削弱而非根除震荡,C 错误。

Q10. 动量法能“跨过小坑”的底层逻辑是?

单选题 · extreme

  • A.速度项的冲量使参数能越过局部起伏← 正确答案
  • B.通过改变损失函数值跳过
  • C.把学习率符号取反强行弹跳
  • D.每一步随机探索新位置

答案:A。动量累积的速度带有“冲量”,即使当前位置的梯度很小或指向局部小坑,速度的惯性也会推动参数继续沿原方向移动,从而越过局部起伏。它不改变损失函数,学习率符号保持为负,也不是随机探索,所以 A 是唯一本质解释。