0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

理解Batch Normalization中Batch所代表具體含義的知識(shí)基礎(chǔ)

nlfO_thejiangme ? 來(lái)源:未知 ? 作者:李倩 ? 2018-10-19 09:19 ? 次閱讀

Batch Normalization(簡(jiǎn)稱BN)自從提出之后,因?yàn)樾Ч貏e好,很快被作為深度學(xué)習(xí)的標(biāo)準(zhǔn)工具應(yīng)用在了各種場(chǎng)合。BN大法雖然好,但是也存在一些局限和問題,諸如當(dāng)BatchSize太小時(shí)效果不佳、對(duì)RNN等動(dòng)態(tài)網(wǎng)絡(luò)無(wú)法有效應(yīng)用BN等。針對(duì)BN的問題,最近兩年又陸續(xù)有基于BN思想的很多改進(jìn)Normalization模型被提出。BN是深度學(xué)習(xí)進(jìn)展中里程碑式的工作之一,無(wú)論是希望深入了解深度學(xué)習(xí),還是在實(shí)踐中解決實(shí)際問題,BN及一系列改進(jìn)Normalization工作都是繞不開的重要環(huán)節(jié)。

一. 從Mini-Batch SGD說起

我們先從Mini-Batch SGD的優(yōu)化過程講起,因?yàn)檫@是下一步理解Batch Normalization中Batch所代表具體含義的知識(shí)基礎(chǔ)。

我們知道,SGD是無(wú)論學(xué)術(shù)圈寫文章做實(shí)驗(yàn)還是工業(yè)界調(diào)參跑模型最常用的模型優(yōu)化算法,但是有時(shí)候容易被忽略的一點(diǎn)是:一般提到的SGD是指的Mini-batch SGD,而非原教旨意義下的單實(shí)例SGD。

圖1. Mini-Batch SGD 訓(xùn)練過程(假設(shè)Batch Size=2)

所謂“Mini-Batch”,是指的從訓(xùn)練數(shù)據(jù)全集T中隨機(jī)選擇的一個(gè)訓(xùn)練數(shù)據(jù)子集合。假設(shè)訓(xùn)練數(shù)據(jù)集合T包含N個(gè)樣本,而每個(gè)Mini-Batch的Batch Size為b,于是整個(gè)訓(xùn)練數(shù)據(jù)可被分成N/b個(gè)Mini-Batch。在模型通過SGD進(jìn)行訓(xùn)練時(shí),一般跑完一個(gè)Mini-Batch的實(shí)例,叫做完成訓(xùn)練的一步(step),跑完N/b步則整個(gè)訓(xùn)練數(shù)據(jù)完成一輪訓(xùn)練,則稱為完成一個(gè)Epoch。完成一個(gè)Epoch訓(xùn)練過程后,對(duì)訓(xùn)練數(shù)據(jù)做隨機(jī)Shuffle打亂訓(xùn)練數(shù)據(jù)順序,重復(fù)上述步驟,然后開始下一個(gè)Epoch的訓(xùn)練,對(duì)模型完整充分的訓(xùn)練由多輪Epoch構(gòu)成(參考圖1)。

在拿到一個(gè)Mini-Batch進(jìn)行參數(shù)更新時(shí),首先根據(jù)當(dāng)前Mini-Batch內(nèi)的b個(gè)訓(xùn)練實(shí)例以及參數(shù)對(duì)應(yīng)的損失函數(shù)的偏導(dǎo)數(shù)來(lái)進(jìn)行計(jì)算,以獲得參數(shù)更新的梯度方向,然后根據(jù)SGD算法進(jìn)行參數(shù)更新,以此來(lái)達(dá)到本步(Step)更新模型參數(shù)并逐步尋優(yōu)的過程。

圖2. Mini-Batch SGD優(yōu)化過程

具體而言,如果我們假設(shè)機(jī)器學(xué)習(xí)任務(wù)的損失函數(shù)是平方損失函數(shù):

那么,由Mini-Batch內(nèi)訓(xùn)練實(shí)例可得出SGD優(yōu)化所需的梯度方向?yàn)椋?/p>

根據(jù)梯度方向即可利用標(biāo)準(zhǔn)SGD來(lái)更新模型參數(shù):

其中,η是學(xué)習(xí)率。

由上述過程(參考圖2)可以看出,對(duì)于Mini-Batch SGD訓(xùn)練方法來(lái)說,為了能夠參數(shù)更新必須得先求出梯度方向,而為了能夠求出梯度方向,需要對(duì)每個(gè)實(shí)例得出當(dāng)前參數(shù)下映射函數(shù)的預(yù)測(cè)值,這意味著如果是用神經(jīng)網(wǎng)絡(luò)來(lái)學(xué)習(xí)映射函數(shù)h_θ的話,Mini-Batch內(nèi)的每個(gè)實(shí)例需要走一遍當(dāng)前的網(wǎng)絡(luò),產(chǎn)生當(dāng)前參數(shù)下神經(jīng)網(wǎng)絡(luò)的預(yù)測(cè)值,這點(diǎn)請(qǐng)注意,這是理解后續(xù)Batch Normalization的基礎(chǔ)。

至于Batch Size的影響,目前可以實(shí)驗(yàn)證實(shí)的是:batch size 設(shè)置得較小訓(xùn)練出來(lái)的模型相對(duì)大batch size訓(xùn)練出的模型泛化能力更強(qiáng),在測(cè)試集上的表現(xiàn)更好,而太大的batch size往往不太Work,而且泛化能力較差。但是背后是什么原因造成的,目前還未有定論,持不同看法者各持己見。因?yàn)檫@不是文本的重點(diǎn),所以先略過不表。

二.Normalization到底是在做什么?

Normalization的中文翻譯一般叫做“規(guī)范化”,是一種對(duì)數(shù)值的特殊函數(shù)變換方法,也就是說假設(shè)原始的某個(gè)數(shù)值是x,套上一個(gè)起到規(guī)范化作用的函數(shù),對(duì)規(guī)范化之前的數(shù)值x進(jìn)行轉(zhuǎn)換,形成一個(gè)規(guī)范化后的數(shù)值,即:

所謂規(guī)范化,是希望轉(zhuǎn)換后的數(shù)值x ?滿足一定的特性,至于對(duì)數(shù)值具體如何變換,跟規(guī)范化目標(biāo)有關(guān),也就是說f()函數(shù)的具體形式,不同的規(guī)范化目標(biāo)導(dǎo)致具體方法中函數(shù)所采用的形式不同。

其實(shí)我們生活中也有很多類似的規(guī)范化操作,知乎里面有個(gè)熱帖,主題是:“為什么人大附中的學(xué)生那么愛穿校服?”,里面有人打趣地問:“請(qǐng)問人大附中的學(xué)生洗澡的時(shí)候脫不脫校服?”。這個(gè)問題我回答不了,要我猜大概率夏天洗澡的時(shí)候是會(huì)脫的,要不然洗澡的時(shí)候天太熱人受不了,冬天則未必,穿著洗可能更保暖。跑題了,其實(shí)我想說的是:學(xué)校要求學(xué)生穿校服就是一種典型的規(guī)范化操作,學(xué)校的規(guī)范化目標(biāo)是要求學(xué)生著裝整齊劃一,顯得干練有風(fēng)貌,所以定義了一個(gè)規(guī)范化函數(shù):

就是說不論哪個(gè)學(xué)生,不論你平常的著裝變量x=”香奈兒”還是x=“麻袋片”,經(jīng)過這個(gè)規(guī)范化函數(shù)操作,統(tǒng)一都換成校服。這樣就達(dá)到了學(xué)校的規(guī)范化目的。

圖3. 神經(jīng)元

在介紹深度學(xué)習(xí)Normalization前,我們先普及下神經(jīng)元的活動(dòng)過程。深度學(xué)習(xí)是由神經(jīng)網(wǎng)絡(luò)來(lái)體現(xiàn)對(duì)輸入數(shù)據(jù)的函數(shù)變換的,而神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)單元就是網(wǎng)絡(luò)神經(jīng)元,一個(gè)典型的神經(jīng)元對(duì)數(shù)據(jù)進(jìn)行處理時(shí)包含兩個(gè)步驟的操作(參考圖3):

步驟一:對(duì)輸入數(shù)據(jù)進(jìn)行線性變換,產(chǎn)生凈激活值

其中,x是輸入,w是權(quán)重參數(shù),b是偏置,w和b是需要進(jìn)過訓(xùn)練學(xué)習(xí)的網(wǎng)絡(luò)參數(shù)。

