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

un

guest
1 / ?
back to lessons

步驟 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-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 步一個),樣本顯示連貫的英文,並建立穩定的 bigram 與 trigram 分佈。現在它能吸收字典的 > define X / < X is... 模式、repo-docs 的程式碼區塊,以及 git commit 標頭,而不會失去底層的聊天結構。

診斷 v1 的失敗

一個新初始化的 120M transformer 從步驟 0 開始訓練於 16 個結構不同的來源。到步驟 80K,樣本讀作 `region region region region region`。將無暖身設計選擇連接到此特定失敗模式:命名 16 個來源在步驟 0 使模型崩潰成單一 token 重複的機制。一到兩句。

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模型已具備一致性;無需保護脆弱的初始化階段

在精煉階段停用預熱是安全的理由

用 2-3 句話論證,為何在 v3 精煉轉折點設定 curriculum_warmup_steps = 0 **不會**重現 v1 的崩潰,儘管兩個運行都具有「從當前步驟開始全部來源啟用」。請參考步驟 112K 的模型狀態。