如何使用優(yōu)化器讓訓(xùn)練網(wǎng)絡(luò)更快——神經(jīng)網(wǎng)絡(luò)的奧秘

摘要:本文介紹了創(chuàng)建神經(jīng)網(wǎng)絡(luò)時(shí)使用的多種優(yōu)化器,并講述了如何使用優(yōu)化器讓訓(xùn)練網(wǎng)絡(luò)更快。

通過(guò)使用Numpy來(lái)創(chuàng)建神經(jīng)網(wǎng)絡(luò),讓我意識(shí)到有哪些因素影響著神經(jīng)網(wǎng)絡(luò)的性能。架構(gòu)、超參數(shù)值、參數(shù)初始化,僅是其中的一部分,而這次我們將致力于對(duì)學(xué)習(xí)過(guò)程的速度有巨大影響的決策,以及所獲得的預(yù)測(cè)的準(zhǔn)確性—對(duì)優(yōu)化策略的選擇。我們會(huì)研究很多流行的優(yōu)化器,研究它們的工作原理,并進(jìn)行對(duì)比。

你在GitHub上可以找到所有代碼:

機(jī)器學(xué)習(xí)算法的優(yōu)化

優(yōu)化是搜索用于最小化或最大化函數(shù)參數(shù)的過(guò)程。當(dāng)我們訓(xùn)練機(jī)器學(xué)習(xí)模型的時(shí)候,通常使用間接優(yōu)化。我們選擇某種度量,如精確度或回調(diào),來(lái)指示模型如何很好地解決給定問(wèn)題。然而,我們正在優(yōu)化一個(gè)不同的代價(jià)函數(shù)J(θ),并且希望把它最小化以提高我們關(guān)心的度量。當(dāng)然,代價(jià)函數(shù)的選擇通常與我們要解決的具體問(wèn)題有關(guān)。本質(zhì)上,它表明了我們離理想的解決方案有多遠(yuǎn)。

陷阱

結(jié)果證明,通常要找到最小的非凸代價(jià)函數(shù)并不容易,我們必須使用先進(jìn)的優(yōu)化策略來(lái)找到它們。如果你已經(jīng)學(xué)過(guò)了微分,就一定知道局部最小值的概念,這些是我們的優(yōu)化器可能陷入的最大陷阱。對(duì)于那些還沒(méi)有接觸過(guò)這個(gè)數(shù)學(xué)概念的人,我只能說(shuō)這些是在給定的區(qū)域內(nèi)函數(shù)取最小值的點(diǎn),如上圖左側(cè)所示。

克服所謂的鞍點(diǎn)(saddle points)通常被認(rèn)為更具有挑戰(zhàn)性。這些是穩(wěn)定狀態(tài),其中代價(jià)函數(shù)的值幾乎是不變的。這種情況顯示在上圖的右側(cè)。在這些點(diǎn)上,梯度幾乎在所有方向上都被歸零,使得無(wú)法逃離。

有時(shí)候,特別是在多層網(wǎng)絡(luò)的情況下,我們可能必須處理代價(jià)函數(shù)中非常陡峭的區(qū)域。在這些地方,梯度的值急劇地增加,引起梯度爆炸,這會(huì)致使采取一些極大的步驟長(zhǎng)度,并經(jīng)常破壞之前的整個(gè)優(yōu)化工作。然而,通過(guò)梯度裁剪,就是定義允許的最大梯度值,就可以很容易地避免這個(gè)問(wèn)題。

梯度下降法(Gradient descent)

在我們了解更好的算法之前,先看看一些基本的策略方法??赡芤粋€(gè)最簡(jiǎn)單的方法就是簡(jiǎn)單地沿著與梯度相反的方向移動(dòng),這個(gè)方法可以用下面的等式來(lái)表示:

