想象你请了一位经验丰富的老向导带你下山。有个急性子跑者只顾凭惯性往前冲,结果在急弯处差点摔下悬崖。老向导说:“别急着迈步!每次迈出之前,先探出身子,看一眼下一步你会踩到哪儿,再决定如何发力。”这个“先探再走”的智慧,正是Nesterov加速梯度法的精髓——在原有动量法的基础上,先看一眼“未来一步”的地形,再修正自己的速度方向。同样的体力消耗,这位聪明的跑者却能更快、更稳地抵达山脚。 本文将带你从动量法出发,理解Nesterov如何通过“前瞻一步”获得更快的收敛速度,并梳理它的数学原理、工程实现与应用场景。

岗位关联

对AI从业者而言,Nesterov加速梯度法是一阶优化工具箱里的“进阶标配”。理解它,你不仅能解释深度学习训练中优化器的细微差异,还能在模型收敛缓慢时多一个有效的调整方案。

目录
  1. 可视化演示
  2. 动量法回顾
  3. 前瞻梯度思想
  4. 收敛速率分析
  5. 参数更新规则
  6. 工程优化策略
  7. 应用场景分析
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示GD与Momentum与NAG收敛速率对比、前瞻位置梯度计算机制、参数空间优化轨迹对比三阶段探索。

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

GD与MOM与NAG收敛速率对比 标准梯度下降O(1/k)缓慢收敛 动量法累积梯度加速但仍O(1/k) NAG前瞻更新实现O(1/k²)加速 f_k - f* ≤ O(1/k²) for NAG NAG收敛速率理论最优

动量法回顾

想象一个急性子跑者下山,他不看路况,只凭着一股惯性大步流星地冲。在平缓和顺直的山坡上,这招确实比普通人快——因为每一步都借了前一步的力。可一旦遇到急转弯或陡坑,他就容易刹不住车、冲出跑道。这种“凭惯性冲刺”的策略,正是标准动量法的直观形象。

在梯度下降的世界里,动量法不再孤零零地看当前这一步的梯度,而是把历史梯度的方向“记在心上”,形成一个速度项。它用指数加权平均的方式累积历史梯度:方向一致的更新互相叠加,形成大步流星的惯性;方向震荡的更新互相抵消,起到平滑噪声的作用。这就是动量法比普通梯度下降更快的根本原因。

严格写成更新方程,动量法有两个式子:第一步更新速度,第二步移动参数。

然而,冲动型跑者的局限也很明显:他在当前位置算梯度,等迈出一步后地形可能已经变了。眼睛始终盯着起跑时的地面,反应自然慢半拍。这个“反应延迟”,正是 Nesterov 要解决的核心问题。

vt=γvt−1−η∇f(θt−1)v_t = \gamma v_{t-1} - \eta \nabla f(\theta_{t-1})
θt=θt−1+vt\theta_t = \theta_{t-1} + v_t
这里速度 v 表示参数将要移动的方向向量;γ 是动量系数,η 是学习率。
  1. 惯性保留上一步的速度 v_{t-1} 乘以动量系数 γ 后被保留下来,γ 越接近 1,惯性越大,越不容易改变方向。
    γvt−1\gamma v_{t-1}
  2. 当前梯度推力当前位置 θ_{t-1} 处的负梯度是“地形给的反作用力”,学习率 η 控制这次推挤的力度,防止一步迈得太大或太小。
    −η∇f(θt−1)- \eta \nabla f(\theta_{t-1})
  3. 速度合成新速度 v_t 由保留的惯性和当前梯度推力相加而成。如果连续多步梯度方向一致,速度会越滚越大,实现加速。
    vt=γvt−1−η∇f(θt−1)v_t = \gamma v_{t-1} - \eta \nabla f(\theta_{t-1})
  4. 参数移动参数沿合成速度方向移动,完成一步更新。
    θt=θt−1+vt\theta_t = \theta_{t-1} + v_t

前瞻梯度思想

老向导给急性子跑者支了一招:“你跑的时候别只盯着脚下,先探出身子,看看按现在的速度再滑一步会到哪儿,然后在那里看一眼路,再决定怎么发力。”这个“先探再走”的动作,在数学上就是——先计算一个前瞻点,在那个假装到达的位置上求梯度。

前瞻点的位置很直观:假设你完全依赖现在的惯性继续滑行,下一步会抵达的位置就是 θ + γv。Nesterov 的聪明之处在于,它不在当前位置 θ 处算梯度,而是跑到这个“未来的假想位置”上算梯度。在凸优化中,数学家 Yurii Nesterov 在 1983 年证明了这个小小的改动能让收敛速率产生质的飞跃。