步驟二:套上非線性激活函數(shù),神經(jīng)網(wǎng)絡(luò)的非線性能力來(lái)自于此,目前深度學(xué)習(xí)最常用的激活函數(shù)是Relu函數(shù)x=Relu(a)。

如此一個(gè)神經(jīng)元就完成了對(duì)輸入數(shù)據(jù)的非線性函數(shù)變換。這里需要強(qiáng)調(diào)下,步驟一的輸出一般稱為凈激活(Net Activation),第二步驟經(jīng)過激活函數(shù)后得到的值為激活值。為了描述簡(jiǎn)潔,本文后續(xù)文字中使用激活的地方,其實(shí)指的是未經(jīng)激活函數(shù)的凈激活值,而非一般意義上的激活,這點(diǎn)還請(qǐng)注意。

至于深度學(xué)習(xí)中的Normalization,因?yàn)樯窠?jīng)網(wǎng)絡(luò)里主要有兩類實(shí)體:神經(jīng)元或者連接神經(jīng)元的邊,所以按照規(guī)范化操作涉及對(duì)象的不同可以分為兩大類,一類是對(duì)第L層每個(gè)神經(jīng)元的激活值或者說對(duì)于第L+1層網(wǎng)絡(luò)神經(jīng)元的輸入值進(jìn)行Normalization操作,比如BatchNorm/LayerNorm/InstanceNorm/GroupNorm等方法都屬于這一類;

另外一類是對(duì)神經(jīng)網(wǎng)絡(luò)中連接相鄰隱層神經(jīng)元之間的邊上的權(quán)重進(jìn)行規(guī)范化操作,比如Weight Norm就屬于這一類。廣義上講,一般機(jī)器學(xué)習(xí)里看到的損失函數(shù)里面加入的對(duì)參數(shù)的的L1/L2等正則項(xiàng),本質(zhì)上也屬于這第二類規(guī)范化操作。L1正則的規(guī)范化目標(biāo)是造成參數(shù)的稀疏化,就是爭(zhēng)取達(dá)到讓大量參數(shù)值取得0值的效果,而L2正則的規(guī)范化目標(biāo)是有效減小原始參數(shù)值的大小。有了這些規(guī)范目標(biāo),通過具體的規(guī)范化手段來(lái)改變參數(shù)值,以達(dá)到避免模型過擬合的目的。

本文主要介紹第一類針對(duì)神經(jīng)元的規(guī)范化操作方法,這是目前DNN做Normalization最主流的做法。

圖4. Normalization加入的位置

那么對(duì)于第一類的Normalization操作,其在什么位置發(fā)揮作用呢?目前有兩種在神經(jīng)元中插入Normalization操作的地方(參考圖4),第一種是原始BN論文提出的,放在激活函數(shù)之前;另外一種是后續(xù)研究提出的,放在激活函數(shù)之后,不少研究表明將BN放在激活函數(shù)之后效果更好。本文在講解時(shí)仍然遵循BN原始論文,后續(xù)講解都可以看成是將Normalization操作放在激活函數(shù)之前進(jìn)行。

對(duì)于神經(jīng)元的激活值來(lái)說,不論哪種Normalization方法,其規(guī)范化目標(biāo)都是一樣的,就是將其激活值規(guī)整為均值為0,方差為1的正態(tài)分布。即規(guī)范化函數(shù)統(tǒng)一都是如下形式:

寫成兩步的模式是為了方便講解,如果寫成一體的形式,則是如下形式:

其中,a_i為某個(gè)神經(jīng)元原始激活值,?為經(jīng)過規(guī)范化操作后的規(guī)范后值。整個(gè)規(guī)范化過程可以分解為兩步,第一步參考公式(1),是對(duì)激活值規(guī)整到均值為0,方差為1的正態(tài)分布范圍內(nèi)。其中,μ是通過神經(jīng)元集合S(至于S如何選取讀者可以先不用關(guān)注,后文有述)中包含的m個(gè)神經(jīng)元各自的激活值求出的均值,即:

為根據(jù)均值和集合S中神經(jīng)元各自激活值求出的激活值標(biāo)準(zhǔn)差:

其中,ε是為了增加訓(xùn)練穩(wěn)定性而加入的小的常量數(shù)據(jù)。

第二步參考公式(2),主要目標(biāo)是讓每個(gè)神經(jīng)元在訓(xùn)練過程中學(xué)習(xí)到對(duì)應(yīng)的兩個(gè)調(diào)節(jié)因子,對(duì)規(guī)范到0均值,1方差的值進(jìn)行微調(diào)。因?yàn)榻?jīng)過第一步操作后,Normalization有可能降低神經(jīng)網(wǎng)絡(luò)的非線性表達(dá)能力,所以會(huì)以此方式來(lái)補(bǔ)償Normalization操作后神經(jīng)網(wǎng)絡(luò)的表達(dá)能力。

目前神經(jīng)網(wǎng)絡(luò)中常見的第一類Normalization方法包括Batch Normalization/Layer Normalization/Instance Normalization和Group Normalization,BN最早由Google研究人員于2015年提出,后面幾個(gè)算法算是BN的改進(jìn)版本。不論是哪個(gè)方法,其基本計(jì)算步驟都如上所述,大同小異,最主要的區(qū)別在于神經(jīng)元集合S的范圍怎么定,不同的方法采用了不同的神經(jīng)元集合定義方法。

為什么這些Normalization需要確定一個(gè)神經(jīng)元集合S呢?原因很簡(jiǎn)單,前面講過,這類深度學(xué)習(xí)的規(guī)范化目標(biāo)是將神經(jīng)元的激活值限定在均值為0方差為1的正態(tài)分布中。而為了能夠?qū)W(wǎng)絡(luò)中某個(gè)神經(jīng)元的激活值a_i規(guī)范到均值為0方差為1的范圍,必須有一定的手段求出均值和方差,而均值和方差是個(gè)統(tǒng)計(jì)指標(biāo),要計(jì)算這兩個(gè)指標(biāo)一定是在一個(gè)集合范圍內(nèi)才可行,所以這就要求必須指定一個(gè)神經(jīng)元組成的集合,利用這個(gè)集合里每個(gè)神經(jīng)元的激活來(lái)統(tǒng)計(jì)出所需的均值和方差,這樣才能達(dá)到預(yù)定的規(guī)范化目標(biāo)。

圖5. Normalization具體例子

圖5給出了這類Normalization的一個(gè)計(jì)算過程的具體例子,例子中假設(shè)網(wǎng)絡(luò)結(jié)構(gòu)是前向反饋網(wǎng)絡(luò),對(duì)于隱層的三個(gè)節(jié)點(diǎn)來(lái)說,其原初的激活值為[0.4,-0.6,0.7],為了可以計(jì)算均值為0方差為1的正態(tài)分布,劃定集合S中包含了這個(gè)網(wǎng)絡(luò)中的6個(gè)神經(jīng)元,至于如何劃定集合S讀者可以先不用關(guān)心,此時(shí)其對(duì)應(yīng)的激活值如圖中所示,根據(jù)這6個(gè)激活值,可以算出對(duì)應(yīng)的均值和方差。有了均值和方差,可以利用公式3對(duì)原初激活值進(jìn)行變換,如果r和b被設(shè)定為1,那么可以得到轉(zhuǎn)換后的激活值[0.21,-0.75,0.50],對(duì)于新的激活值經(jīng)過非線性變換函數(shù)比如RELU,則形成這個(gè)隱層的輸出值[0.21,0,0.50]。這個(gè)例子中隱層的三個(gè)神經(jīng)元在某刻進(jìn)行Normalization計(jì)算的時(shí)候共用了同一個(gè)集合S,在實(shí)際的計(jì)算中,隱層中的神經(jīng)元可能共用同一個(gè)集合,也可能每個(gè)神經(jīng)元采用不同的神經(jīng)元集合S,并非一成不變,這點(diǎn)還請(qǐng)留心與注意。

針對(duì)神經(jīng)元的所有Normalization方法都遵循上述計(jì)算過程,唯一的不同在于如何劃定計(jì)算統(tǒng)計(jì)量所需的神經(jīng)元集合S上。讀者可以自己思考下,如果你是BN或者其它改進(jìn)模型的設(shè)計(jì)者,那么你會(huì)如何選取集合S?

三. Batch Normalization如何做?

