「批次標準化 (BN - Batch Normalization)」是一種在深度學習中廣泛使用的技術,特別是在訓練非常深的網路(例如 CNN)時,用於提高模型的性能和穩定性。它通過標準化(即將數據調整為具有零均值和單位方差)網路中每一層的輸入來實現這一點。
你可以將批次標準化想像成在每一層神經元接收輸入之前,都對這些輸入數據進行一次「預處理」,使得它們的分布更加一致。
批次標準化的主要目標和優點:- 提高訓練速度: 批次標準化可以減少內部協變量偏移 (Internal Covariate Shift) 的問題。內部協變量偏移指的是在訓練過程中,由於前一層的參數不斷更新,導致後續層接收到的輸入數據的分布不斷變化。這會使得後續層需要不斷地適應新的輸入分布,從而減慢了學習速度。批次標準化通過將每一層的輸入數據標準化到相似的範圍內,減輕了這種偏移,使得網路可以更快地學習。
- 允許使用更高的學習率: 標準化後的數據具有更穩定的分布,這使得我們可以更大膽地設置學習率,而不用擔心訓練過程發散。更高的學習率通常可以加快訓練速度。
- 減少對權重初始化的依賴: 好的權重初始化對於訓練深度網路非常重要。批次標準化可以在一定程度上減輕這種依賴,使得模型對於不同的權重初始化更加魯棒。
- 在一定程度上起到正則化的作用: 批次標準化在每個批次中計算均值和方差時引入了隨機性(因為每個批次的數據是不同的),這在一定程度上可以起到類似於 Dropout 的正則化效果,幫助模型提高泛化能力,減少過擬合。
批次標準化的工作原理:
批次標準化通常在每個隱藏層的激活函數之前進行。對於給定的層,批次標準化會對每個 mini-batch 中的激活值進行以下操作:
- 計算批次的均值 (Mean of the Batch): 對於該層的每個神經元(或每個特徵通道,在 CNN 中),計算當前 mini-batch 中所有樣本的激活值的均值。
- 計算批次的方差 (Variance of the Batch): 同樣地,計算當前 mini-batch 中所有樣本的激活值的方差。
- 標準化 (Normalization): 使用計算出的均值和方差對該層的每個激活值進行標準化,使其接近零均值和單位方差。
- 縮放和平移 (Scaling and Shifting): 標準化後的激活值可能會限制模型的表達能力。因此,批次標準化還引入了兩個可學習的參數:(gamma)(縮放因子)和 (beta)(平移因子)。對於每個神經元(或每個特徵通道),模型會學習一個最佳的 (gamma) 和 (beta),然後對標準化後的激活值進行縮放和平移,這樣,模型就可以根據需要學習到更適合任務的激活值分布。
批次標準化在 CNN 中的應用:
在卷積神經網路中,批次標準化通常在每個卷積層之後、激活函數之前進行。對於每個卷積核生成的特徵圖,批次標準化會對該特徵圖的每個通道(feature channel)進行標準化。
總結來說,批次標準化是一種非常有效的技術,可以加速深度神經網路的訓練,提高模型的穩定性和泛化能力。它通過在每個 mini-batch 中標準化層的激活值來減輕內部協變量偏移,並允許使用更高的學習率。