老向导的这个“探身”动作,成本极低——只多了一次梯度在假想位置的估值,却避免了冲入坑中再费力爬出来的弯路。当面对的是窄长峡谷这类病态曲率地形时,这个预判让 Nesterov 比动量法少走许多“之”字形弯路。

vt=γvt−1−η∇f(θt−1+γvt−1)v_t = \gamma v_{t-1} - \eta \nabla f(\theta_{t-1} + \gamma v_{t-1})
θt=θt−1+vt\theta_t = \theta_{t-1} + v_t
与动量法唯一的区别:梯度在前瞻点 θ_{t-1} + γv_{t-1} 处计算,而非当前位置。
  1. 前瞻点计算θ_{t-1} 加上惯性位移 γv_{t-1},得到“如果不刹车会滑到的位置”。这一步相当于探出身子。
    θt−1+γvt−1\theta_{t-1} + \gamma v_{t-1}
  2. 前瞻梯度在前瞻点位置求梯度 ∇f(·),相当于提前观察未来地形,而不是看脚下的旧路面。
    ∇f(θt−1+γvt−1)\nabla f(\theta_{t-1} + \gamma v_{t-1})
  3. 速度修正用前瞻梯度而不是当前梯度来修正速度,方向不对的惯性被提前削弱,方向正确的惯性被进一步放大。
    vt=γvt−1−η∇f(θt−1+γvt−1)v_t = \gamma v_{t-1} - \eta \nabla f(\theta_{t-1} + \gamma v_{t-1})
  4. 位置更新位置更新式和动量法完全一致,但速度里已经注入了“未来信息”。
    θt=θt−1+vt\theta_t = \theta_{t-1} + v_t

收敛速率分析

为什么先探一步就能快这么多?想象你要穿过一片密林,如果能提前一步看清前方树枝的位置,你就不会反复走错路、不断调整方向,总路程自然短得多。在数学上,这个“总路程”就是收敛速率——衡量迭代次数 k 增加时,损失值离最优解还有多远。

在 L-光滑的凸函数上,普通梯度下降的最坏收敛速率是 O(1/k),也就是说误差大约与迭代次数成反比。而 Nesterov 加速梯度法能把速率提升到 O(1/k²)——同样是 100 步,标准梯度下降误差可能还剩 1/100,Nesterov 已经缩小到 1/10000 的量级。更关键的是,在一阶方法家族中,这个速率已被证明是理论上最优的:任何只依赖一阶梯度信息的算法都无法在凸光滑场景下做得更好。

需要强调的是,“最优性保证”针对的是凸光滑问题:当损失函数本身是凸函数且梯度满足 L-光滑条件时,O(1/k²) 才成立。在深度学习的非凸世界中,并没有这样严格的数学保证,但 Nesterov 的“提前探路”直觉依然有效,在实践中常表现出更快的收敛。

f(θk)−f(θ∗)≤L∥θ0−θ∗∥22k2=O(1/k2)f(\theta_k) - f(\theta^*) \le \frac{L\|\theta_0 - \theta^*\|^2}{2k^2} = O(1/k^2)
误差上界以迭代次数的平方倒数衰减,这是该问题类下“不可能再快”的理论天花板。
  1. 损失差距f(θ_k) - f(θ*) 表示第 k 步参数的损失值离全局最优损失还差多少,我们的目标就是让这个差值快速缩小。
    f(θk)−f(θ∗)f(\theta_k) - f(\theta^*)
  2. 光滑常数L 刻画损失曲面最陡峭的程度,L 越大表示同样的一段位移可能带来更大的梯度变化,收敛也越困难。
    LL
  3. 初始距离‖θ₀ - θ*‖² 是起点到最优点距离的平方。起点越远,征服的路程越长,误差上界越大。
    ∥θ0−θ∗∥2\|\theta_0 - \theta^*\|^2
  4. 平方衰减分母是 2k²,迭代次数 k 翻倍时,误差上界约降为原来的四分之一,这是“平方级”加速的来源。
    L∥θ0−θ∗∥22k2\frac{L\|\theta_0 - \theta^*\|^2}{2k^2}

参数更新规则

老向导总结了一套完整的下山口令:“探身——看路——发力——落脚。”每一步动作对应一个关键参数:探多远由动量系数 γ 决定,发多大的力由学习率 η 决定。把这些口令串起来,就是 Nesterov 算法的完整执行流程。