我們知道,目前最常用的深度學(xué)習(xí)基礎(chǔ)模型包括前向神經(jīng)網(wǎng)絡(luò)(MLP),CNN和RNN。目前BN在這些基礎(chǔ)網(wǎng)絡(luò)結(jié)構(gòu)都有嘗試,總體而言,BN在MLP和CNN是非常成功的,在RNN上效果不明顯。下面我們分述前向神經(jīng)網(wǎng)絡(luò)以及CNN中如何應(yīng)用BN,然后談?wù)凚N面臨的一些困境。正是這些困境引發(fā)了后續(xù)的一系列改進(jìn)模型的提出。

3.1 前向神經(jīng)網(wǎng)絡(luò)中的BN

圖6. 前向神經(jīng)網(wǎng)絡(luò)中的BatchNorm

對(duì)于前向神經(jīng)網(wǎng)絡(luò)來(lái)說,BatchNorm在計(jì)算隱層某個(gè)神經(jīng)元k激活的規(guī)范值的時(shí)候,對(duì)應(yīng)的神經(jīng)元集合S范圍是如何劃定呢?圖6給出了示意。因?yàn)閷?duì)于Mini-Batch訓(xùn)練方法來(lái)說,根據(jù)Loss更新梯度使用Batch中所有實(shí)例來(lái)做,所以對(duì)于神經(jīng)元k來(lái)說,假設(shè)某個(gè)Batch包含n個(gè)訓(xùn)練實(shí)例,那么每個(gè)訓(xùn)練實(shí)例在神經(jīng)元k都會(huì)產(chǎn)生一個(gè)激活值,也就是說Batch中n個(gè)訓(xùn)練實(shí)例分別通過同一個(gè)神經(jīng)元k的時(shí)候產(chǎn)生了n個(gè)激活值,BatchNorm的集合S選擇入圍的神經(jīng)元就是這n個(gè)同一個(gè)神經(jīng)元被Batch不同訓(xùn)練實(shí)例激發(fā)的激活值。劃定集合S的范圍后,Normalization的具體計(jì)算過程與前文所述計(jì)算過程一樣,采用公式3即可完成規(guī)范化操作。

3.2 CNN網(wǎng)絡(luò)中的BN

了解了前向神經(jīng)網(wǎng)絡(luò)中的BatchNorm ,接下來(lái)介紹CNN中的BatchNorm,讀者可以先自行思考下如果由你來(lái)主導(dǎo)設(shè)計(jì),在CNN中究竟應(yīng)該如何確定神經(jīng)元集合S的勢(shì)力范圍。

我們知道,常規(guī)的CNN一般由卷積層、下采樣層及全連接層構(gòu)成。全連接層形式上與前向神經(jīng)網(wǎng)絡(luò)是一樣的,所以可以采取前向神經(jīng)網(wǎng)絡(luò)中的BatchNorm方式,而下采樣層本身不帶參數(shù)所以可以忽略,所以CNN中主要關(guān)注卷積層如何計(jì)算BatchNorm。

圖7. CNN中的卷積核

CNN中的某個(gè)卷積層由m個(gè)卷積核構(gòu)成,每個(gè)卷積核對(duì)三維的輸入(通道數(shù)*長(zhǎng)*寬)進(jìn)行計(jì)算,激活及輸出值是個(gè)二維平面(長(zhǎng)*寬),對(duì)應(yīng)一個(gè)輸出通道(參考圖7),由于存在m個(gè)卷積核,所以輸出仍然是三維的,由m個(gè)通道及每個(gè)通道的二維平面構(gòu)成。

圖8. CNN中的BatchNorm過程

那么在卷積層中,如果要對(duì)通道激活二維平面中某個(gè)激活值進(jìn)行Normalization操作,怎么確定集合S的范圍呢?圖8給出了示意圖。類似于前向神經(jīng)網(wǎng)絡(luò)中的BatchNorm計(jì)算過程,對(duì)于Mini-Batch訓(xùn)練方法來(lái)說,反向傳播更新梯度使用Batch中所有實(shí)例的梯度方向來(lái)進(jìn)行,所以對(duì)于CNN某個(gè)卷積層對(duì)應(yīng)的輸出通道k來(lái)說,假設(shè)某個(gè)Batch包含n個(gè)訓(xùn)練實(shí)例,那么每個(gè)訓(xùn)練實(shí)例在這個(gè)通道k都會(huì)產(chǎn)生一個(gè)二維激活平面,也就是說Batch中n個(gè)訓(xùn)練實(shí)例分別通過同一個(gè)卷積核的輸出通道k的時(shí)候產(chǎn)生了n個(gè)激活平面。假設(shè)激活平面長(zhǎng)為5,寬為4,則激活平面包含20個(gè)激活值,n個(gè)不同實(shí)例的激活平面共包含20*n個(gè)激活值。那么BatchNorm的集合S的范圍就是由這20*n個(gè)同一個(gè)通道被Batch不同訓(xùn)練實(shí)例激發(fā)的激活平面中包含的所有激活值構(gòu)成(對(duì)應(yīng)圖8中所有標(biāo)為藍(lán)色的激活值)。劃定集合S的范圍后,激活平面中任意一個(gè)激活值都需進(jìn)行Normalization操作,其Normalization的具體計(jì)算過程與前文所述計(jì)算過程一樣,采用公式3即可完成規(guī)范化操作。這樣即完成CNN卷積層的BatchNorm轉(zhuǎn)換過程。

圖9. CNN中Batch Norm的另外一種角度的理解

描述起來(lái)似乎有些復(fù)雜,但是從概念上,其實(shí)可以把CNN中的卷積層想象成前向神經(jīng)網(wǎng)絡(luò)中的一個(gè)隱層,然后把對(duì)應(yīng)的某個(gè)卷積核想象成MLP隱層中的一個(gè)神經(jīng)元節(jié)點(diǎn),無(wú)非其輸出是個(gè)二維激活平面而不像MLP的神經(jīng)元輸出是一個(gè)激活值,另外一個(gè)不同是這個(gè)神經(jīng)元覆蓋的輸入部分不同,CNN的卷積核是局部覆蓋輸入,通過滑動(dòng)窗口來(lái)實(shí)現(xiàn)輸入的全覆蓋,而MLP的神經(jīng)元?jiǎng)t是一步到位全局覆蓋輸入而已(參考圖9示意)。如果從這個(gè)角度思考CNN和MLP中的BatchNorm的話,其實(shí)兩者的做法是一致的。

從理論上講,類似的BatchNorm操作也可以應(yīng)用在RNN上,事實(shí)上也有不少研究做了嘗試,但是各種實(shí)驗(yàn)證明其實(shí)這么做沒什么用,所以本文就不展開講RNN中的BN了。

BatchNorm目前基本已經(jīng)成為各種網(wǎng)絡(luò)(RNN除外)的標(biāo)配,主要是因?yàn)樾Ч茫热缈梢约涌炷P褪諗克俣?,不再依賴精?xì)的參數(shù)初始化過程,可以調(diào)大學(xué)習(xí)率等各種方便,同時(shí)引入的隨機(jī)噪聲能夠起到對(duì)模型參數(shù)進(jìn)行正則化的作用,有利于增強(qiáng)模型泛化能力。

但是,BatchNorm這么好用的大殺器,仍然存在很多問題。

3.3 Batch Norm的四大罪狀

局限1:如果Batch Size太小,則BN效果明顯下降。

BN是嚴(yán)重依賴Mini-Batch中的訓(xùn)練實(shí)例的,如果Batch Size比較小則任務(wù)效果有明顯的下降。那么多小算是太小呢?圖10給出了在ImageNet數(shù)據(jù)集下做分類任務(wù)時(shí),使用ResNet的時(shí)候模型性能隨著BatchSize變化時(shí)的性能變化情況,可以看出當(dāng)BatchSize小于8的時(shí)候開始對(duì)分類效果有明顯負(fù)面影響。之所以會(huì)這樣,是因?yàn)樵谛〉腂atchSize意味著數(shù)據(jù)樣本少,因而得不到有效統(tǒng)計(jì)量,也就是說噪音太大。這個(gè)很好理解,這就類似于我們國(guó)家統(tǒng)計(jì)局在做年均收入調(diào)查的時(shí)候,正好把你和馬云放到一個(gè)Batch里算平均收入,那么當(dāng)你為下個(gè)月房租發(fā)愁之際,突然聽到你所在組平均年薪1億美金時(shí),你是什么心情,那小Mini-Batch里其它訓(xùn)練實(shí)例就是啥心情。

