如何理解歸一化(Normalization)對於神經網路(深度學習)的幫助?
在深度學習中,歸一化的手段可謂無處不在。
對神經網路的輸入進行歸一化,對每一層的歸一化(Batch Normalization、Layer Normalization),對權重的歸一化(Weight Normalization)都有效的提升了神經網路的表現。
這些歸一化手段是否有基於一些共同的想法?歸一化手段為什麼能對神經網路的訓練和表現帶來幫助?
BN最早被認為通過降低所謂Internal Covariate Shift,這種想法的出處可考至Understanding the difficulty of training deep feedforward neural networks,想必這也是batch norm作者這麼設計的初衷。但是這種想法並沒有過多實驗支持,比如說去年NeurlPS這篇paper作者做了實驗,在batch norm之後加上一些隨機擾動(non-zero mean and non-unit variance,人為引入covariate shift),發現效果仍然比不加好很多。為什麼放在batch norm layer之後而不是之前?因為為了證偽batch norm通過forward pass這一步降低covariate shift來提升網路訓練效率的。這樣說來故事就變得很有趣了,也就是說我們大概都理解一些BN對BN層之前網路噪音的好處,那麼能不能研究一下它對它後面layer的影響?所以這些研究從優化的角度,有如下幾種觀點。
- BN通過修改loss function, 可以令loss的和loss的梯度均滿足更強的Lipschitzness性質(即函數f滿足L-Lipschitz和 -smooth,令L和 更小,後者其實等同於f Hessian的eigenvalue小於 ,可以作為光滑程度的度量,其實吧我覺得,一般convex optimization裏拿這個度量算convergence rate是神器,對於non-convex optimization,不懂鴨,paper裏好像也沒寫的樣子),這麼做的好處是當步子邁得大的時候,我們可以更自信地告訴自己計算出來的梯度可以更好地近似實際的梯度,因此也不容易讓優化掉進小坑裡。有意思的地方來了,是不是我在某些地方插入一個1/1000 layer,把梯度的L-Lipschitz變成1/1000L-Lipschitz就能讓函數優化的更好了呢?其實不是的,因為單純除以函數會改變整個優化問題,而BN做了不僅僅rescale這件事情,還讓原來近似最優的點在做完變化之後,仍然保留在原來不遠的位置。這也就是這篇文章的核心論點,BN做的是問題reparametrization而不是簡單的scaling。 [1]
- BN把優化這件事情分解成了優化參數的方向和長度兩個任務,這麼做呢可以解耦層與層之間的dependency因此會讓curvature結構更易於優化。這篇證了convergence rate,但由於沒有認真讀,所以感覺沒太多資格評價。[2]
歸一化手段是否殊途同歸?很可能是的,在[1]的3.3作者也嘗試了Lp normalization,也得到了和BN差不多的效果。至於Layer norm還是weight norm,可能都可以順著這個思路進行研究鴨,無論是通過[1]還是[2],可能今年的paper裏就見分曉了,lets see。
- How Does Batch Normalization Help Optimization?
- Exponential convergence rates for Batch Normalization: The power of length-direction decoupling in non-convex optimization
其實這個問題很難,很偏理論。
回顧一下圍繞normalization的一些工作(由最新到最舊的BatchNorm):
2019,Weight Standardization(沒有發表,但是有大佬Alan Yuille加持)
Weight Standardization 2019
WS叫權重標準化,建立在BN可以平滑損失landscape/BN可以平滑激活值這個觀點上,進一步提升GN的效果匹配到BN的水平上,針對GN在micro-batch訓練時性能不及BN。WS的原理是:減小損失和梯度的Lipschitz常數。
2019,Dynamic Normalization
Differentiable Dynamic Normalization for Learning Deep Representation ICML 2019
跟SN類似,加入了GN。
2019,Switchable Normalization
Differentiable Learning-to-Normalize via Switchable Normalization ICLR 2019
SN是為每一層選擇/學習適當的歸一化層(IN、LN和BN),在ImageNet,COCO,CityScapes,ADE20K和Kinetics等數據集上進行實驗,應用涵蓋圖像分類、物體檢測、語義分割和視頻分類。
2019,Iterative Normalization(CVPR)
Iterative Normalization Beyond Standardization towards Efficient Whitening CVPR 2019
DBN的高效版本
2019,Spatially-Adaptive Normalization(CVPR)
Semantic Image Synthesis with Spatially-Adaptive Normalization CVPR 2019
用於圖像生成
2018,Gradient Normalization(ICML)
GradNorm Gradient Normalization for Adaptive Loss Balancing in Deep Multitask Networks ICML 2018
2018,Kalman Normalization
Kalman Normalization Normalizing Internal Representations Across Network Layers NIPS 2018
2018,Decorrelated Batch Normalization
Decorrelated Batch Normalization CVPR 2018
BN+白化
2018,Spectral Normalization(ICLR)
Spectral Normalization for Generative Adversarial Networks ICLR 2018
2018,Group Normalization(ECCV)
Group Normalization ECCV 2018
用於物體檢測和語義分割等batch size很小的時候
GroupNorm是InstanceNorm的變體。
2018,Batch-Instance Normalization
Batch-Instance Normalization for Adaptively Style-Invariant Neural Networks NIPS 2018
2018,Instance-Batch Normalization
Two at Once Enhancing Learning and Generalization Capacities via IBN-Net ECCV 2018
2016,Layer Normalization(沒有發表)
用於RNN
2016,Instance Normalization(沒有發表,但是經過了實踐檢驗)
用於風格遷移
2016,Weight Normalization(NIPS)
2015,Batch Normalization(ICML)
用於卷積網路ConvNet和圖像分類
逐篇看。。。總結歸納。。。需要時間。。。
以下摘自我的另一個回答,小蓮子:碎碎念:Transformer的細枝末節。原本是介紹 Layer Normalization 的。