蒸餾:用大模型教出可上線的小模型
把大模型的能力壓縮進小模型,是降低推論成本最有效的手段之一。
蒸餾的商業價值很直接:如果一個 8B 模型能在你的特定任務上達到 70B 模型九成五的表現,推論成本可能降到十分之一。
關鍵在於「特定任務」四個字。蒸餾不會產生通用能力相當的小模型,它是把大模型在某個窄領域的行為複製過來。
三種蒸餾方式
- 回應蒸餾:用大模型產生輸出,當作小模型的訓練標籤。最簡單,也最常用。
- 推理鏈蒸餾:讓大模型輸出推理過程,小模型學習整個推理再給答案。對需要多步推理的任務效果較好。
- 機率分布蒸餾:讓小模型擬合大模型的 token 機率分布。效果最好但需要能取得 logits,多數 API 不提供。
回應蒸餾的實作流程
# 1. 收集真實輸入(不需要標註)
inputs = load_prod_inputs(n=5000)
# 2. 用大模型產生標籤(溫度 0,確保一致)
labels = [teacher.complete(PROMPT.format(x=x), temperature=0) for x in inputs]
# 3. 過濾:只留下通過驗證的樣本
pairs = [(x, y) for x, y in zip(inputs, labels)
if format_valid(y) and rules_ok(y)]
# 4. 用 pairs 微調小模型
print(f'保留 {len(pairs)}/{len(inputs)} 筆({len(pairs)/len(inputs):.0%})')第三步的過濾是品質關鍵。老師模型也會出錯,直接把錯誤標籤訓進學生模型,等於把錯誤固化。
提升標籤品質的兩個技巧
- 多次取樣取共識:同一個輸入用老師模型跑三次,只保留三次一致的樣本。不一致的丟棄或送人工。
- 用驗證器過濾:能程式驗證的部分(格式、加總、引用)一律驗證,不通過就丟。
推理鏈蒸餾的注意事項
# 訓練標籤同時包含推理與答案
{"role": "assistant", "content":
"<think>訂單金額 1200 超過免運門檻 1000,但配送地為離島,"
"依規定離島不適用免運。</think>\n"
"{\"eligible\": false, \"reason\": \"離島不適用\"}"}推理鏈會增加輸出長度,也就增加推論成本。要評估「推理帶來的準確率提升」是否值得多出來的 token。很多任務的答案是:不值得。
評測:與老師比,也與基準比
- 學生模型 vs 老師模型:達到幾成表現。
- 學生模型 vs 未蒸餾的同尺寸模型加少樣本:有沒有真的變好。
- 成本對照:實際的每次呼叫成本差距。
- 通用能力回歸:學生模型在其他任務上是否退化。
授權問題
使用商業模型的輸出訓練競爭模型,可能違反服務條款。用於自用的內部任務通常沒問題,但若要商業散布蒸餾出來的模型,務必先確認老師模型的授權條款。
蒸餾資料是可累積的資產。從第一天就把(輸入、通過驗證的輸出)存起來,一年後你會有一份高品質且完全貼合真實分布的資料集。
訂閱後繼續閱讀全文
本篇為訂閱者專屬內容。訂閱後可取得下列權限:
- 解鎖全部內容權限
- 閱讀不限篇數
- 全站移除廣告
月卡
NT$240
開通 30 天
一次付清,開通 30 天
季卡
NT$620
開通 90 天
一次付清,開通 90 天,每天約 NT$7
年卡
NT$2,160
開通 365 天
一次付清,開通 365 天,每天約 NT$6
一次性付款,付款成功後立即開通,到期自動結束,不會再次扣款,也不需要取消訂閱。
立即訂閱
金額均為新臺幣(TWD),即實際扣款金額,不另收手續費
支援信用卡 · Apple Pay · Google Pay · WebATM · ATM 轉帳
購買須知與退款政策