算法的每一步都严格遵循一个四步流程:先根据当前速度和动量系数算出前瞻点,再在前瞻点计算梯度,然后更新速度向量,最后更新参数位置。用伪代码描述就是:

调参时有个实用经验:当损失曲线出现频繁振荡时,先减小学习率 η,再考虑调低动量系数 γ;当收敛速度太慢但曲线平稳时,可以试着增大 γ。这套“先探再走”的流程看似只多了一个小动作,却让每一步都比动量法走得更踏实。

vk=γvk−1−η∇f(θk−1+γvk−1)v_k = \gamma v_{k-1} - \eta \nabla f(\theta_{k-1} + \gamma v_{k-1})
θk=θk−1+vk\theta_k = \theta_{k-1} + v_k
算法循环往复执行这两个式子,直到满足停机条件(如损失不再下降或达到最大迭代数)。
  1. 动量系数 γγ 控制惯性保留和前瞻距离。γ=0.9 是常用起点,γ 越大惯性越强、探得越远,但太大容易冲过头。
    γ∈[0,1)\gamma \in [0, 1)
  2. 学习率 ηη 控制每一步对梯度方向的信任程度。因为 Nesterov 的方向更准、振荡更少,实践中常可以比标准动量法用稍大的学习率。
    η>0\eta > 0
  3. 速度叠加速度每一轮都被“惯性衰减 + 前瞻梯度修正”共同驱动,前瞻梯度负责提前纠偏。
    vk=γvk−1−η∇f(θk−1+γvk−1)v_k = \gamma v_{k-1} - \eta \nabla f(\theta_{k-1} + \gamma v_{k-1})
  4. 位置滚动参数沿着修正后的速度方向滚动,完成一次“探身-看路-发力-落脚”的完整循环。
    θk=θk−1+vk\theta_k = \theta_{k-1} + v_k

工程优化策略

老向导发现,与其每次念叨两套口令,不如把它浓缩成一句:“探身之处,即发力之地。”工程实现上也有类似的“口诀合并”——把速度更新和位置更新两个式子合并成一个等价形式,从而减少状态维护。

这个等价形式的核心技巧是“用位置差代替速度”。因为在数学上,v_k 不过就是 θ_k - θ_{k-1}(这一步实际走了多远)。把它代回 Nesterov 的原始公式,就能消掉显式的速度变量:

工程上还有两个细节值得注意。第一,数值稳定性:梯度裁剪或权重衰减的顺序会影响效果,通常建议在计算前瞻点之前先完成权重衰减。第二,学习率调度:Nesterov 常与余弦退火或阶梯式衰减搭配,让训练后期的前瞻距离随着学习率一起收缩。这些优化让“老向导的经验”在十亿参数的大模型上也能高效落地。

θk+1=θk+γ(θk−θk−1)−η∇f(θk+γ(θk−θk−1))\theta_{k+1} = \theta_k + \gamma(\theta_k - \theta_{k-1}) - \eta \nabla f\big(\theta_k + \gamma(\theta_k - \theta_{k-1})\big)
这个式子与原始 Nesterov 完全等价,但只维护当前位置和历史位置,工程上更省内存。
  1. 位置差即速度θ_k - θ_{k-1} 是上一步实际走过的位移,数学上与速度 v_{k-1} 完全等价,可以放心替代。
    θk−θk−1\theta_k - \theta_{k-1}
  2. 惯性位移γ 乘以上一步位移,得到惯性延续项,相当于原始公式中的 γv。
    γ(θk−θk−1)\gamma(\theta_k - \theta_{k-1})
  3. 前瞻位置θ_k + γ(θ_k - θ_{k-1}) 就是原算法中的前瞻点——“如果继续按上一步的方向滑,会到哪儿”。
    θk+γ(θk−θk−1)\theta_k + \gamma(\theta_k - \theta_{k-1})
  4. 一步合并整个式子把“更新速度”和“更新参数”压缩成一行,无需额外维护速度数组,在超大模型训练时能省下一份参数的显存开销。
    θk+1=θk+γ(θk−θk−1)−η∇f(θk+γ(θk−θk−1))\theta_{k+1} = \theta_k + \gamma(\theta_k - \theta_{k-1}) - \eta \nabla f(\theta_k + \gamma(\theta_k - \theta_{k-1}))

应用场景分析

