普通梯度下降只看脚下的坡度。每一步都是 w ← w − η ∇L(w),除此之外什么都不管。简单是简单,但它健忘:地面一平,它就停住。
![]()
动量(Momentum)用一个额外的数字解决这个问题——给每个权重配一份"速度",记住此前滚过的那些坡度。下面这些数字,全部来自实际运行更新规则的结果。
先看那个坑
取一个权重,配一条有两个凹陷的损失曲线:L(w) = 0.12 (w − 2.5)² − 0.55 · exp(−(w + 1)² / 0.12)。
从 A 点出发,w = −3.5,此处损失为 4.32。w = −0.904 处有一个浅坑 B(损失 0.881),真正的最小值 C 在 w = 2.5(损失 0)。B 和 C 之间只隔着一个比 B 高 0.13 的小凸起。
普通梯度下降取 η = 0.1,在陡坡上步子很大,接近 B 时步子越来越小,第 21 步抵达 B。B 点梯度为零,此后每一步都是零。第 50 步、第 100 步,它还待在 B,损失停在 0.88。
梯度为零,学习就停了。这就是普通梯度下降的死穴。
加上速度之后
动量保留一个速度 v,并沿着它移动:v_t = β v_(t−1) + ∇L(w_t),w_(t+1) = w_t − η v_t。
取 β = 0.9,每一步保留 90% 的旧速度,再加上新的梯度。这是 PyTorch 采用的形式;讲义里常写成 v = βv + (1 − β)∇L,区别只是对学习率做了缩放。
同样从 A 出发,同样 η = 0.1。到第 6 步时球已接近 B,速度约为 6。B 点梯度是零,但速度不是零,球继续往前:第 7 步越过凸起,一路冲到 w = 4.71,再摆回来,始终没回到凸起处,第 89 步稳定在 C。
速度记住了什么
把速度展开,它是此前所有梯度的加权和:v_t = ∇L_t + β ∇L_(t−1) + β² ∇L_(t−2) + …
最新梯度全额计入,前一步算 90%,再往前 81%、73%、66%……权重加起来等于 1/(1 − β) = 10,也就是动量大约记住十步。若 β = 0.1,权重变成 1、0.1、0.01,几乎立刻遗忘。实践中 β 通常在 0.9 左右。
这份记忆会做两件不同的事:
- 梯度同号时(+1、+1、+1……),它们叠加,v 从 1 涨到 1.9、2.71、3.44……趋向 1/(1 − β) = 10,步子最多放大十倍。
- 梯度变号时(+1、−1、+1……),它们互相抵消,v 走成 1、−0.1、0.91、−0.18、0.84、−0.25……稳定在约 ±1/(1 + β) ≈ 0.53,步子保持很小。
一条窄谷
换成两个权重,一条横向陡、纵向几乎平的谷:L = ½(w₁² + 50 w₂²),从 (−4, 1) 出发,此处损失 33。取 η = 0.015,数一数损失降到 0.001 以下需要多少步:
- 普通梯度下降:298 步。调大学习率也没用——η = 0.045 时,横向每一步被乘以 1 − 0.045 · 50 = −1.25,直接发散。它只能沿着谷底慢慢爬。
- 动量(β = 0.9):73 步。纵向梯度一直同号,速度在那里积累起来;但横向会冲过头,左右来回摆。
Nesterov:先看一眼再迈步
Nesterov 动量只改了一件事:它取的是速度即将把权重带到的那一点的梯度,而不是权重当前所在点的梯度。v_t = β v_(t−1) + ∇L(w_t − η β v_(t−1))。
如果那个前瞻点已经在上坡,那里的梯度就指向回程,步子会在冲过头之前先刹住。同一条窄谷上,Nesterov 只需 18 步,几乎没有摆动。
298、73、18,三个数字摆在一起,差别就在"记不记得"和"看不看前面"。
在 PyTorch 里试一下
网络里每个权重都有自己的速度,形状与权重相同。PyTorch 里就是一行:
opt = torch.optim.SGD(model.parameters(), lr=0.015, momentum=0.9, nesterov=True)
速度本身,用变号的梯度跑一遍:v 从 0.0 开始,依次取 g 为 1、−1、1、−1、1,每次 v = 0.9 * v + g,输出是 [1.0, −0.1, 0.91, −0.18, 0.84]。把每个 g 都换成 1,v 就会一路爬向 10。
普通梯度下降没有记忆,坡度为零的地方它就停下,哪怕那只是个浅坑。动量保留速度,沿速度迈步,于是能滚过平地和小凸起。速度是过去梯度的加权和,β = 0.9 时约等于十步记忆;梯度同号就叠加,最多放大十倍,变号就抵消,这正是动量能沿谷加速的原因。Nesterov 在前瞻点取梯度,所以能在冲过头之前刹车——窄谷上的 298 步、73 步、18 步,就是这条线索的完整答案。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.