其中,α是一個(gè)稱為學(xué)習(xí)率的超參數(shù),它會(huì)轉(zhuǎn)換為我們將在每次迭代中采取的步驟長(zhǎng)度。它的值在一定程度上表示了一種折中選擇,是學(xué)習(xí)的速度和可以獲得結(jié)果的準(zhǔn)確性之間的。選擇太小的步驟長(zhǎng)度會(huì)導(dǎo)致我們?nèi)唛L(zhǎng)的計(jì)算和執(zhí)行更多的迭代。另一方面,無(wú)論如何,選擇過(guò)大的步驟長(zhǎng)度可以有效地阻止我們找到最小值。在圖2中表示了這種情況,我們可以看到,在隨后的迭代中,如何振動(dòng),而不能保持穩(wěn)定。在此期間,定義了適當(dāng)步驟的模型幾乎立即就被發(fā)現(xiàn)了。

圖2.對(duì)于小學(xué)習(xí)率和大學(xué)習(xí)率的值的梯度下降行為的可視化。

此外,這個(gè)算法容易受到前面描述的鞍點(diǎn)問(wèn)題的影響。由于在隨后的迭代過(guò)程中執(zhí)行校正的大小與計(jì)算的梯度成正比,我們將無(wú)法擺脫平穩(wěn)期。

最后,為了達(dá)到這一目的,該算法是無(wú)效的,它要求在每次迭代中使用整個(gè)訓(xùn)練集。這意味著,在每一個(gè)時(shí)期,我們必須查看所有的例子,以便執(zhí)行下一步的優(yōu)化。當(dāng)訓(xùn)練集包含數(shù)千個(gè)例子的時(shí)候,這可能不是問(wèn)題,但是正如我在之前提到的,當(dāng)有數(shù)百萬(wàn)條記錄可供使用時(shí),神經(jīng)網(wǎng)絡(luò)工作的效果最好,但在這種情況下,很難想象在每次迭代中我們都使用整個(gè)集合,這會(huì)浪費(fèi)時(shí)間和計(jì)算機(jī)資源。

小批量梯度下降法(Mini-bach Gradient descent)

圖 3.梯度下降與小批量梯度下降的比較

讓我們來(lái)解決上節(jié)中提到的最后一個(gè)問(wèn)題——低效。雖然向量化允許我們可以加速計(jì)算,但是要一次性處理太多的訓(xùn)練實(shí)例,并且當(dāng)數(shù)據(jù)集具有數(shù)百萬(wàn)條記錄時(shí),整個(gè)處理過(guò)程仍然需要很長(zhǎng)時(shí)間才能完成。讓我們?cè)囍褂靡粋€(gè)相當(dāng)簡(jiǎn)單的解決方法,將整個(gè)數(shù)據(jù)集分成更小的部分,在隨后的迭代中進(jìn)行訓(xùn)練。假設(shè)左邊的圖形表示我們想要優(yōu)化的代價(jià)函數(shù)??梢钥吹?,由于我們需要處理的數(shù)據(jù)量要小得多,新算法就會(huì)使得決策更快。讓我們來(lái)看下比較模型移動(dòng)中的對(duì)比。梯度下降會(huì)采取罕見(jiàn)的、相對(duì)大的步驟,幾乎沒(méi)有噪音。另一方面,批量梯度下降更頻繁地執(zhí)行步驟,但是由于被分析的數(shù)據(jù)集中可能存在多樣性,則會(huì)有更多的噪音。甚至在一次迭代中,我們會(huì)朝著與預(yù)期相反的方向移動(dòng)。然而,平均而言,我們會(huì)朝著最小值的方向移動(dòng)。

圖4.將數(shù)據(jù)集成批拆分

那么按照什么尺寸拆呢?在深度學(xué)習(xí)中的通常情況下,答案是不確定的,取決于具體情況。如果整個(gè)數(shù)據(jù)集就是一批,那么我們基本上就是處理一個(gè)普通的梯度下降。另一方面,如果大小是1,那么在每次迭代中,我們只使用數(shù)據(jù)集中的一個(gè)實(shí)例,因此失去了向量化的好處。這種方法有時(shí)是合理的,被稱為隨機(jī)梯度下降。在實(shí)際環(huán)境中,我們通常會(huì)選擇從64到512個(gè)例子的范圍里選擇一個(gè)中間值。

指數(shù)加權(quán)平均法(exponentially weighted averges,EWA)

