步驟 0-20K:限制飲食
兩個階段,一次運行
v2 火水管課程在單一 200K 步驟訓練運行中分兩個階段執行:
階段 A(步驟 0 到 20K)。 Bandit 只從 7 個聊天與散文來源拉取:
- hermes3-general
- hermes3-creative
- hermes3-roleplay
- chat
- smoltalk
- oasst
- gutenberg
Phase B(步驟 20K 到 200K)。 Bandit 從完整的混合中抽取,全部 16 個來源,包括參考(dictionary)、技術(repo-docs、repo-commits)& 社交(irc、unweapon)。
限制飲食的共同特點
七個預熱來源中有六個是對話性的。一個(gutenberg)是段落散文。它們共同具有相同的形狀:回合結構(提示然後回應)或敘事流程。7 個來源的詞彙分佈看起來大致是正常的英語;交叉熵目標保持在穩定的範圍內;梯度大小保持可預測。
設定欄位
"curriculum_warmup_steps": 20000,
"curriculum_warmup_sources": ["hermes3-general", "hermes3-creative",
"hermes3-roleplay", "chat", "smoltalk", "oasst", "gutenberg"]
識別預熱階段
沒有預熱時 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 步一個),樣本顯示連貫的英文,並建立穩定的 bigram 與 trigram 分佈。現在它能吸收字典的 > define X / < X is... 模式、repo-docs 的程式碼區塊,以及 git commit 標頭,而不會失去底層的聊天結構。
診斷 v1 的失敗
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 | (not present) | 步驟 0 的全部 16 個來源 -> 崩潰 |
| v2 (steps 0-200K) | 20,000 | 保護新初始化的權重免受梯度混亂的影響 |
| v3 base (steps 0-112K) | 20,000 | 與 v2 相同的保護 |
| v3 polish (steps 112K-200K) | 0 | 模型已具備一致性;無需保護脆弱的初始化階段 |