這是 MIT 6.5940 導讀系列第 10 篇,對應 Fall 2024 課程頁上的 Lab 3:Neural Architecture Search。課表上它在 2024 年 10 月 8 日(第 10 講 MCUNet 那天)發下,10 月 22 日(第 13 講那天)截止。題目是一份公開的 Colab notebook,標題寫著「MIT 6.5940 EfficientML.ai Lab 3: Neural Architecture Search」。
它用到的觀念來自前兩講:L7 的搜尋空間與搜尋策略,以及 L8 的 Once-for-All 與效率預測。建議先讀完 L8 那篇再開 notebook。
Fall 2026 對照:Fall 2026 課程頁的 lab 清單有 Lab 3 NAS,但截至 2026-09-30 還沒放出,是否沿用同一份 notebook 未知。
這個 lab 要你做什麼
notebook 開頭一句話交代目標:
"In this lab, you will learn how to search for a tiny neural network that can run efficiently on a microcontroller."
整份作業分兩大段,配分寫在 notebook 裡:
| 段落 | 題目 | 配分 |
|---|---|---|
| Getting Started:super network 與 VWW 資料集 | Q1 | 5 |
| Part 1:Predictors | Q2–Q4 | 30 |
| Part 2:Neural Architecture Search | Q5–Q10 | 65 + 10 bonus |
合計 100 分,外加 10 分 bonus。
開工前:環境與下載內容
第一個 code cell 會安裝 graphviz、thop、onnx,並從 Dropbox 下載兩個壓縮檔:MCUNet 程式碼(mcunetv2-dev-main.zip)與 VWW 資料集(data.zip)。我在 2026-10-01 測過,兩個連結仍可下載,檔案大小分別約 31.7MB 與 376MB。
之後的 cell 把網路搬到 cuda:0,所以要開 GPU runtime。notebook 沒寫最低需要哪一種 GPU。
Getting Started:super network 長什麼樣(Q1,5 分)
notebook 用的是 MCUNetV2 的 super network,以 Once-for-All 的方式訓練。資料集是 Visual Wake Words:從 COCO 抽樣的二元分類,判斷畫面裡有沒有人。
設計空間的規格寫在 notebook 裡:
| 維度 | 可選值 |
|---|---|
| Block 類型 | inverted MobileNet block |
| Depthwise kernel size | 3、5、7 |
| Expand ratio | 3、4、6 |
| 每個 stage 的深度 | base depth 到 base depth + 2 |
| 全域寬度倍率 | 0.5×、0.75×、1.0× |
| 輸入解析度(predictor 用) | 96、112、128、144、160 |
notebook 說這個 OFAMCUNets 裡有超過 10^19 個子網路。直接抽出子網路評估不需要訓練,預期準確度大約落在 83.6–88.7%。
資料切分要注意:build_val_data_loader 的 split=0 是真正的驗證集,不能拿來做架構搜尋;split=1 是 holdout minival,拿來建準確度資料集與校正 BN 參數。
Q1 要你手動多抽幾個子網路、也改改輸入解析度,寫下觀察。提示問的是:哪個維度對準確度影響最大?
Part 1:兩個 predictor(Q2–Q4,30 分)
搜尋時要評估大量子網路,每次都真的推論太慢。notebook 引用 OFA 的說法:在 ImageNet 上算一個子網路的準確度約要 1 分鐘,改用預測器後每個子網路不到 1 秒。
Q2(10 分):efficiency predictor。 實作 AnalyticalEfficiencyPredictor.get_efficiency,用 hook 式分析模型算出子網路的 MACs(單位百萬)與 peak memory(單位 KB)。提示指向兩個現成函式 count_net_flops 與 count_peak_activation_size。另一個方法 satisfy_constraint 已經寫好:逐項比對量測值與限制,任何一項超過就回 False。
Q3(10 分):accuracy predictor。 子網路先經 MCUNetArchEncoder 轉成二元向量:解析度、寬度倍率、每個 block 的 kernel size 與 expand ratio 各自做 one-hot 再串接。notebook 解釋為什麼用 one-hot 而不是數值:這些超參數全是離散值。你要實作的是一個三層 MLP,中間層 400 個 channel。
Q4(10 分):訓練 accuracy predictor。 準確度資料集有 50,000 筆 [架構, 準確度],40,000 筆訓練、10,000 筆驗證。訓練目標不是準確度本身,而是 accuracy - base_acc(base_acc 是全部資料的平均準確度),差值比較小,比較好學。loss 用 L1、optimizer 用 Adam,notebook 說訓練大約 1–2 分鐘。要拿滿分,預測值與真實值的散佈圖要呈現線性相關。
Part 2:搜尋(Q5–Q10,65 分 + 10 bonus)
Q5(5 分):random search。 RandomSearcher 不斷隨機抽樣,直到抽到符合限制的子網路,湊滿 n_subnets 個之後用 accuracy predictor 打分。你要補的只有一行:挑出分數最高的索引。
Q6(5 分):search_and_measure_acc。 你只要補呼叫搜尋那一行;後面的程式會取出最佳子網路、用 holdout 資料校正 BN,再到真正的驗證集上量準確度。notebook 接著用它跑四組限制:MACs ≤ 50M、≤ 100M,peak memory ≤ 256KB、≤ 512KB,每組 300 個樣本。
一個值得自己檢查的地方:random search 那格用的限制 key 是
millonMACs(少一個 i),predictor 回傳的 key 是millionMACs。satisfy_constraint會跳過限制裡找不到的 key,所以那兩組 MACs 限制實際上可能沒有生效。演化搜尋那格用的是正確拼法。跑出來的 MACs 數字不合理時,先看這裡。
Q7(20 分):evolutionary search。 EvolutionSearcher 的骨架已經給了,超參數有 arch_mutate_prob、resolution_mutate_prob、population_size、max_time_budget、parent_ratio、mutation_ratio。突變(解析度、寬度、架構各自按機率變動)已經寫好,你要補兩處:crossover(每個欄位、每個 block 的值都從兩個親代裡隨機挑一個),以及主迴圈每一代開頭的選擇(依預測準確度由高到低排序,只留前 parents_size 個當親代)。之後用突變與 crossover 補回族群的程式已經寫好。
Q8(10 分):調 evo_params。 預設值刻意設得很小(population 10、time budget 10),要你自己調大、比較結果,寫下發現。
Q9(15 分 + 10 bonus):真實限制。 notebook 引用 TensorFlow 部落格的 VWW 文章說明實際應用常同時有多個限制,然後出兩題:
- 250KB、60M MACs,準確度 ≥ 92.5% 拿滿分(15 分)
- bonus:200KB、30M MACs,準確度 ≥ 90% 拿滿分(10 分)
提示說兩題不必用同一組 evo_params。
Q10(10 分):可行性判斷。 在目前的設計空間裡,找不找得到符合這兩組限制的子網路?
- A:activation 最多 256KB,且 MACs 最多 15M
- B:activation 最多 64KB
這題不是寫程式,是要你用前面的 predictor 推論設計空間的邊界。
做完能帶走什麼
- 親手看到 L8 那套流程的每一環:OFA super network 讓「評估一個架構」不需要訓練,predictor 再把評估從推論降到查一個 MLP。
- 效率指標換成 MCU 在意的兩個數字:MACs 與 peak memory(activation),而不是參數量。這正好接到下兩講:L9 知識蒸餾之後,L10 MCUNet 會正面處理 KB 級記憶體的問題。
- 演化搜尋的超參數手感:population、突變率、親代比例怎麼影響在限制下找到的準確度。
校外自學的限制
- 沒有公開解答,也沒有 autograder。 繳交走 MIT 的 Canvas,校外讀者只能靠 notebook 內建的檢查:Q2 用最小與最大子網路比對先前量到的數字,Q4 看散佈圖是否線性,Q9 直接在驗證集上量準確度,門檻寫在題目裡。
- 需要 GPU runtime;下載的程式碼與資料集放在 Dropbox,連結在 2026-10-01 仍有效,之後可能失效。
- 簡答題(Q1、Q8、Q10)沒有評分基準,只能自己對照 L8 投影片檢查推理。
參考資料
- MIT 6.5940 Fall 2024 課程頁
- MIT 6.5940 Fall 2026 課程頁
- Lab 3 Colab notebook(Fall 2024)
- Lin et al., MCUNetV2
- Lin et al., MCUNet(NeurIPS 2020)
- Cai et al., Once-for-All(ICLR 2020)
- Chowdhery et al., Visual Wake Words Dataset
- Visual Wake Words with TensorFlow Lite Micro(TensorFlow Blog)
- 全球 AI/CS 課程地圖(A0–A3 分級)
Loading...