優化方法總結 Batch Normalization、Layer Normalization、Instance Normalization 及 Group Normalization

目錄

從 Mini-Batch SGD 說起

Normalization 到底是在做什麼

Batch Normalization 如何做

3.1 前向神經網絡中的 BN

3.2 CNN 網絡中的 BN

3.3 Batch Norm 的四大罪狀

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

侷限 2:對於有些像素級圖片生成任務來說,BN 效果不佳;

侷限 3:RNN 等動態網絡使用 BN 效果不佳且使用起來不方便

侷限 4:訓練時和推理時統計量不一致

Layer Normalization、Instance Normalization 及 Group Normalization

4.1 Layer Normalization

4.2 Instance Normalization

4.3 Group Normalization

 

Batch Normalization(簡稱 BN)自從提出之後,因爲效果特別好,很快被作爲深度學習的標準工具應用在了各種場合。

從 Mini-Batch SGD 說起

我們先從 Mini-Batch SGD 的優化過程講起,因爲這是下一步理解 Batch Normalization 中 Batch 所代表具體含義的知識基礎。

我們知道,SGD 是無論學術圈寫文章做實驗還是工業界調參跑模型最常用的模型優化算法,但是有時候容易被忽略的一點是:一般提到的 SGD 是指的 Mini-batch SGD,而非原教旨意義下的單實例 SGD。

                                               

                                                             圖 1. Mini-Batch SGD 訓練過程(假設 Batch Size=2)

所謂「Mini-Batch」, 是指的從訓練數據全集 T 中隨機選擇的一個訓練數據子集合。假設訓練數據集合 T 包含 N 個樣本,而每個 Mini-Batch 的 Batch Size 爲 b,於是整個訓練數據可被分成 N/b 個 Mini-Batch。在模型通過 SGD 進行訓練時,一般跑完一個 Mini-Batch 的實例,叫做完成訓練的一步(step), 跑完 N/b 步則整個訓練數據完成一輪訓練,則稱爲完成一個 Epoch。完成一個 Epoch 訓練過程後,對訓練數據做隨機 Shuffle 打亂訓練數據順序,重複上述步驟,然後開始下一個 Epoch 的訓練,對模型完整充分的訓練由多輪 Epoch 構成(參考圖 1)。

在拿到一個 Mini-Batch 進行參數更新時,首先根據當前 Mini-Batch 內的 b 個訓練實例以及參數對應的損失函數的偏導數來進行計算,以獲得參數更新的梯度方向,然後根據 SGD 算法進行參數更新,以此來達到本步(Step)更新模型參數並逐步尋優的過程。

                  

                                               圖 2. Mini-Batch SGD 優化過程

具體而言,如果我們假設機器學習任務的損失函數是平方損失函數:

                                             

那麼,由 Mini-Batch 內訓練實例可得出 SGD 優化所需的梯度方向爲:

                                             

其中,<x_i,y_i>是 Mini-Batch 內第 i 個訓練實例對應的輸入 x_i 和值 y_i。h_θ是希望學習到的映射函數,其中θ是函數對應的當前參數值。代表了 Mini-Batch 中實例 i 決定的梯度方向,Batch 內所有訓練實例共同決定了本次參數更新的梯度方向

根據梯度方向即可利用標準 SGD 來更新模型參數:

                                                                      

其中,η是學習率。

由上述過程(參考圖 2)可以看出,對於 Mini-Batch SGD 訓練方法來說,爲了能夠參數更新必須得先求出梯度方向,而爲了能夠求出梯度方向,需要對每個實例得出當前參數下映射函數的預測值 h_θ (x_i ),這意味着如果是用神經網絡來學習映射函數 h_θ的話,Mini-Batch 內的每個實例需要走一遍當前的網絡,產生當前參數下神經網絡的預測值,這點請注意,這是理解後續 Batch Normalization 的基礎。

