0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一個(gè)框架看懂優(yōu)化算法

8g3K_AI_Thinker ? 來(lái)源:未知 ? 作者:李倩 ? 2018-03-26 11:39 ? 次閱讀

(一)一個(gè)框架看懂優(yōu)化算法

“說(shuō)到優(yōu)化算法,入門級(jí)必從 SGD 學(xué)起,老司機(jī)則會(huì)告訴你更好的還有AdaGrad / AdaDelta,或者直接無(wú)腦用 Adam??墒强纯磳W(xué)術(shù)界的最新 paper,卻發(fā)現(xiàn)一眾大神還在用著入門級(jí)的 SGD,最多加個(gè) Momentum 或者Nesterov,還經(jīng)常會(huì)黑一下 Adam。這是為什么呢?”

機(jī)器學(xué)習(xí)界有一群煉丹師,他們每天的日常是:

拿來(lái)藥材(數(shù)據(jù)),架起八卦爐(模型),點(diǎn)著六味真火(優(yōu)化算法),就搖著蒲扇等著丹藥出爐了。

不過(guò),當(dāng)過(guò)廚子的都知道,同樣的食材,同樣的菜譜,但火候不一樣了,這出來(lái)的口味可是千差萬(wàn)別?;鹦×藠A生,火大了易糊,火不勻則半生半糊。

機(jī)器學(xué)習(xí)也是一樣,模型優(yōu)化算法的選擇直接關(guān)系到最終模型的性能。有時(shí)候效果不好,未必是特征的問(wèn)題或者模型設(shè)計(jì)的問(wèn)題,很可能就是優(yōu)化算法的問(wèn)題。

說(shuō)到優(yōu)化算法,入門級(jí)必從 SGD 學(xué)起,老司機(jī)則會(huì)告訴你更好的還有 AdaGrad / AdaDelta,或者直接無(wú)腦用 Adam??墒强纯磳W(xué)術(shù)界的最新 paper,卻發(fā)現(xiàn)一眾大神還在用著入門級(jí)的 SGD,最多加個(gè) Momentum 或者 Nesterov,還經(jīng)常會(huì)黑一下Adam。比如 UC Berkeley 的一篇論文就在 Conclusion 中寫道:

Despite the fact that our experimental evidence demonstrates that adaptive methods are not advantageous for machine learning, the Adam algorithm remains incredibly popular. We are not sure exactly as to why ……

無(wú)奈與酸楚之情溢于言表。

這是為什么呢?難道平平淡淡才是真?

▌01一個(gè)框架回顧優(yōu)化算法

首先我們來(lái)回顧一下各類優(yōu)化算法。

深度學(xué)習(xí)優(yōu)化算法經(jīng)歷了SGD -> SGDM -> NAG ->AdaGrad -> AdaDelta -> Adam -> Nadam這樣的發(fā)展歷程。Google一下就可以看到很多的教程文章,詳細(xì)告訴你這些算法是如何一步一步演變而來(lái)的。在這里,我們換一個(gè)思路,用一個(gè)框架來(lái)梳理所有的優(yōu)化算法,做一個(gè)更加高屋建瓴的對(duì)比。

優(yōu)化算法通用框架

首先定義:待優(yōu)化參數(shù):w ,目標(biāo)函數(shù): f(w),初始學(xué)習(xí)率α。而后,開始進(jìn)行迭代優(yōu)化。在每個(gè)epocht:

1. 計(jì)算目標(biāo)函數(shù)關(guān)于當(dāng)前參數(shù)的梯度:

2. 根據(jù)歷史梯度計(jì)算一階動(dòng)量和二階動(dòng)量:

3. 計(jì)算當(dāng)前時(shí)刻的下降梯度:

4. 根據(jù)下降梯度進(jìn)行更新:

掌握了這個(gè)框架,你可以輕輕松松設(shè)計(jì)自己的優(yōu)化算法。

我們拿著這個(gè)框架,來(lái)照一照各種玄乎其玄的優(yōu)化算法的真身。步驟3、4對(duì)于各個(gè)算法都是一致的,主要的差別就體現(xiàn)在1和2上。

▌02固定學(xué)習(xí)率的優(yōu)化算法

SGD

先來(lái)看SGD。SGD沒(méi)有動(dòng)量的概念,也就是說(shuō):

代入步驟3,可以看到下降梯度就是最簡(jiǎn)單的

SGD最大的缺點(diǎn)是下降速度慢,而且可能會(huì)在溝壑的兩邊持續(xù)震蕩,停留在一個(gè)局部最優(yōu)點(diǎn)。

SGD with Momentum

為了抑制SGD的震蕩,SGDM認(rèn)為梯度下降過(guò)程可以加入慣性。下坡的時(shí)候,如果發(fā)現(xiàn)是陡坡,那就利用慣性跑的快一些。SGDM全稱是SGD with momentum,在SGD基礎(chǔ)上引入了一階動(dòng)量:

一階動(dòng)量是各個(gè)時(shí)刻梯度方向的指數(shù)移動(dòng)平均值,約等于最近 1/(1-β1)個(gè)時(shí)刻的梯度向量和的平均值。

也就是說(shuō),t 時(shí)刻的下降方向,不僅由當(dāng)前點(diǎn)的梯度方向決定,而且由此前累積的下降方向決定。β1的經(jīng)驗(yàn)值為0.9,這就意味著下降方向主要是此前累積的下降方向,并略微偏向當(dāng)前時(shí)刻的下降方向。想象高速公路上汽車轉(zhuǎn)彎,在高速向前的同時(shí)略微偏向,急轉(zhuǎn)彎可是要出事的。

SGD with Nesterov Acceleration

SGD 還有一個(gè)問(wèn)題是困在局部最優(yōu)的溝壑里面震蕩。想象一下你走到一個(gè)盆地,四周都是略高的小山,你覺(jué)得沒(méi)有下坡的方向,那就只能待在這里了。可是如果你爬上高地,就會(huì)發(fā)現(xiàn)外面的世界還很廣闊。因此,我們不能停留在當(dāng)前位置去觀察未來(lái)的方向,而要向前一步、多看一步、看遠(yuǎn)一些。

(source:http://cs231n.github.io/neural-networks-3)

這一方法也稱為NAG,即 Nesterov Accelerated Gradient,是在SGD、SGD-M 的基礎(chǔ)上的進(jìn)一步改進(jìn),改進(jìn)點(diǎn)在于步驟 1。我們知道在時(shí)刻 t 的主要下降方向是由累積動(dòng)量決定的,自己的梯度方向說(shuō)了也不算,那與其看當(dāng)前梯度方向,不如先看看如果跟著累積動(dòng)量走了一步,那個(gè)時(shí)候再怎么走。因此,NAG在步驟 1,不計(jì)算當(dāng)前位置的梯度方向,而是計(jì)算如果按照累積動(dòng)量走了一步,那個(gè)時(shí)候的下降方向:

然后用下一個(gè)點(diǎn)的梯度方向,與歷史累積動(dòng)量相結(jié)合,計(jì)算步驟 2 中當(dāng)前時(shí)刻的累積動(dòng)量。

▌03自適應(yīng)學(xué)習(xí)率的優(yōu)化算法

此前我們都沒(méi)有用到二階動(dòng)量。二階動(dòng)量的出現(xiàn),才意味著“自適應(yīng)學(xué)習(xí)率”優(yōu)化算法時(shí)代的到來(lái)。SGD及其變種以同樣的學(xué)習(xí)率更新每個(gè)參數(shù),但深度神經(jīng)網(wǎng)絡(luò)往往包含大量的參數(shù),這些參數(shù)并不是總會(huì)用得到(想想大規(guī)模的embedding)。

對(duì)于經(jīng)常更新的參數(shù),我們已經(jīng)積累了大量關(guān)于它的知識(shí),不希望被單個(gè)樣本影響太大,希望學(xué)習(xí)速率慢一些;對(duì)于偶爾更新的參數(shù),我們了解的信息太少,希望能從每個(gè)偶然出現(xiàn)的樣本身上多學(xué)一些,即學(xué)習(xí)速率大一些。

AdaGrad

怎么樣去度量歷史更新頻率呢?那就是二階動(dòng)量——該維度上,迄今為止所有梯度值的平方和:

我們?cè)倩仡櫼幌虏襟E3中的下降梯度:

可以看出,此時(shí)實(shí)質(zhì)上的學(xué)習(xí)率由變成了。 一般為了避免分母為0,會(huì)在分母上加一個(gè)小的平滑項(xiàng)。因此是恒大于0的,而且參數(shù)更新越頻繁,二階動(dòng)量越大,學(xué)習(xí)率就越小。

這一方法在稀疏數(shù)據(jù)場(chǎng)景下表現(xiàn)非常好。但也存在一些問(wèn)題:因?yàn)?img src="http://file.elecfans.com/web1/M00/4E/36/o4YBAFq4bDiATbnpAAADmMq5jm8458.png" />是單調(diào)遞增的,會(huì)使得學(xué)習(xí)率單調(diào)遞減至0,可能會(huì)使得訓(xùn)練過(guò)程提前結(jié)束,即便后續(xù)還有數(shù)據(jù)也無(wú)法學(xué)到必要的知識(shí)。

AdaDelta / RMSProp

由于AdaGrad單調(diào)遞減的學(xué)習(xí)率變化過(guò)于激進(jìn),我們考慮一個(gè)改變二階動(dòng)量計(jì)算方法的策略:不累積全部歷史梯度,而只關(guān)注過(guò)去一段時(shí)間窗口的下降梯度。這也就是AdaDelta名稱中Delta的來(lái)歷。

