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

十六天的 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 到 ANDREA-120M


為什麼 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-docsrepo-docstringsunfirehose-chat 得分最高(平均獎勵 340-453),因為列表結構內容輕易降低交叉熵。Bandit 餵模型更多導致其退化的內容。


複合效應

沒有單一失敗會讓 v1 崩潰。每個失敗都放大了其他失敗。沒有預熱(2)的梯度衝擊(1)撞擊新初始化的模型,產生任意大的權重(3),造成重複,而盜賊獎勵了這種重複(5),同時沒人監控輸出(4)。五個交會的原因,一個崩潰。

為什麼是五個失敗,而不是一個

從五個 v1 失敗中挑選任意**兩個**。對每個失敗,用一句話解釋:(a) 這個失敗是什麼;(b) 它如何具體與其他五個失敗之一互動,從而加劇損害。

每個失敗一個修正

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)
AdamWF3(無權重衰減)分離權重衰減(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 將代理系統提示捕捉為使用者回合。這兩個缺陷潛伏在資料層,隨時準備浮現。

將修復對應到失敗

v2 的三個修復各自乾淨地對應到 v1 的一個失敗。配對:(a) 梯度裁剪 (max_norm=1.0);(b) LR 預熱 (2000 步線性上升);(c) AdamW with weight_decay=0.01。對於每個,命名它解決的 v1 失敗,並用一句話說明**為什麼**這個特定修復能對抗該失敗。

步驟 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-general536,85867,39587.7%
hermes3-roleplay35,1912,48193.0%
hermes3-creative14,2581,37390.4%
unfirehose-chat3,8162,65330.5%
chat45,25744,5381.6% (雜訊)
smoltalk11,81211,8120.0%

基準過濾器已經捕捉到 87-93% 的 hermes3 污染;DEEP_CLEAN_SKIP 是主要的缺陷。新形狀偵測器整體額外增加了約 0.1% 的拒絕率,集中在 unfirehose-chat 中,它移除了現有過濾器遺漏的特定代理碎片洩漏。


為什麼形狀優於字元

裝飾會演變。一個捨棄 的字元匹配過濾器,對下週的 無能為力。基於形狀的過濾器(計算標頭、計算字元、辨識指紋短語)能泛化到各種裝飾變體。模式:污染偵測必須使用結構性啟發式方法。

為什麼按形狀過濾

v2.5 透過 SHAPE(標頭數量、長度、指紋短語)而非 CHARACTER(匹配特定符號如裝飾符)來過濾 agent-shard 洩漏。給出一個實際原因說明這為何重要,以及一個 character-only 過濾器無法捕捉的具體失效模式。

無資料的 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-roleplayfloor 0.4floor 0.5
chatfloor 0.4floor 0.6
smoltalkfloor 0.3floor 0.5
oasstfloor 0.3floor 0.5
dolly--floor 0.4
curriculum_warmup_steps200000

拋光協議

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,而不是重新開始

第 112,619 步達到計劃訓練的 56%。團隊選擇 **CURRICULUM PERTURBATION**(保留權重,改變上限與下限)而不是 **FULL RESTART**(在第 0 步重新初始化)。給出兩個 polish-pivot 正確的原因,以及一個回到第 0 步會引入的具體風險。

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 精煉版各自完成了它們的工作。

哪個階段教會了最深刻的教訓

在五個階段(v1、v2、v2.5、v3 基礎版、v3 精煉版)中,你認為哪一個教會了最具轉移性的工程教訓?選擇一個。用你自己的話陳述該教訓,並給出 2-3 句解釋為什麼這個教訓能推廣到語言模型訓練之外。