本文依據台大李宏毅《機器學習 2026 Spring》的 HW2。 這是台大李宏毅 機器學習 2026 Spring 導讀系列第 5 篇。前兩篇講了 Context Engineering 與 agent 對研究工作的衝擊,這份作業讓你親手做一個縮小版:讓 agent 替你當一次 AI 工程師。
用到的官方材料:作業投影片 hw2.pdf(59 頁)、Colab 起始碼(32 個 cell),以及助教的作業說明影片。作業 3/13 公告,截止時間是 2026/4/2 23:59(UTC+8)。
校外讀者能做到哪裡
存取等級 A3(評分鏈除外):
- 拿得到:投影片、Colab 起始碼,以及起始碼裡用
gdown下載的資料集hw2_data.zip(2026-09-30 實測仍可下載,約 99 MB)。 - 拿不到:評分平台 JudgeBoi 目前連不上,程式碼繳交在需要台大帳號的 NTU COOL。所以你看不到 public/private 的實際分數。
- 替代做法:資料集附了 300 張的驗證集,你可以用驗證集 accuracy 對照投影片公布的 baseline 門檻自評。
作業的前提:Context is Everything
投影片前 11 頁先講一件作業以外的事:怎麼和 AI agent 一起寫程式。
第 6 頁引用一份大規模開發者研究的圖:用 AI 寫軟體之後,重工(rework)變多了。第 7–8 頁的回答是「Context is Everything」:LLM 每一步都是依目前的 context 決定下一個動作,context 裡有錯的方向(例如「不要用 XYZ 做法」這種反覆糾正),後面就會一路歪。
第 9–10 頁給出的解法是 Intentional Compaction:在 context 滿之前,請 agent 把「做過什麼、用什麼方法、目前卡在哪」寫進 progress.md,再用這份檔案開新的一輪。投影片示意的比例是 10 萬行程式碼壓成 1 萬行 markdown,並搭配三階段流程:
- Research(可選):理解 codebase、相關檔案、資訊怎麼流動。
- Plan:寫出精確的修改步驟與每一階段的驗證方式。
- Implement:照計畫一階段一階段做,每做完一段就把狀態壓回計畫檔。
第 11 頁的結論是一句話:The Agent is only as smart as the context you provide. 這正是上一講的「卸載記憶」與「subagent 即壓縮」落到日常工作的版本。
任務:10 類角色臉部辨識
第 14–16 頁:
| 項目 | 內容 |
|---|---|
| 任務 | 給一張臉,分成 10 個角色之一 |
| 類別 | MyGO:tomori、anon、soyo、taki、rana;Ave Mujica:sakiko、nyamuchi、umiri、uika、mutsumi |
| 資料量 | 約 2,400 張:訓練 1,600、驗證 300、測試 500(public 與 private 各 250) |
| 格式 | 150×150×3 的圖片,JSON 標註 {"id", "filename", "label"} |
| 指標 | Accuracy |
投影片第 17 頁直接給了方向:**fine-tune ResNet18 跑 5 到 10 個 epoch 就足以超過 strong baseline。**第 18–21 頁複習 CNN 的卷積、激勵函數、池化、全連接,以及局部連接與權重共享,並列出李宏毅 2017、2021 的 CNN 課與 2025 年生成式 AI 課 HW6 當補充。
限制有兩條要特別注意:只能用 CNN 與 LLM,VLM 與其他更強的模型禁止使用;也不能去找額外資料或測試集答案。
起始碼:一個縮小版的 AIDE
Colab 第一格就寫明,程式改自 WecoAI 的 aideml,也就是論文 AIDE: AI-Driven Exploration in the Space of Code。投影片第 23 頁把 AIDE 的主旨濃縮成一句:啟發式的最佳優先搜尋,哪一版程式跑出最好結果,就以它為基礎做下一步最佳化。
起始碼的模組對應如下:
| Colab 區塊 | 做什麼 |
|---|---|
| LLM 載入 | 用 llama-cpp-python 載入 gemma-3-12b-it-Q4_0.gguf,n_ctx=16384,生成用 temperature=0 |
| Interpreter(不准改) | 在子行程裡執行 agent 寫的 runfile.py,收集輸出、例外與執行時間 |
| Node | 一版解答:plan、code、執行結果、是否 buggy、metric;分成 draft/debug/improve 三種階段 |
| Journal | 所有 Node 組成的樹;能列出 buggy 與 good 節點、找最佳節點、產生給 LLM 看的歷史摘要 |
| Agent | search_policy 決定下一步,_draft/_debug/_improve 各自組 prompt,parse_exec_result 解析執行結果 |
| Config | steps(迭代次數)、debug_prob、num_drafts |
search_policy 的邏輯只有三步:draft 數量不足就先 draft;否則以 debug_prob 的機率挑一個 buggy 的葉節點去修;不然就挑 metric 最高的好節點去 improve。投影片第 25–26 頁用圖說明了這個 action space。
先發現這個:評估是空的
打開 parse_exec_result 會看到,起始碼雖然請 LLM 讀了執行輸出,最後卻寫死:
node.is_buggy = False
node.metric = 1.0
也就是說,在你補上評估之前,每一版都被當成沒有 bug、分數一樣。get_best_node 取 metric 最大值時等於隨便挑,debug 分支也永遠不會被觸發。註解裡提示可以用 instructor 強制 LLM 輸出結構化結果,把 accuracy 抽出來。這是整份作業最關鍵的一個 TODO:沒有可靠的評估,樹搜尋就沒有方向。
另外,Config 預設 steps: 1、num_drafts: 1,只會產生一份 draft。投影片第 32 頁說跑預設程式碼就能過 simple baseline,而 simple baseline 的門檻是 0.00。
評分與 baseline
第 32–35 頁:程式碼繳交 4 分,public/private 各三條 baseline 各 1 分,合計 10 分。
| Public baseline | 分數 | 預估 drafting 時間 | 預估訓練時間 |
|---|---|---|---|
| Simple | 0.00 | 5–10 分鐘 | 0–3 分鐘 |
| Medium | 0.65 | 5–10 分鐘 | 3–5 分鐘 |
| Strong | 0.87 | 10–30 分鐘 | 3–5 分鐘 |
時間是在 Colab T4 上估的。投影片特別提醒:過了 public baseline 不保證過 private。JudgeBoi 每天可以上傳 5 次 pred.json。
投影片第 32 頁與第 45–54 頁列出的改進方向:prompt engineering(「想像你在教學生寫程式」)、資料增強(水平/垂直翻轉、±45 度旋轉、裁切、亮度、模糊、雜訊、灰階)、換 LLM 或 CNN、多 draft 並多做 improve 與 debug、補上評估。最後一頁的建議很具體:換 LLM 時先試約 10 GB 的 checkpoint;prompt 要精簡明確;先做資料增強並換一個強一點的 LLM;可以自由修改 pipeline。
規定:LLM agent 是你的代理人
第 37 頁的第一行寫得很重:**LLM agent 是你的代理人,它違規就等於你違規。**具體規定包括:
- 不准使用 GPT-5、Gemini-3 等閉源 LLM API,只能用開源模型(投影片建議從 Hugging Face 挑)。
- 不准手動修改輸入檔或預測檔。FAQ 也一再強調:沒產生預測檔、JSON 格式錯,都要改 prompt 讓 agent 修,不能自己改 Python 或 JSON。
- 固定亂數種子,讓助教能重現預測。
- 不准找額外資料或測試集答案,不准分享程式碼與預測檔。
違規第一次是該作業 0 分且學期總成績乘 0.9,超過一次直接 F。
這條規定其實就是作業的教學目標:你真正交出去的,是一套能讓 agent 穩定產出分類器的 prompt 與流程。
這一篇可以確認與不能確認的
可以確認:hw2.pdf 的全部規定與數字、Colab 起始碼的結構與預設值(逐格讀過)、資料集下載連結在 2026-09-30 仍可用。作業說明影片的標題與上傳者已用 YouTube oEmbed 核對。
不能確認:本文沒有逐字聽寫作業說明影片,也沒有實際在 T4 上跑完整流程,所以沒有自己的 accuracy 數字。private baseline 門檻、JudgeBoi 排行榜與助教的批改結果,校外都拿不到。
怎麼做:今晚打開 Colab,先別換模型,只做兩件事:把 parse_exec_result 改成真的從執行輸出抽出驗證集 accuracy,再把 steps 調到 5。跑完之後看 Journal 裡哪幾個節點被標成 buggy、哪個是最佳節點。這一步做對了,後面所有的 prompt 調整才有回饋可看。
延伸閱讀:站上的 CS231n:CNN 與影像分類補 CNN 本身;coding agent 的 context 壓縮補 Intentional Compaction 的工程細節。
系列導覽:系列總覽|上一篇 AI Agent 之間的互動與對工作的衝擊|下一篇 加快生成(上):Flash Attention
參考資料
- 台大李宏毅《機器學習 2026 Spring》課程頁
- HW2 投影片 hw2.pdf
- HW2 Colab 起始碼
- 影片:ML 2026 Spring hw2 AI Agent as an AI Engineer
- AIDE: AI-Driven Exploration in the Space of Code(arXiv 2502.13138)
- WecoAI/aideml
- humanlayer:advanced-context-engineering-for-coding-agents
- instructor:llama-cpp-python 整合
- unsloth/gemma-3-12b-it-GGUF(Hugging Face)
Loading...