修改的思路很簡(jiǎn)單。前面我們講到,指數(shù)移動(dòng)平均值大約就是過(guò)去一段時(shí)間的平均值,因此我們用這一方法來(lái)計(jì)算二階累積動(dòng)量:

這就避免了二階動(dòng)量持續(xù)累積、導(dǎo)致訓(xùn)練過(guò)程提前結(jié)束的問(wèn)題了。

Adam

談到這里,Adam和Nadam的出現(xiàn)就很自然而然了——它們是前述方法的集大成者。我們看到,SGD-M在SGD基礎(chǔ)上增加了一階動(dòng)量,AdaGrad和AdaDelta在SGD基礎(chǔ)上增加了二階動(dòng)量。把一階動(dòng)量和二階動(dòng)量都用起來(lái),就是Adam了——Adaptive + Momentum。

SGD的一階動(dòng)量:

加上AdaDelta的二階動(dòng)量:

優(yōu)化算法里最常見的兩個(gè)超參數(shù)就都在這里了,前者控制一階動(dòng)量,后者控制二階動(dòng)量。

Nadam

最后是Nadam。我們說(shuō)Adam是集大成者,但它居然遺漏了Nesterov,這還能忍?必須給它加上——只需要按照NAG的步驟1來(lái)計(jì)算梯度:

這就是Nesterov + Adam = Nadam了。

說(shuō)到這里,大概可以理解為什么說(shuō) Adam / Nadam 目前最主流、最好用的算法了。無(wú)腦用Adam/Nadam,收斂速度嗖嗖滴,效果也是杠杠滴。

那為什么Adam還老招人黑,被學(xué)術(shù)界一頓鄙夷?難道只是為了發(fā)paper灌水嗎?

(二)Adam的兩宗罪

“一代又一代的研究者們?yōu)榱宋覀兡軣挘▁un)好(hao)金(mo)丹(xing)可謂是煞費(fèi)苦心。從理論上看,一代更比一代完善,Adam/Nadam已經(jīng)登峰造極了,為什么大家還是不忘初心SGD呢?”

以上內(nèi)容中,我們用一個(gè)框架來(lái)回顧了主流的深度學(xué)習(xí)優(yōu)化算法??梢钥吹剑淮忠淮难芯空邆?yōu)榱宋覀兡軣挘▁un)好(hao)金(mo)丹(xing)可謂是煞費(fèi)苦心。從理論上看,一代更比一代完善,Adam/Nadam已經(jīng)登峰造極了,為什么大家還是不忘初心SGD呢?

舉個(gè)栗子。很多年以前,攝影離普羅大眾非常遙遠(yuǎn)。十年前,傻瓜相機(jī)開始風(fēng)靡,游客幾乎人手一個(gè)。智能手機(jī)出現(xiàn)以后,攝影更是走進(jìn)千家萬(wàn)戶,手機(jī)隨手一拍,前后兩千萬(wàn),照亮你的美(咦,這是什么亂七八糟的)。但是專業(yè)攝影師還是喜歡用單反,孜孜不倦地調(diào)光圈、快門、ISO、白平衡……一堆自拍黨從不care的名詞。技術(shù)的進(jìn)步,使得傻瓜式操作就可以得到不錯(cuò)的效果,但是在特定的場(chǎng)景下,要拍出最好的效果,依然需要深入地理解光線、理解結(jié)構(gòu)、理解器材。

優(yōu)化算法大抵也如此。在上一篇中,我們用同一個(gè)框架讓各類算法對(duì)號(hào)入座??梢钥闯觯蠹叶际鞘馔就瑲w,只是相當(dāng)于在SGD基礎(chǔ)上增加了各類學(xué)習(xí)率的主動(dòng)控制。如果不想做精細(xì)的調(diào)優(yōu),那么Adam顯然最便于直接拿來(lái)上手。

但這樣的傻瓜式操作并不一定能夠適應(yīng)所有的場(chǎng)合。如果能夠深入了解數(shù)據(jù),研究員們可以更加自如地控制優(yōu)化迭代的各類參數(shù),實(shí)現(xiàn)更好的效果也并不奇怪。畢竟,精調(diào)的參數(shù)還比不過(guò)傻瓜式的SGD,無(wú)疑是在挑戰(zhàn)頂級(jí)研究員們的煉丹經(jīng)驗(yàn)!

最近,不少paper開懟Adam,我們簡(jiǎn)單看看都在說(shuō)什么:

▌04Adam罪狀一:可能不收斂

這篇是正在深度學(xué)習(xí)領(lǐng)域頂級(jí)會(huì)議之一 ICLR 2018 匿名審稿中的一篇論文《On the Convergence of Adam and Beyond》,探討了Adam算法的收斂性,通過(guò)反例證明了Adam在某些情況下可能會(huì)不收斂。

