一句话定义
Warmup(预热)是训练开局把学习率从极小值慢慢升到设定峰值;Cosine Decay(余弦退火)是在此之后按余弦曲线平滑地把学习率降回接近零。两者拼起来,就是一条"先爬坡、后下坡"的学习率曲线。
为什么开头要慢慢升
学习率(learning rate)决定每次参数更新的步子迈多大。模型刚初始化时参数接近随机,梯度方向很吵,有效信息很弱。如果第一步就迈大步,就像让一个刚睡醒的人立刻百米冲刺——轻则跑歪,重则直接摔倒:损失(loss)瞬间飙高,甚至变成 NaN,训练再也救不回来。Warmup 的作用就是先小步试探,等模型对数据有了初步"手感",再逐步放大步长,进入高效训练区间。
为什么后期要降下来
到了训练后期,模型已经接近一个不错的解,这时大步子只会让参数在附近来回横跳,损失降不下去。所以要退火:把学习率越调越小,让参数稳稳落进低点。余弦曲线的妙处是两头平、中间陡——开头降得慢,还留有余力探索;临近结束降得极慢,几乎像在"研磨",收敛更稳。常见写法是 η_t = η_min + ½(η_max − η_min)(1 + cos(tπ/T)),t 是当前步数,T 是总步数。
和相邻概念的区别
| 概念 | 方向 | 特点 |
|---|---|---|
| Warmup | 升 | 只发生在开头,一般只占总步数的很小比例 |
| Cosine Decay | 降 | 平滑连续,末尾几乎不动 |
| Step Decay | 降 | 每隔固定轮数台阶式砍半,简单但突变 |
| 优化器自适应(如 Adam) | — | 调的是每个参数各自的相对步长 |
需要强调的是:Adam 这类优化器管的是"每个参数的步长怎么分配",而 Warmup 和退火管的是全局基准步长,二者是叠加关系,不冲突。另外,余弦退火还有"带重启"(Warm Restarts)的变体,会周期性地把学习率拉回高位再降,相当于多冲几次,适合配合快照集成使用;单次余弦则只降一回。
对从业者的意义
Transformer 类模型、大 batch(批大小)训练、以及大模型微调,Warmup 基本是默认配置——不加时早期发散的概率明显更高。调参时峰值学习率和预热长度是耦合的:想把峰值调大,通常得配更长的预热。具体默认值各家框架不同,以所用框架的官方文档为准。
对普通人的意义
任何需要长期投入的事都是同一条曲线:新项目先小步试错,别一上来就 all in;跑顺了再加速;收尾阶段放慢节奏做打磨和复盘。反过来,一上来就全力冲刺、最后又草草收场,往往是最容易翻车的节奏。
