训练两端的两个问题
早期步骤问题:新权重无法承受大步长
在第 0 步,每个权重都从接近零分布中采样得到的小随机数开始。激活值接近零。梯度几乎不包含关于最终解的信息。对这些梯度应用峰值学习率,模型会从初始化位置跳到远离有意义结构的方向。
ANDREA-120M v1 犯了这个错误。 没有预热。第 1 步对新初始化的权重使用了 lr = 0.0003。结果:模型在几百步内落入糟糕的参数盆地。损失数值看起来合理;到第 80K 步时,样本开始出现重复循环且再也无法恢复。
后期步骤问题:大步长无法打磨解
到第 100K 步时,模型已掌握粗粒度结构。此时梯度携带的是细粒度信号:哪些 token 权重需要微调,哪个注意力头需要轻微再平衡。在这一阶段使用峰值学习率会使每一次细微调整都过冲,在最优值附近振荡而无法收敛。
两个问题,分别位于训练的两端。单一调度,覆盖两个区间:先温和上升,再平滑下降。
线性预热:前 2000 步
公式
ANDREA-120M v2 在前 2000 步采用线性预热:
lr(t) = lr_scheduled(t) * min(1, (t + 1) / warmup_steps)
其中 t 为步数(0 起始),warmup_steps = 2000,lr_scheduled(t) 是忽略 warmup 的余弦调度值。
公式解读:
- 当 t = 0 时:lr = lr_scheduled(0) min(1, 1/2000) = lr_scheduled(0) 0.0005。第一步极小。
- 在 t = 1000 时:lr = lr_scheduled(1000) min(1, 1001/2000) = lr_scheduled(1000) 0.5。半强度。
- 在 t = 2000 时:lr = lr_scheduled(2000) min(1, 2001/2000) = lr_scheduled(2000) 1.0。全强度。
- 在 t > 2000 时:clamp 将乘数保持为 1,warmup 不再产生影响,仅由 cosine decay 接管。
从零开始的线性 ramp 让模型有 2000 步时间形成粗略表示,之后 AdamW 和梯度裁剪才会看到全强度更新。到第 2000 步时,权重已漂移到一定程度,峰值 lr 不再将其推入不良 basin。
计算 Warmup 期间的 LR
Warmup 后的余弦衰减
曲线
Warmup 在第 2000 步结束,之后学习率按余弦曲线从峰值下降至零:
lr(t) = lr_min + (lr_peak - lr_min) 0.5 (1 + cos(pi * progress))
其中 progress = (t - warmup_steps) / (total_steps - warmup_steps)。当 progress = 0(刚结束 warmup)时,cos(0) = 1,lr = peak。当 progress = 1(最后一步)时,cos(pi) = -1,lr = lr_min(通常为 0 或一个极小的下限)。
为什么选择余弦衰减,而不是线性或指数衰减?
余弦衰减在开始时下降缓慢(在峰值附近曲线几乎平坦),在中间阶段加速下降,最后再次放缓至零。这带来三点好处:
1. 峰值附近有平台期。 warmup 结束后的一段步数仍能保持接近完整的 lr,让模型有较长时间的高学习率来构建表示。
2. 中间阶段过渡平滑。 没有突兀的跳变需要 AdamW 去适应。
3. 接近零的平台期。 最终步骤的 lr 极小,用于精细打磨,类似于模拟退火。
ANDREA-120M 总共训练 200K 步,其中 198K 步处于余弦衰减阶段,之前有 2000 步的 warmup。
ANDREA-12M 在第 25K 步的 Warm Restart
平台期
ANDREA-12M 使用余弦衰减从 lr = 0.0004 的峰值训练了 60K 步。在第 22K 步左右,EMA 损失停滞在 ~2.4。余弦衰减已将 lr 降至 ~0.00015。Bandit 持续提供多样化数据,但模型不再提升。
诊断:lr 已衰减至过低水平,导致模型无法逃离当前盆地。Hermes 数据即将进入课程(第 25K 步),将带来 590K 条新对话。模型需要能量来吸收此次数据冲击。
重启
在第 25K 步,调度执行了一次热重启:将 lr 从已衰减的 0.00015 突然提升回原始峰值 0.0004,随后在剩余步数中继续余弦衰减。
Loshchilov & Hutter (2017) 将此技术命名为“SGDR”(带热重启的随机梯度下降)。其直觉是:高 lr 提供足够动能,使模型逃离局部盆地并探索相邻区域;随后的余弦衰减则重新退火至更优盆地。
Outcome. Loss EMA 从 2.40 降至 2.10,之后 10K 步继续下降。模型在第 43.6K 步发布,SMMA loss 为 2.0,显示出连贯的 Q&A 轮次结构。
ANDREA-120M v2 选择不使用 warm restarts:由于有 200K 步可用且参数量更大,平滑单调衰减带来了更稳定的收敛。Restart 仅在训练步数较短且平台期与已知数据分布偏移重合时效果最佳。
诊断 v1 的失败
实践中的调度选择
相邻活动
LR 调度的三个关联主题:
- 活动 10:AdamW。 预热让 AdamW 的偏差校正有时间稳定。没有预热时,步骤 1 的 10 倍放大会放大梯度中的任何噪声;有了预热,放大倍数作用于真实信号。
- 活动 12:梯度裁剪。 裁剪在 AdamW 之前将梯度 L2 范数限制在 1.0。预热抑制 lr;裁剪抑制 g。两者共同确保即使在易受冲击的课程中,早期步骤也能保持安全。
- 活动 22:检查点。 热重启需要从检查点加载优化器状态(m、v、步骤计数器),然后在运行中修改调度。ANDREA-12M 在步骤 25K 的重启演示了这一点;它花了两次尝试才正确实现状态加载逻辑。
调度、优化器和裁剪构成一个稳定性三角形。去掉任意一个顶点,就会看到 ANDREA 重现 v1 的崩溃。