回憶一下上文提到的各大優(yōu)化算法的學(xué)習(xí)率:

其中,SGD沒(méi)有用到二階動(dòng)量,因此學(xué)習(xí)率是恒定的(實(shí)際使用過(guò)程中會(huì)采用學(xué)習(xí)率衰減策略,因此學(xué)習(xí)率遞減)。AdaGrad的二階動(dòng)量不斷累積,單調(diào)遞增,因此學(xué)習(xí)率是單調(diào)遞減的。因此,這兩類算法會(huì)使得學(xué)習(xí)率不斷遞減,最終收斂到0,模型也得以收斂。

但AdaDelta和Adam則不然。二階動(dòng)量是固定時(shí)間窗口內(nèi)的累積,隨著時(shí)間窗口的變化,遇到的數(shù)據(jù)可能發(fā)生巨變,使得可能會(huì)時(shí)大時(shí)小,不是單調(diào)變化。這就可能在訓(xùn)練后期引起學(xué)習(xí)率的震蕩,導(dǎo)致模型無(wú)法收斂。

這篇文章也給出了一個(gè)修正的方法。由于Adam中的學(xué)習(xí)率主要是由二階動(dòng)量控制的,為了保證算法的收斂,可以對(duì)二階動(dòng)量的變化進(jìn)行控制,避免上下波動(dòng)。

通過(guò)這樣修改,就保證了

從而使得學(xué)習(xí)率單調(diào)遞減。

▌05Adam罪狀二:可能錯(cuò)過(guò)全局最優(yōu)解

深度神經(jīng)網(wǎng)絡(luò)往往包含大量的參數(shù),在這樣一個(gè)維度極高的空間內(nèi),非凸的目標(biāo)函數(shù)往往起起伏伏,擁有無(wú)數(shù)個(gè)高地和洼地。有的是高峰,通過(guò)引入動(dòng)量可能很容易越過(guò);但有些是高原,可能探索很多次都出不來(lái),于是停止了訓(xùn)練。

之前,Arxiv上的兩篇文章談到這個(gè)問(wèn)題。

第一篇就是前文提到的吐槽Adam最狠的UC Berkeley的文章《The Marginal Value of Adaptive Gradient Methods in Machine Learning》。文中說(shuō)到,同樣的一個(gè)優(yōu)化問(wèn)題,不同的優(yōu)化算法可能會(huì)找到不同的答案,但自適應(yīng)學(xué)習(xí)率的算法往往找到非常差的答案(very poor solution)。他們?cè)O(shè)計(jì)了一個(gè)特定的數(shù)據(jù)例子,自適應(yīng)學(xué)習(xí)率算法可能會(huì)對(duì)前期出現(xiàn)的特征過(guò)擬合,后期才出現(xiàn)的特征很難糾正前期的擬合效果。但這個(gè)文章給的例子很極端,在實(shí)際情況中未必會(huì)出現(xiàn)。

另外一篇是《Improving Generalization Performance by Switching from Adam to SGD》,進(jìn)行了實(shí)驗(yàn)驗(yàn)證。他們CIFAR-10數(shù)據(jù)集上進(jìn)行測(cè)試,Adam的收斂速度比SGD要快,但最終收斂的結(jié)果并沒(méi)有SGD好。他們進(jìn)一步實(shí)驗(yàn)發(fā)現(xiàn),主要是后期Adam的學(xué)習(xí)率太低,影響了有效的收斂。他們?cè)囍鴮?duì)Adam的學(xué)習(xí)率的下界進(jìn)行控制,發(fā)現(xiàn)效果好了很多。

于是他們提出了一個(gè)用來(lái)改進(jìn)Adam的方法:前期用Adam,享受Adam快速收斂的優(yōu)勢(shì);后期切換到SGD,慢慢尋找最優(yōu)解。這一方法以前也被研究者們用到,不過(guò)主要是根據(jù)經(jīng)驗(yàn)來(lái)選擇切換的時(shí)機(jī)和切換后的學(xué)習(xí)率。這篇文章把這一切換過(guò)程傻瓜化,給出了切換SGD的時(shí)機(jī)選擇方法,以及學(xué)習(xí)率的計(jì)算方法,效果看起來(lái)也不錯(cuò)。

這個(gè)算法挺有趣,下一篇我們可以來(lái)談?wù)?,這里先貼個(gè)算法框架圖:

▌06到底該用Adam還是SGD?

所以,談到現(xiàn)在,到底Adam好還是SGD好?這可能是很難一句話說(shuō)清楚的事情。去看學(xué)術(shù)會(huì)議中的各種paper,用SGD的很多,Adam的也不少,還有很多偏愛AdaGrad或者AdaDelta??赡苎芯繂T把每個(gè)算法都試了一遍,哪個(gè)出來(lái)的效果好就用哪個(gè)了。畢竟paper的重點(diǎn)是突出自己某方面的貢獻(xiàn),其他方面當(dāng)然是無(wú)所不用其極,怎么能輸在細(xì)節(jié)上呢?

