詳解何愷明團隊最新作品:源於Facebook AI的RegNet
機器之心發表於2020-06-19
前段時間,何愷明組的研究者提出了一種新的網路設計正規化。與以往研究不同,他們沒有專注於設計單個網路例項,而是設計出了引數化網路群的網路設計空間。這種新的網路設計正規化綜合了手工設計網路和神經架構搜尋(NAS)的優點。在類似的條件下,他們設計出的網路超越了當前表現最佳的 EfficientNet 模型,在 GPU 上實現了 5 倍的加速。本文是對這一論文的詳細解讀。
論文連結:https://arxiv.org/pdf/2003.13678.pdf在之前的介紹中,我們說到了 AnyNet 的設計空間,先回顧下:AnyNet 設計空間。我們的重點是探索假定標準的固定網路塊 (例如,剩餘瓶頸塊) 的神經網路結構。在我們的術語中,網路的結構包括一些元素,如塊的數量 (即網路深度)、塊的寬度(即通道的數量) 和其他塊的引數(如瓶頸比率或組的寬度)。網路的結構決定了計算、引數和記憶體在整個網路計算圖中的分佈,是決定其準確性和效率的關鍵。我們現在將這種方法應用於 AnyNetX 設計空間。為了清晰起見,我們將最初的、不受約束的 AnyNetX 設計空間稱為 AnyNetXA。我們首先測試 AnyNetXA 設計空間的所有階段 i 的共享瓶頸比 bi = b,並將得到的設計空間稱為 AnyNetXB。與之前一樣,我們在相同的設定下從 AnyNetXB 取樣和培訓了 500 個模型。如下圖 (左) 所示,AnyNetXA 和 AnyNetXB 的 edf 在平均情況和最佳情況下實際上是相同的。這表示在耦合 bi 時沒有精度損失。除了更簡單之外,AnyNetXB 更易於分析,參見下圖(右側)。我們的第二個細化步驟緊跟著第一個步驟。從 AnyNetXB 開始,我們還為所有階段使用共享的組寬度 gi = g 來獲得 AnyNetXC。與前面一樣,EDFs 幾乎沒有變化,請參見上圖(中間)。總的來說,AnyNetXC 比 AnyNetXA 少了 6 個自由度,並且減少了近 4 個數量級的設計空間大小。有趣的是,我們發現 g > 1 是最好的(沒有顯示); 我們將在後面對此進行更詳細的分析。接下來,我們將研究下圖中 AnyNetXC 中好的和壞的網路的典型網路結構。一種模式出現了: 良好的網路具有不斷增長的寬度。我們測試了 wi+1≥wi 的設計原則,並將此約束下的設計空間稱為 AnyNetXD。在下圖 (左) 中,我們看到這極大地改進了 EDF。稍後我們將討論控制寬度的其他選項。在進一步檢查許多模型 (未顯示) 後,我們觀察到另一個有趣的趨勢。除了階段寬度 wi 隨 i 增加外,對於最佳模型,階段深度 di 也同樣趨向於增加,儘管不一定是在最後階段。儘管如此,在上圖 (右) 中,我們測試了一個設計空間變體 AnyNetXE,其中 di+1≥di,並看到它也改善了結果。最後,我們注意到對 wi 和 di 的約束使設計空間減少了 4!,與 AnyNetXA 相比 O(107)的累積減少。為了進一步瞭解模型結構,我們在一個圖中顯示了來自 AnyNetXE 的最好的 20 個模型,見下圖(左上)。對於每個模型,我們繪製每個塊 j 的每塊寬度 wj,直到網路深度 d(我們分別使用 i 和 j 來索引階段和塊)。雖然在個別模型 (灰色曲線) 中存在顯著的差異,但在總體上出現了一種模式。特別地,在相同的圖中,我們顯示了 0≤j≤20 時的 wj = 48·(j+1)(實心黑色曲線,請注意 y 軸是對數的)。值得注意的是,這種瑣碎的線性擬合似乎可以解釋頂級模型網路寬度增長的總體趨勢。然而,請注意,這個線性擬合為每個塊分配了不同的寬度 wj,而單個模型具有量化的寬度(分段常數函式):要檢視類似的模式是否適用於單個模型,我們需要一種策略來將一條線量化為分段常數函式。受 AnyNetXD 和 AnyNetXE 的啟發,我們提出了以下方法。首先,我們引入一個塊寬的線性引數化:該引數化有三個引數: 深度 d、初始寬度 w0 >和斜率 wa > 0,併為每個區塊 j < d 生成不同的區塊寬度 uj。為了量化 uj,我們可以將每個塊的 wj 轉換為我們的每個階段的格式,只需計算具有恆定寬度的塊的數量,即每個階段 i 的塊寬度 wi = w0·w im,塊數量 di = P j 1[bsj e = i]。當只考慮四個階段網路時,我們忽略了引起不同階段數的引數組合。我們通過擬合來自 AnyNetX 的模型來測試這個引數化。特別地,在給定的模型中,我們透過設定網路深度 d 並在 w0、wa 和 wm 上執行網格搜尋來計算擬合,從而最小化每個塊寬度的預測與觀察的平均日誌比 (用 efit 表示)。來自 AnyNetXE 的兩個頂級網路的結果下圖所示(右上角)。量化的線性擬合(虛線) 是這些最佳模型 (實線) 的良好擬合。接下來,我們透過 AnyNetXE 繪製 AnyNetXC 中每個網路的擬合錯誤 efit 與網路錯誤,如上圖 (底部) 所示。首先,我們注意到每個設計空間中最好的模型都具有良好的線性擬合。實際上,經驗引導法給出了一個接近於 0 的 efit 窄頻帶,它可能包含每個設計空間中最好的模型。其次,我們注意到 efit 從 AnyNetXC 到 AnyNetXE 的平均效能得到了改善,這表明線性引數化自然地對 wi 和 di 的增加施加了相關的約束。為了進一步檢驗線性引數化,我們設計了一個只包含線性結構模型的設計空間。特別地,我們透過 6 個引數來指定網路結構: d, w0, wa, wm(以及 b, g),給定這些引數,我們透過 Eqn 來生成塊的寬度和深度。我們將最終的設計空間稱為 RegNet,因為它只包含簡單的、常規的模型。我們對 d < 64、w0、wa < 256、1.5≤wm≤3 和 b、g 進行取樣(根據 AnyNetXE 上的 efit 設定範圍)。我們通過擬合來自 AnyNetX 的模型來測試這個引數化。特別地, 在給定的模型中, 我們透過設定網路深度 d 並在 w0, 佤邦和 wm 上執行網格搜尋來計算擬合, 從而最小化每個塊寬度的預測與觀察的平均日誌比 (用 efit 表示)。來自 AnyNetXE 的兩個頂級網路的結果如上圖所示(右上角)。量化的線性擬合(虛線) 是這些最佳模型 (實線) 的良好擬合。上圖 (左) 顯示了 RegNetX 的 EDF 錯誤。在維護最佳模型的同時,RegNetX 中的模型具有比 AnyNetX 更好的平均錯誤。在上圖 (中間) 中,我們測試了兩個進一步的簡化。首先,使用 wm = 2(兩個階段之間的寬度加倍)稍微提高了 EDF,但是我們注意到使用 wm≥2 效能更好 (稍後將展示)。其次,我們測試設定 w0 = wa,進一步將線性引數化簡化為 uj = wa·(j + 1),有趣的是,這樣做的效果更好。然而,為了保持模型的多樣性,我們不施加任何限制。最後,在上圖(右) 中,我們展示了 RegNetX 的隨機搜尋效率要高得多; 只對∼32 隨機模型進行搜尋可能會得到好的模型。上表顯示了設計空間大小的摘要(對於 RegNet,我們透過量化其連續引數來估計大小)。在設計 RegNetX 時,我們將原始 AnyNetX 設計空間的維度從 16 個維度縮減為 6 個維度,大小接近 10 個數量級。但是,我們注意到,RegNet 仍然包含各種各樣的模型,可以針對各種設定進行調優。我們在只有一個塊型別的低計算、低曆元訓練機制中設計了 RegNet 設計空間。然而,我們的目標不是為單一的設定設計一個設計空間,而是發現可以推廣到新設定的網路設計的一般原則。在上圖中,我們將 RegNetX 設計空間與 AnyNetXA 和 AnyNetXE 在更高的 flops、更高的 epoch、5 級網路和各種塊型別 (在附錄中進行了描述) 下進行了比較。在所有情況下,設計空間的順序是一致的,使用 RegNetX > AnyNetXE > AnyNetXA。換句話說,我們沒有看到過度擬合的跡象。這些結果很有希望,因為它們表明 RegNet 可以泛化到新的設定。5 階段的結果表明,正則 RegNet 結構可以推廣到更多的階段,其中 AnyNetXA 具有更多的自由度。接下來,我們將進一步分析 RegNetX 設計空間,並回顧常見的深度網路設計選擇。我們的分析產生了與流行實踐不匹配的驚人見解,這使我們能夠用簡單的模型獲得良好的結果。由於 RegNetX 設計空間擁有高度集中的優秀模型,對於以下結果,我們將轉換為抽樣較少的模型(100 個),但對它們進行更長時間的培訓(25 個 epoch),學習率為 0.1(參見附錄)。我們這樣做是為了觀察網路行為中更細微的趨勢。我們在下圖中展示了在整個觸發器中 RegNetX 引數的變化趨勢。值得注意的是,最佳模型的深度在不同區域 (左上) 是穩定的,最優深度為∼20 塊 (60 層)。這與在更高的翻背越高的體制中使用更深的模式的慣例形成了對比。我們還觀察到,最佳模型使用的瓶頸比 b 為 1.0(上 - 中),這有效地消除了瓶頸(在實踐中經常使用)。接下來,我們觀察到好模型的寬度倍增器 wm 為∼2.5(右上角),這與流行的跨階段加倍寬度的方法相似,但並不完全相同。其餘引數(g、wa、w0) 隨複雜度增加而增加(底部)。除了 flops 和引數之外,我們還分析了網路啟用,我們將其定義為所有 conv 層的輸出張量的大小 (我們在下圖(左上角) 中列出了常見 conv 運算子的複雜性度量)。雖然啟用不是測量網路複雜性的常用方法,但它會嚴重影響記憶體限制硬體加速器 (例如,gpu、TPUs) 上的執行時,參見下圖 (頂部)。在下圖(底部) 中,我們觀察到,對於總體中的最佳模型,啟用隨 flops 的平方根增加而增加,引數線性增加,由於執行時對 flops 和啟用的依賴性,最好同時使用線性和平方根項進行建模。利用這些發現,我們改進了 RegNetX 設計空間。首先,根據上上張圖 (top),我們令 b = 1, d≤40,wm≥2。其次,我們限制引數和啟用,如上圖 (底部) 所示。這將生成快速、低引數、低記憶體的模型,而不會影響準確性。在下圖中,我們使用這些約束對 RegNetX 進行了測試,並觀察到約束的版本在所有的觸發器狀態下都是優越的。現代行動網路通常採用倒置瓶頸 (b < 1) 提出了 [M. Sandler, A. Howard, M. Zhu, A. Zhmoginov, and L.-C.Chen. Mobilenetv2: Inverted residuals and linear bottlenecks. In CVPR, 2018] 隨著切除 conv(g = 1)。在下圖 (左), 我們觀察到倒置瓶頸略有降低了 EDF, 切除 conv 執行更糟糕的是相對於 b = 1, g≥1 進一步分析(見文章的附錄)。接下來,在[M. Tan and Q. V. Le. Efficientnet: Rethinking model scalingfor convolutional neural networks. ICML, 2019] 的啟發下,我們測試了下圖 (中間) 中變化的解析度,[M. Tan and Q. V. Le. Efficientnet: Rethinking model scalingfor convolutional neural networks. ICML, 2019]發現縮放輸入影像解析度是有幫助的。與 [M. Tan and Q. V. Le. Efficientnet: Rethinking model scalingfor convolutional neural networks. ICML, 2019] 相反,我們發現對於 RegNetX,固定的 224×224 解析度是最好的,即使在更高的 flops。最後,我們使用流行的擠壓 - 激勵 (SE) op 來評估 RegNetX(我們將 X+SE 縮寫為 Y,並將最終的設計空間稱為 RegNetY)。在上圖(右) 中,我們看到 RegNetY 產生了良好的收益。我們現在比較的頂級模型從 RegNetX 和 RegNetY 設計空間在各種複雜的狀態,對 ImageNet 的藝術狀態。我們使用小的大寫字母來表示單個的模型,例如 REGNETX。我們還在模型後面加上了觸發器機制,例如 400MF。對於每個觸發器機制,我們從 RegNet 引數的 25 個隨機設定 (d、g、wm、wa、w0) 中選出最佳模型,並在 100 個 epoch 時對 top 模型進行 5 次再訓練,以獲得可靠的誤差估計。上圖分別顯示了每種翻牌制度的最高 REGNETX 和 REGNETY 模型。除了上面分析的簡單線性結構和趨勢外,我們還觀察到一個有趣的模式。即高階觸發器模型在第三階段積木數量較多,在最後階段積木數量較少。這與標準 RESNET 模型的設計類似。此外,我們觀察到群寬度 g 隨著複雜度的增加而增加,但是深度 d 對於大型模型來說是飽和的。我們的目標是執行公平的比較,並提供簡單且易於複製的基線。我們注意, 以及更好的架構, 最近的報導在網路效能是基於增強培訓設定和正規化方案(見下表)。我們的重點是評估網路架構, 我們表現的小心控制的實驗設定在同樣的培訓。特別是,為了與經典作品進行公平的比較,我們沒有使用任何培訓時間的增強。