官網:http://qingkeai.online/
青稞社區為科研人員提供成果宣傳支援,如有優秀研究成果分享推廣,歡迎投稿聯繫:aiFreeCode
核心命題:SFT 學不會的問題,不能靠「加 epoch」解決。有些問題加 epoch 只提升 1%,但換個策略能提升 12.5%。本文聚焦於「用什麼策略治什麼病」——一個完整的 SFT 失敗修復方案庫。
論文:Why Supervised Fine-Tuning Fails to Learn: A Systematic Study of Incomplete Learning in Large Language Models會議:ACL 2026 |單位:騰訊混元 × UNSWarXiv:https://arxiv.org/abs/2604.10079一、從「一個籠子裝所有病」到「五把手術刀」
做 SFT 的人面對模型學不會時的本能反應是:加 epoch。
本文透過實驗證明,這種「盲目加 epoch」的效率極低。對於知識缺失型未學習樣本(根因 I),加 epoch 僅提升1-2%。但改用 CPT(Continual Pre-Training,持續預訓練)知識增強方案,效果是 +8-17% ——差了一個數量級。
作者的核心論點是:不完全學習現象(ILP,Incomplete Learning Phenomenon)不是單一疾病,而是五種病因的綜合徵。每種病因需要不同的「手術刀」。在 10 個標準 SFT(Supervised Fine-Tuning,監督微調)資料集上,平均 15.3%±2.1% 的訓練樣本處於未學習狀態,這個數字在 Qwen、LLaMA、OLMo2 上穩定存在。
在進行策略拆解之前,先理解這個問題的基本框架。作者提出了一個三段式診斷流程:
而讓檢測成為可能的關鍵技術是MC 轉換(Multiple-Choice Conversion,多項選擇轉換)——將 SFT 的監督回應轉化為多項選擇題格式,用 pass@5 < 0.2 判定「未學習樣本」。
二、手術刀 1:CPT 知識增強——當 SFT 遇上知識真空
治療的敵人
根因 I:預訓練知識缺失。 基礎模型從未在預訓練語料中見過相關知識——罕見疾病的診斷標準、特定法條編號、低頻金融產品名。SFT 無法「無中生有」。
為什麼加 epoch 沒用
SFT 的優化信號強度有限——幾個 epoch 的梯度更新無法在模型參數中憑空構造出從未有過的知識表徵。你可以讓沒見過斑馬的人做一萬道「斑馬 vs 馬」的選擇題,他依然沒有「條紋」的概念。
治療流程
Step 1: 從未學習樣本中用 OpenIE 提取知識三元組 (h,r,t)Step 2: 基礎模型 BoN-10 探測,pass@10 < 0.2 → 標記「盲知識」Step 3: 多源檢索 → WikiData + Google Search + OpenAI-o1 APIStep 4: 構建增強語料(領域:通用 = 0.8:0.2 混合)Step 5: 基礎模型 CPT(持續預訓練)Step 6: 標準 SFT治療效果
| 54.6% | +12.5% | |||
| 60.7% | +9.4% | |||
| 67.9% | +14.1% | |||
| 44.2% | +5.7% |
關鍵發現:模型越大(14B vs 7B),CPT 收益越大(+14.1% vs +9.4%)——大模型的知識吸收能力更強。
三、手術刀 2:CPT 校準——糾正模型的「錯誤信念」
治療的敵人
根因 II:SFT 監督與預訓練知識衝突。 基礎模型在預訓練階段形成了強烈的錯誤信念。比如「法國總統」這個知識點——模型在預訓練語料中看到了大量「歐蘭德總統」的表述,SFT 雖然標註了正確答案「馬克宏」,但預訓練先驗太強。
與手術刀 1 的關鍵區別
治療流程
1. 檢測基礎模型高置信度錯誤(對錯誤選項機率 > 0.9)2. 檢索權威外部知識作為糾偏資料3. CPT 重新對齊內部表徵4. 重新 SFT
治療效果
ARC +2.8%,CommonQA +2.4%。衝突率(基礎模型高置信度錯誤的比例)顯著下降。
四、手術刀 3:動態分桶——讓矛盾資料「井水不犯河水」
治療的敵人
根因 III:SFT 資料內部矛盾。同一個訓練集中存在語義相似但標籤矛盾的樣本對。比如兩個樣本都問某疾病的潛伏期——一個標註「3-7 天」,另一個「1-14 天」。當它們共現於同一 batch 時,梯度方向相反,淨梯度接近零——兩個都學不會。
為什麼不能簡單刪除
| 動態分桶 | +2.8% |
治療流程
1. Sentence-BERT 編碼所有訓練樣本2. 構建衝突圖:Sim(i,j) > 0.85 且標籤矛盾 → 添加邊3. 圖著色分配桶:相鄰節點(衝突樣本)不同色(桶)4. 訓練:每個 mini-batch 只從一個桶採樣5. 每 K 步重新評估,動態更新分桶核心思想是保留資訊總量,只改變資訊的呈現方式——確保任何兩個可能矛盾的知識點不會同時出現在一個 batch 的梯度計算中。
五、手術刀 4:全域打亂 + 動態重採樣——對抗訓練遺忘
治療的敵人
根因 IV:左側遺忘。當 SFT 資料按來源順序排列時(先所有 MedQA,再所有 LegalBench),後期的訓練會「覆蓋」早期的學習成果。前 10% 資料的 ROUGE-L 最嚴重時下降29%。
全域打亂
# 不好(順序排列→遺忘)dataloader = [medqa_all, legal_all, finance_all]# 好(全域隨機混合→抗遺忘)dataloader = RandomSampler(medqa + legal + finance, shuffle=True)動態重採樣
每 K 步監測各資料子集的驗證準確率。如果某子集下降超過閾值,從該子集額外採樣加入當前 batch——「誰被遺忘了就多給誰訓練機會」。
治療效果
| 0.53 | +29% | ||
前 10% 資料提升 29%,而最後 10% 僅微降 1.6%。代價極小,收益極大。
六、手術刀 5:漸進 Epoch——不是不想學,是沒學夠
治療的敵人
根因 V:優化不足。 固定 epoch 下,簡單樣本數量多(約佔 80%),雖然單個梯度小但累積後主導了平均梯度方向。難樣本(5%)的梯度大但被平均掉了——模型參數更新方向由簡單樣本定義。
治療流程
# 傳統做法(固定 epoch)for epoch in range(fixed_epochs): train()# 漸進 Epoch(自適應停止)while val_performance_improving(): train_one_epoch()治療效果
| +1.9% | |
| +1.8% | |
| +1.8% |
七、治療方案的選擇邏輯
決策流程
未學習樣本檢測通過(pass@5 < 0.2) ↓基礎模型 zero-shot 準確率如何? ├── < 25%(近乎隨機)→ 根因 I → 手術刀 1(CPT 知識增強) ├── 低但高置信度錯誤 → 根因 II → 手術刀 2(CPT 校準) └── 尚可或正常 → ├── 語義相似樣本標籤矛盾?→ 根因 III → 手術刀 3(動態分桶) ├── 資料在訓練序列前段?→ 根因 IV → 手術刀 4(打亂+重採樣) └── 難樣本 loss 仍在下行?→ 根因 V → 手術刀 5(漸進 Epoch)實施優先級建議
1.先做零成本策略:全域打亂(手術刀 4)+ 漸進 Epoch(手術刀 5)——改 dataloader 和停止條件,不花額外算力。
2.再做低成本策略:動態分桶(手術刀 3)——僅需 Sentence-BERT 編碼和圖著色,算力開銷極小。
3.最後啟動高槓桿策略:CPT(手術刀 1 和 2)——需要外部資料檢索和額外預訓練,成本高但收益也最大。
本文以五類解決方案為主線,完整講解每種「手術刀」的適用病因、操作流程、關鍵資料和實施成本。