圖10. BN的Batch Size大小對(duì)ImageNet分類任務(wù)效果的影響(From GN論文)

BN的Batch Size大小設(shè)置是由調(diào)參師自己定的,調(diào)參師只要把Batch Size大小設(shè)置大些就可以避免上述問題。但是有些任務(wù)比較特殊,要求batch size必須不能太大,在這種情形下,普通的BN就無(wú)能為力了。比如BN無(wú)法應(yīng)用在Online Learning中,因?yàn)樵诰€模型是單實(shí)例更新模型參數(shù)的,難以組織起Mini-Batch結(jié)構(gòu)。

局限2:對(duì)于有些像素級(jí)圖片生成任務(wù)來(lái)說,BN效果不佳;

對(duì)于圖片分類等任務(wù),只要能夠找出關(guān)鍵特征,就能正確分類,這算是一種粗粒度的任務(wù),在這種情形下通常BN是有積極效果的。但是對(duì)于有些輸入輸出都是圖片的像素級(jí)別圖片生成任務(wù),比如圖片風(fēng)格轉(zhuǎn)換等應(yīng)用場(chǎng)景,使用BN會(huì)帶來(lái)負(fù)面效果,這很可能是因?yàn)樵贛ini-Batch內(nèi)多張無(wú)關(guān)的圖片之間計(jì)算統(tǒng)計(jì)量,弱化了單張圖片本身特有的一些細(xì)節(jié)信息。

局限3:RNN等動(dòng)態(tài)網(wǎng)絡(luò)使用BN效果不佳且使用起來(lái)不方便

對(duì)于RNN來(lái)說,盡管其結(jié)構(gòu)看上去是個(gè)靜態(tài)網(wǎng)絡(luò),但在實(shí)際運(yùn)行展開時(shí)是個(gè)動(dòng)態(tài)網(wǎng)絡(luò)結(jié)構(gòu),因?yàn)檩斎氲腟equence序列是不定長(zhǎng)的,這源自同一個(gè)Mini-Batch中的訓(xùn)練實(shí)例有長(zhǎng)有短。對(duì)于類似RNN這種動(dòng)態(tài)網(wǎng)絡(luò)結(jié)構(gòu),BN使用起來(lái)不方便,因?yàn)橐獞?yīng)用BN,那么RNN的每個(gè)時(shí)間步需要維護(hù)各自的統(tǒng)計(jì)量,而Mini-Batch中的訓(xùn)練實(shí)例長(zhǎng)短不一,這意味著RNN不同時(shí)間步的隱層會(huì)看到不同數(shù)量的輸入數(shù)據(jù),而這會(huì)給BN的正確使用帶來(lái)問題。假設(shè)Mini-Batch中只有個(gè)別特別長(zhǎng)的例子,那么對(duì)較深時(shí)間步深度的RNN網(wǎng)絡(luò)隱層來(lái)說,其統(tǒng)計(jì)量不方便統(tǒng)計(jì)而且其統(tǒng)計(jì)有效性也非常值得懷疑。另外,如果在推理階段遇到長(zhǎng)度特別長(zhǎng)的例子,也許根本在訓(xùn)練階段都無(wú)法獲得深層網(wǎng)絡(luò)的統(tǒng)計(jì)量。綜上,在RNN這種動(dòng)態(tài)網(wǎng)絡(luò)中使用BN很不方便,而且很多改進(jìn)版本的BN應(yīng)用在RNN效果也一般。

局限4:訓(xùn)練時(shí)和推理時(shí)統(tǒng)計(jì)量不一致

對(duì)于BN來(lái)說,采用Mini-Batch內(nèi)實(shí)例來(lái)計(jì)算統(tǒng)計(jì)量,這在訓(xùn)練時(shí)沒有問題,但是在模型訓(xùn)練好之后,在線推理的時(shí)候會(huì)有麻煩。因?yàn)樵诰€推理或預(yù)測(cè)的時(shí)候,是單實(shí)例的,不存在Mini-Batch,所以就無(wú)法獲得BN計(jì)算所需的均值和方差,一般解決方法是采用訓(xùn)練時(shí)刻記錄的各個(gè)Mini-Batch的統(tǒng)計(jì)量的數(shù)學(xué)期望,以此來(lái)推算全局的均值和方差,在線推理時(shí)采用這樣推導(dǎo)出的統(tǒng)計(jì)量。雖說實(shí)際使用并沒大問題,但是確實(shí)存在訓(xùn)練和推理時(shí)刻統(tǒng)計(jì)量計(jì)算方法不一致的問題。

上面所列BN的四大罪狀,表面看是四個(gè)問題,其實(shí)深入思考,都指向了幕后同一個(gè)黑手,這個(gè)隱藏在暗處的黑手是誰(shuí)呢?就是BN要求計(jì)算統(tǒng)計(jì)量的時(shí)候必須在同一個(gè)Mini-Batch內(nèi)的實(shí)例之間進(jìn)行統(tǒng)計(jì),因此形成了Batch內(nèi)實(shí)例之間的相互依賴和影響的關(guān)系。如何從根本上解決這些問題?一個(gè)自然的想法是:把對(duì)Batch的依賴去掉,轉(zhuǎn)換統(tǒng)計(jì)集合范圍。在統(tǒng)計(jì)均值方差的時(shí)候,不依賴Batch內(nèi)數(shù)據(jù),只用當(dāng)前處理的單個(gè)訓(xùn)練數(shù)據(jù)來(lái)獲得均值方差的統(tǒng)計(jì)量,這樣因?yàn)椴辉僖蕾嘊atch內(nèi)其它訓(xùn)練數(shù)據(jù),那么就不存在因?yàn)锽atch約束導(dǎo)致的問題。在BN后的幾乎所有改進(jìn)模型都是在這個(gè)指導(dǎo)思想下進(jìn)行的。

但是這個(gè)指導(dǎo)思路盡管會(huì)解決BN帶來(lái)的問題,又會(huì)引發(fā)新的問題,新的問題是:我們目前已經(jīng)沒有Batch內(nèi)實(shí)例能夠用來(lái)求統(tǒng)計(jì)量了,此時(shí)統(tǒng)計(jì)范圍必須局限在一個(gè)訓(xùn)練實(shí)例內(nèi),一個(gè)訓(xùn)練實(shí)例看上去孤零零的無(wú)依無(wú)靠沒有組織,怎么看也無(wú)法求統(tǒng)計(jì)量,所以核心問題是對(duì)于單個(gè)訓(xùn)練實(shí)例,統(tǒng)計(jì)范圍怎么算?

四. Layer Normalization、Instance Normalization及Group Normalization

4.1 Layer Normalization

為了能夠在只有當(dāng)前一個(gè)訓(xùn)練實(shí)例的情形下,也能找到一個(gè)合理的統(tǒng)計(jì)范圍,一個(gè)最直接的想法是:MLP的同一隱層自己包含了若干神經(jīng)元;同理,CNN中同一個(gè)卷積層包含k個(gè)輸出通道,每個(gè)通道包含m*n個(gè)神經(jīng)元,整個(gè)通道包含了k*m*n個(gè)神經(jīng)元;類似的,RNN的每個(gè)時(shí)間步的隱層也包含了若干神經(jīng)元。那么我們完全可以直接用同層隱層神經(jīng)元的響應(yīng)值作為集合S的范圍來(lái)求均值和方差。這就是Layer Normalization的基本思想。圖11、圖12和圖13分示了MLP、CNN和RNN的Layer Normalization的集合S計(jì)算范圍,因?yàn)楹苤庇^,所以這里不展開詳述。

圖11. MLP中的LayerNorm

圖12. CNN中的LayerNorm

圖13. RNN中的LayerNorm

前文有述,BN在RNN中用起來(lái)很不方便,而Layer Normalization這種在同隱層內(nèi)計(jì)算統(tǒng)計(jì)量的模式就比較符合RNN這種動(dòng)態(tài)網(wǎng)絡(luò),目前在RNN中貌似也只有LayerNorm相對(duì)有效,但Layer Normalization目前看好像也只適合應(yīng)用在RNN場(chǎng)景下,在CNN等環(huán)境下效果是不如BatchNorm或者GroupNorm等模型的。從目前現(xiàn)狀看,動(dòng)態(tài)網(wǎng)絡(luò)中的Normalization機(jī)制是非常值得深入研究的一個(gè)領(lǐng)域。

4.2 Instance Normalization