而從這幾篇怒懟Adam的paper來(lái)看,多數(shù)都構(gòu)造了一些比較極端的例子來(lái)演示了Adam失效的可能性。這些例子一般過(guò)于極端,實(shí)際情況中可能未必會(huì)這樣,但這提醒了我們,理解數(shù)據(jù)對(duì)于設(shè)計(jì)算法的必要性。優(yōu)化算法的演變歷史,都是基于對(duì)數(shù)據(jù)的某種假設(shè)而進(jìn)行的優(yōu)化,那么某種算法是否有效,就要看你的數(shù)據(jù)是否符合該算法的胃口了。

算法固然美好,數(shù)據(jù)才是根本。

另一方面,Adam之流雖然說(shuō)已經(jīng)簡(jiǎn)化了調(diào)參,但是并沒(méi)有一勞永逸地解決問(wèn)題,默認(rèn)的參數(shù)雖然好,但也不是放之四海而皆準(zhǔn)。因此,在充分理解數(shù)據(jù)的基礎(chǔ)上,依然需要根據(jù)數(shù)據(jù)特性、算法特性進(jìn)行充分的調(diào)參實(shí)驗(yàn)。

少年,好好煉丹吧。

(三)優(yōu)化算法的選擇與使用策略

“ 在前面兩篇文章中,我們用一個(gè)框架梳理了各大優(yōu)化算法,并且指出了以 Adam 為代表的自適應(yīng)學(xué)習(xí)率優(yōu)化算法可能存在的問(wèn)題。那么,在實(shí)踐中我們應(yīng)該如何選擇呢?本文介紹 Adam + SGD 的組合策略,以及一些比較有用的 tricks.”

▌07不同算法的核心差異:下降方向

從第一篇的框架中我們看到,不同優(yōu)化算法最核心的區(qū)別,就是第三步所執(zhí)行的下降方向:

這個(gè)式子中,前半部分是實(shí)際的學(xué)習(xí)率(也即下降步長(zhǎng)),后半部分是實(shí)際的下降方向。SGD算法的下降方向就是該位置的梯度方向的反方向,帶一階動(dòng)量的SGD的下降方向則是該位置的一階動(dòng)量方向。自適應(yīng)學(xué)習(xí)率類優(yōu)化算法為每個(gè)參數(shù)設(shè)定了不同的學(xué)習(xí)率,在不同維度上設(shè)定不同步長(zhǎng),因此其下降方向是縮放過(guò)(scaled)的一階動(dòng)量方向。

由于下降方向的不同,可能導(dǎo)致不同算法到達(dá)完全不同的局部最優(yōu)點(diǎn)。《An empirical analysis of the optimization of deep network loss surfaces》這篇論文中做了一個(gè)有趣的實(shí)驗(yàn),他們把目標(biāo)函數(shù)值和相應(yīng)的參數(shù)形成的超平面映射到一個(gè)三維空間,這樣我們可以直觀地看到各個(gè)算法是如何尋找超平面上的最低點(diǎn)的。

上圖是論文的實(shí)驗(yàn)結(jié)果,橫縱坐標(biāo)表示降維后的特征空間,區(qū)域顏色則表示目標(biāo)函數(shù)值的變化,紅色是高原,藍(lán)色是洼地。他們做的是配對(duì)兒實(shí)驗(yàn),讓兩個(gè)算法從同一個(gè)初始化位置開始出發(fā),然后對(duì)比優(yōu)化的結(jié)果??梢钥吹?,幾乎任何兩個(gè)算法都走到了不同的洼地,他們中間往往隔了一個(gè)很高的高原。這就說(shuō)明,不同算法在高原的時(shí)候,選擇了不同的下降方向。

▌08Adam+SGD 組合策略

正是在每一個(gè)十字路口的選擇,決定了你的歸宿。如果上天能夠給我一個(gè)再來(lái)一次的機(jī)會(huì),我會(huì)對(duì)那個(gè)女孩子說(shuō):SGD!

不同優(yōu)化算法的優(yōu)劣依然是未有定論的爭(zhēng)議話題。據(jù)我在paper和各類社區(qū)看到的反饋,主流的觀點(diǎn)認(rèn)為:Adam等自適應(yīng)學(xué)習(xí)率算法對(duì)于稀疏數(shù)據(jù)具有優(yōu)勢(shì),且收斂速度很快;但精調(diào)參數(shù)的SGD(+Momentum)往往能夠取得更好的最終結(jié)果。

那么我們就會(huì)想到,可不可以把這兩者結(jié)合起來(lái),先用Adam快速下降,再用SGD調(diào)優(yōu),一舉兩得?思路簡(jiǎn)單,但里面有兩個(gè)技術(shù)問(wèn)題:

什么時(shí)候切換優(yōu)化算法?——如果切換太晚,Adam可能已經(jīng)跑到自己的盆地里去了,SGD再怎么好也跑不出來(lái)了。

切換算法以后用什么樣的學(xué)習(xí)率?——Adam用的是自適應(yīng)學(xué)習(xí)率,依賴的是二階動(dòng)量的累積,SGD接著訓(xùn)練的話,用什么樣的學(xué)習(xí)率?

上一篇中提到的論文Improving Generalization Performance by Switching from Adam to SGD提出了解決這兩個(gè)問(wèn)題的思路。

首先來(lái)看第二個(gè)問(wèn)題,切換之后的學(xué)習(xí)率。

Adam的下降方向是

而SGD的下降方向是

SGD下降方向必定可以分解為Adam下降方向及其正交方向上的兩個(gè)方向之和,那么其在Adam下降方向上的投影就意味著SGD在Adam算法決定的下降方向上前進(jìn)的距離,而在Adam下降方向的正交方向上的投影是 SGD 在自己選擇的修正方向上前進(jìn)的距離。

(圖片來(lái)自原文,這里p為Adam下降方向,g為梯度方向,r為SGD的學(xué)習(xí)率。)

如果SGD要走完Adam未走完的路,那就首先要接過(guò)Adam的大旗——沿著方向走一步,而后在沿著其正交方向走相應(yīng)的一步。

這樣我們就知道該如何確定SGD的步長(zhǎng)(學(xué)習(xí)率)了——SGD在Adam下降方向上的正交投影,應(yīng)該正好等于Adam的下降方向(含步長(zhǎng))。也即:

解這個(gè)方程,我們就可以得到接續(xù)進(jìn)行SGD的學(xué)習(xí)率:

為了減少噪聲影響,我們可以使用移動(dòng)平均值來(lái)修正對(duì)學(xué)習(xí)率的估計(jì):

這里直接復(fù)用了Adam的 beta 參數(shù)。

然后來(lái)看第一個(gè)問(wèn)題,何時(shí)進(jìn)行算法的切換。

作者提出的方法很簡(jiǎn)單,那就是當(dāng) SGD的相應(yīng)學(xué)習(xí)率的移動(dòng)平均值基本不變的時(shí)候,即:

每次迭代完都計(jì)算一下SGD接班人的相應(yīng)學(xué)習(xí)率,如果發(fā)現(xiàn)基本穩(wěn)定了,那就SGD以為學(xué)習(xí)率接班前進(jìn)。不過(guò),這一時(shí)機(jī)是不是最優(yōu)的切換時(shí)機(jī),作者并沒(méi)有給出數(shù)學(xué)證明,只是通過(guò)實(shí)驗(yàn)驗(yàn)證了效果,切換時(shí)機(jī)還是一個(gè)很值得深入研究的話題。

▌09優(yōu)化算法的常用tricks

最后,分享一些在優(yōu)化算法的選擇和使用方面的一些tricks。

1.首先,各大算法孰優(yōu)孰劣并無(wú)定論。

如果是剛?cè)腴T,優(yōu)先考慮SGD+Nesterov Momentum或者Adam.(Standford 231n:The two recommended updates to use are either SGD+Nesterov Momentum or Adam)

2. 選擇你熟悉的算法——這樣你可以更加熟練地利用你的經(jīng)驗(yàn)進(jìn)行調(diào)參。

3.充分了解你的數(shù)據(jù)——如果模型是非常稀疏的,那么優(yōu)先考慮自適應(yīng)學(xué)習(xí)率的算法。

4. 根據(jù)你的需求來(lái)選擇——在模型設(shè)計(jì)實(shí)驗(yàn)過(guò)程中,要快速驗(yàn)證新模型的效果,可以先用Adam進(jìn)行快速實(shí)驗(yàn)優(yōu)化;在模型上線或者結(jié)果發(fā)布前,可以用精調(diào)的SGD進(jìn)行模型的極致優(yōu)化。

5. 先用小數(shù)據(jù)集進(jìn)行實(shí)驗(yàn)。有論文研究指出,隨機(jī)梯度下降算法的收斂速度和數(shù)據(jù)集的大小的關(guān)系不大。(The mathematics of stochastic gradient descent are amazingly independent of the training set size. In particular, the asymptotic SGD convergence rates are independent from the sample size. [2])因此可以先用一個(gè)具有代表性的小數(shù)據(jù)集進(jìn)行實(shí)驗(yàn),測(cè)試一下最好的優(yōu)化算法,并通過(guò)參數(shù)搜索來(lái)尋找最優(yōu)的訓(xùn)練參數(shù)。

6. 考慮不同算法的組合。先用Adam進(jìn)行快速下降,而后再換到SGD進(jìn)行充分的調(diào)優(yōu)。切換策略可以參考本文介紹的方法。

