批歸一化和層歸一化
批歸一化
- 內部協變量偏移
內部協變量偏移ICS指的是深度神經網絡在訓練時,隨着參數的不斷更新,中間隱藏層的輸入分布發生較大差異,導致網絡需要不斷的適應新的數據分布,進而增加了學習難度。[傳統解決方案:較小的學習率、合適的初始化參數] - 梯度飽和
sigmoid激活函數和tanh激活函數在輸入值過大或者過小的情況下,會出現梯度值非常接近於0的情況,使得網絡的收斂速度減慢。[傳統解決方案:使用不存在梯度飽和區域的激活函數]。BN可以有效緩解梯度飽和的情況,它的策略是將輸入值歸一化到梯度較大的區域,即
\[z=g(BN(Wx+b)) \]
- BN訓練過程
BN基於小批量梯度下降,具體過程為: - 計算小批數據的梯度均值和方差
\[\mu_B = \frac{\Sigma_{i=1}^m x_i}{m} \]\[\sigma^2_B = \frac{\Sigma_{i=1}^{m}(x_i-\mu_B)^2}{m} \]
- 進行歸一化
\[x_i = \frac{x_i-\mu_B}{\sqrt{\sigma^2_B+\epsilon}}$$ (防止分母為0) \]\[y_i = \gamma x_i+\beta = BN_{\gamma,\beta}(x_i) \]
- BN測試過程
訓練過程的輸入是小批量樣本,但測試過程輸入是單個樣本。
測試過程中使用的均值和方差是訓練過程中得到的均值及方差的平均,即\[\mu_{test} = E(\mu_B) \]\[\sigma_{test}^2 = \frac{m-1}{m}E(\sigma_B^2) \]但是這種方式過於耗時,在keras的實現中使用的是滑動平均的思想。 - BN的優缺點
- 優點
- 保證模型容量
- 適應激活函數(Sigmoid函數在輸入接近於0的位置趨於線性,非線性表達能力會下降,可以通過\(\gamma\)及\(\beta\)進行調節;RELU函數會使一半數據無法使用,通過\(\beta\)可以調整參與的比例,防止Dead-RELU的問題)
- 缺點
- 當受限於硬件條件/在線學習,即Batch Size很小的時候,應謹慎使用BN;
- 當使用RNN等動態網絡的時候,應謹慎使用BN;
- 當訓練數據集和測試數據集的方差較大時,應謹慎使用BN。
- 優點
層歸一化
- BN在動態網絡和Batch Size較小的時候,效果不好,此時可以使用Layer Normalization。
- LN訓練過程
- 計算網絡層的均值與方差
\[\mu^{(l)} = \frac{\Sigma_{i=1}^{n^{(l)}}x_i^{(l)}}{n^{(l)}} \]\[\sigma^{(l)^2} = \frac{\Sigma_{i=1}^{n^{(l)}}(x_i^{(l)}-\mu^{(l)})^2}{n^{(l)}} \]- 進行歸一化
\[x_i^{(l)} = \frac{x_i^{(l)}-\mu^{(l)}}{\sqrt{\sigma^{(l)^2}+\epsilon}} \]- 設置可訓練的縮放及偏移
\[y_i^{(l)} = \gamma x_i^{(l)}+\beta \] - LN的優缺點
- 優點
- 適用於動態網絡和Batch Size較小的情況
- 缺點
- 用於CNN時會破壞卷積學習到的特征,致使模型無法收斂
- 當BN與LN都可以使用的場景,BN的效果一般優於LN的效果,因為基於不同數據,同一特征歸一化得到的數據更不容易損失信息。