速神经网络的训练算法LARS/LAMB工作原理 --UC Berkeley在读博士生尤洋
為什么深度學習很慢?
如果我們利用并行計算,怎樣才能完美的利用大量的processor?
為什么large batch size會引起精度降低?
新優化器
參考:
快速神經網絡的訓練算法 --UC Berkeley博士尤洋
本片文章介紹的兩種算法不僅可以優化并行計算,在普通硬件環境中運行也是有效的。算法是由UC Berkeley博士尤洋開發。在固定精度的情況下,新算法可以更快的達到要求,在固定訓練時間的情況下,可以有更好的精度。
目前深度學習面臨的一個問題是,沒有一個通用的優化器。Adaptive optimizers (Adam/AdaGrad)在ImageNet上面表現就不是很好,這導致現在很多ImageNet都在用Momentum進行優化。反過來Momentum在BERT的訓練上面也表現平平。
為什么深度學習很慢?
現在大部分的算法都是SGD的變形。SGD隨機梯度下降算法:
(Mini-Batch) SGD:
1.Take B data points each iteration (B: batch size)
2.Compute gradients of woeights based on B data points
3.Update the weights: W = W - learning_rate * ▽W
由上圖我們可以看到ResNet50的計算量非常大,而BERT的計算量是ResNet的50倍左右。
如果我們利用并行計算,怎樣才能完美的利用大量的processor?
有三種思路,第一種并行計算神經網絡的層。每臺機器負責運算神經網絡中的幾層。這種思路顯然是不對的,因為神經網絡需要前向與反向傳遞,這種傳遞是順序的數據依賴,所以在計算的時候只有一臺機器在運作其他機器在等待。
第二種思路是并行計算每一層中不同的節點。這種思路可行,但是這就需要一個很寬的神經網絡。每一層都都很多神經元。而相比于神經網絡的寬度,深度明顯要更重要。
根據上圖可以看出,寬而淺的神經網絡的表現并沒有深度網絡好。進而我們有了第三種思路:數據并行。
這種思路也是現今的主流,但是這種思路也有一個問題,那就是需要比較大的batch size。在忽略收斂性的前提下增加batch size可以加快并行速度。
上圖我們可以看到batch size增加,GPU的速度也增加了。
從上圖的表中我們可以看到,t1遠大于t2,增加batch size可以減小迭代次數從而加快計算速度。這樣加快深度神經網絡的訓練就可以轉化為,如何去增加訓練的batch size。
但是問題隨之而來,大的batch size會引起精度降低。所以增加訓練的batch size又可以轉化成如何在增加batch size的情況下保持模型的精度。
為什么large batch size會引起精度降低?
一般來說有兩種解釋,第一種是泛化問題(Generalization problem),模型具有較高training accuracy,但是test accuracy卻很低。這種解釋是Intel公司2017年提出的。論文地址:https://openreview.net/pdf?id=H1oyRlYgg
Generalization problem:
Regular batch: |Test loss - Train loss| is small
Large batch: |Test loss - Train loss| is large
泛化問題具體解釋可以去論文原文中找到,這里就不在贅述。
想要解決這種問題,可以利用Batch Normalization。利用BN之后test accuracy下降從原來的0.05降低到了0.01左右(batch size = 4096)。
第二種解釋是因為優化難度問題,很難去找到正確的超參。這種解釋是17年由Facebook公司提出的。論文地址:https://openreview.net/pdf?id=H1oyRlYgg
論文里面提出了兩種解決方法,第一種是在增加batch size的同時增加learning rate,兩者增加相同的倍數。第二種方法是warmup熱身,從小的learning rate一點點增加然后再回復到原始的learning rate。
新優化器
在尤洋博士的研究中,他發現Large batch size在深度神經網絡中,每一層的梯度權重比有很大的不同。如下圖所示:
這張圖我們可以看到第1層和第6層的比值相差很大。這就意味著用相同的learning rate去更新權重的話,會導致第一層更新的效率跟第六層的更新效率相差很大。如果learning rate適應第6層的話,第1層很有可能無法收斂。這就導致了神經網絡的準確率下降。
所以這里引入了尤洋博士的新算法Layer-wise Adaptive Rate Scaling(LARS)。新的算法主要改變了learning rate。算法如圖:
LARS算法使得每一層的學習率都有所不同,這樣就減少因為學習率導致無法收斂的情況。(學習率修正)
在經過LARS優化之后AlexNet的large batch size的test accuracy的效果也變得很好。
增加了batch size訓練速度也有大幅度提升。
在文章的第一步我們提到了神經網絡中沒有一個通用的優化器,那么LARS是否可以用于其他模型的優化。
由上面兩張圖中我們可以看到LARS在ResNet中表現的很好,在BERT上面雖然在8k左右的時候表現比原來的優化器表現要好,但是當batch size增加到16k以上的時候,表現卻出現了下滑。
由此,尤洋博士提出了新優化器Layer-wise Adaptive Moments for Batch(LAMB):
新的算法結合了Adam和剛才提出的layer-wise修正(LARS)。
在應用LAMB優化器后,BERT的訓練時間在保持精度的同時降低了60倍。
LAMB優化器在ResNet的訓練ImageNet中也擊敗了Momentum優化器。
并且在小的數據集中表現也非常好。
參考:
https://www.bilibili.com/video/av54050301
https://arxiv.org/pdf/1904.00962v3.pdf
https://openreview.net/pdf?id=H1oyRlYgg
?
總結
以上是生活随笔為你收集整理的速神经网络的训练算法LARS/LAMB工作原理 --UC Berkeley在读博士生尤洋的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UC伯克利博士尤洋回国创业,曾破Imag
- 下一篇: 二值化每个特征,微软用1350亿参数稀疏