7. 數(shù)據(jù)集一定要充分的打散(shuffle)。這樣在使用自適應(yīng)學(xué)習(xí)率算法的時(shí)候,可以避免某些特征集中出現(xiàn),而導(dǎo)致的有時(shí)學(xué)習(xí)過(guò)度、有時(shí)學(xué)習(xí)不足,使得下降方向出現(xiàn)偏差的問(wèn)題。

8. 訓(xùn)練過(guò)程中持續(xù)監(jiān)控訓(xùn)練數(shù)據(jù)和驗(yàn)證數(shù)據(jù)上的目標(biāo)函數(shù)值以及精度或者AUC等指標(biāo)的變化情況。對(duì)訓(xùn)練數(shù)據(jù)的監(jiān)控是要保證模型進(jìn)行了充分的訓(xùn)練——下降方向正確,且學(xué)習(xí)率足夠高;對(duì)驗(yàn)證數(shù)據(jù)的監(jiān)控是為了避免出現(xiàn)過(guò)擬合。

9. 制定一個(gè)合適的學(xué)習(xí)率衰減策略??梢允褂枚ㄆ谒p策略,比如每過(guò)多少個(gè)epoch就衰減一次;或者利用精度或者AUC等性能指標(biāo)來(lái)監(jiān)控,當(dāng)測(cè)試集上的指標(biāo)不變或者下跌時(shí),就降低學(xué)習(xí)率。

這里只列舉出一些在優(yōu)化算法方面的trick,如有遺漏,歡迎各位在評(píng)論中補(bǔ)充。提前致謝!

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴

原文標(biāo)題:Adam那么棒,為什么還對(duì)SGD念念不忘