至於 Batch Size 的影響,目前可以實驗證實的是:batch size 設置得較小訓練出來的模型相對大 batch size 訓練出的模型泛化能力更強,在測試集上的表現更好,而太大的 batch size 往往不太 Work,而且泛化能力較差。但是背後是什麼原因造成的,目前還未有定論,持不同看法者各持己見。因爲這不是文本的重點,所以先略過不表。

Normalization 到底是在做什麼

Normalization 的中文翻譯一般叫做「規範化」,是一種對數值的特殊函數變換方法,也就是說假設原始的某個數值是 x,套上一個起到規範化作用的函數,對規範化之前的數值 x 進行轉換,形成一個規範化後的數值,即:

                                                                    

所謂規範化,是希望轉換後的數值 x ̂滿足一定的特性,至於對數值具體如何變換,跟規範化目標有關,也就是說 f() 函數的具體形式,不同的規範化目標導致具體方法中函數所採用的形式不同。

其實我們生活中也有很多類似的規範化操作,知乎裏面有個熱帖,主題是:「爲什麼人大附中的學生那麼愛穿校服?」,裏面有人打趣地問:「請問人大附中的學生洗澡的時候脫不脫校服?」。這個問題我回答不了,要我猜大概率夏天洗澡的時候是會脫的,要不然洗澡的時候天太熱人受不了,冬天則未必,穿着洗可能更保暖。跑題了,其實我想說的是:學校要求學生穿校服就是一種典型的規範化操作,學校的規範化目標是要求學生着裝整齊劃一,顯得幹練有風貌,所以定義了一個規範化函數:

就是說不論哪個學生,不論你平常的着裝變量 x=」香奈兒」還是 x=「麻袋片」,經過這個規範化函數操作,統一都換成校服。這樣就達到了學校的規範化目的。

                              

                                                        圖 3. 神經元

在介紹深度學習 Normalization 前,我們先普及下神經元的活動過程。深度學習是由神經網絡來體現對輸入數據的函數變換的,而神經網絡的基礎單元就是網絡神經元,一個典型的神經元對數據進行處理時包含兩個步驟的操作(參考圖 3):

步驟一:對輸入數據進行線性變換,產生淨激活值

                                             

其中,x 是輸入,w 是權重參數,b 是偏置,w 和 b 是需要進過訓練學習的網絡參數。

步驟二:套上非線性激活函數,神經網絡的非線性能力來自於此,目前深度學習最常用的激活函數是 Relu 函數x=Relu(a)。

如此一個神經元就完成了對輸入數據的非線性函數變換。這裏需要強調下,步驟一的輸出一般稱爲淨激活(Net Activation),第二步驟經過激活函數後得到的值爲激活值。爲了描述簡潔,本文後續文字中使用激活的地方,其實指的是未經激活函數的淨激活值,而非一般意義上的激活,這點還請注意。

至於深度學習中的 Normalization,因爲神經網絡裏主要有兩類實體:神經元或者連接神經元的邊,所以按照規範化操作涉及對象的不同可以分爲兩大類,一類是對第 L 層每個神經元的激活值或者說對於第 L+1 層網絡神經元的輸入值進行 Normalization 操作,比如 BatchNorm/LayerNorm/InstanceNorm/GroupNorm 等方法都屬於這一類;另外一類是對神經網絡中連接相鄰隱層神經元之間的邊上的權重進行規範化操作,比如 Weight Norm 就屬於這一類。廣義上講,一般機器學習裏看到的損失函數裏面加入的對參數的的 L1/L2 等正則項,本質上也屬於這第二類規範化操作。L1 正則的規範化目標是造成參數的稀疏化,就是爭取達到讓大量參數值取得 0 值的效果,而 L2 正則的規範化目標是有效減小原始參數值的大小。有了這些規範目標,通過具體的規範化手段來改變參數值,以達到避免模型過擬合的目的。

L1 相比於 L2 爲什麼容易獲得稀疏解?

preview

本文主要介紹第一類針對神經元的規範化操作方法,這是目前 DNN 做 Normalization 最主流的做法。

                             

                                                                    圖 4. Normalization 加入的位置

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

