Skip to content

李宏毅 ML 2026 HW4:用 decoder-only Transformer 接龍畫寶可夢

2026年9月30日1 分鐘
TL;DRHW4 把「文字接龍」原封不動搬到圖片上:792 張 20×20 的寶可夢小圖,每個像素是 167 色裡的一個 token,一張圖就是 400 個 token 的序列。訓練時做 next-token prediction,測試時給你前 60%,讓模型畫完剩下的 40%。評分同時看 FID 與寶可夢偵測率(PDR),三級 baseline 的提示從「直接跑範例」「調超參數」一路到「換成 Llama、Mistral 架構」。題目、Colab、Kaggle 與資料集都公開,但 JudgeBoi 在 2026-09-30 回傳 502,校外拿不到 FID、PDR 的官方分數。

🌏 English version

本文依據台大李宏毅《機器學習 2026 Spring》的 HW4。 這是台大李宏毅 機器學習 2026 Spring 導讀系列第 10 篇。上一篇 Positional Embedding 講模型怎麼知道 token 的順序;這份作業讓你親手訓練一個 decoder-only Transformer,而且訓練對象不是文字,是圖片。

課程頁作業表寫 HW4 在 3/27 公告、04/16/2026 23:59 截止,助教是劉建蘴、馮柏翰、陳品睿。用到的官方材料:

存取等級:題目、範例程式、資料集都公開,屬於 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 表:

級別FIDPDR預估訓練時間
simple≤ 86.00≥ 0.1約 10 分鐘
medium≤ 80.00≥ 0.5約 20 分鐘
strong≤ 73.00≥ 0.8530–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 頁給了超參數範圍:

超參數範圍預設
epochs30–15050
learning rate1e-5–1e-21e-3
batch size8–6416
weight decay0.1–1e-50.1
attention heads1–122
embedding 維度32–51264
層數1–122

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 讓助教能重現。

校外讀者拿不到的部分

  1. 官方分數:JudgeBoi 的 ml.ee.ntu.edu.tw 在 2026-09-30 只回傳 502,FID 與 PDR 都在那裡算。PDR 用的是助教自己訓練的分類器,沒有公開,所以校外無法重現 PDR。
  2. COOL:程式碼繳交與討論區需要台大帳號。
  3. private baseline:只知道門檻數字,拿不到 private test 的實際結果。

怎麼做:用範例的 dev 模式當替代驗收。對 80 張 validation 圖只給前 240 個 token,讓模型補完,用 pixel_to_image 畫出來跟原圖並排看;FID 可以用任何公開的 FID 實作,拿 validation 真實圖和補完圖來算。先跑預設設定記下結果,再只改一個超參數,看 FID 往哪邊走。

延伸閱讀

系列導覽:系列總覽|上一篇 Positional Embedding|下一篇 Harness Engineering

參考資料