English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

访客
1 / ?
返回课程列表

训练两端的两个问题

早期步骤问题:新权重无法承受大步长

在第 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 = 2000lr_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

ANDREA-120M v2 使用 `lr_scheduled = 0.0003`(峰值)与 `warmup_steps = 2000`。在 warmup 期间忽略 cosine decay(假设 `lr_scheduled` 保持不变)。计算以下步数的实际学习率:(a) step 0,(b) step 500,(c) step 2000,(d) step 5000。展示你的算术过程。

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。


LR Warmup & Cosine Decay

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 的失败

ANDREA-120M v1 从第 1 步开始使用 `lr = 0.0003`,没有 warmup。到第 80K 步时,样本输出为 `region region region region`。请从机制上解释:逐步说明在 `lr = 0.0003` 下,新初始化权重矩阵在第 1 到 100 步会发生什么,与 2000 步 warmup 的情况对比。为什么无 warmup 的路径会落入不良 basin?

实践中的调度选择

如果你在噪声数据集上训练一个 120M 模型,总步数仅为 50K,你会使用比 ANDREA-120M v2 的 2000 步更长还是更短的 warmup?请用一个机制性论据说明理由。

相邻活动

LR 调度的三个关联主题:


- 活动 10:AdamW。 预热让 AdamW 的偏差校正有时间稳定。没有预热时,步骤 1 的 10 倍放大会放大梯度中的任何噪声;有了预热,放大倍数作用于真实信号。

- 活动 12:梯度裁剪。 裁剪在 AdamW 之前将梯度 L2 范数限制在 1.0。预热抑制 lr;裁剪抑制 g。两者共同确保即使在易受冲击的课程中,早期步骤也能保持安全。

- 活动 22:检查点。 热重启需要从检查点加载优化器状态(m、v、步骤计数器),然后在运行中修改调度。ANDREA-12M 在步骤 25K 的重启演示了这一点;它花了两次尝试才正确实现状态加载逻辑。


调度、优化器和裁剪构成一个稳定性三角形。去掉任意一个顶点,就会看到 ANDREA 重现 v1 的崩溃。