這一思想被廣泛應(yīng)用于統(tǒng)計(jì)學(xué)、經(jīng)濟(jì)學(xué)、深度學(xué)習(xí)等領(lǐng)域。許多高級(jí)的神經(jīng)網(wǎng)絡(luò)優(yōu)化算法使用了這個(gè)思想,因?yàn)樗试S我們持續(xù)優(yōu)化,即使在給定點(diǎn)所計(jì)算的梯度是零的情況下。讓我們來(lái)了解一下這個(gè)算法,我們將使用最大的一家科技公司的股票作為例子。

圖 5.可視化地顯示給不同的β值計(jì)算指數(shù)加權(quán)平均數(shù)

EWA實(shí)質(zhì)上是對(duì)許多得到的值計(jì)算平均數(shù),以便不受局部波動(dòng)的影響而關(guān)注整體趨勢(shì)。EWA的值是使用上面的遞推公式計(jì)算的,其中β是用于控制要計(jì)算平均值的數(shù)的范圍。在隨后的迭代中,我們考慮了1 /(1 -β)的例子。對(duì)于較大的β值,得到的曲線更平滑,因?yàn)槲覀兤骄嗽S多記錄。另一方面,曲線越來(lái)越向右移動(dòng),因?yàn)楫?dāng)我們把很長(zhǎng)一段時(shí)間內(nèi)的值進(jìn)行平均的時(shí)候,EWA對(duì)新的趨勢(shì)適應(yīng)的比較慢。這在圖5中可以看到,其中我們說(shuō)明了股票在收盤時(shí)的實(shí)際價(jià)格,顯示了給不同的β參數(shù)計(jì)算的指數(shù)加權(quán)平均值。

動(dòng)量梯度下降法(Gradient descent with momentum)

該方法利用指數(shù)加權(quán)平均法來(lái)避免代價(jià)函數(shù)的梯度接近于零的點(diǎn)。簡(jiǎn)單來(lái)說(shuō)就是,我們?cè)试S算法獲得動(dòng)量,因此即使局部梯度為零,我們?nèi)匀豢梢砸揽恐坝?jì)算的值向前移動(dòng)。由于這個(gè)原因,它一直是一個(gè)比純梯度下降更好的選擇。

通常我們給網(wǎng)絡(luò)的每一層使用反向傳播來(lái)計(jì)算dWdb的值。這次,我們首先計(jì)算VdWVdb的中間值,而不是直接使用計(jì)算出來(lái)的梯度來(lái)更新神經(jīng)網(wǎng)絡(luò)參數(shù)的值,這些值實(shí)際上是關(guān)于單個(gè)參數(shù)的代價(jià)函數(shù)導(dǎo)數(shù)的EWA。最后,我們將在梯度下降中使用VdWVdb。整個(gè)過(guò)程可用上述方程表示。值得注意的是,這種方法的實(shí)現(xiàn)需要在迭代之間存儲(chǔ)EWA的值。

圖6.動(dòng)量梯度下降法

現(xiàn)在我們嘗試開(kāi)發(fā)一個(gè)關(guān)于EWA影響模型行為的直覺(jué)能力。再次想象上面的輪廓象征著我們優(yōu)化的代價(jià)函數(shù)。上圖顯示標(biāo)準(zhǔn)梯度下降和動(dòng)量梯度下降的比較。我們可以看到,代價(jià)函數(shù)圖表的形狀推動(dòng)一種非常緩慢的優(yōu)化方法。正如股票市場(chǎng)價(jià)格的例子一樣,使用指數(shù)加權(quán)平均法允許我們關(guān)注主要的趨勢(shì)而不是噪聲。指示最小值的分量被擴(kuò)大,并且承擔(dān)波動(dòng)的分量被慢慢消除。更重要的是,如果我們?cè)诤罄m(xù)的更新中獲得的梯度指向一個(gè)相似的方向,那么學(xué)習(xí)率將會(huì)提高。這將導(dǎo)致更快的收斂和減少振蕩。然而,這種方法有一個(gè)缺點(diǎn)—當(dāng)你接近最小值的時(shí)候,動(dòng)量值會(huì)增大,并且可能變得相當(dāng)大,以至于算法不能在正確的地方停止。