從上述內(nèi)容可以看出,Layer Normalization在拋開對(duì)Mini-Batch的依賴目標(biāo)下,為了能夠統(tǒng)計(jì)均值方差,很自然地把同層內(nèi)所有神經(jīng)元的響應(yīng)值作為統(tǒng)計(jì)范圍,那么我們能否進(jìn)一步將統(tǒng)計(jì)范圍縮???對(duì)于CNN明顯是可以的,因?yàn)橥粋€(gè)卷積層內(nèi)每個(gè)卷積核會(huì)產(chǎn)生一個(gè)輸出通道,而每個(gè)輸出通道是一個(gè)二維平面,也包含多個(gè)激活神經(jīng)元,自然可以進(jìn)一步把統(tǒng)計(jì)范圍縮小到單個(gè)卷積核對(duì)應(yīng)的輸出通道內(nèi)部。圖14展示了CNN中的Instance Normalization,對(duì)于圖中某個(gè)卷積層來(lái)說,每個(gè)輸出通道內(nèi)的神經(jīng)元會(huì)作為集合S來(lái)統(tǒng)計(jì)均值方差。對(duì)于RNN或者M(jìn)LP,如果在同一個(gè)隱層類似CNN這樣縮小范圍,那么就只剩下單獨(dú)一個(gè)神經(jīng)元,輸出也是單值而非CNN的二維平面,這意味著沒有形成集合S,所以RNN和MLP是無(wú)法進(jìn)行Instance Normalization操作的,這個(gè)很好理解。

圖14 CNN中的Instance Normalization

我們回想下圖8代表的CNN中的Batch Normalization,可以設(shè)想一下:如果把BN中的Batch Size大小設(shè)定為1,此時(shí)和Instance Norm的圖14比較一下,是否兩者是等價(jià)的?也就是說,看上去Instance Normalization像是Batch Normalization的一種Batch Size=1的特例情況。但是仔細(xì)思考,你會(huì)發(fā)現(xiàn)兩者還是有區(qū)別的,至于區(qū)別是什么讀者可自行思考。

Instance Normalization對(duì)于一些圖片生成類的任務(wù)比如圖片風(fēng)格轉(zhuǎn)換來(lái)說效果是明顯優(yōu)于BN的,但在很多其它圖像類任務(wù)比如分類等場(chǎng)景效果不如BN。

4.3 Group Normalization

從上面的Layer Normalization和Instance Normalization可以看出,這是兩種極端情況,Layer Normalization是將同層所有神經(jīng)元作為統(tǒng)計(jì)范圍,而Instance Normalization則是CNN中將同一卷積層中每個(gè)卷積核對(duì)應(yīng)的輸出通道單獨(dú)作為自己的統(tǒng)計(jì)范圍。那么,有沒有介于兩者之間的統(tǒng)計(jì)范圍呢?通道分組是CNN常用的模型優(yōu)化技巧,所以自然而然會(huì)想到對(duì)CNN中某一層卷積層的輸出或者輸入通道進(jìn)行分組,在分組范圍內(nèi)進(jìn)行統(tǒng)計(jì)。這就是Group Normalization的核心思想,是Facebook何凱明研究組2017年提出的改進(jìn)模型。

圖15展示了CNN中的Group Normalization。理論上MLP和RNN也可以引入這種模式,但是還沒有看到相關(guān)研究,不過從道理上考慮,MLP和RNN這么做的話,分組內(nèi)包含神經(jīng)元太少,估計(jì)缺乏統(tǒng)計(jì)有效性,猜測(cè)效果不會(huì)太好。

圖15. CNN中的Group Normalization

Group Normalization在要求Batch Size比較小的場(chǎng)景下或者物體檢測(cè)視頻分類等應(yīng)用場(chǎng)景下效果是優(yōu)于BN的。

4.4 用一個(gè)故事來(lái)總結(jié)

為了能夠更直觀地理解四種Normalization的異同,大家可以體會(huì)下面的故事以做類比:

很久很久以前,在遙遠(yuǎn)的L國(guó)內(nèi)有一個(gè)神奇的理發(fā)館,理發(fā)館里面有很多勤勞的理發(fā)師,來(lái)這里理發(fā)的顧客也很奇特,他們所有人都會(huì)要求理發(fā)師(神經(jīng)元)理出和其他人差不多長(zhǎng)的頭發(fā)(求均值)。那么和其他人差不多長(zhǎng)究竟是多長(zhǎng)呢?這可難不倒我們可愛又聰明的理發(fā)師,于是理發(fā)師把自己最近24個(gè)小時(shí)服務(wù)過的顧客(Mini-Batch)進(jìn)入理發(fā)店時(shí)的頭發(fā)長(zhǎng)度求個(gè)平均值,這個(gè)均值就是“和其他人差不多長(zhǎng)”的長(zhǎng)度。來(lái)這里的每個(gè)顧客都很滿意,時(shí)間久了,人們尊稱這些理發(fā)師為:BatchNorm理發(fā)師。

不幸總是突然的,有一天,理發(fā)館里發(fā)生了一件怪事,所有理發(fā)師的記憶只能維持1分鐘,他們?cè)僖灿洸蛔∵^去24小時(shí)中發(fā)生的事情了,自然也記不住過去服務(wù)客人的頭發(fā)長(zhǎng)度。但是每個(gè)顧客仍然要求剪出和其他人差不多長(zhǎng)的頭發(fā)長(zhǎng)度,這可怎么辦?聰明的理發(fā)師們又想出了一個(gè)辦法:他們相互大聲報(bào)出同一時(shí)刻在理發(fā)館里自己手上客人的頭發(fā)長(zhǎng)度,每個(gè)理發(fā)師就可以用這些人的頭發(fā)長(zhǎng)度均值作為滿足自己手上客人條件的長(zhǎng)度。盡管這是一群得了失憶綜合證的理發(fā)師,但是顧客對(duì)他們的服務(wù)仍然非常滿意,于是人們改稱他們?yōu)椋篖ayerNorm理發(fā)師。

不幸總是突然的,有一天,理發(fā)館里又發(fā)生了一件怪事,理發(fā)師們不僅得了失憶癥,這次都突然失聰,再也聽不到其它理發(fā)師的口頭通知,而固執(zhí)的客人仍然堅(jiān)持要理出“和其他人差不多長(zhǎng)”的頭發(fā)。對(duì)了,忘了介紹了,理發(fā)館是有隔間的,每個(gè)隔間有K個(gè)理發(fā)師同時(shí)給顧客理發(fā),雖然我們可愛又聰明的理發(fā)師現(xiàn)在失憶又失聰,但是再大的困難也難不倒也叫不醒這群裝睡的人,他們醒來(lái)后群策群力又發(fā)明了一個(gè)新方法:同一個(gè)隔間的理發(fā)師通過相互打手勢(shì)來(lái)通知其它理發(fā)師自己手上顧客的頭發(fā)長(zhǎng)度。于是同一個(gè)隔間的理發(fā)師又可以剪出顧客滿意的頭發(fā)了。人們稱這些身殘志堅(jiān)的理發(fā)師為:GroupNorm理發(fā)師。

不幸總是突然的,有一天,理發(fā)館里又發(fā)生了一件怪事,不過這次不是天災(zāi)是人禍,理發(fā)館老板出于好心,給每位理發(fā)師單獨(dú)開個(gè)辦公室給顧客理發(fā),但是好心辦了壞事,這樣一來(lái),失憶失聰又無(wú)法相互打手勢(shì)的理發(fā)師們?cè)趺磻?yīng)對(duì)頑固的顧客呢?怎樣才能繼續(xù)理出“和其他人差不多長(zhǎng)”的頭發(fā)呢?想必一般人這個(gè)時(shí)候基本無(wú)路可走了,但是我們可愛又聰明,同時(shí)失聰又失憶的理發(fā)師仍然想出了解決辦法:他們看了看客人頭上的頭發(fā),發(fā)現(xiàn)不同地方有長(zhǎng)有短,于是就把同一個(gè)客人所有頭發(fā)的平均長(zhǎng)度作為難題的答案(CNN的InstanceNorm)。聽起來(lái)這個(gè)解決方案匪夷所思,但是出人意料的是,有些客人居然仍然非常滿意。人們管這些傳說中的神奇理發(fā)師為:InstanceNorm理發(fā)師。

五. Normalization操作的Re-Scaling不變性

