GPT-2 124M 训练损失尖峰 | AI生成和翻译

Home 2026.06

======================================================================== GPT-2 124M github-code — 损失分析(步骤 262k–280k) ========================================================================

步骤    训练损失    验证损失   Δ 训练  备注 ------------------------------------------------------------------------   262000      3.0952      3.0265   263000      3.3459      3.2922    +0.251   264000      3.6089      3.3886    +0.263   265000      3.8677      3.7542    +0.259   266000      3.9365      3.8930    +0.069   267000      5.0157      5.0602    +1.079  <<< 尖峰   268000      5.0102      5.1968    -0.005  <<< 尖峰   269000      4.6592      4.7792    -0.351   270000      4.2488      4.2854    -0.410   271000      3.9500      3.9416    -0.299   272000      3.7400      3.8020    -0.210   273000      3.6361      3.5530    -0.104   274000      3.4293      3.5930    -0.207   275000      3.5167      3.6213    +0.087   276000      3.6871      3.5147    +0.170   277000      3.7307      3.6379    +0.044   278000      3.4410      3.4339    -0.290   279000      4.4294      4.6838    +0.988  <<< 尖峰   280000      4.2341      4.3662    -0.195

已处理 tokens:~9.2B / 14B 计划(65.6%)

— 关键发现 —

  1. 损失在上升,而非下降(步骤 262k–266k) 在第一个尖峰之前,训练损失在短短 4000 步内从 3.10 攀升至 3.94。 增幅达 +27%。在训练的这一阶段(已完成 60% 以上),损失本应持平或缓慢下降。 在大尖峰出现之前,已经出了某种问题。

  2. 两个主要损失尖峰
    • 尖峰1 在步骤 267k–268k:损失从 3.94 跃升至 5.02(+1.08)。 验证损失达到 5.20。这是 28% 的单步跳跃 —— 对于此刻的余弦 LR 调度来说极其异常。
    • 尖峰2 在步骤 279k–280k:损失从 3.44 跃升至 4.43(+0.99)。 又是大约 29% 的跳跃。深度不及尖峰1,但模式相同。
  3. 尖峰之间的缓慢恢复 在尖峰1之后,损失用了约 10k 步(269k→278k)从 5.02 恢复至 3.44。 这浪费了大量计算资源 —— 大约 10,000 步 × 32,768 tokens = 3.28 亿 tokens 仅仅用于恢复。

  4. 最佳损失出现在此窗口的开始 最低验证损失为步骤 262k 处的 3.03。当前验证损失为 4.37 —— 模型在此窗口内变得更差,而非更好。

  5. 周期性暗示数据分片轮换 尖峰间隔约 12k 步(267k 和 279k)。如果数据集轮换分片,或各分片具有截然不同的分布 (例如不同语言、文件类型),那么当遇到“困难”或分布外的分片时,就可能解释周期性的损失冲击。

— 可能原因 —

a) 数据分布偏移:github-code 数据集可能包含代码特征(语言、文件类型、注释密度)差异巨大的分片。 当数据加载器切换到新分片时,模型突然面对分布外数据 → 损失尖峰。

b) 学习率可能对该阶段过高:在步骤 262k,采用从 6e-4 到 6e-5(427k 步)的余弦衰减, 学习率仍然约为 2.7e-4。这是峰值的 45% —— 对于训练中期来说相当激进。 尖峰1之前的损失上升表明模型在振荡。

c) 没有梯度范数裁剪的证据:如果 grad_clip=1.0 没有捕获来自困难分片的异常梯度, 优化器可能会超调。

— 建议 —


Back Donate