优化器赛跑
同一座山,同一个起点。看六种优化器,如何走出不同的下山路线。
损失地形
起伏的山地谷底下山轨迹拖动旋转 · 滚轮缩放 · 点击换起点
此刻
损失曲线
按下「开始赛跑」,观察六条路线的变化
六种走法
差别,只在这一步怎么迈。
- SGD只看脚下坡度:这一步 = 学习率 × 坡度。坡缓就挪不动,坡陡就跳得远
- 动量这一步 = 0.9 × 上一步 + 学习率 × 坡度。同一方向连着走会越来越快,能冲过小坑,也收不住脚
- Nesterov先顺着惯性预走一步,在预走到的位置摸坡度再修正,比动量少冲过头
- AdaGrad每个方向各自除以「历史坡度平方的累计」的平方根:坡度小的方向步子被放大,但累计只增不减,越走越小步
- RMSProp和 AdaGrad 一样按方向缩放,但历史只记最近一段(指数遗忘):步子不会越来越小,也就不会自己停下来
- AdamRMSProp 的按方向缩放 + 动量的方向平均,再修正开头几步的偏差。步长大致只和学习率一个量级,不看坡度绝对大小
动手试一试
- 同一座山、同一个起点、同一个学习率六个小球只在「怎么迈步」上不同;按「开始赛跑」它们同时出发,排行榜里可以勾掉不想看的
- 看三件事谁先到谷底、谁被卡住、谁飞出去。排行榜按到达先后排,下面的曲线是每个小球每一步的高度
- 换地形再比山地看谁能冲过小坑,峡谷看谁不打摆子,鞍点看谁溜得下去,平原看谁走得动;名次每片地形都不一样
留意这些现象
- Adam 不是万能山地从起点 p2 出发,只有动量冲过小坑到了谷底(18 步进谷);Adam、RMSProp、Nesterov、AdaGrad、SGD 全停在局部极小值
- 同一个学习率,对每种走法意思不一样SGD 的步子 = 学习率 × 坡度,Adam 的步子只和学习率一个量级。峡谷里把学习率拧到 0.4:SGD 每一步都跳到对面谷壁,300 步停不下来,动量也一样;Adam 21 步进谷底
- 快的也有代价平原上带惯性的走得快(SGD 300 步只挪了 0.9),可冲下悬崖收不住脚,动量和 Nesterov 直接飞出地图;RMSProp 到了谷底还在抖,因为它的步长不随坡度变小,真实训练要配学习率衰减
优化器决定的是步子怎么迈,不是山长什么样:没有哪种走法在每片地形都最快,Adam 也会掉进小坑。
文字版:优化器赛跑在做什么
同一座山、同一个起点、同一个学习率,六种优化器会走出完全不同的路线。它们的差别只在一件事上:拿到脚下的坡度之后,这一步具体怎么迈。这一页让六个小球同时出发,你能直接看到谁快、谁震荡、谁半路停住。
画面上正在发生什么
四种地形各自考察一种毛病。「狭长的峡谷」看左右摆动:SGD 会在两侧壁之间来回横跳,沿谷底方向前进得很慢,而带动量的方法把横向的来回抵消掉、把纵向的前进累加起来,明显更快。
「鞍点」这块地形最能说明问题:那里的坡度接近零,但它不是谷底,而是一个方向往上、另一个方向往下的马鞍形。SGD 到了这里几乎停住,带动量或做了自适应缩放的方法能继续往下走。高维空间里鞍点远比局部极小值常见,这也是 Adam 这类方法流行的原因之一。
还要注意 AdaGrad:它按方向缩放步长,但累计的是全部历史坡度的平方,这个量只增不减,于是步子越走越小,最后自己停下来。RMSProp 把「全部历史」改成「最近一段」,就修好了这个毛病。
什么时候它会骗你
- 这一页所有优化器共用一个学习率,实际调参不是这样。这是为了看清机制差异而做的控制。真实使用时 SGD 和 Adam 的合适学习率往往差一个数量级,直接套用同一个值对谁都不公平。
- Adam 收敛快,不等于最终效果好。大量实践和研究都观察到:Adam 到达低损失更快,但调好的 SGD + 动量在一些任务上泛化更好。「哪个优化器最好」没有通用答案,取决于任务、模型和调参预算。
- 二维地形和真实训练不是一回事。这里是固定的静态地形,而真实训练里每个小批量给出的梯度都带噪声,地形本身也随批次变化。这一页讲的是更新规则的差异,不是性能排名。
常见问题
- Adam 到底做了什么?
- 两件事叠加:像动量那样对梯度做指数移动平均(决定方向),像 RMSProp 那样按每个方向的梯度平方的移动平均来缩放步长(决定每个方向走多远),再对开头几步做偏差修正。结果是步长大致只和学习率一个量级,对梯度的绝对大小不敏感。
- 优化器该怎么选?
- 默认从 Adam 或 AdamW 开始,它对学习率不那么敏感,省调参时间。如果有充足预算调参、且追求最后一点泛化性能,可以试 SGD + 动量。计算机视觉任务里后者仍然常见,语言模型训练则几乎都用 AdamW。
- 什么是鞍点,为什么它比局部极小值更麻烦?
- 鞍点是梯度为零、但沿某些方向往上、沿另一些方向往下的位置。参数一多,一个临界点的所有方向都朝上(真正的局部极小)的概率就变得极低,所以高维空间里绝大多数梯度为零的地方是鞍点。普通梯度下降在这里几乎停住,带动量或自适应步长的方法更容易脱身。
本页地形与六种更新规则均在页面内实时计算,共用同一学习率是为便于对照,不构成优化器性能排名。