十六天的 region region region
結束的運行
ANDREA-120M v1 於 2026-03-22 啟動,並於 2026-04-15 在 200,000 計劃步驟的第 165,000 步終止。EMA 損失最小值:3.23(於步驟 110K,隨機機率:ln(8449) = 9.04,因此損失看起來還算體面)。樣本則不然。
步驟 80K:region region region region region region region
步驟 110K:''''' ''''' '' ''' '' ''' '''?' ''' ' '' '' '
步驟 140K:games, games, games, games, games, games
步驟 165K:Budy Budy Budy Budy Budy Budy Budy Budy Budy
RTX 4090 計算的十六天。130W 持續。從步驟 80K 開始的垃圾。
為什麼 microGPT 成功但 120M 失敗
ANDREA-12M 使用相同的訓練代理並通過。較小的權重矩陣對梯度衝擊更具魯棒性。擴展到 120M 參數放大了每一個脆弱性。五個失敗相互疊加。
五個相互疊加的失敗
失敗 1:無梯度裁剪。 來源每 7-42 步轉換產生無界梯度峰值。在 120M 時,一個不良批次即可將模型推入優化器無法逃脫的退化吸引子。12M 模型存活下來是因為較小的權重能容忍這些衝擊。
失敗 2:無 LR 暖身。 學習率從 0 立即跳到峰值,直接在剛初始化的權重上。模型在任何表示形成前就陷入壞的盆地。
失敗 3:無權重衰減。 純 Adam 允許任意大的權重,在 120M 容量下放大了重複模式。
失敗 4:無樣本品質監控。 eval_chat_quality() 只連接到舊的多階段執行器;火水管課程從未調用它。模型從第 80K 步開始產生垃圾,持續 10+ 天未被偵測。
失敗 5:Bandit 獎勵重複來源。 repo-docs、repo-docstrings 和 unfirehose-chat 得分最高(平均獎勵 340-453),因為列表結構內容輕易降低交叉熵。Bandit 餵模型更多導致其退化的內容。
複合效應
沒有單一失敗會讓 v1 崩潰。每個失敗都放大了其他失敗。沒有預熱(2)的梯度衝擊(1)撞擊新初始化的模型,產生任意大的權重(3),造成重複,而盜賊獎勵了這種重複(5),同時沒人監控輸出(4)。五個交會的原因,一個崩潰。
為什麼是五個失敗,而不是一個
每個失敗一個修正
v2 配置 (2026-04-15)
| 修正 | 針對失敗 | 實作 |
|---|---|---|
| 梯度裁剪 | F1 (無裁剪) | 全局 L2 範數, max_norm=1.0; 三個 CUDA 核心 (k_grad_norm_partial, k_grad_norm_final, k_grad_scale) 計算並應用 pre-Adam |
| LR 預熱 | F2 (無預熱) | 線性斜坡從 0 到峰值,跨越 2000 步。lr(t) = lr_scheduled(t) * min(1, (t+1)/warmup_steps) |
| AdamW | F3(無權重衰減) | 分離權重衰減(Loshchilov & Hutter 2019),weight_decay=0.01。p -= lr (m_hat/(sqrt(v_hat)+eps) + weight_decayp) |
| 一致性閘門早停 | F4(無監控) | 每個樣本評分(雙字/三字/單詞/字符多樣性)。5個連續樣本評分低於30後自動停止 |
| 課程暖啟 | F5(bandit 吃掉重複) | 前20K步驟限制於7個聊天/散文來源;之後啟用火水管;repo-docstrings 完全排除 |
此外,sample_every 從200降至100步驟(審計頻率加倍),且 repo-docs 上限從0.5降至0.3。
回測
一致性閘門在 v1 上回測:會在第132K步觸發,節省3.8天的計算。單獨該閘門即可將 v1 的浪費計算減少約30%;其他四項修正防止 v1 達到該閘門觸發。
v2 沒有修復的問題
資料污染。v2 信任 hermes3-* 來源為「預清洗」,因為它們來自 LLM 教師。Makefile 中的 DEEP_CLEAN_SKIP 將 hermes3-general、hermes3-creative 和 hermes3-roleplay 排除在 make deep-clean 之外。unfirehose-chat 將代理系統提示捕捉為使用者回合。這兩個缺陷潛伏在資料層,隨時準備浮現。
將修復對應到失敗
步驟 15K:兩個資料缺陷浮現
v2 看到的
v2 於 2026-04-15 推出。到 200K 步驟的約 15K 步驟(完成 7.5%),產生了代理測試框架裝飾(○ ●)& 文章主導後備(a = 步驟 14,966 時佔詞彙 26%;the = 步驟 14,798 時 21%)。五個 v2 穩定性修復正常運作。故障已從架構轉移到資料。
兩個獨立的管線缺陷
缺陷 A:unfirehose-chat 將代理系統提示捕捉為使用者回合。 unfirehose-chat 從 ~/.claude/、~/.fetch/、~/.uncloseai/ 的測試框架會話 JSONL 檔案建構。攝取管線將多節代理系統提示(# Agent X、## Identity、## Rules 等)轉換成 > user / < assistant 對的使用者回合槽位。模型學會「使用者」使用多節 markdown 說話,並在其自身輸出中重現那些裝飾。
缺陷 B:hermes3-* 繞過了所有過濾器。 Makefile 中的 DEEP_CLEAN_SKIP 將 hermes3-general、hermes3-creative 和 hermes3-roleplay 排除在 make deep-clean 之外,這是基於 LLM 蒸餾數據已預先清理的錯誤假設。全面掃描顯示,現有過濾器應用後,將拒絕 87-93% 的 hermes3 行(超大段落 >2000 字元溢出 block_size=1024;CJK/西里爾/阿拉伯文翻譯回應;低二元組多樣性運行)。
v2.5 修補程式 (commit de24332, 2026-04-18)
兩個結構性變更。
變更 1:filter-dataset.c 中的 has_system_prompt_shape()。 透過 SHAPE 偵測洩漏的系統提示,而非字元比對。三個訊號結合:
1. 單輪內 3+ 個 markdown 標題 = 丟棄。
2. 2+ 個標題且輪次長度 >=500 字元 = 丟棄。
3. 代理分片指紋短語 (# Agent , Shadow Clone, Your shard, Read it. Become it, This file defines) 結合任何標題或長度 >=400 = 丟棄。
隔離規則:在 / 分隔符(含空格,非裸 / 會碎片化 URL 路徑)檢查第一個使用者輪次,以避免助理回應中合法 markdown 的假陽性。
變更 2:hermes3-* 從 DEEP_CLEAN_SKIP 中移出。 絕不信任未過濾內容。
修補後的丟棄率
| 來源 | 內聯 | 外聯 | 丟棄率 |
|---|---|---|---|
| hermes3-general | 536,858 | 67,395 | 87.7% |
| hermes3-roleplay | 35,191 | 2,481 | 93.0% |
| hermes3-creative | 14,258 | 1,373 | 90.4% |
| unfirehose-chat | 3,816 | 2,653 | 30.5% |
| chat | 45,257 | 44,538 | 1.6% (雜訊) |
| smoltalk | 11,812 | 11,812 | 0.0% |
基準過濾器已經捕捉到 87-93% 的 hermes3 污染;DEEP_CLEAN_SKIP 是主要的缺陷。新形狀偵測器整體額外增加了約 0.1% 的拒絕率,集中在 unfirehose-chat 中,它移除了現有過濾器遺漏的特定代理碎片洩漏。
為什麼形狀優於字元
裝飾會演變。一個捨棄 ○ 的字元匹配過濾器,對下週的 ◇ 無能為力。基於形狀的過濾器(計算標頭、計算字元、辨識指紋短語)能泛化到各種裝飾變體。模式:污染偵測必須使用結構性啟發式方法。
為什麼按形狀過濾
無資料的 Bandit Arm
v3 於 2026-04-18 推出
與 v2 相同的架構與超參數;v2.5 修補後清理資料。樣本審核中零裝飾符洩漏。v3 於步驟 112K 順利運行。
步驟 112,619:樣本審計發現模式
樣本審計揭示了連貫的對話輪次(俳句、問答、對話),但週期性階段專注於知識臂(gutenberg、repo-docstrings、repo-docs)洩露了類似程式碼的片段與儲存庫權重化雜訊。其中一個樣本在步驟 112,080 達到損失 0.13:異常低,顯示記憶了 repo-docs 子字串而非學習聊天分佈。
殭屍臂
診斷:exclude_sources 在訓練開始時正確移除了 repo-docstrings,但持續的 bandit 狀態攜帶了來自先前執行權重為 1.546 的殘餘 repo-docstrings 臂。狀態重新載入將其重新納入 UCB 池中,即使沒有 .btok 檔案可供抽樣,產生了扭曲探索計帳的殭屍拉取。
教訓:bandit 狀態檔案(.state.json)在重啟時會以驚人方式漂移。配置排除不會抹除殘餘臂記憶。需要雙重保障:上限 = 0.0 搭配排除。
波蘭語配置
僅課程擾動。架構、優化器狀態、學習率排程及損失歷史皆從 step_112600.bin 保留。
| 來源 | v3 基礎 | v3 波蘭語 |
|---|---|---|
| repo-docs | 上限 0.3 | 排除 (上限 0.0) |
| repo-docstrings | 排除 | 排除 + 上限 0.0 |
| repo-commits | 上限 0.4 | 上限 0.2 |
| dictionary | 上限 0.5 | 上限 0.25 |
| gutenberg | 上限 0.8 / 下限 0.3 | 上限 0.7 / 下限 0.4 |
| irc-qa-strict | -- | 上限 0.3 |
| unweapon | -- | 上限 0.3 |
| synthetic-chat | -- | 上限 0.4 |
| hermes3-general | 下限 0.5 | 下限 0.7 |
| hermes3-creative | 下限 0.4 | 下限 0.55 |
| hermes3-roleplay | floor 0.4 | floor 0.5 |
| chat | floor 0.4 | floor 0.6 |
| smoltalk | floor 0.3 | floor 0.5 |
| oasst | floor 0.3 | floor 0.5 |
| dolly | -- | floor 0.4 |
| curriculum_warmup_steps | 20000 | 0 |
拋光協議
1. SIGUSR1 發送到 CUDA 會在下一個 100 步邊界強制立即檢查點。
2. Proxy 停止。
3. .samples.json & .state.json 歸檔(樣本日誌 & bandit 狀態保存為歷史記錄)。
4. .loss.json 保留 -- 累積訓練歷史;永不歸檔。
5. Proxy 重新啟動。Polish 配置提交。
6. CUDA 從 step_112600.bin 恢復,使用新的上限 & 下限下的新 bandit 狀態。
損失歷史持續無間斷。
為什麼選擇 Polish,而不是重新開始
Polish 產生的成果
樞紐後數小時的樣本審核
在波蘭轉向數小時內,樣本審計確認在四個原始 ANDREA-120M 目標上達到收斂。
事實回憶(生物學),步驟 112,584,損失 0.30,ppl 1。
> [extinction prompt]
> < black spider montano is alive, carolina parakeet is extinct.
兩個正確事實。外部評分:9.5/10。
事實回憶(訊號處理),步驟 112,668,損失 0.74,ppl 2。
> [Fourier transform prompt]
> < 傅立葉變換將訊號分解成頻率成分,允許在頻率域中分析訊號特性與進行濾波。
教科書一句定義。外部評分:9.5/10。
遵循約束(haiku),步驟 112,248,損失 1.05,ppl 3。
> 用三個以「r」開頭的單字,寫一首關於雨的俳句。
> < 雨的節奏迴響,窗上細流,人生痛苦的喘息。
工具知識 (Python),步驟 112,500,損失 1.94,ppl 7。
> 我如何在 Python 專案中找到過時的套件?
> < 使用 pip list --outdated names 來查看專案管理中的 pip 套件清單...
正確工具出現;措辭不精確。
700 步驟中的六個領域
生物學、訊號處理、詩歌、python 工具、對話對話、運營對話。700 步驟內的六個不相關領域告訴我們 bandit 與模型正協同運作。領域廣度即是收斂訊號。
外部評分
獨立審查員評價樣本「對一個 120M 參數模型來說很扎實——在此規模下令人印象深刻的連貫性與知識保留」,卡羅萊納虎皮鸚鵡與傅立葉變換樣本評為 9.5/10 與「在知識任務上超出其重量級」。
每個階段的教訓
v1 教訓:五個複合失敗會使訓練崩潰。單獨修復無效;必須同時解決所有五個。
v2 教訓:架構修復是必要的但不充分。資料層能悄無聲息地擊敗它們。
v2.5 教導:依形狀而非字元過濾汙染。模式穩定;符號會演化。
v3 基礎 教導:盜賊狀態會以驚人方式在重啟間漂移。僅排除不足;需上限 0.0 雙重保障。
v3 精煉 教導:當失敗在於政策且模型健康時,擾動政策。保留權重。保留損失歷史。向前前進。
一則真理
收斂不是單一事件;它是一連串的修正。每個階段暴露了一個缺陷,修復它,並揭露下一個。ANDREA-120M 在步驟 112,584 達到 9.5/10,是因為 v1、v2、v2.5、v3 基礎版及 v3 精煉版各自完成了它們的工作。