35

Cosine decay——为什么后期要减速

阅读约 3 分钟第 35/60 课

Warmup 把学习率从零升到峰值。然后呢?一直保持峰值到训练结束?

不行。训练后期,参数已经接近最优位置了。如果还是用大学习率,参数会在最优点附近来回跳——跳过去,跳回来,永远定不下来。

需要在训练后期逐渐减小学习率,让步子越来越小,最终在最优点附近稳住。

Cosine decay

Cosine decay 是目前最常用的学习率衰减方式。学习率按照余弦函数的形状从峰值平滑下降到接近零:

学习率(t) = η_min + (η_max − η_min) × ½ × (1 + cos(π × t / T))

η_max 是峰值学习率,η_min 是最终学习率(通常是峰值的十分之一或更小),t 是当前步数,T 是总训练步数。

这个曲线的形状是:

峰值 ──╮
       │ 一开始下降慢(余弦曲线上方是平的)
       │
       │ 中间加速下降
       │
       │ 接近结尾又放慢(余弦曲线下方也是平的)
       ╰── 最终值

为什么不线性衰减(匀速下降)?因为余弦衰减在训练中期保持较高的学习率更久——让模型有更多的高效训练时间——然后在后期迅速降低,精细调整。

完整的学习率曲线

把 warmup 和 cosine decay 合在一起,Sophia 的学习率随训练步数的变化是:

       学习率
         ↑
  0.0003 │      ╭────────────────╮
         │     ╱                  ╲
         │    ╱                    ╲
         │   ╱                      ╲
         │  ╱                        ╲
  0.00003│ ╱                          ╲
         │╱                            ╲___
         └──────────────────────────────────→ 训练步数
         warmup     主训练阶段        衰减

三个阶段:快速上升(warmup)→ 平稳的高学习率(主训练)→ 缓慢下降(cosine decay)。

这条曲线完全预先确定——在训练开始之前就设好了,不会根据 loss 的变化调整。这种不依赖训练状态的固定日程(schedule)是目前大模型训练的标准做法。

下一章节来看训练中的另一个节奏参数:每一步看多少数据。