一、Layer Norm
1.1 介紹
LayerNorm(Layer Normalization)是2016年提出的,隨著Transformer等模型的大規模推廣,LayerNorm出現頻率也隨之越來越高。其大體思想類似於BatchNorm,對輸入的每個樣本進行歸一化處理,具體就是計算每個輸入的均值和方差,歸一化到均值為0,方差為1,另外還會學習\(\mathrm{g}\)和\(b\)來將方差和均值縮放從任意值。
1.2 作用
LayerNorm可以幫助模型收斂,原文中解釋是因為其對輸入進行了歸一化操作,使得資料的分佈更加穩定。
另外一篇文章Understanding and Improving Layer Normalization從梯度的角度對LayerNorm進行了分析,這篇文章的作者發現了以下兩個結論,並提出了一個改進方法稱為AdaNorm。
- LayerNorm 中引入的 gain 和 bias,可能會導致 overfitting,去掉他們能夠在很多情況下提升效能
- 和前向的 normalization 相比,norm 操作之中因為均值和方差而引入的梯度在穩定訓練中起到了更大的作用
二、和Batch Norm區別
前面提到其思想和Batch Norm大體一致,而BatchNorm通常用於CV領域,LayerNorm通常用於NLP領域,那它們之間的差別點在哪兒呢。接下來先從二維向量進行說明,然後在擴充套件到三維情況。
2.1 二維對比
下圖表示6個輸入樣本(行),每個樣本對應的特徵長度為5(列),那BatchNorm就是對列進行操作,而LayerNorm是對行進行操作。
所以 如果要計算LayerNorm,可以把輸入向量進行轉置,求出BN後再轉回去。
2.2 三維對比
實際情況大多的特徵不是二維向量而是三維向量,將上述情況擴充套件到三維後如下圖所示,BatchNorm是豎切而LayerNorm是橫切。NLP鄰域採用LayerNorm主要是考慮到特徵的長度不一,如果按照BatchNorm訓練得到一個參考均值和方差,那下次如果遇到一個訓練沒遇到過的長度(遠遠超出訓練的長度),那麼之前訓練好的就會失效,因此採用LayerNorm對單個樣本之間自己進行歸一化操作,這樣可以帶來一定的最佳化效果。
三、參考資料
Layer Normalization
Understanding and Improving Layer Normalization
Transformer論文逐段精讀【論文精讀】25分左右