對於神經元的激活值來說,不論哪種 Normalization 方法,其規範化目標都是一樣的,就是將其激活值規整爲均值爲 0,方差爲 1 的正態分佈。即規範化函數統一都是如下形式:

                                          

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

                                    

其中,a_i 爲某個神經元原始激活值,爲經過規範化操作後的規範後值。整個規範化過程可以分解爲兩步,第一步參考公式(1),是對激活值規整到均值爲 0,方差爲 1 的正態分佈範圍內。其中,μ 是通過神經元集合 S(至於 S 如何選取讀者可以先不用關注,後文有述)中包含的 m 個神經元各自的激活值求出的均值,即:

                                    

σ_i 爲根據均值和集合 S 中神經元各自激活值求出的激活值標準差:

                               

其中,ε 是爲了增加訓練穩定性而加入的小的常量數據。

第二步參考公式(2),主要目標是讓每個神經元在訓練過程中學習到對應的兩個調節因子,對規範到 0 均值,1 方差的值進行微調。因爲經過第一步操作後,Normalization 有可能降低神經網絡的非線性表達能力,所以會以此方式來補償 Normalization 操作後神經網絡的表達能力。

目前神經網絡中常見的第一類 Normalization 方法包括 Batch Normalization/Layer Normalization/Instance Normalization 和 Group Normalization,BN 最早由 Google 研究人員於 2015 年提出,後面幾個算法算是 BN 的改進版本。不論是哪個方法,其基本計算步驟都如上所述,大同小異,最主要的區別在於神經元集合 S 的範圍怎麼定,不同的方法採用了不同的神經元集合定義方法。

爲什麼這些 Normalization 需要確定一個神經元集合 S 呢?原因很簡單,前面講過,這類深度學習的規範化目標是將神經元的激活值限定在均值爲 0 方差爲 1 的正態分佈中。而爲了能夠對網絡中某個神經元的激活值 a_i 規範到均值爲 0 方差爲 1 的範圍,必須有一定的手段求出均值和方差,而均值和方差是個統計指標,要計算這兩個指標一定是在一個集合範圍內纔可行,所以這就要求必須指定一個神經元組成的集合,利用這個集合裏每個神經元的激活來統計出所需的均值和方差,這樣才能達到預定的規範化目標。

                      

                                           圖 5. Normalization 具體例子

圖 5 給出了這類 Normalization 的一個計算過程的具體例子,例子中假設網絡結構是前向反饋網絡,對於隱層的三個節點來說,其原初的激活值爲 [0.4,-0.6,0.7],爲了可以計算均值爲 0 方差爲 1 的正態分佈,劃定集合 S 中包含了這個網絡中的 6 個神經元,至於如何劃定集合 S 讀者可以先不用關心,此時其對應的激活值如圖中所示,根據這 6 個激活值,可以算出對應的均值和方差。有了均值和方差,可以利用公式 3 對原初激活值進行變換,如果 r 和 b 被設定爲 1,那麼可以得到轉換後的激活值 [0.21,-0.75,0.50],對於新的激活值經過非線性變換函數比如 RELU,則形成這個隱層的輸出值 [0.21,0,0.50]。這個例子中隱層的三個神經元在某刻進行 Normalization 計算的時候共用了同一個集合 S,在實際的計算中,隱層中的神經元可能共用同一個集合,也可能每個神經元採用不同的神經元集合 S,並非一成不變,這點還請留心與注意。

針對神經元的所有 Normalization 方法都遵循上述計算過程,唯一的不同在於如何劃定計算統計量所需的神經元集合 S 上。讀者可以自己思考下,如果你是 BN 或者其它改進模型的設計者,那麼你會如何選取集合 S?

Batch Normalization 如何做

我們知道,目前最常用的深度學習基礎模型包括前向神經網絡(MLP),CNN 和 RNN。目前 BN 在這些基礎網絡結構都有嘗試,總體而言,BN 在 MLP 和 CNN 是非常成功的,在 RNN 上效果不明顯。下面我們分述前向神經網絡以及 CNN 中如何應用 BN,然後談談 BN 面臨的一些困境。正是這些困境引發了後續的一系列改進模型的提出。

