Normalization 的發(fā)展歷程
點(diǎn)擊上方“小白學(xué)視覺(jué)”,選擇加"星標(biāo)"或“置頂”
重磅干貨,第一時(shí)間送達(dá)
Local Response Normalization
Batch Normalization
Weight Normalization
Layer Normalization
Instance Normalization
Consine Normalization
Group Normalization
??
?
LRN 最早應(yīng)該是出現(xiàn)在 2012 年的 AlexNet 中的,其主要思想是:借鑒“側(cè)抑制”(Lateral Inhibitio)的思想實(shí)現(xiàn)局部神經(jīng)元抑制,即使得局部的神經(jīng)元產(chǎn)生競(jìng)爭(zhēng)機(jī)制,使其中相應(yīng)值較大的將變得更大,響應(yīng)值較小的將變得更小。此外,作者在論文中指出使用 LRN 能減少其 AlexNet 在 ILSVRC-2012 上的 top-1 錯(cuò)誤率 1.4% 和 top-5 錯(cuò)誤率 1.2%,效果較為顯著。

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

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

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

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

注意,在 PyTorch 中凍結(jié) BN Layer,不僅需要對(duì)將其參數(shù)的 requires_grad 設(shè)為 False,還需要將該層的 training 設(shè)為 False,即調(diào)用 eval 函數(shù);否則,將會(huì)導(dǎo)致統(tǒng)計(jì)量不斷更新,而仿射參數(shù)卻一直處于凍結(jié)狀態(tài)。此外,一般都會(huì)設(shè)置 track_running_state 為 True,以減小 Batch Size 所造成的統(tǒng)計(jì)量波動(dòng)。
?
在 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 擺脫了對(duì)于 Batch 的依賴(lài),這意味這 WN 完全可以用在 RNN 網(wǎng)絡(luò)中(如:LSTM )以及對(duì)于噪聲敏感的任務(wù)(如:強(qiáng)化學(xué)習(xí)、生成式模型)中;此外,WN 的計(jì)算成本低,可以減少模型的運(yùn)行時(shí)間。
與 BN 不同的是, WN 并不是對(duì)輸入的特征數(shù)據(jù)進(jìn)行歸一化操作,而是對(duì)神經(jīng)網(wǎng)絡(luò)中指定的層的參數(shù)做歸一化操作。
在論文中,作者將神經(jīng)網(wǎng)絡(luò)的層表示為?
?,其中,?
?為權(quán)重向量,?
?為偏置參數(shù),?
?為輸入向量,?
?為非線性激活函數(shù)。而 WN 就是對(duì)?
?做歸一化,將?
?分解為?
?。其中,?
?為單位向量,代表?
?的方向,?
?為標(biāo)量,代表?
?的長(zhǎng)度,?
?為?
?的歐式范數(shù)。

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


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


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

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

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


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

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

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


交流群
歡迎加入公眾號(hào)讀者群一起和同行交流,目前有SLAM、三維視覺(jué)、傳感器、自動(dòng)駕駛、計(jì)算攝影、檢測(cè)、分割、識(shí)別、醫(yī)學(xué)影像、GAN、算法競(jìng)賽等微信群(以后會(huì)逐漸細(xì)分),請(qǐng)掃描下面微信號(hào)加群,備注:”昵稱(chēng)+學(xué)校/公司+研究方向“,例如:”張三?+?上海交大?+?視覺(jué)SLAM“。請(qǐng)按照格式備注,否則不予通過(guò)。添加成功后會(huì)根據(jù)研究方向邀請(qǐng)進(jìn)入相關(guān)微信群。請(qǐng)勿在群內(nèi)發(fā)送廣告,否則會(huì)請(qǐng)出群,謝謝理解~
