導(dǎo)讀
batch normalization時(shí)的一些缺陷。
Batch Normalization確實(shí)是深度學(xué)習(xí)領(lǐng)域的重大突破之一,也是近年來研究人員討論的熱點(diǎn)之一。Batch Normalization是一種被廣泛采用的技術(shù),使訓(xùn)練更加快速和穩(wěn)定,已成為最有影響力的方法之一。然而,盡管它具有多種功能,但仍有一些地方阻礙了該方法的發(fā)展,正如我們將在本文中討論的那樣,這表明做歸一化的方法仍有改進(jìn)的余地。
我們?yōu)槭裁匆肂atch Normalization?
在討論任何事情之前,首先,我們應(yīng)該知道Batch Normalization是什么,它是如何工作的,并討論它的用例。
什么是Batch Normalization
在訓(xùn)練過程中,當(dāng)我們更新之前的權(quán)值時(shí),每個(gè)中間激活層的輸出分布會(huì)在每次迭代時(shí)發(fā)生變化。這種現(xiàn)象稱為內(nèi)部協(xié)變量移位(ICS)。所以很自然的一件事,如果我想防止這種情況發(fā)生,就是修正所有的分布。簡單地說,如果我的分布變動(dòng)了,我會(huì)限制住這個(gè)分布,不讓它移動(dòng),以幫助梯度優(yōu)化和防止梯度消失,這將幫助我的神經(jīng)網(wǎng)絡(luò)訓(xùn)練更快。因此減少這種內(nèi)部協(xié)變量位移是推動(dòng)batch normalization發(fā)展的關(guān)鍵原則。
它如何工作
Batch Normalization通過在batch上減去經(jīng)驗(yàn)平均值除以經(jīng)驗(yàn)標(biāo)準(zhǔn)差來對前一個(gè)輸出層的輸出進(jìn)行歸一化。這將使數(shù)據(jù)看起來像高斯分布。
其中μ和*σ^2^*分別為批均值和批方差。
并且,我們學(xué)習(xí)了一個(gè)新的平均值和協(xié)方差γ和β。所以,簡而言之,你可以認(rèn)為batch normalization是幫助你控制batch分布的一階和二階動(dòng)量。
vgg16網(wǎng)絡(luò)的中間卷積層的特征分布輸出。(左)沒有任何歸一化,(右)應(yīng)用了batch normalization
優(yōu)點(diǎn)
我將列舉使用batch normalization的一些好處,但是我不會(huì)詳細(xì)介紹,因?yàn)橐呀?jīng)有很多文章討論了這個(gè)問題。
更快的收斂。
降低初始權(quán)重的重要性。
魯棒的超參數(shù)。
需要較少的數(shù)據(jù)進(jìn)行泛化。
1. 更快的收斂,2. 對超參數(shù)更魯棒
Batch Normalization的詛咒
好,讓我們回到本文的出發(fā)點(diǎn),在許多情況下batch normalization開始傷害性能或根本不起作用。
在使用小batch size的時(shí)候不穩(wěn)定
如上所述,batch normalization必須計(jì)算平均值和方差,以便在batch中對之前的輸出進(jìn)行歸一化。如果batch大小比較大的話,這種統(tǒng)計(jì)估計(jì)是比較準(zhǔn)確的,而隨著batch大小的減少,估計(jì)的準(zhǔn)確性持續(xù)減小。
ResNet-50在Batch Norm使用32、16、8、4、2張/GPU圖像時(shí)的驗(yàn)證錯(cuò)誤
以上是ResNet-50的驗(yàn)證錯(cuò)誤圖。可以推斷,如果batch大小保持為32,它的最終驗(yàn)證誤差在23左右,并且隨著batch大小的減小,誤差會(huì)繼續(xù)減小(batch大小不能為1,因?yàn)樗旧砭褪瞧骄?。損失有很大的不同(大約10%)。
如果batch大小是一個(gè)問題,為什么我們不使用更大的batch?我們不能在每種情況下都使用更大的batch。在finetune的時(shí)候,我們不能使用大的batch,以免過高的梯度對模型造成傷害。在分布式訓(xùn)練的時(shí)候,大的batch最終將作為一組小batch分布在各個(gè)實(shí)例中。
導(dǎo)致訓(xùn)練時(shí)間的增加
NVIDIA和卡耐基梅隆大學(xué)進(jìn)行的實(shí)驗(yàn)結(jié)果表明,“盡管Batch Normalization不是計(jì)算密集型,而且收斂所需的總迭代次數(shù)也減少了。”但是每個(gè)迭代的時(shí)間顯著增加了,而且還隨著batch大小的增加而進(jìn)一步增加。
ResNet-50 在ImageNet上使用 Titan X Pascal
你可以看到,batch normalization消耗了總訓(xùn)練時(shí)間的1/4。原因是batch normalization需要通過輸入數(shù)據(jù)進(jìn)行兩次迭代,一次用于計(jì)算batch統(tǒng)計(jì)信息,另一次用于歸一化輸出。
訓(xùn)練和推理時(shí)不一樣的結(jié)果
例如,在真實(shí)世界中做“物體檢測”。在訓(xùn)練一個(gè)物體檢測器時(shí),我們通常使用大batch(YOLOv4和Faster-RCNN都是在默認(rèn)batch大小= 64的情況下訓(xùn)練的)。但在投入生產(chǎn)后,這些模型的工作并不像訓(xùn)練時(shí)那么好。這是因?yàn)樗鼈兘邮艿氖谴骲atch的訓(xùn)練,而在實(shí)時(shí)情況下,它們的batch大小等于1,因?yàn)樗仨氁粠瑤幚怼?紤]到這個(gè)限制,一些實(shí)現(xiàn)傾向于基于訓(xùn)練集上使用預(yù)先計(jì)算的平均值和方差。另一種可能是基于你的測試集分布計(jì)算平均值和方差值。
對于在線學(xué)習(xí)不好
與batch學(xué)習(xí)相比,在線學(xué)習(xí)是一種學(xué)習(xí)技術(shù),在這種技術(shù)中,系統(tǒng)通過依次向其提供數(shù)據(jù)實(shí)例來逐步接受訓(xùn)練,可以是單獨(dú)的,也可以是通過稱為mini-batch的小組進(jìn)行。每個(gè)學(xué)習(xí)步驟都是快速和便宜的,所以系統(tǒng)可以在新的數(shù)據(jù)到達(dá)時(shí)實(shí)時(shí)學(xué)習(xí)。
典型的在線學(xué)習(xí)pipeline
由于它依賴于外部數(shù)據(jù)源,數(shù)據(jù)可能單獨(dú)或批量到達(dá)。由于每次迭代中batch大小的變化,對輸入數(shù)據(jù)的尺度和偏移的泛化能力不好,最終影響了性能。
對于循環(huán)神經(jīng)網(wǎng)絡(luò)不好
雖然batch normalization可以顯著提高卷積神經(jīng)網(wǎng)絡(luò)的訓(xùn)練和泛化速度,但它們很難應(yīng)用于遞歸結(jié)構(gòu)。batch normalization可以應(yīng)用于RNN堆棧之間,其中歸一化是“垂直”應(yīng)用的,即每個(gè)RNN的輸出。但是它不能“水平地”應(yīng)用,例如在時(shí)間步之間,因?yàn)樗鼤?huì)因?yàn)橹貜?fù)的重新縮放而產(chǎn)生爆炸性的梯度而傷害到訓(xùn)練。
[^注]: 一些研究實(shí)驗(yàn)表明,batch normalization使得神經(jīng)網(wǎng)絡(luò)容易出現(xiàn)對抗漏洞,但我們沒有放入這一點(diǎn),因?yàn)槿狈ρ芯亢妥C據(jù)。
可替換的方法
這就是使用batch normalization的一些缺點(diǎn)。在batch normalization無法很好工作的情況下,有幾種替代方法。
Layer Normalization
Instance Normalization
Group Normalization (+ weight standardization)
Synchronous Batch Normalization
總結(jié)
所以,看起來訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)很簡單,但我不認(rèn)為它很容易。從這個(gè)意義上說,我可以選擇的架構(gòu)很少,每個(gè)模型都有固定的學(xué)習(xí)速度,固定的優(yōu)化器和固定的技巧。這些技巧是通過自然選擇選擇的,就像有人想出了一些技巧,人們引入之后如果有效,就會(huì)保留,如果無效,人們最終會(huì)忘記,并沒有人再去使用它。除此之外,batch normalization是深度學(xué)習(xí)發(fā)展中的一個(gè)里程碑技術(shù)。然而,正如前面所討論的,沿著batch 維度進(jìn)行歸一化引入了一些問題,這表明歸一化技術(shù)仍有改進(jìn)的空間。
責(zé)任編輯:xj
原文標(biāo)題:【重點(diǎn)】Batch Normalization的詛咒
文章出處:【微信公眾號(hào):深度學(xué)習(xí)自然語言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
-
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7033瀏覽量
89040 -
Batch
+關(guān)注
關(guān)注
0文章
6瀏覽量
7164 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5503瀏覽量
121170
原文標(biāo)題:【重點(diǎn)】Batch Normalization的詛咒
文章出處:【微信號(hào):zenRRan,微信公眾號(hào):深度學(xué)習(xí)自然語言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論