3.1 前向神經網絡中的 BN

                            

                                                        圖 6. 前向神經網絡中的 BatchNorm

對於前向神經網絡來說,BatchNorm 在計算隱層某個神經元 k 激活的規範值的時候,對應的神經元集合 S 範圍是如何劃定呢?圖 6 給出了示意。因爲對於 Mini-Batch 訓練方法來說,根據 Loss 更新梯度使用 Batch 中所有實例來做,所以對於神經元 k 來說,假設某個 Batch 包含 n 個訓練實例,那麼每個訓練實例在神經元 k 都會產生一個激活值,也就是說 Batch 中 n 個訓練實例分別通過同一個神經元 k 的時候產生了 n 個激活值,BatchNorm 的集合 S 選擇入圍的神經元就是這 n 個同一個神經元被 Batch 不同訓練實例激發的激活值。劃定集合 S 的範圍後,Normalization 的具體計算過程與前文所述計算過程一樣,採用公式 3 即可完成規範化操作。

3.2 CNN 網絡中的 BN

瞭解了前向神經網絡中的 BatchNorm,接下來介紹 CNN 中的 BatchNorm,讀者可以先自行思考下如果由你來主導設計,在 CNN 中究竟應該如何確定神經元集合 S 的勢力範圍。

我們知道,常規的 CNN 一般由卷積層、下采樣層及全連接層構成。全連接層形式上與前向神經網絡是一樣的,所以可以採取前向神經網絡中的 BatchNorm 方式,而下采樣層本身不帶參數所以可以忽略,所以 CNN 中主要關注卷積層如何計算 BatchNorm。

                                  

                                                                         圖 7. CNN 中的卷積核

CNN 中的某個卷積層由 m 個卷積核構成,每個卷積覈對三維的輸入(通道數*長*寬)進行計算,激活及輸出值是個二維平面(長*寬),對應一個輸出通道(參考圖 7),由於存在 m 個卷積核,所以輸出仍然是三維的,由 m 個通道及每個通道的二維平面構成。

                           

                                                             圖 8. CNN 中的 BatchNorm 過程

那麼在卷積層中,如果要對通道激活二維平面中某個激活值進行 Normalization 操作,怎麼確定集合 S 的範圍呢?圖 8 給出了示意圖。類似於前向神經網絡中的 BatchNorm 計算過程,對於 Mini-Batch 訓練方法來說,反向傳播更新梯度使用 Batch 中所有實例的梯度方向來進行,所以對於 CNN 某個卷積層對應的輸出通道 k 來說,假設某個 Batch 包含 n 個訓練實例,那麼每個訓練實例在這個通道 k 都會產生一個二維激活平面,也就是說 Batch 中 n 個訓練實例分別通過同一個卷積核的輸出通道 k 的時候產生了 n 個激活平面。假設激活平面長爲 5,寬爲 4,則激活平面包含 20 個激活值,n 個不同實例的激活平面共包含 20*n 個激活值。那麼 BatchNorm 的集合 S 的範圍就是由這 20*n 個同一個通道被 Batch 不同訓練實例激發的激活平面中包含的所有激活值構成(對應圖 8 中所有標爲藍色的激活值)。劃定集合 S 的範圍後,激活平面中任意一個激活值都需進行 Normalization 操作,其 Normalization 的具體計算過程與前文所述計算過程一樣,採用公式 3 即可完成規範化操作。這樣即完成 CNN 卷積層的 BatchNorm 轉換過程。

                                

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

描述起來似乎有些複雜,但是從概念上,其實可以把 CNN 中的卷積層想象成前向神經網絡中的一個隱層,然後把對應的某個卷積核想象成 MLP 隱層中的一個神經元節點,無非其輸出是個二維激活平面而不像 MLP 的神經元輸出是一個激活值,另外一個不同是這個神經元覆蓋的輸入部分不同,CNN 的卷積核是局部覆蓋輸入,通過滑動窗口來實現輸入的全覆蓋,而 MLP 的神經元則是一步到位全局覆蓋輸入而已 (參考圖 9 示意)。如果從這個角度思考 CNN 和 MLP 中的 BatchNorm 的話,其實兩者的做法是一致的。

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