探身下山的智慧在不同山路上威力不同:在平缓顺直的山坡上,普通跑法已经够用;但在急弯陡坡、窄长峡谷这类“病态地形”上,先知先觉带来的优势是决定性的。Nesterov 的应用也遵循同样的规律。

第一个典型场景是凸优化问题。无论是 Lasso 回归、逻辑回归还是 SVM 对偶问题,目标函数是凸的,优化器需要高精度解。此时 O(1/k²) 的理论保证直接转化为可预期的加速收益,Nesterov 常被用作求解器的默认加速器。第二个场景是深度学习训练。在 ResNet、Transformer 等现代架构上,Nesterov 作为动量法的升级版被广泛使用,PyTorch 的 SGD 优化器就内置了 nesterov=True 选项。

实践中的效果对比值得一提:在 CIFAR-10 上训练 ResNet-20 时,达到相同精度,Nesterov 通常比标准动量法省去约 10% 到 20% 的训练轮数;在 Transformer 的语言模型训练中,它也能让损失曲线下降得更平滑。原因不难理解——深度学习损失面充满峡谷状曲率区域,前瞻梯度像是在拐弯前提前减速,减少了“冲过头再折返”的无效振荡。

所以,探身一步并不总是在所有任务上都必要,但在“路况复杂”的现代机器学习中,它几乎总是值得一试的默认选择。老向导的经验跨越了近半个世纪,从凸优化理论走进了深度学习框架,依然是一阶优化算法的经典标配。

AI 应用场景

深度学习模型训练加速

阶段:模型训练 / 优化器选择

解决的问题:训练深层神经网络时,标准动量法在损失面弯曲剧烈处容易振荡,收敛缓慢;Nesterov 的前瞻梯度相当于提前感知地形变化,减少无效震荡,让训练曲线更平滑。

具体案例:某团队在 ImageNet 数据集上训练 ResNet-50,将优化器从标准动量法切换为 Nesterov(PyTorch SGD 的 nesterov=True),并略微调大学习率,达到相同验证精度所需的 epoch 减少了约 15%。

大规模凸优化求解器

阶段:算法求解 / 优化器内核设计

解决的问题:大规模稀疏线性模型(如 Lasso、逻辑回归)需要高效的凸优化求解器。Nesterov 的 O(1/k²) 收敛保证让求解器在稀疏高维数据上更快逼近最优解。

具体案例:工业级推荐系统的 CTR 预估模型中,特征维度达数亿,训练求解器内部使用 Nesterov 加速的近端梯度法处理 L1 正则项,每轮迭代的收敛速度比普通近端梯度快一个数量级。

强化学习策略优化

阶段:策略梯度优化 / 智能体训练

解决的问题:强化学习中策略参数更新有高方差,普通 SGD 容易受噪声干扰;Nesterov 的前瞻梯度能在高噪声环境中更稳健地累积有效更新方向。

具体案例:在连续控制任务(如机器人关节控制)中,使用 Nesterov 加速的策略梯度方法训练 PPO 算法,在相同采样预算下达到了更高的平均回报,且训练曲线方差更小。

Python 演示

python35 行
import numpy as np  def nesterov(A, theta0, lr=0.1, mu=0.9, num_iter=200):    theta = theta0.copy()    v = np.zeros_like(theta)    losses = []    for _ in range(num_iter):        lookahead = theta + mu * v        g = A.dot(lookahead)        v = mu * v - lr * g        theta = theta + v        losses.append(0.5 * theta.dot(A.dot(theta)))    return theta, losses  def momentum(A, theta0, lr=0.1, mu=0.9, num_iter=200):    theta = theta0.copy()    v = np.zeros_like(theta)    losses = []    for _ in range(num_iter):        g = A.dot(theta)        v = mu * v - lr * g        theta = theta + v        losses.append(0.5 * theta.dot(A.dot(theta)))    return theta, losses  if __name__ == "__main__":    A = np.array([[1.0, 0.0], [0.0, 100.0]])    theta0 = np.array([1.0, 1.0])    theta_n, loss_n = nesterov(A, theta0)    theta_m, loss_m = momentum(A, theta0)    print("Momentum final loss:", loss_m[-1])    print("Nesterov final loss:", loss_n[-1])
目的:在病态二次函数上对比标准动量法与 Nesterov 的收敛速度,展示前瞻梯度带来的加速效果。
  1. A = np.array([[1.0, 0.0], [0.0, 100.0]])定义病态二次函数:y 方向曲率是 x 方向的 100 倍,模拟“窄长峡谷”地形
  2. lookahead = theta + mu * v先探一步:在假想位置计算梯度,而不是当前位置
  3. g = A.dot(lookahead)在前瞻点处求梯度,相当于提前观察未来地形
  4. v = mu * v - lr * g用前瞻梯度修正速度,方向不准的惯性被提前削弱
  5. theta = theta + v落脚:参数沿修正后的速度方向前进
  6. losses.append(0.5 * theta.dot(A.dot(theta)))记录每次迭代后的真实损失,用于观察收敛速度

