跳到主内容

什么是动量?为什么它能加速模型收敛

2026-10-06 发布 来源:我告诉你AI导航 阅读

训练 AI 模型时,损失曲线常出现一种让人着急的形态:整体在往下走,但每几步就左右抖一下,落到某个区间后几乎不动。调小学习率,下降更慢;调大,抖动更剧烈。动量(Momentum)就是为这类情况准备的优化手段,它在参数更新的每一步里带...

训练 AI 模型时,损失曲线常出现一种让人着急的形态:整体在往下走,但每几步就左右抖一下,落到某个区间后几乎不动。调小学习率,下降更慢;调大,抖动更剧烈。动量(Momentum)就是为这类情况准备的优化手段,它在参数更新的每一步里带上一份历史方向的记忆。本文讲清三件事:动量在更新规则里到底改了什么、它凭什么能加速、以及在哪些情况下反而让训练变糟。

它替换掉的是只看眼前一步的走法

普通梯度下降的规则很朴素:算出当前点的梯度,朝反方向走一小步,步长由学习率决定。这条规则藏着一个假设——当前位置的梯度足以代表接下来一段路的方向。在光滑的碗状损失面上,这个假设基本成立;真实的损失面却常常坑洼不平,局部梯度受噪声和地形影响很大,单步给出的方向只是此处最陡,未必通向低点。动量改的正是这一层:这一步往哪走,由过去若干步的方向按指数衰减加权平均决定,当前梯度只占其中一小份。短期噪声被压平,反复出现的方向被放大,路径因此变得连贯。

三种地形下的差别

损失面形态普通梯度下降带动量差别从哪来
狭长山谷,一侧陡一侧缓沿陡的方向来回横跳,往谷底推进很慢横向分量正负相消,纵向分量同向累加平均把摆动抵消,把一致的方向留下
大片平坦区梯度接近零,几乎原地不动带着已积累的速度继续滑行速度有记忆,不依赖当下梯度的大小
陡峭沟壑容易一步跨过谷底再折回冲过头更明显,震荡反而加剧惯性不区分该不该快

表里第三行最容易被忽略。动量对地形没有判断力,它只负责让方向保持连续,不负责判断该不该减速。同一份惯性放在缓坡上是助力,放在陡沟里就成了越界。

惯性系数在调节什么

常写作 β 的这个系数,决定历史方向保留多少。取 0.9,意味着这一步的方向里约九成来自过去、一成来自当前梯度,等效记忆长度大致十步。取值越大,记忆越长:穿过平坦区、压住高频震荡的能力越强,代价是对方向反转的响应变迟钝,靠近低点时更容易冲过去。取值太小则退化成普通梯度下降,加速效果几乎消失。它和学习率是两个独立旋钮,一个管方向有多稳,一个管一步走多远。常见的调参失误是把两者一起放大,结果既冲过头又发散。

小球滚下山这个比喻偏在哪

用滚球解释动量很直观:球带着速度,下坡越滚越快。这个比喻有一处会误导人。真实的球受重力约束,下坡加速是物理必然;参数更新里的速度只是梯度的累积,它不知道低点在哪,也不会自己刹车。把动量想成一块有惯性的滑块,比想成一颗会找路的球更准确:滑块只维持运动连续,方向对不对仍然取决于梯度,停不停取决于学习率怎么安排。

它的能力边界:什么时候反而添乱

动量有清楚的失效场景。接近最优点时,历史速度与当下需要的方向相反,参数冲过目标再折回,损失在低点附近上下振荡,这时通常要配合学习率调度把步子收小。梯度方向频繁反转的任务里,历史平均会把新方向拖住,响应明显变慢。学习率本就偏大的设置下,叠加动量更容易发散。还有一种更隐蔽的情况:训练后期梯度噪声很大,动量把噪声一并累积,模型在几个相近的解之间来回跳。它也无法改变病态曲率本身,只是缓解表面症状。

放回优化器的版图里看

动量负责方向平滑,自适应方法负责给每个参数单独定步长,两者处理的是不同层面的问题,所以主流优化器常把两套机制叠在一起。要不要开动量,可以看两个信号:损失曲线是否呈锯齿状高频抖动,平坦段是否长时间停滞。曲线本来就平滑下降时,加动量带来的好处有限,还多出一个要调的超参。判断更新方向好坏的标准由损失函数给出,这一点没变,动量只是让朝那个方向走的过程更稳。

速查:动量

  • 它改什么:用历史方向的加权平均代替单步梯度
  • 它为什么快:横向摆动相消,纵向分量累加
  • 系数常见取 0.9,等效记忆约十步
  • 失效场景:低点附近冲过头、方向频繁反转、学习率本就偏大
  • 与自适应方法不冲突,多数优化器会一起用

反馈页面信息

请描述需要更正的地方,页面标题和网址会自动附上。

也可以发邮件至 [email protected]