BatchNorm 目前基本已經成爲各種網絡(RNN 除外)的標配,主要是因爲效果好,比如可以加快模型收斂速度,不再依賴精細的參數初始化過程,可以調大學習率等各種方便,同時引入的隨機噪聲能夠起到對模型參數進行正則化的作用,有利於增強模型泛化能力。

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

3.3 Batch Norm 的四大罪狀

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

BN 是嚴重依賴 Mini-Batch 中的訓練實例的,如果 Batch Size 比較小則任務效果有明顯的下降。那麼多小算是太小呢?圖 10 給出了在 ImageNet 數據集下做分類任務時,使用 ResNet 的時候模型性能隨着 BatchSize 變化時的性能變化情況,可以看出當 BatchSize 小於 8 的時候開始對分類效果有明顯負面影響。之所以會這樣,是因爲在小的 BatchSize 意味着數據樣本少,因而得不到有效統計量,也就是說噪音太大。這個很好理解,這就類似於我們國家統計局在做年均收入調查的時候,正好把你和馬雲放到一個 Batch 裏算平均收入,那麼當你爲下個月房租發愁之際,突然聽到你所在組平均年薪 1 億美金時,你是什麼心情,那小 Mini-Batch 裏其它訓練實例就是啥心情。

                                    

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

BN 的 Batch Size 大小設置是由調參師自己定的,調參師只要把 Batch Size 大小設置大些就可以避免上述問題。但是有些任務比較特殊,要求 batch size 必須不能太大,在這種情形下,普通的 BN 就無能爲力了。比如 BN 無法應用在 Online Learning 中,因爲在線模型是單實例更新模型參數的,難以組織起 Mini-Batch 結構。

侷限 2:對於有些像素級圖片生成任務來說,BN 效果不佳;

對於圖片分類等任務,只要能夠找出關鍵特徵,就能正確分類,這算是一種粗粒度的任務,在這種情形下通常 BN 是有積極效果的。但是對於有些輸入輸出都是圖片的像素級別圖片生成任務,比如圖片風格轉換等應用場景,使用 BN 會帶來負面效果,這很可能是因爲在 Mini-Batch 內多張無關的圖片之間計算統計量,弱化了單張圖片本身特有的一些細節信息。

侷限 3:RNN 等動態網絡使用 BN 效果不佳且使用起來不方便

對於 RNN 來說,儘管其結構看上去是個靜態網絡,但在實際運行展開時是個動態網絡結構,因爲輸入的 Sequence 序列是不定長的,這源自同一個 Mini-Batch 中的訓練實例有長有短。對於類似 RNN 這種動態網絡結構,BN 使用起來不方便,因爲要應用 BN,那麼 RNN 的每個時間步需要維護各自的統計量,而 Mini-Batch 中的訓練實例長短不一,這意味着 RNN 不同時間步的隱層會看到不同數量的輸入數據,而這會給 BN 的正確使用帶來問題。假設 Mini-Batch 中只有個別特別長的例子,那麼對較深時間步深度的 RNN 網絡隱層來說,其統計量不方便統計而且其統計有效性也非常值得懷疑。另外,如果在推理階段遇到長度特別長的例子,也許根本在訓練階段都無法獲得深層網絡的統計量。綜上,在 RNN 這種動態網絡中使用 BN 很不方便,而且很多改進版本的 BN 應用在 RNN 效果也一般。

侷限 4:訓練時和推理時統計量不一致

對於 BN 來說,採用 Mini-Batch 內實例來計算統計量,這在訓練時沒有問題,但是在模型訓練好之後,在線推理的時候會有麻煩。因爲在線推理或預測的時候,是單實例的,不存在 Mini-Batch,所以就無法獲得 BN 計算所需的均值和方差,一般解決方法是採用訓練時刻記錄的各個 Mini-Batch 的統計量的數學期望,以此來推算全局的均值和方差,在線推理時採用這樣推導出的統計量。雖說實際使用並沒大問題,但是確實存在訓練和推理時刻統計量計算方法不一致的問題。

