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

un

访客
1 / ?
返回课程列表

第 0-20K 步:限制饮食

两个阶段,一次运行

v2 火水管课程在单一的 200K 步训练运行中分为两个阶段:


阶段 A(第 0 到 20K 步)。 Bandit 仅从 7 个聊天和散文来源拉取:


- hermes3-general

- hermes3-creative

- hermes3-roleplay

- chat

- smoltalk

- oasst

- gutenberg


阶段 B(步骤 20K 到 200K)。 Bandit 从完整混合中抽取,全部 16 个来源,包括参考(dictionary)、技术(repo-docsrepo-commits)& 社交(ircunweapon)。


Curriculum warmup timeline


限制饮食的共同点

七个预热来源中有六个是对话性的。一个(gutenberg)是段落散文。它们共同具有相同的结构:轮次结构(提示然后响应)或叙事流程。7 个来源的词汇分布大致符合正常英语;交叉熵目标保持在稳定范围内;梯度幅度保持可预测。


配置字段


"curriculum_warmup_steps": 20000,
"curriculum_warmup_sources": ["hermes3-general", "hermes3-creative",
"hermes3-roleplay", "chat", "smoltalk", "oasst", "gutenberg"]

识别预热阶段

一个训练运行已经进行了 18,400 步。在不查看 bandit 状态的情况下,模型是否可能已经从 `dictionary` 或 `repo-docs` 中采样?解释为什么可以或不可以,并引用决定此行为的配置值。

没有预热时的 v1 样子

v1:从第 0 步开始所有 16 个来源

第一个 ANDREA-120M 训练运行(2026 年 3-4 月)从第 0 步就激活了完整的火水管:16 个来源,包括 dictionary(88K 个单词定义,格式为 > define X / < X is...)、repo-docs(markdown 文档)、repo-docstrings(Python 文档字符串)以及 repo-commits(git 提交消息,与 chat 和 prose 一起)。


发生了什么问题

一个随机初始化的 120M 模型无法同时建模 16 个不同的分布。来自结构不同的来源的每个批次都会产生不同的梯度方向。来源每 7-42 步切换一次,导致梯度幅度剧烈波动;模型在形成表示之前就更快地在吸引子之间跳跃。


到第 80K 步时,v1 产生了:region region region region region region region。Hermes3-general 教师蒸馏奖励(均值 340-453)使得重复的列表结构来源在交叉熵上得分最高,bandit 将其解释为“这些臂很容易”。bandit 向模型喂食了更多导致其退化的内容。


为什么限制为 7 个来源有帮助

1. 分布相似性。 所有 7 个预热来源产生的文本形状相似(回合结构或叙事)。批次间的梯度方向大致保持对齐。

2. 先求连贯性。 模型在遇到定义列表、代码或 git 消息之前,先学习词汇频率、句法模式和回合结构。

3. 稳定的课程。 来自 7 个聊天/散文来源的 Bandit 奖励信号保持在相当的范围内;UCB1 选择不会被单一异常高奖励来源劫持。


Phase B 激活时

在第 20K 步,模型已生成约 40-50 个样本(每 100 步一个),样本中显示连贯的英语,并建立了稳定的二元和三元分布。现在它可以吸收词典的 > define X / < X is... 模式、repo-docs 的代码块,以及 git 提交头,而不会丢失底层的聊天结构。

诊断 v1 的失败

一个新初始化的 120M transformer 从第 0 步开始在 16 个结构不同的来源上训练。到第 80K 步,样本读取为 `region region region region region`。将无预热的设计选择与此特定失败模式联系起来:命名 16 个来源在第 0 步使模型崩溃为单标记重复的机制。一两句话。

v3 Polish 将 curriculum_warmup_steps 设置为 0

不同的起点

v3 polish 在第 112,619 步的转向从 step_112600.bin 恢复训练,并将 curriculum_warmup_steps 设置为 0。乍一看这似乎是矛盾的:如果预热帮助了 v2,为什么在 polish 阶段禁用它?


因为模型已经学会了连贯性

Phase A 为新初始化的模型争取时间来学习词汇频率、回合结构和段落连贯性。到第 112K 步时,模型已经完成了所有这些。112K 步的样本审计显示了连贯的对话回合、俳句、问答和对话。预热(保护脆弱的新模型免受梯度混乱)的原始目的不再适用。


Polish 重新加权,而不是重新开始

Polish 是一种课程扰动,而不是全新运行。相同的 200K 目标、相同的架构、相同的优化器状态、相同的历史损失。变化的是:源上限和下限被重新加权,以优先考虑对话而非知识臂。由于模型已经连贯,从第 112,619 步开始,每个活跃源都是公平的游戏。


总结表格


阶段curriculum_warmup_steps原因
v1(不存在)步骤 0 的所有 16 个来源 -> 崩溃
v2 (steps 0-200K)20,000保护刚初始化的权重免受梯度混乱的影响
v3 base (steps 0-112K)20,000与 v2 相同的保护
v3 polish (steps 112K-200K)0模型已连贯;无需保护脆弱的初始化阶段

为什么在 Polish 阶段禁用 Warmup 是安全的

用 2-3 句话论证,为什么在 v3 polish 转折点设置 curriculum_warmup_steps = 0 **不会**重现 v1 的崩溃,尽管两个运行都具有“从当前步骤开始所有来源激活”。参考步骤 112K 时的模型状态。