Normalization
文章內容摘自 https://zhuanlan.zhihu.com/p/43200897b
一、激活還是權重的Norm
1. 激活norm:BatchNorm、LayerNorm、InstanceNorm、GroupNorm
2. 權重norm:Weight Norm(L1、L2正則)
至于深度學習中的Normalization,因為神經網絡里主要有兩類實體:神經元或者連接神經元的邊,所以按照規范化操作涉及對象的不同可以分為兩大類,一類是對第L層每個神經元的激活值或者說對于第L+1層網絡神經元的輸入值進行Normalization操作,比如BatchNorm、LayerNorm、InstanceNorm、GroupNorm等方法都屬于這一類;另外一類是對神經網絡中連接相鄰隱層神經元之間的邊上的權重進行規范化操作,比如Weight Norm就屬于這一類。
二、norm的位置(激活前和激活后)
第一種是原始BN論文提出的,放在激活函數之前;另外一種是后續研究提出的,放在激活函數之后,不少研究表明將BN放在激活函數之后效果更好。
三、Normalization 操作
整個規范化過程可以分解為兩步,第一步參考公式(1),是對激活值規整到均值為0,方差為1的正態分布范圍內。
第二步參考公式(2),主要目標是讓每個神經元在訓練過程中學習到對應的兩個調節因子,對規范到0均值,1方差的值進行微調。因為經過第一步操作后,Normalization有可能降低神經網絡的非線性表達能力,所以會以此方式來補償Normalization操作后神經網絡的表達能力。
集合S:用來計算均值和方差的集合
為什么這些Normalization需要確定一個神經元集合S呢?
原因很簡單,前面講過,這類深度學習的規范化目標是將神經元的激活值 [公式] 限定在均值為0方差為1的正態分布中。而為了能夠對網絡中某個神經元的激活值 規范到均值為0方差為1的范圍,必須有一定的手段求出均值和方差,而均值和方差是個統計指標,要計算這兩個指標一定是在一個集合范圍內才可行,所以這就要求必須指定一個神經元組成的集合,利用這個集合里每個神經元的激活來統計出所需的均值和方差,這樣才能達到預定的規范化目標。
四、幾種激活Normalization
1. Batch Normalization
集合S:同一個batch內的n個實例在第K個神經元處的輸出
全連接網絡中的Batch Normalization
CNN中的Batch Normalization
BatchNorm目前基本已經成為各種網絡(RNN除外)的標配,主要是因為效果好,比如可以加快模型收斂速度,不再依賴精細的參數初始化過程,可以調大學習率等各種方便,同時引入的隨機噪聲能夠起到對模型參數進行正則化的作用,有利于增強模型泛化能力。
BatchNorm 的幾個局限
局限1:如果Batch Size太小,則BN效果明顯下降。
是因為在小的BatchSize意味著數據樣本少,因而得不到有效統計量,也就是說噪音太大
局限2:對于有些像素級圖片生成任務來說,BN效果不佳;
局限3:RNN等動態網絡使用BN效果不佳且使用起來不方便
局限4:訓練時和推理時統計量不一致。
因為在線推理或預測的時候,是單實例的,不存在Mini-Batch,所以就無法獲得BN計算所需的均值和方差,一般解決方法是采用訓練時刻記錄的各個Mini-Batch的統計量的數學期望,以此來推算全局的均值和方差,在線推理時采用這樣推導出的統計量。雖說實際使用并沒大問題,但是確實存在訓練和推理時刻統計量計算方法不一致的問題。
如何從根本上解決這些問題?一個自然的想法是:把對Batch的依賴去掉,轉換統計集合范圍。在統計均值方差的時候,不依賴Batch內數據,只用當前處理的單個訓練數據來獲得均值方差的統計量,這樣因為不再依賴Batch內其它訓練數據,那么就不存在因為Batch約束導致的問題。在BN后的幾乎所有改進模型都是在這個指導思想下進行的。
2. Layer Noramalization
集合S:單個實例在某個隱層的所有神經元的輸出
前向網絡Layer Noramalization
CNN Layer Noramalization
集合S:對于輸入實例Xi,某個卷積層的所有特征圖
3. Instance Normalization
集合S:對于實例Xi,在某個卷積層的單張特征圖
Instance Normalization對于一些圖片生成類的任務比如圖片風格轉換來說效果是明顯優于BN的,但在很多其它圖像類任務比如分類等場景效果不如BN。
集合S:對于實例Xi,某個卷積層的幾個特征圖。
(介于Layer Normalization和Instance Normalization之間)
五、Normalization操作的Re-Scaling(放縮)不變性
權重向量(Weight Vector)Re-Scaling,數據Re-Scaling和權重矩陣(Weight Matrix)Re-Scaling。
六.Batch Normalization為何有效
不是因為內部協變化ICS(Internal Covariate Shift)不變性!!!
那是因為什么?
上圖展示了用L-Lipschitz函數來衡量采用和不采用BN進行神經網絡訓練時兩者的區別,可以看出未采用BN的訓練過程中,L值波動幅度很大,而采用了BN后的訓練過程L值相對比較穩定且值也比較小,尤其是在訓練的初期,這個差別更明顯。這證明了BN通過參數重整確實起到了平滑損失曲面及梯度的作用。
七、總結
不同的Normalization方法在于S集合的劃分不同。
BN采用了同一個神經元,但是來自于Mini-Batch中不同訓練實例導致的不同激活作為統計范圍。而為了克服Mini-Batch帶來的弊端,后續改進方法拋棄了Mini-Batch的思路,只用當前訓練實例引發的激活來劃分集合S的統計范圍,概括而言,LayerNorm采用同隱層的所有神經元;InstanceNorm采用CNN中卷積層的單個通道作為統計范圍,而GroupNorm則折衷兩者,采用卷積層的通道分組,在劃分為同一個分組的通道內來作為通道范圍。
總結
以上是生活随笔為你收集整理的Normalization的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 神经网络中的激活函数的比较
- 下一篇: 图像混合