上面所列 BN 的四大罪狀,表面看是四個問題,其實深入思考,都指向了幕後同一個黑手,這個隱藏在暗處的黑手是誰呢?就是 BN 要求計算統計量的時候必須在同一個 Mini-Batch 內的實例之間進行統計,因此形成了 Batch 內實例之間的相互依賴和影響的關係。如何從根本上解決這些問題?一個自然的想法是:把對 Batch 的依賴去掉,轉換統計集合範圍。在統計均值方差的時候,不依賴 Batch 內數據,只用當前處理的單個訓練數據來獲得均值方差的統計量,這樣因爲不再依賴 Batch 內其它訓練數據,那麼就不存在因爲 Batch 約束導致的問題。在 BN 後的幾乎所有改進模型都是在這個指導思想下進行的。

但是這個指導思路儘管會解決 BN 帶來的問題,又會引發新的問題,新的問題是:我們目前已經沒有 Batch 內實例能夠用來求統計量了,此時統計範圍必須侷限在一個訓練實例內,一個訓練實例看上去孤零零的無依無靠沒有組織,怎麼看也無法求統計量,所以核心問題是對於單個訓練實例,統計範圍怎麼算?

Layer Normalization、Instance Normalization 及 Group Normalization

4.1 Layer Normalization

爲了能夠在只有當前一個訓練實例的情形下,也能找到一個合理的統計範圍,一個最直接的想法是:MLP 的同一隱層自己包含了若干神經元;同理,CNN 中同一個卷積層包含 k 個輸出通道,每個通道包含 m*n 個神經元,整個通道包含了 k*m*n 個神經元;類似的,RNN 的每個時間步的隱層也包含了若干神經元。那麼我們完全可以直接用同層隱層神經元的響應值作爲集合 S 的範圍來求均值和方差。這就是 Layer Normalization 的基本思想。圖 11、圖 12 和圖 13 分示了 MLP、CNN 和 RNN 的 Layer Normalization 的集合 S 計算範圍,因爲很直觀,所以這裏不展開詳述。

                     

                                                          圖 11. MLP 中的 LayerNorm

                       

                                                 圖 12. CNN 中的 LayerNorm

                        

                                                    圖 13. RNN 中的 LayerNorm

前文有述,BN 在 RNN 中用起來很不方便,而 Layer Normalization 這種在同隱層內計算統計量的模式就比較符合 RNN 這種動態網絡,目前在 RNN 中貌似也只有 LayerNorm 相對有效,但 Layer Normalization 目前看好像也只適合應用在 RNN 場景下,在 CNN 等環境下效果是不如 BatchNorm 或者 GroupNorm 等模型的。從目前現狀看,動態網絡中的 Normalization 機制是非常值得深入研究的一個領域。

4.2 Instance Normalization

從上述內容可以看出,Layer Normalization 在拋開對 Mini-Batch 的依賴目標下,爲了能夠統計均值方差,很自然地把同層內所有神經元的響應值作爲統計範圍,那麼我們能否進一步將統計範圍縮小?對於 CNN 明顯是可以的,因爲同一個卷積層內每個卷積核會產生一個輸出通道,而每個輸出通道是一個二維平面,也包含多個激活神經元,自然可以進一步把統計範圍縮小到單個卷積覈對應的輸出通道內部。圖 14 展示了 CNN 中的 Instance Normalization,對於圖中某個卷積層來說,每個輸出通道內的神經元會作爲集合 S 來統計均值方差。對於 RNN 或者 MLP,如果在同一個隱層類似 CNN 這樣縮小範圍,那麼就只剩下單獨一個神經元,輸出也是單值而非 CNN 的二維平面,這意味着沒有形成集合 S,所以 RNN 和 MLP 是無法進行 Instance Normalization 操作的,這個很好理解。

                          

                                              圖 14 CNN 中的 Instance Normalization

