批歸一化和Dropout不能共存?這篇研究說可以
自批歸一化提出以來,Dropout 似乎就失去了用武用地,流行的深度架構也心照不宣地在批歸一化上不採用 Dropout。今天介紹的這篇論文另闢蹊徑,提出新型 IndependentComponent(IC)層,將批歸一化和 Dropout 結合起來,加快模型收斂速度。此外,在 Keras 中只需幾行 Python 代碼即可輕鬆實現 IC 層。
現代深度神經網路的高效訓練很難實現,因為你往往要輸入數百萬條數據。因此,開發新的技術來提高 DNN 的訓練效率一直是該領域比較活躍的研究主題。
近期,來自騰訊、港中文和南開大學的研究者提出了一種新的訓練技術,將兩種常用的技術——批歸一化(BatchNorm)和 Dropout 結合在一起。新技術可以使神經網路的輸入相互獨立,而這兩種技術單獨都無法實現這一點。
這兩種技術的結合給我們提供了一個新視角,即如何利用 Dropout 來訓練 DNN,並實現白化每一層輸入的原始目標 (Le Cun et al., 1991; Ioffe & Szegedy, 2015)。
該研究的主要貢獻如下:
- 在其新提出的獨立組件(Independent Component,IC)層中結合了兩種流行的技術:批歸一化和 Dropout。該 IC 層可以降低任意一對神經元之間的交互信息和相關係數,這能加快網路的收斂速度。
- 為了證實該理論分析,研究者在 CIFAR10/100 和 ILSVRC2012 數據集上進行了廣泛的實驗。實驗結果證明,本文的實現在三個方面提升了當下網路的分類性能:i) 更穩定的訓練過程,ii) 更快的收斂速度,iii) 更好的收斂極限。
為什麼要將 Dropout 和批歸一化結合?
該研究的動機是重新尋找一種白化每一個輸入層的高效計算方法。
白化(whitening)神經網路的輸入能夠實現較快的收斂速度,但眾所周知,獨立的激活函數必須白化。
研究者試圖使每一個權重層的網路激活函數更加獨立。最近的神經科學發現表明:神經系統的表徵能力隨群體中獨立神經元數量的增加而線性增加(Moreno-Bote et al., 2014; Beaulieu-Laroche et al., 2018),這一發現可以支持以上做法。因此,研究者使得權重層的輸入更加獨立。獨立的激活函數的確使得訓練過程更加穩定。
生成獨立組件的直觀解決方案是引入一個附加層,該層在激活函數上執行獨立組件分析(ICA)。Huang 等研究者(2018)也曾探索過類似的想法,他們採用零相位組件分析(ZCA)來白化網路激活函數,而不是使其獨立。ZCA 總是作為 ICA 方法的第一步,但 ZCA 本身需要大量計算,對於寬神經網路來說尤其如此。
為了解決這一棘手的問題,研究者發現批歸一化和 Dropout 可以結合在一起,為每個中間權重層中的神經元構建獨立的激活函數。
Dropout 和批歸一化怎麼結合?
為表述方便,本文將 {-BatchNorm-Dropout-} 表示為獨立組件(IC)層。IC 層以一種連續的方式將每對神經元分開,應用 IC 層可以使得神經元更加獨立。本文所用的方法可以直觀地解釋為:
BatchNorm 歸一化網路激活函數,使它們的均值和單位方差為零,就像 ZCA 方法一樣。Dropout 通過在一個層中為神經元引入獨立的隨機門來構造獨立的激活函數,允許神經元以概率 p 輸出其值,否則輸出 0 來停用它們。直觀上來說,一個神經元的輸出傳遞的信息很少一部分來自其他神經元。因此,我們可以假設這些神經元在統計上是彼此獨立的。3.1 節在理論上證明,本文中提到的 IC 層可以將任意兩個神經元輸出之間的相互信息減少 p^2 倍,相關係數減少 p,其中 p 為 Dropout 概率。作者表示,據他們所知,以前從未有研究者提出 Dropout 的這種用法。
與 ICA 和 ZCA 等傳統的無監督學習方法不同,研究者不需要從獨立特徵中恢復原始信號或保證這些特徵的獨特性,只需要提取一些有用特徵即可,這樣有助於實現監督學習任務。他們的分析表明,提出的 IC 層應置於權重層而非激活層之前。
圖 1:(a)在權重層和激活層之間執行白化運算(或稱為 BatchNorm)的常見做法。(b)研究者提出將 IC 層置於權重層之前。
為評估 IC 層的實際使用情況,研究者利用 IC 層改進 ResNet 架構,發現這些架構的性能可以得到進一步提升。
CIFAR10/100 和 ILSVRC2012 數據集上的實證表明,提出的 IC 層能夠提升當前網路的泛化性能。
IC 層的實現使得研究者重新思考 DNN 設計中將 BatchNorm 置於激活函數之前的常見做法。一些研究者已經論證了這樣處理 BatchNorm 的有效性,但還沒有分析來解釋如何處理 BatchNorm 層。BatchNorm 的傳統用法已被證明能夠使得優化過程更加平滑,並使梯度行為的預測性更強且更穩定。
但是,BatchNorm 的此類用法依然阻止網路參數在梯度方向上進行更新,而這是實現最小損失的最快方法,並且呈現出一種曲折的優化行為。與之前批歸一化和 Dropout 在激活層之前同時被使用不同,本文研究者提出,批歸一化和 Dropout 的作用類似於 ICA 方法,所以應置於權重層之前。如此一來,訓練深度神經網路時會實現更快的收斂速度。理論分析和實驗結果表明,批歸一化和 Dropout 應結合作為 IC 層,這樣將來能夠廣泛應用於訓練深度網路。
IC 層可以用幾行 Python 代碼輕鬆實現,如下圖所示:
圖 2:基於 Keras 用幾行 Python 代碼實現 IC 層。
實驗
在本文中,研究者嘗試用一堆 -IC-Weight-ReLU- 層來實現 ResNet。遵循 (He et al., 2016b),研究者研究了三種不同類型的殘差單元,每種都有其獨特的短路徑,如圖 3(b)所示,且旨在找到最好的殘差單元。
圖 3:(a) 經典的 ResNet 架構,其中 + 表示求和。(b) 用 IC 層重構的 ResNet 架構。
研究者在基準數據集上實現了重構的 ResNet 架構,以評估 IC 層的實際效用。這些測試集包括 CIFAR10/100 和 ILSVRC2012 數據集。為了公平比較,研究者還為 IC 層引入了一對可訓練的參數,該參數縮放和變換由 BatchNorm 歸一化的值,這樣重構的 ResNet 將具有與相應的基線架構相同數量的可訓練參數。
表 1:訓練結束時,在 CIFAR10/100 數據集上 ResNet 和用 IC 層實現的 ResNet-B 的測試結果對比。
圖 4:訓練不同的 epoch 時,在 CIFAR10/100 數據集上 ResNet 和用 IC 層實現的 ResNet-B 的測試準確率。(a) 在 CIFAR 10 上實現的 ResNet110;(b) 在 CIFAR 10 上實現的 ResNet164;(c) 在 CIFAR 10 上實現的 ResNet-B 110;(d) 在 CIFAR 10 上實現的 ResNet-B 164;(e) 在 CIFAR 100 上實現的 ResNet110;(f) 在 CIFAR 100 上實現的 ResNet164;(g) 在 CIFAR 100 上實現的 ResNet-B 110;(h) 在 CIFAR 100 上實現的 ResNet-B 164。
圖 5:在 ImageNet 驗證集上的 Top-1 和 Top-5(1-crop testing)誤差率。
論文鏈接:https://arxiv.org/pdf/1905.05928.pdf
※計算機圖形學遇上深度學習,針對3D圖像的TensorFlowGraphics面世
※太極:MIT華人學神開源的計算機圖形庫
TAG:機器之心 |