我們知道,當(dāng)神經(jīng)網(wǎng)絡(luò)深度加深時(shí),訓(xùn)練有較大困難,往往其原因在于隨著網(wǎng)絡(luò)加深,在反向傳播訓(xùn)練模型時(shí),存在梯度爆炸或者梯度消失問題,Loss信息不能有效傳導(dǎo)到低層神經(jīng)網(wǎng)絡(luò)參數(shù),所以導(dǎo)致參數(shù)無(wú)法更新,模型無(wú)法收斂或者收斂速度慢。而很多環(huán)節(jié)可能導(dǎo)致梯度爆炸或者梯度消失問題,比如非線性函數(shù)及其導(dǎo)數(shù)是什么形式以及網(wǎng)絡(luò)參數(shù)是否過大過小等,以非線性函數(shù)來(lái)說,比如RELU是能極大緩解這個(gè)問題的(因?yàn)樗膶?dǎo)數(shù)是個(gè)常數(shù)),這也是為何目前RELU大行其道的根本原因。從神經(jīng)網(wǎng)絡(luò)參數(shù)角度看,如果神經(jīng)網(wǎng)絡(luò)中的參數(shù)具備Re-Scaling 不變性,意味著參數(shù)值過大或者過小對(duì)神經(jīng)元輸出沒什么影響,無(wú)疑這對(duì)緩解梯度爆炸或者梯度消失也有極大幫助作用,而Normalization確實(shí)具備幾個(gè)不同角度的Re-Scaling不變性,這也許是Normalization為何應(yīng)用在深度學(xué)習(xí)有效的原因之一,雖然可能并非本質(zhì)原因。本節(jié)即講述Normalization為何具備Re-Scaling 不變性這種優(yōu)良特性。

我們考慮神經(jīng)網(wǎng)絡(luò)中的三種Re-Scaling情形:權(quán)重向量(Weight Vector)Re-Scaling,數(shù)據(jù)Re-Scaling和權(quán)重矩陣(Weight Matrix)Re-Scaling。

圖16. 權(quán)重向量Re-Scaling

對(duì)于網(wǎng)絡(luò)中某個(gè)神經(jīng)元i來(lái)說,其對(duì)應(yīng)的邊權(quán)重向量假設(shè)為W_i,所謂權(quán)重向量(Weight Vector)Re-Scaling,就是將W_i 乘上一個(gè)縮放因子φ,如果神經(jīng)元 i 在進(jìn)行權(quán)重向量 Re-Scaling 之前和之后兩種不同情況下做 Normalization 操作,若 Normalization 之后神經(jīng)元 i 對(duì)應(yīng)的激活值沒發(fā)生變化,我們就說這種 Normalization 具備權(quán)重向量 Re-Scaling 不變性(參考圖16)。

圖17. 數(shù)據(jù)Re-Scaling

所謂數(shù)據(jù)Re-Scaling,指的是把輸入X乘上一個(gè)縮放因子φ,同樣的,如果對(duì)輸入做縮放前后兩種情況下進(jìn)行Normalization操作,若Normalization之后所有隱層神經(jīng)元對(duì)應(yīng)的激活值沒發(fā)生變化,我們說這種Normalization具備數(shù)據(jù)Re-Scaling不變性(參考圖17)。

圖18. 權(quán)重矩陣 Re-Scaling

而權(quán)重矩陣 Re-Scaling 指的是:對(duì)于某兩個(gè)隱層(L 層 vs L+1 層)之間的所有邊的權(quán)重參數(shù) W_ij 同時(shí)乘上相同的縮放因子φ,如果在權(quán)重矩陣 Re-Scaling 之前和之后兩種情形下對(duì) (L+1) 層隱層神經(jīng)元做 Normalization 操作,若兩種情況下隱層所有神經(jīng)元激活值沒有變化,我們說這種 Normalization 具備權(quán)重矩陣 Re-Scaling 不變性(參考圖18)。

在了解了三種Re-Scaling的含義及Normalization對(duì)應(yīng)的三種不變性特性后,我們先歸納各種Normalization操作所對(duì)應(yīng)的三種Re-Scaling的不變性特性如下表所示(Layer Normalization原始論文分析了LayerNorm及BatchNorm的Re-Scaling不變性,本文作者補(bǔ)充了InstanceNorm及GroupNorm的情況以及細(xì)化了推導(dǎo)過程):

由表中可見,這四種不同的Normalization操作都同時(shí)具備權(quán)重矩陣Re-Scaling不變性和數(shù)據(jù)Re-Scaling不變性,但是不同的操作在權(quán)重向量Re-Scaling不變性這方面有差異,Batch Norm和Instance Norm具備權(quán)重向量Re-Scaling不變性,而另外兩種Normalization不具備這個(gè)特性。

我們以Batch Normalization為例來(lái)說明為何BN具備權(quán)重向量Re-Scaling不變性。

對(duì)于某個(gè)神經(jīng)元i的激活a來(lái)說,其值為:

(對(duì)于MLP和CNN來(lái)說,是一樣的,都是這個(gè)公式,區(qū)別在于CNN是局部連接,MLP是全局連接,也就是說只有的數(shù)量規(guī)模不同而已。)

其中,是與神經(jīng)元i相連的邊權(quán)重向量(Weight Vector),X是輸入數(shù)據(jù)或是多層網(wǎng)絡(luò)中前一層的輸出向量,是偏置。我們可以把偏置看作輸入數(shù)據(jù)值為1的特殊邊的權(quán)重,所以可以并入前項(xiàng),簡(jiǎn)寫上述公式為:

現(xiàn)在假設(shè)我們開始re-scale邊權(quán)重向量W_i,使得這些邊的權(quán)重縮放因子為φ,其對(duì)應(yīng)的新的激活得到相同的縮放比例:

而邊的權(quán)重縮放后對(duì)應(yīng)的均值變?yōu)椋?/p>

也就是說均值也被同比例縮放,這里的關(guān)鍵是因?yàn)锽N的統(tǒng)計(jì)量取值范圍是來(lái)自于同一個(gè)Mini-Batch的實(shí)例,所以經(jīng)過的是用一個(gè)神經(jīng)元,于是對(duì)應(yīng)了相同的邊權(quán)重向量,那么縮放因子相同,就可以提到求和公式之外。

類似的,如果我們忽略噪音因子,邊權(quán)重縮放后對(duì)應(yīng)的方差變?yōu)椋?/p>

可見方差也被同比例縮放,因?yàn)?/p>

這是為何說BN具備權(quán)重向量Re-Scaling不變性的原因。

類似的,BN也具備數(shù)據(jù)Re-Scaling不變性,其推導(dǎo)過程與上述推導(dǎo)過程基本一樣。因?yàn)槿绻麑⒃驾斎隭乘以縮放因子,等價(jià)于某個(gè)神經(jīng)元i的激活變?yōu)?/p>

其余推導(dǎo)類似上述的權(quán)重向量ReScaling的后續(xù)推導(dǎo)過程,其對(duì)應(yīng)的均值和方差也會(huì)同比例縮放,于是得到了BN的數(shù)據(jù)Re-Scaling不變性。

同樣的,很容易推出BN也具備權(quán)重矩陣Re-Scaling不變性,因?yàn)闄?quán)重矩陣中所有邊權(quán)重會(huì)使用相同的縮放因子φ,意味著某個(gè)隱層所有神經(jīng)元對(duì)應(yīng)的權(quán)重向量都使用相同的縮放因子,而在進(jìn)行BN操作時(shí),同隱層內(nèi)的神經(jīng)元相互獨(dú)立沒什么關(guān)系,因?yàn)樯厦嫱茖?dǎo)了對(duì)于某個(gè)神經(jīng)元i來(lái)說,其具備權(quán)重向量Re-Scaling不變性,所以對(duì)于所有隱層神經(jīng)元來(lái)說,整個(gè)權(quán)重矩陣縮放后,任意神經(jīng)元的激活與未縮放時(shí)相同,所以BN具備權(quán)重矩陣Re-Scaling不變性。

對(duì)于其它三類Normalization,也就是Layer Norm/Instance Norm/Group Norm來(lái)說,都同時(shí)具備權(quán)重矩陣 Re-Scaling不變性及數(shù)據(jù)Re-Scaling不變性,推導(dǎo)過程也與上述推導(dǎo)過程類似,此處不贅述。

