MKMK 的 AI 筆記
動手學大模型 12 問

第 5 篇/共 12 篇

小模型怎麼學會解數學題?

閱讀約 9 分鐘(約 1,296 字)發布 分類 一人公司工作流+學習系列

#微調#數學推理#DeepSeek

小模型怎麼學會解數學題?

讓 1.5B 的小模型模仿 DeepSeek-R1 的解題過程,用監督式微調學會反思和驗算。看資料怎麼篩、怎麼訓練、怎麼評分。

本文目錄
  1. 一句話回答
  2. 為什麼值得知道
  3. 白話原理
  4. 教程裡實際做了什麼
  5. 動手試試
  6. 常見誤解
  7. 延伸閱讀

一句話回答

讓小模型「抄大模型的解題筆記」。這章拿 DeepSeek-R1 寫好的詳細解題過程當教材,用監督式微調(Supervised Fine-Tuning,SFT)訓練 Qwen2.5-Math-1.5B,讓它學會一步步推理、反思和驗算。這種「用強模型的輸出教弱模型」的做法,叫資料蒸餾(Data Distillation)。

為什麼值得知道

很多人以為模型會不會推理只看參數多大,其實訓練資料同樣重要。

  • 成本:大模型慢又貴,小模型若能學到部分推理能力,比較有機會放在自己的伺服器上。
  • 看懂新聞:近年常聽到「某某小模型蒸餾自 R1」,這章就是在示範那是什麼意思。
  • 方法可以搬:「篩資料 → 格式化 → 微調 → 自動評分」這條流程,換成其他任務也是同一套思路。

白話原理

想像一個數學底子不錯、但不會寫解題過程的學生。你給他一本頂尖老師的詳解,裡面還寫著「等一下,這裡好像算錯了……」。學生反覆模仿,就會養成回頭檢查的習慣。

對應到這章:

比喻 實際內容
頂尖老師 DeepSeek-R1,會寫很長的思考過程
詳解本 DeepMath-103K 資料集裡 R1 的解題過程
學生 Qwen2.5-Math-1.5B 基座模型
模仿練習 SFT:讓模型學著逐字產生同樣的回答
考試 MATH500 測試集,對答案算正確率

有兩個重點:

  1. 學的是「過程」不只是「答案」:訓練資料把 R1 的推理包在 <think> 標記裡,模型學到的是思考的樣子。
  2. 基座模型本來不會對話:Qwen2.5-Math-1.5B 是沒經過指令微調的基座模型,只會接著文字往下寫。微調後才有基本的「聽題目、回答」能力。

教程裡實際做了什麼

工具是 Hugging Face 的 Transformers、Datasets,推理用 vLLM,全部放在一個 Jupyter 筆記本 sft_math.ipynb 裡。

  1. 下載資料:DeepMath-103K 約有 10.3 萬題高難度數學題,每題附難度標註和 R1 的三條推理路徑。原文特別提到,這份資料已和主流數學測試集去重,避免「考古題洩題」。
  2. 篩選資料:只留下最終答案是純數字的題目,方便之後自動對答案。
  3. 整理格式:每題取第一條 R1 解答,用模型的對話模板(chat template)包成「使用者問題+助理回答」,回答開頭加上 <think>。
  4. 長度篩選:R1 的回答平均約 5,000 個 token,筆記本只保留長度小於 4,096 的樣本,配合模型的長度上限。
  5. 訓練:以 BF16 精度微調,學習率 1e-6、訓練 3 輪,用 Transformers 的 Trainer 執行。
  6. 生成:用 vLLM 對 MATH500 的 500 題作答,同樣在提示後面加 <think> 引導模型先思考;溫度設 0,也就是每次都選機率最高的字。
  7. 評分:用規則抽出答案裡 \boxed{} 的內容,再用比對函式判斷和標準答案是否相等,算出正確率。

訓練參數的設定大致如下(摘自原教程第 4 章筆記本,有刪節):

TrainingArguments(
    per_device_train_batch_size=4,  # 顯存不足時改成 1
    gradient_accumulation_steps=16,
    num_train_epochs=3,
    learning_rate=1e-6,
    bf16=True,
)

原文觀察到,微調後的模型有了基本的指令遵循能力,明顯會反思(常出現「confirm」),也會寫程式驗算。

硬體需求:原文寫明至少要 40GB 顯存的 GPU,筆記本實際用的是單張 80GB 的 A100;磁碟至少預留 50GB,放模型、資料和訓練存檔。原文沒有公布微調後的正確率數字,要自己跑出來。

動手試試

老實說,完整流程一般筆電做不到,免費版 Colab 的 GPU 顯存也不夠 40GB。可以分段體驗:

  1. 只看資料:在 Colab 或筆電用 Datasets 載入 DeepMath-103K,打開幾題 R1 的解答,看看「反思」長什麼樣子。這一步不需要 GPU。
  2. 只玩 tokenizer:載入 Qwen2.5-Math-1.5B 的 tokenizer,用對話模板把一題包起來印出,理解模型實際看到的格式。
  3. 整套訓練:要租有 40GB 以上顯存的雲端 GPU(例如 A100)。筆記本註解建議顯存不夠時把 batch size 調成 1、開啟 gradient checkpointing,但能不能在更小的卡上跑完,原文沒有保證。

建議先抽一小部分資料試跑,沒問題再跑全量。

常見誤解

  • 「蒸餾就是把大模型壓縮成小模型」:這章不是直接壓縮權重,而是用大模型產生的「文字資料」來訓練小模型。
  • 「小模型學完就跟 R1 一樣強」:它學到的是推理習慣,能力上限還是受模型大小限制,正確率要用測試集實測。
  • 「評分就是看答案字串一不一樣」:數學答案有很多寫法(分數、小數、化簡前後),要用專門的比對函式判斷。

延伸閱讀

本文整理自上海交通大學《動手學大模型》第 4 章,原教程:https://github.com/Lordog/dive-into-llms/tree/main/documents/chapter4。內容由 MK 以自己的話解說,如有錯誤歡迎留言指正。

追蹤 MK,掌握最新 AI 工具應用

每週分享 GitHub 飆星實測、AI 工具教學與提示詞,短影片版都在社群。