深度學(xué)習(xí)中用的最多的優(yōu)化算法:Adam算法
剛?cè)腴T深度學(xué)習(xí)時(shí),所有課程都會(huì)介紹梯度下降算法,以梯度下降為基礎(chǔ),通常會(huì)接著介紹:SGD(隨機(jī)梯度下降)、BGD(批量梯度下降)和Mini-BGD(小批量梯度下降)三種變形。
然而,傳統(tǒng)的梯度算法有下面兩個(gè)最大的缺點(diǎn):
(1)學(xué)習(xí)率保持不變
學(xué)習(xí)率保持不變的話有以下幾個(gè)缺點(diǎn):若設(shè)置的學(xué)習(xí)率過大,可能會(huì)導(dǎo)致梯度下降算法在最優(yōu)解附近震蕩,無法收斂,或者跳過最優(yōu)解,導(dǎo)致?lián)p失函數(shù)增大。若學(xué)習(xí)率過小,可能會(huì)導(dǎo)致梯度下降算法收斂速度過慢,需要更多的迭代次數(shù),或者陷入局部最優(yōu)解,無法達(dá)到全局最優(yōu)解。另外,固定的學(xué)習(xí)率可能會(huì)導(dǎo)致梯度下降算法無法適應(yīng)不同的數(shù)據(jù)分布和模型復(fù)雜度,需要手動(dòng)調(diào)整或選擇合適的學(xué)習(xí)率。
(2)在鞍點(diǎn)處震蕩且容易陷入局部最優(yōu)點(diǎn)
普通的梯度下降方法更新最優(yōu)解的方向完全依賴于計(jì)算出來的梯度,所以很容易陷入局部最優(yōu)的馬鞍點(diǎn)。
如何解決上面兩點(diǎn)問題呢?
針對問題(1),可以采用自適應(yīng)梯度下降解決。自適應(yīng)梯度下降是一類改進(jìn)的隨機(jī)梯度下降算法,它可以根據(jù)參數(shù)的稀疏程度或歷史梯度信息,動(dòng)態(tài)地調(diào)整每個(gè)參數(shù)的學(xué)習(xí)率。其優(yōu)點(diǎn)是可以加速收斂,適應(yīng)不同的數(shù)據(jù)分布和模型復(fù)雜度,減少手動(dòng)調(diào)參的工作。常見的自適應(yīng)梯度下降算法有AdaGrad,RMSProp等。Adam算法也采用了自適應(yīng)梯度下降的策略。
針對問題(2),可以使用動(dòng)量梯度下降法,其優(yōu)點(diǎn)有以下幾點(diǎn):可以加速梯度下降算法的收斂速度,特別是在損失函數(shù)存在鞍點(diǎn)或者曲率不一致的情況下;可以抑制梯度下降算法的震蕩,使其沿著最優(yōu)方向更新參數(shù),而不是隨機(jī)地變換方向;可以克服梯度下降算法的局部最優(yōu)解問題,使其更有可能達(dá)到全局最優(yōu)解。
Adam算法在2014年底由Kingma和Lei Ba兩位學(xué)者共同提出。首先,Adam算法是自適應(yīng)梯度下降算法的一種,因?yàn)樗梢愿鶕?jù)梯度的一階矩和二階矩的估計(jì),為每個(gè)參數(shù)的學(xué)習(xí)率進(jìn)行自適應(yīng)調(diào)整。這樣可以避免使用固定的或者手動(dòng)調(diào)節(jié)的學(xué)習(xí)率,提高優(yōu)化效率和穩(wěn)定性。同時(shí),Adam算法是添加了動(dòng)量的梯度下降算法,因?yàn)樗梢岳锰荻鹊囊浑A矩的估計(jì),為每個(gè)參數(shù)的更新方向增加一個(gè)慣性項(xiàng),使得更新方向更加平滑和穩(wěn)定。這樣可以避免梯度下降算法在噪聲或者曲率不一致的情況下產(chǎn)生的震蕩或者偏離最優(yōu)解的問題。實(shí)踐表明,在NLP、CV等問題的優(yōu)化上,Adam算法取得了較好的成功。
原論文如下,根據(jù)google學(xué)術(shù)上的數(shù)據(jù),目前該論文被引用次數(shù)有14w次,這數(shù)據(jù)太夸張了。。。

下面我們直接來看論文中的核心步驟:

上圖是原作者給的偽代碼,翻譯成中文如下:

原文作者還給出了一組表現(xiàn)較好的默認(rèn)參數(shù):學(xué)習(xí)率取為0.001,一階矩估計(jì)的指數(shù)衰減率為0.9,二階矩估計(jì)的指數(shù)衰減率為0.999。
Adam算法和其他優(yōu)化算法的優(yōu)缺點(diǎn)如下:
優(yōu)點(diǎn):
Adam算法可以自適應(yīng)地調(diào)整學(xué)習(xí)率,不需要手動(dòng)設(shè)置或調(diào)整。
Adam算法可以有效地處理稀疏梯度或噪聲梯度的問題。
Adam算法可以快速收斂,適用于大規(guī)模的數(shù)據(jù)集和模型。
缺點(diǎn):
Adam算法有一些超參數(shù),如β1,β2,需要根據(jù)問題進(jìn)行選擇或調(diào)整。
Adam算法可能會(huì)導(dǎo)致過擬合,特別是在小數(shù)據(jù)集或正則化不足的情況下。
Adam算法可能會(huì)陷入局部最優(yōu)解,而不是全局最優(yōu)解。
在MATLAB中也有相應(yīng)的介紹:
https://ww2.mathworks.cn/help/deeplearning/ref/trainingoptions.html