神經架構搜尋(neural architecture search)
神經架構搜尋(NAS)是把架構設計自動化的計畫:不再由人來決定要堆疊多少層、使用哪些濾鏡尺寸、以及如何接線,而是讓一個演算法在可能架構的空間中搜尋,自行發掘好的架構。任何 NAS 方法都由三個元件定義。搜尋空間(search space)規定哪些架構是被允許的(例如,一個可重複的單元中可以出現哪些運算、單元之間如何連接)。搜尋策略(search strategy)是如何探索這個空間(強化學習、演化演算法、或基於梯度的最佳化)。效能估計策略(performance estimation strategy)是如何在不完整訓練每一個候選的情況下判斷其品質,因為那樣會貴得難以承受。
早期的里程碑工作使用強化學習:一個控制器網路提出一個架構,該架構被訓練與評估,其驗證準確率被當作獎勵來更新控制器(Zoph 與 Le,2017)。演化方法則維護一個架構族群,對最適者進行突變與選擇(例如 AmoebaNet)。這些方法產生了如 NASNet 般確實強大的網路,但代價驚人,單次搜尋往往要數千 GPU-天,因為每個候選都必須幾乎從頭訓練。這個成本是核心障礙,也是後續多數研究的焦點。
有兩個想法讓 NAS 變得實用。權重共享(weight sharing,即 one-shot 做法)訓練單一的大型超網路(supernet),其中每個候選架構都是其中的一條子路徑,所以個別候選可以藉由繼承超網路的權重來評估、而非從頭訓練(ENAS,接著是 DARTS)。DARTS 尤其讓搜尋可微分,做法是把「該用哪個運算」這個離散選擇鬆弛成一個連續、可學習的加權,於是架構可以用一般的梯度下降來最佳化,把搜尋成本砍到幾個 GPU-天。NAS 已產出具影響力、被部署的模型——EfficientNet 的基線 B0、MobileNetV3、以及許多專門的裝置端網路,都是用 NAS 找出或調整的,而硬體感知(hardware-aware)的 NAS 如今直接針對目標晶片上的實測延遲進行最佳化。但仍有警語:結果可能對搜尋空間敏感(一個設計良好的空間做了大部分的工作)、可重現性與公平比較一直具爭議、而像 RegNet 或 ConvNeXt 這樣強的人工基線往往與搜尋出的模型旗鼓相當,因此 NAS 是一個強大的工具,而非設計洞見的自動替代品。
一個反覆出現的批評:當搜尋空間已經被人工打造成大多是好架構時,NAS 看起來會比實際上更厲害,因為演算法的貢獻很難從人的貢獻中分離出來。永遠要問:結果有多少來自搜尋本身、又有多少來自它被允許搜尋的那個空間。