Batch Normalization小簡介(3) — 論文筆記(下)
終於要收尾了。希望能收得完,不然下一篇要叫(下下) XD
實驗
從MNIST資料集開始
這是近代卷積網路的開端,LeNet就是從MNIST資料集辨識開始的[1]。LeNet這個經典模型是一定要再寫一篇文章介紹的,這樣可以複習並試著把CNN的核心基礎概念闡述更清楚。不過,等我把FCN和Unet系列搞定之後再說吧。
作者群用最簡單的神經網路 — 三層全連接層隱藏層,每層約100個啟動函數 — 輸入28×28的二項性影像(binary image)。MNIST本來就是這樣的維度。每一層計算y = g(Wu+b),g為sigmoid的非線性函數,而W的初始化則用高斯隨機分布。最後一層隱藏層後接一個全連接層,只用10個啟動函數(對應10個分類)以及cross-entropy的損失函數。訓練這個網路總計約5萬個steps,平均一個mini-batch約60例。然後按照前面說的方法將神經網路BN化。這個實驗關注的重點在於比較有無BN化之間,神經網路的表現;而非和現今能做到最好表現的神經網路比較,畢竟在架構上是完全不同的。來看一下結果。
只看圖也可以得到結論。不過建議看看圖片旁的敘述,會更清楚。
挑戰ImageNet資料集
接下來要使用的對象複雜得多,是Inception的改良型[2]。這個神經網路也很經典,之後有時間也會寫一篇探討。讀個batch normalization結果多挖了好幾個坑,糟糕糟糕…。
這個神經網路模型有大量的卷積和池化,最後的損失函數使用softmax來辨認超過1000種類的圖片;啟動函數則使用非線性的ReLu。主要的改良在於把單一層的5×5卷積核換成連續兩層的3×3卷積,過濾器也增加到128個(變成128個channel)。全神經網路含有13.6×10⁶個參數,且只有最後一層softmax是全連接層。訓練過程使用SGD且不用momentum,mini-batch定為32。評估方式主要看驗證的正確率。
作者群使用數個方式修改這個神經網路架構,並和BN結合。BN化主要的目標是卷積網路,如前一篇所討論的。
加速BN網路
單純的加入BN並沒辦法得到最大的好處,因此作者群又做了一些調整:
1. 增加學習速率。根據之前的證明,加大學習速率在BN中帶來的影響較小。
2. 移除dropout。因為BN可以取代dropout的功能,於是把它完全移除以增加效率。
3. 減少L2 regularization。在BN化的神經網路架構下L2 regulariztion減少功能至原本的1/5,加上BN本身就有調節避免overfitting的問題,於是減少一部分的regularization。Regularization本身是對權重調整的一種懲罰(負向)機制,也就是為了讓權重調整的不那麼快,添加一些參數干擾神經網路學習,以減少過度配適。L2型態的regulariztion通常是用「平方」的概念添加,以和L1型態用「絕對值」的方式做區別。
3. 加速學習效率調降。原本的神經網路是以指數的方式調降學習速率,作者群把它再調快6倍。
4. 移除local response normalization(LRN)。這個是從AlexNet開始被引入的概念,主要是為了增加學習效率(見AlexNet)。加了BN之後發現LRN不再有用,於是移除。
5. 更徹底的將訓練資料洗牌。主要是為了避免同樣幾筆資料重複進到相同的mini-batch。這幫助提升了1%的驗證準確度。
6. 減少影像扭轉。BN化的神經網路快又能瀏覽同一訓練資料較多次,因此讓它專注在「真實」的圖片,減少使用資料增量的作法。
單一網路分類能力比較
以下神經網路的比較皆使用ILSVRC 2012的訓練資料集,並以驗證資料做測試。
- Inception:完全不使用BN。初始學習速率設定為0.0015。
- BN-Baseline:加入BN。
- BN-x5:上面提到的加速BN網路版。初始學習速率定為原本的5倍,0.0075。
- BN-x30:和3.一樣,但初始學習速率調快30倍(0.045)。
- BN-x5-Sigmoid:和3.一樣,但啟動函數由ReLu改成sigmoid。作者群也有試著把原本的Inception換成sigmoid來訓練,但正確率和隨機猜測差不多低。
Inception在31×10⁶步驟後達到最大正確率72.2%。
BN化的神經網路,在不調整學習速率的情況下,要達到Inception的最大正確率就只花不到原本一半的steps。學習速率調快五倍之後,steps數再減將近4/5,這個數字實在很銷魂。但有趣的是學習速率調快到30倍之後,需要的steps反而上升了。不過相對的,它可以達到更高的正確率 — 它只花6×10⁶就達到74.8%的正確率 — 比Inception快5倍。
即使換成sigmoid這種有飽和區間的啟動函數,BN還是可以有效消除內在變項移動而加快學習速率。BN-x5-Sigmoid達到69.8%的正確率,而Inception若用sigmoid訓練,其正確率從未達到超過1/1000。
組合神經網路分類能力比較
在文章投稿當下(2015年),針對ILSVRC資料集表現最好的神經網路是Deep Image ensemble of traditional models[3]和何鎧明的ensemble model[4]。後者的top-5錯誤率僅4.94%。但作者群表示,BN的神經網路訓練可以讓驗證集錯誤率達到4.9%,測試集錯誤率僅4.82%!這不僅是把最佳紀錄往前推進,也超越了人類肉眼辨識的準確度。
作者群用了六個神經網路堆疊組合。每一個神經網路都以BN-x30當基底,然後做一些調整:例如在卷積網路增加初始權重設定、微增加dropout(5%/10%,原本的inception是40%)、以及在最後隱藏層針對每個啟動函數BN化,但不採用卷積網路。每一個神經網路約在6×10⁶steps達到最大正確率。此組合神經網路的預測結果是根據個子網路的預測結果取平均,其他細節則和[2]中的設定大致雷同。
結論
說了這麼多,這篇論文終於來到尾聲。
Batch Normalization的核心目標是降低internal covariate shift,這是一個嚴重影響訓練效率的關鍵。作法是把輸入標準化,使啟動函數也標準化,以確保神經網路在訓練時不被輸入資料的分布過度干擾。為了配合隨機梯度下降的運作和保持運算的合理性,運用mini-batch的概念讓資料之間保持一定的關聯性。
BN只在每個啟動函數前增加兩個參數,不至於影響神經網路本身的特色。它可以增加學習速率,而且又避免overfitting,甚至可以取代dropout和regularization。在實驗階段,也成功證明BN化的神經網路無論在單一或是組合神經網路都有很出色的表現,甚至贏過目前的領先者。
其實在這篇文章之前也有人提出類似的概念[5],但是標準化的對象不同。在[5],標準化的對象放到輸出,也就是啟動函數之後。這導致了發散的啟動函數結果,相對應BN則是沒有輸入發散的問題。此外BN有使用可學習參數來處理映射轉換,以及mini-batch,還有針對卷積網路,和各層BN化的概念。
文章中提到接下來作者群要挑戰RNN(recurrent neural network),這是一個梯度更容易消失或爆炸的神經網路架構。此外,也可以針對基礎理論和領域適應的部分繼續努力。文章末尾以謙虛而充滿期待的語氣期待BN未來的發展。
以上就是這篇論文的介紹。歡迎指教。
Reference
[1] LeCun, Y., Bottou, L., Bengio, Y., and Haffner, P. Gradient-based learning applied to document recognition. Proceedings of the IEEE, 86(11):2278–2324, November 1998a.
[2] Szegedy, Christian, Liu, Wei, Jia, Yangqing, Sermanet, Pierre, Reed, Scott, Anguelov, Dragomir, Erhan, Dumitru, Vanhoucke, Vincent, and Rabinovich, Andrew. Going deeper with convolutions. CoRR, abs/1409.4842, 2014.
[3] Wu, Ren, Yan, Shengen, Shan, Yi, Dang, Qingqing, and Sun, Gang. Deep image: Scaling up image recognition, 2015.
[4] He, K., Zhang, X., Ren, S., and Sun, J. Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification. ArXiv e-prints, February 2015.
[5] Gulcehre, Caglar and Bengio, Yoshua. Knowledge matters: Importance of prior information for optimization. CoRR, abs/1301.4083, 2013.