RMSProp算法

另一種提高梯度下降性能的方法是使用RMSProp方法—均方根傳播(Root Mean Squared Propagation)。它是有適應(yīng)能力的,允許為模型每個(gè)參數(shù)的學(xué)習(xí)率單個(gè)調(diào)整。隨后的參數(shù)值是基于之前為特定參數(shù)計(jì)算的梯度值。

使用圖6的例子和上面的方程,讓我們考慮這個(gè)方法背后的邏輯。根據(jù)名稱,在每次迭代中,我們計(jì)算相應(yīng)參數(shù)的代價(jià)函數(shù)導(dǎo)數(shù)的每個(gè)元素的平方。此外,我們使用EWA來(lái)計(jì)算在最近迭代中獲得的值的平均數(shù)。最后,在更新網(wǎng)絡(luò)參數(shù)值之前,將相應(yīng)的梯度分量除以平方和的平方根。這意味著對(duì)于梯度大的參數(shù),學(xué)習(xí)率降低得更快;反之,對(duì)于梯度小的參數(shù),學(xué)習(xí)率降低得則更慢。以這種方式,我們的算法會(huì)減少波動(dòng),并防止噪音影響信號(hào)。為了避免零作除數(shù)(數(shù)值穩(wěn)定性),我們要向分母添加一個(gè)非常小的值,在公式中標(biāo)記為?。

在寫(xiě)本文的時(shí)候,我對(duì)所分析優(yōu)化器的質(zhì)量飛躍感到非常驚訝。第一個(gè)是當(dāng)我看到標(biāo)準(zhǔn)梯度下降和小批量梯度下降之間的訓(xùn)練時(shí)間上的差異時(shí);第二,比較RMSprop與迄今為止我們看到的一切。然而,這種方法有其缺點(diǎn)。隨著上述方程的分母在每次迭代中增大,學(xué)習(xí)率會(huì)越來(lái)越小。因此,這可能會(huì)導(dǎo)致模型完全停止運(yùn)行。

圖7. 優(yōu)化器比較

Adam

最后,讓我說(shuō)一下Adam(自適應(yīng)矩估計(jì))。這是一種算法,和RMSProp一樣,在大量的應(yīng)用中效果不錯(cuò)。它利用了RMSProp的最大優(yōu)點(diǎn),將應(yīng)用與動(dòng)量?jī)?yōu)化的思想結(jié)合起來(lái)。結(jié)果就會(huì)得到一種允許快速且有效的優(yōu)化策略。上圖顯示了討論過(guò)的優(yōu)化器如何處理函數(shù)復(fù)雜部分的優(yōu)化??梢钥吹紸dam在這種情況下做得很好。

遺憾的是,隨著我們的方法有效性的提高,計(jì)算的復(fù)雜度也增大了。以上我寫(xiě)了十個(gè)矩陣方程來(lái)描述優(yōu)化過(guò)程的單次迭代。對(duì)于那些不太熟悉數(shù)學(xué)的人,別擔(dān)心,沒(méi)有新的東西,這些是之前為動(dòng)量和RMSProp 優(yōu)化器所寫(xiě)的方程。我們將簡(jiǎn)單地使用這兩種想法。

總結(jié)

我希望能以一種由淺入深的方式來(lái)解釋這些復(fù)雜的問(wèn)題。本文的相關(guān)工作使我能夠理解選擇正確的優(yōu)化器是多么的重要。對(duì)這些算法的理解會(huì)讓我們有意識(shí)地使用它們,了解個(gè)體超參數(shù)的變化如何影響整個(gè)模型的性能。

本文作者:【方向】

閱讀原文

本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。

作者:阿里云云棲社區(qū)

鏈接:http://www.itdecent.cn/p/1b4241e51c52

來(lái)源:簡(jiǎn)書(shū)

簡(jiǎn)書(shū)著作權(quán)歸作者所有,任何形式的轉(zhuǎn)載都請(qǐng)聯(lián)系作者獲得授權(quán)并注明出處。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容