常见误区

误区“Nesterov 不就比动量法多了一个符号吗?把梯度位置挪了一小步,应该没啥大区别。”

正解这一小步是本质性的。它把一阶方法在凸光滑问题上的最坏收敛速率从 O(1/k) 提升到 O(1/k²),达到了理论最优。就像跑步时提前看前方一步,虽然只是“动了一下眼睛”,却完全改变了避障策略。在病态曲率问题上,两者误差可以差一个数量级。

为何常见:从公式形态上看,Nesterov 只比动量法多了一个 "+γv" 出现在梯度自变量里,容易被当作符号层面的小修正,忽视了它背后的理论跳跃。

误区“Nesterov 应该是先用动量法走一步,再在新位置算梯度,最后再更新一次吧?”

正解Nesterov 并不真正移动参数,它只是在“假想位置”上算梯度,参数依然从原位置一次更新完成。前瞻点 θ+γv 是假设“继续滑行”会到达的位置,并非真实落点。等价重写虽然看起来像两步,但数学上是单步更新。

为何常见:等价重参数化把前瞻点写成 θ+γ(θ-θ_prev),很像“先走一步再到新位置”,导致初学者误解为两阶段更新。

误区“既然 Nesterov 有最优性保证,那任何场景下换用 Nesterov 都应该更快。”

正解O(1/k²) 的保证只针对凸光滑问题。在深度学习的非凸损失面上,Nesterov 没有严格的收敛保证;如果学习率或动量系数没调好,它也可能振荡甚至发散。实际使用时仍需要配合学习率调度和超参数调优。

为何常见:论文中展示的大多是凸问题或标准测试集上的加速效果,容易让人忽略适用条件和调参成本。

误区“要在前瞻位置算梯度,那不就得把当前参数复制一份吗?大模型根本用不起。”

正解通过状态合并的等价更新公式,只需维护一份参数和速度(或历史位置差),完全不需要额外复制参数。PyTorch 的 nesterov=True 就是在单个参数张量上完成的,没有额外显存开销。

为何常见:“在假想位置算梯度”这句话容易被字面理解为真的要多存一份参数,没看到后面消去速度变量的代数技巧。

误区“惯性越大加速越猛,把 γ 设成 0.99 甚至 0.999,肯定收敛更快。”

正解γ 过大会让前瞻点飘得太远,速度更新可能过度冲过头,尤其在非凸曲面上容易发散。γ 还与学习率互相耦合:学习率大时,γ 要保守;γ 大时,学习率要小。一般从 γ=0.9 起步,在验证集上观察振荡情况再逐步调整。

为何常见:“动量=惯性”的日常直觉让人以为大惯性一定带来大加速,忽略了优化算法中稳定性和速度需要平衡。

面试题

Q1. Nesterov 加速梯度法与标准动量法的核心区别是什么?

单选题 · mid

  • A.在动量基础上利用二阶导数信息
  • B.在动量基础上先看未来位置再算梯度← 正确答案
  • C.用更大的学习率替代动量系数
  • D.对每步梯度做归一化处理

答案:B。Nesterov 与动量法的唯一关键区别在于梯度的计算位置:动量法在当前位置算梯度,Nesterov 在前瞻点 θ+γv 处算梯度。它并不使用二阶导数,也不改变学习率的本质作用,更不是梯度归一化。

Q2. 在 L-光滑凸函数上,Nesterov 加速梯度法的最坏收敛速率是?

单选题 · hard

  • A.误差随次数以 O(1/k) 下降
  • B.误差随次数以 O(1/k²) 下降← 正确答案
  • C.误差随次数以 O(1/log k) 下降
  • D.误差随次数以 O(1/√k) 下降

答案:B。Nesterov 在凸光滑条件下达到 O(1/k²),而标准梯度下降只有 O(1/k)。可以理解为同样的迭代次数下,误差上界以“平方倒数”的速度收缩,这也是一阶方法家族的理论最优速率。