我們回想下圖 8 代表的 CNN 中的 Batch Normalization,可以設想一下:如果把 BN 中的 Batch Size 大小設定爲 1,此時和 Instance Norm 的圖 14 比較一下,是否兩者是等價的?也就是說,看上去 Instance Normalization 像是 Batch Normalization 的一種 Batch Size=1 的特例情況。但是仔細思考,你會發現兩者還是有區別的,至於區別是什麼讀者可自行思考。

Instance Normalization 對於一些圖片生成類的任務比如圖片風格轉換來說效果是明顯優於 BN 的,但在很多其它圖像類任務比如分類等場景效果不如 BN。

4.3 Group Normalization

從上面的 Layer Normalization 和 Instance Normalization 可以看出,這是兩種極端情況,Layer Normalization 是將同層所有神經元作爲統計範圍,而 Instance Normalization 則是 CNN 中將同一卷積層中每個卷積覈對應的輸出通道單獨作爲自己的統計範圍。那麼,有沒有介於兩者之間的統計範圍呢?通道分組是 CNN 常用的模型優化技巧,所以自然而然會想到對 CNN 中某一層卷積層的輸出或者輸入通道進行分組,在分組範圍內進行統計。這就是 Group Normalization 的核心思想,是 Facebook 何凱明研究組 2017 年提出的改進模型。

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

                             

                                                       圖 15. CNN 中的 Group Normalization

Group Normalization 在要求 Batch Size 比較小的場景下或者物體檢測/視頻分類等應用場景下效果是優於 BN 的。

Normalization 操作的 Re-Scaling 不變性

我們知道,當神經網絡深度加深時,訓練有較大困難,往往其原因在於隨着網絡加深,在反向傳播訓練模型時,存在梯度爆炸或者梯度消失問題,Loss 信息不能有效傳導到低層神經網絡參數,所以導致參數無法更新,模型無法收斂或者收斂速度慢。而很多環節可能導致梯度爆炸或者梯度消失問題,比如非線性函數及其導數是什麼形式以及網絡參數是否過大過小等,以非線性函數來說,比如 RELU 是能極大緩解這個問題的(因爲它的導數是個常數),這也是爲何目前 RELU 大行其道的根本原因。從神經網絡參數角度看,如果神經網絡中的參數具備 Re-Scaling 不變性,意味着參數值過大或者過小對神經元輸出沒什麼影響,無疑這對緩解梯度爆炸或者梯度消失也有極大幫助作用,而 Normalization 確實具備幾個不同角度的 Re-Scaling 不變性,這也許是 Normalization 爲何應用在深度學習有效的原因之一,雖然可能並非本質原因。本節即講述 Normalization 爲何具備 Re-Scaling 不變性這種優良特性。

我們考慮神經網絡中的三種 Re-Scaling 情形:權重向量(Weight Vector)Re-Scaling,數據 Re-Scaling 和權重矩陣(Weight Matrix)Re-Scaling。

圖 16. 權重向量 Re-Scaling

對於網絡中某個神經元 i 來說,其對應的邊權重向量假設爲 W_i,所謂權重向量(Weight Vector)Re-Scaling,就是將 W_i 乘上一個縮放因子φ,如果神經元 i 在進行權重向量 Re-Scaling 之前和之後兩種不同情況下做 Normalization 操作,若 Normalization 之後神經元 i 對應的激活值沒發生變化,我們就說這種 Normalization 具備權重向量 Re-Scaling 不變性(參考圖 16)。

圖 17. 數據 Re-Scaling

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

圖 18. 權重矩陣 Re-Scaling

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

在瞭解了三種 Re-Scaling 的含義及 Normalization 對應的三種不變性特性後,我們先歸納各種 Normalization 操作所對應的三種 Re-Scaling 的不變性特性如下表所示(Layer Normalization 原始論文分析了 LayerNorm 及 BatchNorm 的 Re-Scaling 不變性,本文補充了 InstanceNorm 及 GroupNorm 的情況):

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

參考鏈接

https://www.sohu.com/a/250702875_129720

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章