LayerNorm是Transformer的最优解吗?
一只小狐貍帶你解鎖 煉丹術&NLP?秘籍
前言
眾所周知,無論在CV還是NLP中,深度模型都離不開歸一化技術(Normalization)。在CV中,深度網絡中一般會嵌入批歸一化(BatchNorm,BN)單元,比如ResNet;而NLP中,則往往向深度網絡中插入層歸一化(LayerNorm,LN)單元,比如Transformer。
為什么在歸一化問題上會有分歧呢?一個最直接的理由就是,BN用在NLP任務里實在太差了(相比LN),此外,BN還難以直接用在RNN中,而RNN是前一個NLP時代的最流行模型。
雖然有大量的實驗觀測,表明NLP任務里普遍BN比LN差太多,但是迄今為止,依然沒有一個非常嚴謹的理論來證明LN相比BN在NLP任務里的優越性。甚至,連BN自身為什么work的問題都一直存在爭議。
早期對BN有效性的解釋是其有助于緩解神經網絡“內部協方差漂移”(Internal Covariance Shift,ICS)問題。即,后面的層的學習是基于前面層的分布來的,只有前面一層的分布是確定的,后面的層才容易學習到有效的模式,然而,由于前面的層的分布會隨著batch的變化而有所變動,導致了后面的層看來“前面一直在動,我無法安心學習呀”。
而BatchNorm這類歸一化技術,目的就是讓每一層的分布穩定下來,讓后面的層可以在前面層的基礎上安心學習知識。顧名思義,BatchNorm就是通過對batch size這個維度歸一化來讓分布穩定下來。LayerNorm則是通過對Hidden size這個維度歸一化來讓某層的分布穩定。
然而,后來也有一些研究diss了這個解釋,說這個解釋是錯誤或不充分的(incorrect/incomplete)[1],近期也有一些研究[2][3]表明BN之所以有助于訓練深度神經網絡,是因為它可以讓loss曲面變得更加平滑。Anyway,這依然是一個未完全解開的老謎。
除了BN之外,LN也有同樣的“為什么work”的終極問題。研究[4]表明,LN在反向時有助于梯度的歸一化。也有研究[5][6]表示LN的主要作用是在訓練初期緩解梯度消失和爆炸的問題,提升穩定性。
所以說,BN和LN本身的作用機理都沒有完全搞清楚,自然也很難去證明為什么BN在NLP數據上就不work,LN就更work。
不過,近期小夕無意間刷到了一篇UC Berkeley的《Rethinking Batch Normalization in Transformers》[7],發現了一個比較有趣的實驗結論,并基于這個觀測,作者提出了一種針對NLP data(確切說是Transformer)改進的新的歸一化方法,叫冪歸一化(PowerNorm)。
后臺回復【0407】獲取論文PDF噢~
強上BN后的Transformer
作者這里做了一個實驗,為BN在NLP data(Transformer)上不work提供了一個更加微觀的觀測證據。
首先,作者將Transformer中的LN都替換成了BN,然后在CV和NLP兩個任務上觀測BN中的兩個統計量(即均值和方差)及其他們的梯度和在訓練過程中的穩定程度。
上圖中,藍色是ResNet20在Cifar-10做圖像分類的結果,橙色是Transformer+BN在IWSLT14做翻譯的結果。X軸是訓練時間,Y軸是基于batch的統計值和它對應的移動平均值的歐式距離。
可以看到,ResNet20在Cifar-10任務上統計量的震蕩很小,而使用BN的Transformer不僅震蕩劇烈,還有很極端的異常值,這會導致和的統計不準確,造成train/test不一致,預測效果下降。
基于這個有趣的觀測結果,作者這里針對性的提出了兩點改進,并將改進后的BN稱之為冪歸一化(PowerNorm,PN)。
PowerNorm
1. PN-V
BN強制將數據轉換成均值為0方差為1的正態分布,但在數據本身均值方差劇烈震蕩的情況下,強制移動均值會起到不好的效果。因此作者提出了新的scale方式,只強制數據有unit quadratic mean:
這樣針對batch的前向只需一個統計量,反向也簡化成一個梯度:
對比新的(橙色)和之前的(藍色),發現震蕩明顯減小:
2. Running Statistics in Training
從PN-V的改進可以看到,雖然震蕩減少了很多,但還是有很多異常值。因此作者改用移動平均的方式計算:
但使用移動平均的話,在求梯度時無法對之前所有求導,因此作者用當前batch的統計量去近似,感興趣的同學可以看下論文中的推導。
與LN的比較
雖然如前所述,難以說清楚在NLP data上LN比BN優越在哪里,但是是容易說清楚PN對BN的優越性的(畢竟PN的誕生就是基于BN在NLP data上的實驗觀測)。
那么問題來了:PN和LN哪個更有效?自然也沒法直接在理論層面上進行比較,所以作者跑了一把實驗,分別嘗試了機器翻譯和語言模型任務:
對于上述結果,小夕也去paperwithcode網站查了一下,目前IWSLT14的SOTA是36.3,論文中的35.9可以排在第二的位置;WMT14 En-De的SOTA是35,論文中的30.1可以排在第五的位置;WikiText-103的SOTA是10.8,論文的結果排在第八名第位置。由于作者沒有做其他優化,看起來總體結果還是不錯的~當然,PN在其他NLP data和任務上是否有效,還有待進一步驗證。
由于BN和PN的統計量受batchsize的影響,作者在消融實驗中也探究了不同batchsize的效果:
可以看到PN在整體上還是優于LN的。
總結
由于深度學習的不可解釋性,歸一化方法在網絡中真正的作用和優劣一直是個謎。本文針對BN提供了一個新的研究角度,通過對統計量及梯度的穩定性觀測,找到了BN為什么在NLP問題上不work的其中一個原因,即數據分布的震蕩和異常值導致train/test不一致。基于該觀測證據,作者對BN進行了對應的改進,提出了更適合NLP data的冪歸一化PowerNorm,得到了優于原生BN的效果,且在部分任務上超過了LN的表現。
另外,看到這里后,相信會有很多小伙伴會關心BERT+PN的效果。燃鵝眾所周知,要復現BERT的預訓練過程是非常不可描述的,所以作者這里沒有給出相應實驗,也是合乎情理的。
所以目前結構創新都不會用BERT去驗證,機器翻譯和LM任務確實是常規benchmark。是否真正有用,可能需要慢慢被大家用起來才知道。
后臺回復【0407】獲取論文PDF噢~
夕小瑤的賣萌屋
_
關注&星標小夕,帶你解鎖AI秘籍
訂閱號主頁下方「撩一下」有驚喜哦
參考文獻
[1]Ali Rahimi. Nuerips 2017 test-of-time award presentation, December 2017: https://www.zachpfeffer.com/single-post/2018/12/04/Transcript-of-Ali-Rahimi-NIPS-2017-Test-of-Time-Award-Presentation-Speech[2]How does batch normalization help optimization?: https://papers.nips.cc/paper/7515-how-does-batch-normalization-help-optimization.pdf
[3]PyHessian: Neural networks through the lens of the Hessian.: https://arxiv.org/pdf/1912.07145.pdf
[4]Understanding and Improving Layer Normalization: https://arxiv.org/abs/1911.07013
[5]Improving Deep Transformer with Depth-Scaled Initialization and Merged Attention: https://arxiv.org/abs/1908.11365
[6]Fixup Initialization: Residual Learning Without Normalization: https://arxiv.org/abs/1901.09321
[7]Rethinking Batch Normalization in Transformers: https://arxiv.org/abs/2003.07845
[8]詳解深度學習中的Normalization,BN/LN/WN: https://zhuanlan.zhihu.com/p/33173246
總結
以上是生活随笔為你收集整理的LayerNorm是Transformer的最优解吗?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一份来自清华的数据分析笔记,请查收!
- 下一篇: 2021 年 1 月程序员薪资出炉,持续