本文依據台大李宏毅《機器學習 2026 Spring》的 HW4。 這是台大李宏毅 機器學習 2026 Spring 導讀系列第 10 篇。上一篇 Positional Embedding 講模型怎麼知道 token 的順序;這份作業讓你親手訓練一個 decoder-only Transformer,而且訓練對象不是文字,是圖片。
課程頁作業表寫 HW4 在 3/27 公告、04/16/2026 23:59 截止,助教是劉建蘴、馮柏翰、陳品睿。用到的官方材料:
- 作業說明 hw4.pdf(26 頁,首頁標註 Slide Credit: ML2025 spring HW4)
- Colab 範例(40 個 cells)與課程頁列出的 Kaggle 版
- 助教說明影片 ML 2026 Spring HW4 -- Training Transformers
存取等級:題目、範例程式、資料集都公開,屬於 A3;缺的是評分鏈,下面會說明。
任務:把圖片當成一串 token
hw4.pdf 第 3 頁寫明目標:用 transformer decoder-only 模型,對寶可夢圖片做 next-token prediction,學會「現在的 LM 架構怎麼做下一個 token 預測」。
資料的設計很乾淨(第 7–9 頁):
| 項目 | 內容 |
|---|---|
| 圖片數 | 792 張寶可夢小圖 |
| 切分 | train 632、validation 80、test 80 |
| 尺寸 | 20 × 20 = 400 個像素 |
| 詞彙 | 167 種顏色,每個像素是一個 token;colormap 把 token 對到 RGB,例如 token 0 是白色 |
訓練時,一張圖攤平成 400 個 token 的序列,照語言模型的方式預測下一個 token。測試時給你一張圖的前 60%,要模型生成剩下的部分(第 5–6 頁)。
Colab 的 PixelSequenceDataset 把這件事寫得很清楚:train 模式的輸入是 sequence[:-1]、標籤是 sequence[1:];dev 模式的輸入是 sequence[:-160]、標籤是最後 160 個 token,也就是 400 的 40%。資料從 Hugging Face 載入,dataset 名稱是 lca0503/ml2025-hw4-pokemon 與 lca0503/ml2025-hw4-colormap,和首頁的 Slide Credit 一致:這份作業沿用 2025 年的 HW4。
把這份作業和上一篇連起來看,會發現一個細節:範例的 GPT-2 設定裡 n_positions 是 400,剛好等於一張圖的長度。模型只需要學 400 個位置,不會遇到「訓練短、測試長」的問題。
兩個指標,要同時過
- FID(第 10 頁):用 Inception v3 抽真實圖片與生成圖片的特徵,計算兩個分佈之間的 Fréchet 距離。越低越好。
- PDR(第 11 頁):Pokémon Detection Rate,用助教訓練的分類器判斷生成圖片是不是寶可夢。越高越好。
第 12 頁的 baseline 表:
| 級別 | FID | PDR | 預估訓練時間 |
|---|---|---|---|
| simple | ≤ 86.00 | ≥ 0.1 | 約 10 分鐘 |
| medium | ≤ 80.00 | ≥ 0.5 | 約 20 分鐘 |
| strong | ≤ 73.00 | ≥ 0.85 | 30–40 分鐘 |
public、private 各一組,每過一條加 1 分,程式碼繳交另給 4 分。表下註明:FID 和 PDR 要同時達標才算過。
三級提示
- Simple(第 13 頁):直接執行範例,就能訓練一個 decoder-only 的 GPT-2 生成寶可夢。
- Medium(第 14 頁):調範例裡的 epoch 數與 learning rate,再調模型設定的 attention head 數、embedding 維度、層數。
- Strong(第 15–17 頁):推薦換成 Llama、Mistral 等架構,從 Transformers 套件匯入對應的 Config 類別並設好超參數。可選的做法是自己訓練一個判斷「像不像寶可夢」的分類器,類似 GAN 裡的 discriminator,用它挑 checkpoint。
最後一點值得多看一眼。範例程式存的是訓練 loss 最低的 checkpoint,理由寫在第 15、17 頁與 Colab 的 Train 段落:validation set 的重建準確率沒辦法直接反映生成品質。一張圖補完的方式有很多種,逐 token 猜中不等於畫得像。
第 18 頁給了超參數範圍:
| 超參數 | 範圍 | 預設 |
|---|---|---|
| epochs | 30–150 | 50 |
| learning rate | 1e-5–1e-2 | 1e-3 |
| batch size | 8–64 | 16 |
| weight decay | 0.1–1e-5 | 0.1 |
| attention heads | 1–12 | 2 |
| embedding 維度 | 32–512 | 64 |
| 層數 | 1–12 | 2 |
Colab 裡的預設 GPT-2 設定與這張表一致(n_embd 64、n_head 2、n_layer 2),推論時用 model.generate(..., max_length=400) 把每張圖補到 400 個 token,輸出成 reconstructed_results.txt。
繳交規則
- JudgeBoi(第 19–20 頁):只能交一個
.txt,剛好 80 行,每行 400 個數字代表一張圖。每天 5 次,UTC+8 23:59 重置,每次評分限時 10 分鐘。 - NTU COOL(第 21–22 頁):交
ML2026Spring_hw4.ipynb,不收遲交,不要附模型權重或資料集;程式不合理或無法重現,這份作業 0 分。 - 規定(第 24 頁):不准用 GPT-4、Gemini 這類閉源 LLM API,不准找額外資料訓練,不准手動修改預測檔,要固定 random seed 讓助教能重現。
校外讀者拿不到的部分
- 官方分數:JudgeBoi 的
ml.ee.ntu.edu.tw在 2026-09-30 只回傳 502,FID 與 PDR 都在那裡算。PDR 用的是助教自己訓練的分類器,沒有公開,所以校外無法重現 PDR。 - COOL:程式碼繳交與討論區需要台大帳號。
- private baseline:只知道門檻數字,拿不到 private test 的實際結果。
怎麼做:用範例的 dev 模式當替代驗收。對 80 張 validation 圖只給前 240 個 token,讓模型補完,用 pixel_to_image 畫出來跟原圖並排看;FID 可以用任何公開的 FID 實作,拿 validation 真實圖和補完圖來算。先跑預設設定記下結果,再只改一個超參數,看 FID 往哪邊走。
延伸閱讀
- 站上 Stanford CME295 的 Transformer 技巧導讀與 CMU 11-785 的 Transformer 架構導讀,可以補 decoder-only 架構的背景
系列導覽:系列總覽|上一篇 Positional Embedding|下一篇 Harness Engineering
參考資料
- 台大李宏毅《機器學習 2026 Spring》課程頁
- hw4.pdf(ML 2026 Spring HW4:Training Transformers)
- HW4 Colab 範例程式
- HW4 Kaggle 版
- 影片:ML 2026 Spring HW4 -- Training Transformers
- Hugging Face 資料集 lca0503/ml2025-hw4-pokemon
- GANs Trained by a Two Time-Scale Update Rule Converge to a Local Nash Equilibrium(提出 FID,arXiv 1706.08500)
Loading...