那么為何 Layer Norm 不具備權(quán)重向量 Re-Scaling 不變性呢?因?yàn)?Layer Norm 是在同隱層的神經(jīng)元之間求統(tǒng)計(jì)量,我們考慮一種比較極端的情況,假設(shè) MLP 的隱層只包含兩個(gè)神經(jīng)元:神經(jīng)元 i 和神經(jīng)元 j,而神經(jīng)元 i 對(duì)應(yīng)的邊權(quán)重向量 W_i 縮放因子是φ_i,神經(jīng)元 j 對(duì)應(yīng)的邊權(quán)重向量 W_j 縮放因子是φ_j。于是得出各自經(jīng)過縮放后的激活值為:

對(duì)應(yīng)的縮放后的均值為:

均值是無(wú)法提出公共縮放因子的,類似的方差也提不出公共縮放因子,所以不具備權(quán)重向量Re-Scaling不變性。那這又是為什么呢?根本原因是要進(jìn)行求統(tǒng)計(jì)量計(jì)算的范圍不是同一個(gè)神經(jīng)元,而是不同的神經(jīng)元,而每個(gè)神經(jīng)元對(duì)應(yīng)權(quán)重向量縮放因子不同,所以難以抽出公共縮放因子并相互抵消。除非同一隱層所有隱層神經(jīng)元共享相同的縮放因子,這個(gè)情形其實(shí)就是權(quán)重矩陣 Re-Scaling能夠滿足的條件,所以可以看出Layer Norm具備權(quán)重矩陣 Re-Scaling不變性而不具備權(quán)重向量Re-Scaling不變性。Group Norm也是類似情況。

六. Batch Normalization為何有效?

正如上文所述,BN在提出后獲得了巨大的成功,目前在各種深度學(xué)習(xí)場(chǎng)景下廣泛應(yīng)用,因?yàn)樗芗涌焐窠?jīng)網(wǎng)絡(luò)收斂速度,不再依賴精細(xì)的參數(shù)初始化過程,可以使用較大的學(xué)習(xí)率等很多好處,但是我們應(yīng)該意識(shí)到,所講的這些好處僅僅是引用BN帶來(lái)的結(jié)果,那么更深層次的問題是:為什么BN能夠給深度學(xué)習(xí)帶來(lái)如此多的優(yōu)點(diǎn)呢?它背后起作用的深層原因是什么呢?上文盡管從Normalization操作的Re-Scaling不變性角度有所說明,但其實(shí)還有更深層或更本質(zhì)的原因。

原始的BN論文給出的解釋是BN可以解決神經(jīng)網(wǎng)絡(luò)訓(xùn)練過程中的ICS(Internal Covariate Shift)問題,所謂ICS問題,指的是由于深度網(wǎng)絡(luò)由很多隱層構(gòu)成,在訓(xùn)練過程中由于底層網(wǎng)絡(luò)參數(shù)不斷變化,導(dǎo)致上層隱層神經(jīng)元激活值的分布逐漸發(fā)生很大的變化和偏移,而這非常不利于有效穩(wěn)定地訓(xùn)練神經(jīng)網(wǎng)絡(luò)。

圖19. BN和ICS問題的關(guān)系

但是能夠解決ICS問題其實(shí)并不是BN為何有效背后真正的原因,最近有一些研究對(duì)此作了探討。那么ICS問題真實(shí)存在嗎?ICS問題在較深的網(wǎng)絡(luò)中確實(shí)是普遍存在的,但是這并非導(dǎo)致深層網(wǎng)絡(luò)難以訓(xùn)練的根本原因。另外,BN解決了ICS問題了嗎?其實(shí)也沒有。實(shí)驗(yàn)一方面證明:即使是應(yīng)用了BN,網(wǎng)絡(luò)隱層中的輸出仍然存在嚴(yán)重的ICS問題;另一方面也證明了:在BN層輸出后人工加入噪音模擬ICS現(xiàn)象,并不妨礙BN的優(yōu)秀表現(xiàn)(參考圖19)。這兩方面的證據(jù)互相佐證來(lái)看的話,其實(shí)側(cè)面說明了BN和ICS問題并沒什么關(guān)系。

圖20. 損失曲面

那么BN有效的真正原因到底是什么呢?這還要從深度網(wǎng)絡(luò)的損失曲面(Loss Surface)說起,在深度網(wǎng)絡(luò)疊加大量非線性函數(shù)方式來(lái)解決非凸復(fù)雜問題時(shí),損失曲面形態(tài)異常復(fù)雜,大量空間坑坑洼洼相當(dāng)不平整(參考圖20),也有很多空間是由平坦的大量充滿鞍點(diǎn)的曲面構(gòu)成,訓(xùn)練過程就是利用SGD在這個(gè)復(fù)雜平面上一步一步游走,期望找到全局最小值,也就是曲面里最深的那個(gè)坑。所以在SGD尋優(yōu)時(shí),在如此復(fù)雜曲面上尋找全局最小值而不是落入局部最小值或者被困在鞍點(diǎn)動(dòng)彈不得,可想而知難度有多高。

有了損失曲面的基本概念,我們回頭來(lái)看為何BN是有效的。研究表明,BN真正的用處在于:通過上文所述的Normalization操作,使得網(wǎng)絡(luò)參數(shù)重整(Reparametrize),它對(duì)于非線性非凸問題復(fù)雜的損失曲面有很好的平滑作用,參數(shù)重整后的損失曲面比未重整前的參數(shù)損失曲面平滑許多。我們可以用L-Lipschitz函數(shù)來(lái)評(píng)估損失曲面的平滑程度,L-Lipschitz函數(shù)定義如下:

含義也很直觀,對(duì)于定義區(qū)間內(nèi)的任意取值x_1 和 x_2,用它們的距離去和經(jīng)過函數(shù)映射后的值(就是深度網(wǎng)絡(luò)表達(dá)的損失函數(shù))的距離進(jìn)行比較,如果存在值L滿足上述公式條件,也就是說函數(shù)映射后的距離一定在任意兩個(gè)x差值的L倍以內(nèi),那么這個(gè)函數(shù)稱為L(zhǎng)-Lipschitz函數(shù)。而L的大小代表了函數(shù)曲面的平滑程度,很明顯,L越小曲面越平滑,L越大,則曲面越凹凸不平,時(shí)而高峰時(shí)而波谷不斷顛倒跳躍。舉個(gè)例子,假設(shè)你一出門邁出一步才1米,假設(shè)你一出門邁出一步才 1 米,就突然掉到一個(gè) 100 米深的深溝,那么要滿足公式條件,L 最小得是 100;而假設(shè)你一出門邁出一步踏上了一個(gè) 0.3 米的小臺(tái)階,那么 L 最小等于 0.3 即可。

圖21. 帶BN與不帶BN操作的L-Lipschitz情況

圖21展示了用L-Lipschitz函數(shù)來(lái)衡量采用和不采用BN進(jìn)行神經(jīng)網(wǎng)絡(luò)訓(xùn)練時(shí)兩者的區(qū)別,可以看出未采用BN的訓(xùn)練過程中,L值波動(dòng)幅度很大,而采用了BN后的訓(xùn)練過程L值相對(duì)比較穩(wěn)定且值也比較小,尤其是在訓(xùn)練的初期,這個(gè)差別更明顯。這證明了BN通過參數(shù)重整確實(shí)起到了平滑損失曲面及梯度的作用。

前文提到了Normalization對(duì)參數(shù)的Re-Scaling不變性,這也是參數(shù)重整達(dá)到的效果之一,所以也許其Re-Scaling特性和Loss曲面平滑作用是Normalization的一體兩面,共同發(fā)揮作用或者其實(shí)本身是一回事。事實(shí)的真相很可能是:Normalization通過對(duì)激活值進(jìn)行正態(tài)分布化的參數(shù)重整,產(chǎn)生參數(shù)Re-Scaling不變的效果,因此緩解梯度消失或梯度爆炸問題,與其對(duì)應(yīng)的重整后的損失曲面及梯度也因此變得更平滑,更有利于SGD尋優(yōu)找到問題好的解決方案。當(dāng)然這只是本文作者根據(jù)幾方面研究現(xiàn)狀做出的推測(cè),目前并沒有相關(guān)實(shí)證研究,還請(qǐng)讀者謹(jǐn)慎對(duì)待此觀點(diǎn)。

七. 結(jié)束語(yǔ)

