綜述:神經(jīng)網(wǎng)絡中 Normalization 的發(fā)展歷程

極市導讀
?本篇文章用于總結(jié)近年來神經(jīng)網(wǎng)絡中 Normalization 操作的發(fā)展歷程。其中,包括:Local Response Normalization, Batch Normalization, Weight Normalization, Layer Normalization, Instance Normalization, Consine Normalization, Group Normalization。>>明日直播!田值:實例分割創(chuàng)新式突破BoxInst,僅用Box標注,實現(xiàn)COCO 33.2AP!
Local Response Normalization
Batch Normalization
Weight Normalization
Layer Normalization
Instance Normalization
Consine Normalization
Group Normalization
1. Local Response Normalization
LRN 最早應該是出現(xiàn)在 2012 年的 AlexNet 中的,其主要思想是:借鑒“側(cè)抑制”(Lateral Inhibitio)的思想實現(xiàn)局部神經(jīng)元抑制,即使得局部的神經(jīng)元產(chǎn)生競爭機制,使其中相應值較大的將變得更大,響應值較小的將變得更小。此外,作者在論文中指出使用 LRN 能減少其 AlexNet 在 ILSVRC-2012 上的 top-1 錯誤率 1.4% 和 top-5 錯誤率 1.2%,效果較為顯著。

其中,?
?表示輸入中第?
?個 FeatureMap 中位于?
?的響應值,?
?表示輸出中第?
?個 FeatureMap 中位于?
?的響應值,?
?都是由驗證集所決定的超參數(shù) (Hyper-Parameter)。論文中的設定為:?
?。
在 2015 年的 VGG 中,該論文指出 LRN 在 VGG 并無任何用處:

此后,隨著 Batch Normalization 等不同 Normalization 的出現(xiàn),LRN 也開始逐漸落寞。

