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