Batch Normalization 介紹

李謦伊
謦伊的閱讀筆記
5 min readOct 30, 2020

--

隨著神經網路越來越深,為了使模型更加穩定,Batch Normalization 已成了目前神經網路的標準配備之一,本文就要來介紹什麼是 Batch Normalization

Google 於 2015 年提出了 Batch Normalization 的方法,和輸入數據先做 feature scaling 再進行網路訓練的方法類似。在輸入數據時,通常都會先將 feature 做 normalize 後再進行訓練,可以加速模型收斂;而 Batch Normalization 就是指在每一層輸入都做一次 normalize

論文連接 📄

Batch Normalization 的作法就是對每一個 mini-batch 都進行正規化到平均值為0、標準差為1的常態分佈,如此一來可以將分散的數據統一,有助於減緩梯度消失以及解決 Internal Covariate Shift 的問題,同時可以加速收斂,並且有正則化的效果 (可以不使用Dropout)

下圖為 Batch Normalization 的計算方式,會先將 mini-batch 進行正規化至平均值為0、標準差為1,最後引入了參數γ、β,分别為 scale 和 shift,讓模型學習其適合的特徵分佈

接下來就來講講 Batch Normalization 在深度學習中如此重要的原因

  • 減緩梯度消失的問題

Batch Normalization 是如何減緩梯度消失的呢?

輸入數據在送進神經網路前,會先經過激活函數的計算,假設激活函數使用 Sigmoid,那數據值分佈在0附近的區間才能有效地進行傳遞,所以數據值的分佈變得非常重要

由下圖可以看到使用 Normalization 的數據在通過激活函數後,可以得到分佈較為平均的輸出;而沒有使用 Normalization 的數據則是在通過激活函數後,大部分值都到達了飽和區,容易導致梯度消失的問題

source
source
  • 解決 Internal Covariate Shift 的問題

❓ 什麼是 Internal Covariate Shift ?

在講 Internal Covariate Shift 之前,先來講什麼是 Covariate Shift

在機器學習中的一個重要假設 independent and identically distributed (獨立同分佈,IID),假設訓練集與測試集是滿足獨立且相同分佈,那通過訓練集訓練出的模型在測試集上能獲得好的結果,也就是說模型具有泛化能力。但是若訓練集與測試集的分佈不一致,就叫做 Covariate Shift

Internal Covariate Shift 的 Internal 是指神經網路的內部。神經網路通常會有多層,Internal Covariate Shift 就是指神經網路內部各個層的數據分佈不一致的問題。更詳細的說明就是指神經網路的參數會隨著每一層的訓練更新,而每一次的參數更新都會使輸入數據的分佈產生變化,導致輸出的分佈改變,這個現象稱為 Internal Covariate Shift (ICS)

❓ Internal Covariate Shift 造成什麼樣的問題?

因為每一層的參數都會受到前面所有層的參數影響,造成每層的數據分佈不一致,導致神經網路要不斷地學習新的分佈,此外這些變化隨著層數越深而越大,使得模型訓練變得困難。過去為了解決這個問題只能設定較低的學習率 (learning rate),造成收斂速度過慢,而且因為每層的參數更新都會影響到後面層,因此每層更新的策略需要更謹慎

  • 加速模型收斂

前面有說到在輸入數據時,通常都會先將 feature 做 normalize 後再進行訓練,這是因為未使用 Normalization 的話,feature 之間對結果的影響會有差異,導致預測不準確

我們來看看有無使用 Normalization 的比較圖,下圖左邊為未使用 Normalization 時,feature 之間對 loss 值的影響。可以看出 x1 值比較小,所以 w1 對 loss 的影響比較小,在 w1 方向上比較平滑;而 x2 的值較大,所以 w2 對 loss 的影響會比較大,在 w2 方向上比較劇烈。這樣會導致在做梯度下降法 (Gradient Descent) 計算成本函數 (Cost Function) 時,需要較多的迭代步驟

如果使用 Normalization,此時數據之間對於結果的影響是相同的,如下圖右邊的圖,x1 與 x2 對於 loss 的影響是差不多的,如此可以加快收斂速度

source

使用 Normalization 可以加速收斂,那在每層都使用 Normalization,也就是指 Batch Normalization 同樣也可以加速收斂。另外,Batch Normalization 可以讓每層的數據分佈一致,讓數值更穩定,因此可以使用較高的學習率優化,提高模型的學習速度

  • 具有正則化效果

由於 Batch Normalization 是在每個 mini-batch 上做計算,而非在整個數據集上,可想而知每個 mini-batch 的平均值與標準差有所不同,因此其平均值與標準差會有一些小噪音,也為神經網路訓練的過程中添加了隨機噪音。而這些輕微噪音與 Dropout 所帶來的噪音類似,因此 Batch Normalization 也會有正則化的效果

以上就是 Batch Normalization 的介紹啦~~

--

--

李謦伊
謦伊的閱讀筆記

AI Engineer, Enjoy Deep Learning, Machine Learning~Contact me: chingi.lee071@gmail.com