2. Batch Normalization
BN 應該算是目前使用最多的 Normalization 操作了,現(xiàn)在甚至可以說是 CNN 網(wǎng)絡的標配。自 2015 年 2 月的 Inception V2(https://arxiv.org/pdf/1502.03167.pdf)?提出之后,也引出了后續(xù)許多不同的 Normalization 的提出。
作者在論文中指出,提出 Batch Normalization 是目的為了解決 ‘internal covariate shift’ 現(xiàn)象(這個應該是屬于機器學習的問題,我無法進行詳細表達,建議查看其他文章),經(jīng)過測試后,發(fā)現(xiàn)使用 BN 能加速神經(jīng)網(wǎng)絡的收斂速度,并使得神經(jīng)網(wǎng)絡對于初始化的敏感度下降。
在?深度學習中 Batch Normalization為什么效果好?(https://www.zhihu.com/question/38102762/answer/85238569)中,答者指出其實 BN 解決的是梯度消失問題(Gradient Vanishing Problem),我感覺其實有點道理的。)

其中,?
?為輸入數(shù)據(jù),?
?為數(shù)據(jù)平均值,?
?為數(shù)據(jù)方差,?
?和?
?為學習參數(shù)。此外,?
?和?
?是統(tǒng)計量,隨著 Batch 的迭代不斷更新(一般實現(xiàn)都會對其做滑動平均,不然當 Batch Size 較小時,其統(tǒng)計值的波動會很大,導致網(wǎng)絡無法收斂的)。
在 BN 中,作者之所以加上?
?和?
?這兩個仿射參數(shù)(Affine Parameter),是為了使得經(jīng)過 BN 處理后的數(shù)據(jù)仍可以恢復到之前的分布,從而提升了網(wǎng)絡結(jié)構(gòu)的 Capacity,即在做出一定的改變的同時,仍保留之前的能力。
此外,除了 BN 背后的原理這一話題外,大家對 Batch-normalized 應該放在非線性激活層的前面還是后面?這一話題的討論也比較激烈,并沒有達成統(tǒng)一的觀點,只是大部分實驗表明BN 放在非線性激活層后比較好,不過仍需要具體任務具體分析。

注意,在 PyTorch 中凍結(jié) BN Layer,不僅需要對將其參數(shù)的 requires_grad 設為 False,還需要將該層的 training 設為 False,即調(diào)用 eval 函數(shù);否則,將會導致統(tǒng)計量不斷更新,而仿射參數(shù)卻一直處于凍結(jié)狀態(tài)。此外,一般都會設置 track_running_state 為 True,以減小 Batch Size 所造成的統(tǒng)計量波動。
3. Weight Normalization
在 2016 年 2 月的?Weight Normalization: A Simple Reparameterization to Accelerate Training of Deep Neural Networks?(https://arxiv.org/pdf/1602.07868.pdf)中,作者提出了與 BN 完全不同的 Normalization 操作:Weight Normalization,并指出:相較于 BN,WN 擺脫了對于 Batch 的依賴,這意味這 WN 完全可以用在 RNN 網(wǎng)絡中(如:LSTM )以及對于噪聲敏感的任務(如:強化學習、生成式模型)中;此外,WN 的計算成本低,可以減少模型的運行時間。
與 BN 不同的是, WN 并不是對輸入的特征數(shù)據(jù)進行歸一化操作,而是對神經(jīng)網(wǎng)絡中指定的層的參數(shù)做歸一化操作。
在論文中,作者將神經(jīng)網(wǎng)絡的層表示為?
?,其中,?
?為權(quán)重向量,?
?為偏置參數(shù),?
?為輸入向量,?
?為非線性激活函數(shù)。而 WN 就是對?
?做歸一化,將?
?分解為?
?。其中,?
?為單位向量,代表?
?的方向,?
?為標量,代表?
?的長度,?
?為?
?的歐式范數(shù)。

在?詳解深度學習中的Normalization,BN/LN/WN?https://zhuanlan.zhihu.com/p/33173246中,作者指出:WN 與 BN 其實是相似的。



4. Layer Normalization
在 2016 年 7 月的?Layer Normalization?(https://arxiv.org/pdf/1607.06450.pdf)中,作者提出了一種類似與 BN 的操作:Layer Normalization,提出 LN 的主要目的是為了解決 BN 對 Batch Size 和內(nèi)存的依賴以及減少 Normalization 所需時間。
LN 與 BN 的不同之處在于:BN 是對一個 Batch 中的所有樣本的不同維度做 Normalization,而 LN 是對單個樣本中的所有維度做 Normalization。當然,兩者的數(shù)學公式長得都一樣,都是求平均值、方差,做歸一化后在做仿射變換。


舉例來說,對于?
?的數(shù)據(jù),BN 計算得到的統(tǒng)計量的?
?為?
?,而 LN 計算得到的統(tǒng)計量的?
?為?
?。

(左側(cè):Batch Normalization,右側(cè):Layer Normalization)

5. Instance Normalization
在 2016 年 7 月的?Instance Normalization: The Missing Ingredient for Fast Stylization?(https://arxiv.org/pdf/1607.08022.pdf)中,作者提出與 LN 類似的操作:Instance Normalization。在論文中,作者指出在圖像風格遷移任務中,生成式模型計算得到的 Feature Map 的各個 Channel 的均值與方差將影響到所生成圖像的風格。故,作者提出了 IN,在 Channel 層面對輸入數(shù)據(jù)進行歸一化,再使用目標圖像的 Channel 的均值與方差對結(jié)果進行 '去歸一化'。
值得一提的是,IN 與LN 類似,僅對單個樣本進行歸一化,但是 IN 并不進行仿射變換。
舉例來說,對于?
?的數(shù)據(jù),IN 計算得到的統(tǒng)計量的?
?為?
?。


6. Cosine Normalization
在 2017 年 2 月的?
Cosine Normalization: Using Cosine Similarity Instead of Dot Product in Neural Networks?(https://arxiv.org/pdf/1702.05870.pdf)
中,作者提出了 Cosine Normalization,不對輸入數(shù)據(jù)做歸一化,也不對參數(shù)做歸一化,而是對輸入數(shù)據(jù)與參數(shù)的點乘做出改動,改為計算兩者的余弦相似度?
?,即?
?變?yōu)?
?。
CN 將模型的輸出進行了歸一化,使得輸出有界,但是也因此丟棄了原本輸出中所含的 Scale 信息,所以這個是否值得也有待進一步探討。

7. Group Normalization
在 2018 年 3 月的?Group Normalization(https://arxiv.org/pdf/1803.08494.pdf)中,作者提出了 Group Normalization,與 BN 相比,GN 的改進有兩點:不再依賴 Batch Size,計算成本可由超參數(shù)進行調(diào)節(jié)。
作者在論文中指出,BN 對于 Batch Size 的依賴使得其無法較好的運用在因內(nèi)存限制而使用較小 Batch Size 的任務上(如:detection, segmentation, video),故作者令 GN 僅對單個樣本進行 Normalization 操作。此外,GN 更像是 LN 與 IN 的一般形式,當?
?時,GN 等價于 LN;當?
?時,GN 等價于 IN。
在?如何區(qū)分并記住常見的幾種 Normalization 算法(https://zhuanlan.zhihu.com/p/69659844)?中,作者給出了一張圖像,直觀的給出了以上 Normalization 的不同之處:

舉例來說,對于?
?的數(shù)據(jù),GN 計算得到的統(tǒng)計量的?
?為?
?。


推薦閱讀