本文歸納了目前深度學(xué)習(xí)技術(shù)中針對(duì)神經(jīng)元進(jìn)行Normalization操作的若干種模型,可以看出,所有模型都采取了類似的步驟和過程,將神經(jīng)元的激活值重整為均值為0方差為1的新數(shù)值,最大的不同在于計(jì)算統(tǒng)計(jì)量的神經(jīng)元集合S的劃分方法上。BN采用了同一個(gè)神經(jīng)元,但是來(lái)自于Mini-Batch中不同訓(xùn)練實(shí)例導(dǎo)致的不同激活作為統(tǒng)計(jì)范圍。而為了克服Mini-Batch帶來(lái)的弊端,后續(xù)改進(jìn)方法拋棄了Mini-Batch的思路,只用當(dāng)前訓(xùn)練實(shí)例引發(fā)的激活來(lái)劃分集合S的統(tǒng)計(jì)范圍,概括而言,LayerNorm采用同隱層的所有神經(jīng)元;InstanceNorm采用CNN中卷積層的單個(gè)通道作為統(tǒng)計(jì)范圍,而GroupNorm則折衷兩者,采用卷積層的通道分組,在劃分為同一個(gè)分組的通道內(nèi)來(lái)作為通道范圍。

至于各種Normalization的適用場(chǎng)景,可以簡(jiǎn)潔歸納如下:

對(duì)于RNN的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)來(lái)說,目前只有LayerNorm是相對(duì)有效的;

如果是GAN等圖片生成或圖片內(nèi)容改寫類型的任務(wù),可以優(yōu)先嘗試InstanceNorm;

如果使用場(chǎng)景約束BatchSize必須設(shè)置很小,無(wú)疑此時(shí)考慮使用GroupNorm;

而其它任務(wù)情形應(yīng)該優(yōu)先考慮使用BatchNorm。

看上去其實(shí)Normalization的各種改進(jìn)模型思路都很直觀,問題是:還有其它劃分集合S的方法嗎?很明顯還有很多種其它方法,建議讀者可以仔細(xì)思考下這個(gè)問題,如果你能找到一種新的集合劃分方法且證明其有效,那么恭喜你,這意味著你找到了一種新的Normalization模型。還等什么,趕緊去發(fā)現(xiàn)它們吧!

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴

原文標(biāo)題:深度學(xué)習(xí)中的Normalization模型

文章出處:【微信號(hào):thejiangmen,微信公眾號(hào):將門創(chuàng)投】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    AUTOCAD各線形代表含義

    AUTOCAD各線形代表含義粗線型:可見輪廓線,細(xì)線型:尺寸線,尺寸界線,解剖線,引出線。波浪型:斷裂處的邊界線,視圖和剖視的分界線。虛線型:不可見輪廓線。點(diǎn)劃型:軸線,對(duì)稱中心
    發(fā)表于 04-08 15:46

    Test Stand batch test result issue

    用test stand 的batch mode時(shí),不知道什么設(shè)置改變了,導(dǎo)致測(cè)試完了顯示結(jié)果時(shí)顯示stop,實(shí)際上是pass, 補(bǔ)充內(nèi)容 (2017-6-11 14:51):
    發(fā)表于 06-08 11:31

    Batch Normalization論文及原理總結(jié)

    【原理】Batch Normalization 論文及原理總結(jié)
    發(fā)表于 06-12 08:51

    如何去使用STM32 Batch Programmer量產(chǎn)燒錄軟件呢

    STM32 Batch Programmer是什么?如何去使用STM32 Batch Programmer量產(chǎn)燒錄軟件呢?
    發(fā)表于 11-09 06:28

    請(qǐng)問在rknn_yolov5_demobatch設(shè)置和推理時(shí)間長(zhǎng)短有何關(guān)系

      使用rknpu/rknn/rknn_api/examples/rknn_yolov5_demo/里面的模型,開1個(gè)batch的時(shí)候,rknn_run一次是48ms,但是開了4個(gè)batch的時(shí)候,rknn_run一次是258ms,這類模型開bath反倒時(shí)間會(huì)邊長(zhǎng)嗎?
    發(fā)表于 04-11 09:57

    在PCS7配置Batch步驟

    Simatic BATCH 是PCS 7 實(shí)現(xiàn)批生產(chǎn)控制的重要組件,在諸多行業(yè)得到了廣泛的應(yīng)用。其組態(tài)過程主要可分為BATCH項(xiàng)目框架搭建和BA
    發(fā)表于 10-11 14:19 ?23次下載
    在PCS7<b class='flag-5'>中</b>配置<b class='flag-5'>Batch</b>步驟

     一文看懂神經(jīng)網(wǎng)絡(luò)之Epoch、Batch Size和迭代

    理解迭代,只需要知道乘法表或者一個(gè)計(jì)算器就可以了。迭代是 batch 需要完成一個(gè) epoch 的次數(shù)。記?。涸谝粋€(gè) epoch ,batch 數(shù)和迭代數(shù)是相等
    發(fā)表于 10-19 12:58 ?3w次閱讀
     一文看懂神經(jīng)網(wǎng)絡(luò)之Epoch、<b class='flag-5'>Batch</b> Size和迭代

    Batch的大小、災(zāi)難性遺忘將如何影響學(xué)習(xí)速率

    “災(zāi)難性遺忘(Catastrophic Forgetting)”,這也是在較小batch限制學(xué)習(xí)率的原因。
    的頭像 發(fā)表于 11-14 08:58 ?3394次閱讀

    Batch Norm的工作原理2018年被MIT的研究人員推翻

    Batch Normalization在2015年被谷歌提出,因?yàn)槟軌蚣铀儆?xùn)練及減少學(xué)習(xí)率的敏感度而被廣泛使用。
    的頭像 發(fā)表于 07-19 14:52 ?4408次閱讀
    <b class='flag-5'>Batch</b> Norm的工作原理2018年被MIT的研究人員推翻

    batch normalization時(shí)的一些缺陷

    導(dǎo)讀 batch normalization時(shí)的一些缺陷。 Batch Normalization確實(shí)是深度學(xué)習(xí)領(lǐng)域的重大突破之一,也是近年來(lái)研究人員討論的熱點(diǎn)之一。
    的頭像 發(fā)表于 11-03 17:27 ?3046次閱讀
    <b class='flag-5'>batch</b> <b class='flag-5'>normalization</b>時(shí)的一些缺陷

    如何去掉batch normalization層來(lái)加速神經(jīng)網(wǎng)絡(luò)

    一旦訓(xùn)練結(jié)束,每個(gè)Batch normalization層都擁有一組特定的γ和β,還有μ和σ,后者在訓(xùn)練過程中使用指數(shù)加權(quán)平均值進(jìn)行計(jì)算。這意味著在推理過程,Batch
    的頭像 發(fā)表于 11-24 09:45 ?2676次閱讀

    Spring Batch Admin監(jiān)控管理工具

    spring-batch-admin.zip
    發(fā)表于 04-27 14:40 ?1次下載
    Spring <b class='flag-5'>Batch</b> Admin監(jiān)控管理工具

    有關(guān)batch size的設(shè)置范圍

    我們知道,batch size 決定了深度學(xué)習(xí)訓(xùn)練過程,完成每個(gè) epoch 所需的時(shí)間和每次迭代(iteration)之間梯度的平滑程度。batch size 越大,訓(xùn)練速度則越快,內(nèi)存占用更大,但收斂變慢。
    的頭像 發(fā)表于 07-12 10:15 ?6590次閱讀

    Spring Batch 批處理框架編程設(shè)計(jì)

    Spring Batch 不是一個(gè)調(diào)度框架。在商業(yè)和開源領(lǐng)域都有許多優(yōu)秀的企業(yè)調(diào)度程序(例如 Quartz、Tivoli、Control-M 等)。Spring Batch 旨在與調(diào)度程序結(jié)合使用,而不是替代調(diào)度程序。
    發(fā)表于 04-26 10:08 ?468次閱讀

    MES與DCS+Batch數(shù)據(jù)交互與超融合應(yīng)用

    和 DCS+Batch 系統(tǒng)的聯(lián)動(dòng)策略,另一方面介紹了 DCS 系統(tǒng)批次管理的優(yōu)勢(shì)(動(dòng)態(tài)分配單元)。通過本文講述的策略,可實(shí)現(xiàn) MES 和 DCS 的同步運(yùn)行,MES 可以下達(dá)生產(chǎn)任務(wù)給 DCS+Batch 并自動(dòng)運(yùn)行,在關(guān)鍵時(shí)間節(jié)點(diǎn)抓取 DCS
    的頭像 發(fā)表于 08-29 14:20 ?3612次閱讀
    MES與DCS+<b class='flag-5'>Batch</b>數(shù)據(jù)交互與超融合應(yīng)用