文章出處:【微信號(hào):AI_Thinker,微信公眾號(hào):人工智能頭條】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    《MATLAB優(yōu)化算法案例分析與應(yīng)用》

    《MATLAB優(yōu)化算法案例分析與應(yīng)用》清華大學(xué)出版社《MATLAB優(yōu)化算法案例分析與應(yīng)用》這本書,給大家推薦下這本書清華大學(xué)出版社《MAT
    發(fā)表于 10-10 12:34

    工業(yè)相機(jī)硬觸發(fā)?光源閃頻?視覺(jué)算法優(yōu)化?雙ccd框架怎么寫?編程沒(méi)頭緒?labview雙ccd框架,拯救你的發(fā)量!

    `視覺(jué)外觀檢測(cè)中多ccd直是大家比較關(guān)注的案例,其涉及到些技術(shù)難點(diǎn),例如:工業(yè)相機(jī)硬觸發(fā)?光源閃頻?視覺(jué)算法優(yōu)化加速?雙ccd框架怎么寫
    發(fā)表于 07-26 00:26

    KeenTune的算法之心——KeenOpt 調(diào)優(yōu)算法框架 | 龍蜥技術(shù)

    參數(shù)調(diào)優(yōu)的算法領(lǐng)域,無(wú)法通過(guò)優(yōu)化(2)的開銷曲線救國(guó),只能老老實(shí)實(shí)的提升調(diào)優(yōu)算法的搜索策略。到此,我們來(lái)到了第二個(gè)坑。(圖2/從滿天星到團(tuán)
    發(fā)表于 10-28 10:36

    個(gè)新的二進(jìn)前向多層網(wǎng)學(xué)習(xí)算法及布爾函數(shù)優(yōu)化實(shí)現(xiàn)

    個(gè)新的二進(jìn)前向多層網(wǎng)學(xué)習(xí)算法及布爾函數(shù)優(yōu)化實(shí)現(xiàn) 本文首先給出二進(jìn)前向多層網(wǎng)幾何學(xué)習(xí)算法[1,2]的
    發(fā)表于 10-21 08:40 ?903次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>個(gè)</b>新的二進(jìn)前向多層網(wǎng)學(xué)習(xí)<b class='flag-5'>算法</b>及布爾函數(shù)<b class='flag-5'>優(yōu)化</b>實(shí)現(xiàn)

    MapReduce框架下的Skyline結(jié)果優(yōu)化算法_馬學(xué)森

    MapReduce框架下的Skyline結(jié)果優(yōu)化算法_馬學(xué)森
    發(fā)表于 03-19 11:41 ?0次下載

    種改進(jìn)的協(xié)同優(yōu)化算法

    針對(duì)協(xié)同優(yōu)化過(guò)程對(duì)初始點(diǎn)敏感以及容易陷入局部最優(yōu)點(diǎn)的問(wèn)題,提出了種改進(jìn)的協(xié)同優(yōu)化算法。改進(jìn)后的協(xié)同優(yōu)化
    發(fā)表于 11-24 14:46 ?1次下載

    基于元學(xué)習(xí)推薦的優(yōu)化算法自動(dòng)選擇框架

    算法選擇的目的是從眾多可用優(yōu)化算法中自動(dòng)地選出最適用于當(dāng)前問(wèn)題的算法。針對(duì)算法選擇問(wèn)題提出了基于元學(xué)習(xí)推薦的
    發(fā)表于 12-04 15:28 ?0次下載
    基于元學(xué)習(xí)推薦的<b class='flag-5'>優(yōu)化</b><b class='flag-5'>算法</b>自動(dòng)選擇<b class='flag-5'>框架</b>

    看懂常用的梯度下降算法

    的。梯度下降算法背后的原理:目標(biāo)函數(shù) 關(guān)于參數(shù) 的梯度將是目標(biāo)函數(shù)上升最快的方向。對(duì)于最小化優(yōu)化問(wèn)題,只需要將參數(shù)沿著梯度相反的方向前進(jìn)個(gè)步長(zhǎng),就可以實(shí)現(xiàn)目標(biāo)函數(shù)的下降。這個(gè)步長(zhǎng)又稱
    發(fā)表于 12-04 18:17 ?1758次閱讀

    人工魚群算法應(yīng)用于飼料配方優(yōu)化

    考慮到智能算法對(duì)各類飼料配方優(yōu)化模型的廣泛適用性,首次將人工魚群算法( AFSA)應(yīng)用于飼料配方優(yōu)化。為滿足飼料配方優(yōu)化對(duì)收斂精度的要求,采
    發(fā)表于 12-08 16:16 ?0次下載
    人工魚群<b class='flag-5'>算法</b>應(yīng)用于飼料配方<b class='flag-5'>優(yōu)化</b>

    基于Spark框架與聚類優(yōu)化的高效KNN分類算法

    針對(duì)K-最近鄰(KNN)分類算法時(shí)間復(fù)雜度與訓(xùn)練樣本數(shù)量成正比而導(dǎo)致的計(jì)算量大的問(wèn)題以及當(dāng)前大數(shù)據(jù)背景下面臨的傳統(tǒng)架構(gòu)處理速度慢的問(wèn)題,提出了種基于Spark框架與聚類優(yōu)化的高效KN
    發(fā)表于 12-08 17:10 ?0次下載
    基于Spark<b class='flag-5'>框架</b>與聚類<b class='flag-5'>優(yōu)化</b>的高效KNN分類<b class='flag-5'>算法</b>

    增量流形學(xué)習(xí)正則優(yōu)化算法

    模型,解決小樣本問(wèn)題。最后,構(gòu)造流形學(xué)習(xí)的正則化優(yōu)化框架,解決高維數(shù)據(jù)流特征提取過(guò)程中產(chǎn)生的降維誤差問(wèn)題,并得到最終的最優(yōu)解。實(shí)驗(yàn)結(jié)果表明本文提出的算法框架符合流形學(xué)習(xí)
    發(fā)表于 02-27 11:07 ?1次下載

    使用MATLAB遺傳算法實(shí)現(xiàn)弧形閘門主框架優(yōu)化設(shè)計(jì)的詳細(xì)資料說(shuō)明

    簡(jiǎn)要介紹了遺傳算法的基本原理, 建立了弧形閘門主框架優(yōu)化數(shù)學(xué)模型, 探討了各種尋優(yōu)算法的優(yōu)劣及約束問(wèn)題的處理方法, 并結(jié)合MAT LAB 語(yǔ)言將遺傳
    發(fā)表于 09-23 17:10 ?2次下載
    使用MATLAB遺傳<b class='flag-5'>算法</b>實(shí)現(xiàn)弧形閘門主<b class='flag-5'>框架</b><b class='flag-5'>優(yōu)化</b>設(shè)計(jì)的詳細(xì)資料說(shuō)明

    個(gè)基于參數(shù)更新的遷移學(xué)習(xí)的統(tǒng)框架

    它提出個(gè)基于參數(shù)更新的遷移學(xué)習(xí)的統(tǒng)框架,建立多種參數(shù)優(yōu)化方法之間的聯(lián)系,從而方便理解不同方法背后的關(guān)鍵設(shè)計(jì),進(jìn)而設(shè)計(jì)出只更新更少參數(shù)同時(shí)
    的頭像 發(fā)表于 09-26 10:29 ?1244次閱讀

    LINS算法框架與代碼分析

    , 由于網(wǎng)上已經(jīng)有些同學(xué)對(duì)算法做了介紹,些基礎(chǔ)的知識(shí)本文不再贅述,本文將詳細(xì)圍繞以下兩個(gè)問(wèn)題介紹,希望對(duì)讀者理解算法有所幫助: 1、LINS 是如何將激光觀測(cè)融入濾波
    的頭像 發(fā)表于 10-09 14:57 ?3059次閱讀

    看懂FPGA芯片投資框架.zip

    看懂FPGA芯片投資框架
    發(fā)表于 01-13 09:06 ?4次下載