Q3. Nesterov 加速梯度法中的前瞻点在哪个位置计算梯度?

单选题 · easy

  • A.就在当前参数位置计算
  • B.在历史平均位置计算
  • C.在按惯性继续前行的位置计算← 正确答案
  • D.在随机扰动的位置计算

答案:C。前瞻点 = θ + γv,意思是“如果完全不刹车、继续按当前惯性滑行,下一步会到达的位置”。Nesterov 在这个假想位置求梯度,从而提前感知地形变化。

Q4. 关于 Nesterov 加速梯度法,下列说法正确的有?

多选题 · extreme

  • A.一阶凸光滑优化中达到理论最优速率← 正确答案
  • B.深度学习中必定严格优于普通动量
  • C.只用一阶梯度信息无需计算二阶导数← 正确答案
  • D.用前瞻位置梯度提前修正速度方向← 正确答案

答案:ACD。A 正确,在一阶凸光滑优化中 O(1/k²) 是最优可能;B 错误,非凸问题没有严格理论保证,且受超参数影响;C 正确,Nesterov 始终只使用一阶梯度;D 正确,这正是“前瞻梯度”的作用。

Q5. 动量系数 γ 的主要作用是什么?

单选题 · easy

  • A.控制梯度裁剪的强度大小
  • B.控制历史速度的保留程度← 正确答案
  • C.决定训练批次的数据量
  • D.调整损失函数的平滑度

答案:B。γ 决定上一轮速度 v_{t-1} 被保留多少,也决定前瞻点“探”得多远。γ 越大历史速度保留越多、前瞻越远,但不代表越大越好。

Q6. Nesterov 在工程中如何避免额外参数副本造成的显存开销?

单选题 · mid

  • A.扩大显存并保留双份参数副本
  • B.使用状态合并的等价更新公式← 正确答案
  • C.强制关闭网络的反向传播
  • D.将训练参数转为低精度存储

答案:B。通过状态合并,用“位置差 θ_k - θ_{k-1}”替代速度变量,整个更新公式可以合并为一行,不需要额外维护前瞻参数的副本。PyTorch 的 nesterov=True 正是这样实现的。

Q7. 关于 Nesterov 算法的收敛速率 O(1/k²),正确的理解是?

单选题 · mid

  • A.每增加一次迭代误差变为四分之一
  • B.误差上界随次数的平方倒数衰减← 正确答案
  • C.整体训练时间也以平方速率减少
  • D.该保证对任意非凸函数均成立

答案:B。O(1/k²) 指误差上界以迭代次数的平方倒数衰减,等价说法是“k 翻倍时误差约降为原来的四分之一”。A 错在“每增加一次”;C 混淆误差与时间;D 错误,该保证针对凸光滑函数。

Q8. 在 Nesterov 更新中,速度向量 v 的更新方向是?

单选题 · mid

  • A.始终沿损失上升的方向前进
  • B.使用前瞻点处的负梯度方向← 正确答案
  • C.使用随机噪声的方向确定
  • D.使用一阶动量平均值方向

答案:B。Nesterov 的速度更新为 v = γv_{t-1} - η∇f(lookahead),其中 η 前的负号表示沿前瞻点负梯度方向修正。动量法的衰减项 γv_{t-1} 只保留惯性,真正改变方向的力来自前瞻点的负梯度。

Q9. 关于 Nesterov 加速梯度法,下列说法不正确的是?

单选题 · mid

  • A.在凸光滑问题有 O(1/k²) 理论保证
  • B.计算复杂度与标准动量法同阶
  • C.深度学习使用 NAG 一定有更低的精度损失← 正确答案
  • D.前瞻位置可由当前位置和速度生成

答案:C。A 正确;B 正确,每步仍只算一次梯度,复杂度同阶;C 错误,“一定”太绝对,深度学习非凸场景下没有严格保证,效果依赖调参;D 正确,前瞻点就是 θ+γv。

Q10. 关于 Nesterov 与动量法的直觉理解,正确的有?

多选题 · easy

  • A.动量法像凭惯性冲的跑者← 正确答案
  • B.Nesterov 会先探身再看路← 正确答案
  • C.两者更新公式完全相同
  • D.前瞻梯度能提前感知地形变化← 正确答案

答案:ABD。A 和 B 是两种方法的经典比喻;C 错误,两者公式不一样,差别恰恰在梯度计算位置;D 正确,前瞻梯度的意义就是提前预判,避免冲过头。