在這篇文章中,我們討論另外一個困擾神經(jīng)網(wǎng)絡(luò)訓(xùn)練的問題,病態(tài)曲率。
雖然局部極小值和鞍點(diǎn)會阻礙我們的訓(xùn)練,但病態(tài)曲率會減慢訓(xùn)練的速度,以至于從事機(jī)器學(xué)習(xí)的人可能會認(rèn)為搜索已經(jīng)收斂到一個次優(yōu)的極小值。讓我們深入了解什么是病態(tài)曲率。
病態(tài)曲率
考慮以下?lián)p失曲線圖。
**病態(tài)曲率**
如你所知,我們在進(jìn)入一個以藍(lán)色為標(biāo)志的像溝一樣的區(qū)域之前是隨機(jī)的。這些顏色實(shí)際上代表了在特定點(diǎn)上的損失函數(shù)的值,紅色代表最高的值,藍(lán)色代表最低的值。
我們想要下降到最低點(diǎn),因此,需要穿過峽谷。這個區(qū)域就是所謂的病態(tài)曲率。為了了解為何將其稱為病態(tài)曲率,讓我們再深入研究。放大了看,病態(tài)曲率就像這樣...
**病態(tài)曲率**
要知道這里發(fā)生的事情并不難。梯度下降沿著峽谷的山脊反彈,向最小的方向移動的速度非常慢。這是因為山脊的曲線在 W1 方向上彎曲的更陡。
考慮山脊表面的 A 點(diǎn)。我們看到,梯度在這點(diǎn)可以分解為兩個分量,一個沿著 W1 方向,另外一個沿著 W2 方向。如果 f 顯著下降的唯一方向是低曲率的,那么優(yōu)化可能會變得太慢而不切實(shí)際,甚至看起來完全停止,造成局部最小值的假象。
正常情況下,我們使用一個較慢的學(xué)習(xí)率來解決這種山脊間反彈的問題,正如上一篇關(guān)于梯度下降的文章所述。然而,這卻產(chǎn)生了麻煩。
當(dāng)我們接近最小值時,慢下來是有意義的,我們想要收斂于它。但是考慮一下梯度下降進(jìn)入病態(tài)曲率的區(qū)域,以及到最小值的絕對距離。如果我們使用較慢的學(xué)習(xí)率,可能需要花費(fèi)更多的時間才能到達(dá)極小值點(diǎn)。事實(shí)上,有研究論文報道過使用足夠小的學(xué)習(xí)率來阻值山脊間的反彈可能導(dǎo)致參與者以為損失根本沒有改善,從而放棄訓(xùn)練。
如果 f 顯著下降的唯一方向是低曲率的,那么優(yōu)化可能會變得太慢而不切實(shí)際,甚至看起來完全停止,造成局部最小值的假象。
也許我們想要的是能讓我們慢慢進(jìn)入病態(tài)曲率底部的平坦區(qū)域,然后在最小值的方向上加速。二階導(dǎo)數(shù)可以幫助我們做到這一點(diǎn)。
牛頓法
梯度下降是一階優(yōu)化方法。它只考慮損失函數(shù)的一階導(dǎo)數(shù),而不考慮更高階的導(dǎo)數(shù)。這基本上意味著它不知道損失函數(shù)的曲率。它只能說明損失是否下降以及下降的速度,而不能區(qū)分曲線是平坦的,向上的,還是向下的。
之所以會發(fā)生這種現(xiàn)象,是因為梯度下降只關(guān)心梯度,就好像上圖中紅色的點(diǎn),三個曲線在這一點(diǎn)上的梯度是相同的。如何解決?使用二階導(dǎo)數(shù),或者考慮梯度變化的速率。
一個非常流行的可以使用二階導(dǎo)數(shù)的技術(shù),可以解決我們的問題,這個方法稱為牛頓法。如果表面變得不那么陡峭,那么學(xué)習(xí)步驟就會減少。
牛頓法可以提供一個理想的步長,在梯度方向上移動。由于我們現(xiàn)在有了關(guān)于損失表面曲率的信息,所以可以選擇步長,而不是用病態(tài)曲率來超過該區(qū)域的極限。
牛頓法通過計算 Hessian 矩陣來實(shí)現(xiàn),Hessian 矩陣是損失函數(shù)的二階導(dǎo)數(shù)組成的權(quán)值組合。我所說的權(quán)值組合,如下所示。
Hessian 矩陣在一個大矩陣中計算所有這些梯度。
Hessian 矩陣給出了一個點(diǎn)的損失曲面曲率的估計。一個損失的表面可以有一個正曲率,這意味著當(dāng)我們移動時,表面會迅速變得不那么陡峭。如果我們有一個負(fù)曲率,這意味著當(dāng)我們移動時,曲面變得越來越陡。
注意,如果這一步是負(fù)的,那就意味著我們可以使用任意的步驟。換句話說,我們可以切換回原來的算法。這對應(yīng)于下面的情況,梯度變得越來越陡。
然而,如果梯度變得不那么陡峭,我們可能會走向一個處于病態(tài)曲率底部的區(qū)域。在這里,牛頓法給了我們一個修正的學(xué)習(xí)步驟,正如你所看到的,它與曲率成反比,或者曲面變得越來越小。
如果表面變得不那么陡峭,那么學(xué)習(xí)步驟就會減少。
為什么我們很少使用牛頓法? 看到公式中的 Hessian 矩陣了嗎?Hessian 矩陣需要計算損失函數(shù)對所有權(quán)值組合的梯度。在組合已知的情況下,要求的值的數(shù)量約是神經(jīng)網(wǎng)絡(luò)中權(quán)值數(shù)量的平方。
對于現(xiàn)代的網(wǎng)絡(luò)來說,通常都含有數(shù)十億個參數(shù),使用高階的優(yōu)化方法很難計算 10 億的平方數(shù)量級的梯度。
二階優(yōu)化是關(guān)于梯度本身如何變化的信息。雖然我們不能精確的計算它,但是我們可以遵循啟發(fā)式方式,以指導(dǎo)我們根據(jù)之前的梯度進(jìn)行優(yōu)化。
Momentum
與 SDG 結(jié)合使用的一種常用方法叫做Momentum。Momentum 不僅會使用當(dāng)前梯度,還會積累之前的梯度以確定走向。梯度下降方程修改如下。
第一個式子有兩項。第一項是上一次迭代的梯度,乘上一個被稱為「Momentum 系數(shù)」的值,可以理解為取上次梯度的比例。
我們設(shè) v 的初始為 0,動量系數(shù)為 0.9,那么迭代過程如下:
我們可以看到之前的梯度會一直存在后面的迭代過程中,只是越靠前的梯度其權(quán)重越小。(說的數(shù)學(xué)一點(diǎn),我們?nèi)〉氖沁@些梯度步長的指數(shù)平均)。
這對我們的例子有什么幫助呢?觀察下圖,注意到大部分的梯度更新呈鋸齒狀。我們也注意到,每一步的梯度更新方向可以被進(jìn)一步分解為 w1 和 w2 分量。如果我們單獨(dú)的將這些向量求和,沿 w1 方向的的分量將抵消,沿 w2 方向的分量將得到加強(qiáng)。
對于權(quán)值更新來說,將沿著 w2 方向進(jìn)行,因為 w1 方向已抵消。這就可以幫助我們快速朝著極小值方向更新。所以,動量也被認(rèn)為是一種抑制迭代過程中鋸齒下降問題的技術(shù)。
這種方法還可以提高收斂速度,但如果超過極小值,可能需要使用模擬退化算法
我們通常初始化動量為 0.5,并且在一定循環(huán)次數(shù)后逐漸退火到 0.9。
RMSProp
RMSProp 或均方根反向傳播算法有著有趣的歷史。它是由傳奇人物Geoffrey Hinton提出的,當(dāng)時只是在課堂上是隨意提出的一個想法。
RMSProp 算法也旨在抑制梯度的鋸齒下降,但與動量相比, RMSProp 不需要手動配置學(xué)習(xí)率超參數(shù),由算法自動完成。更重要的是,RMSProp 可以為每個參數(shù)選擇不同的學(xué)習(xí)率。
在 RMSprop 算法中,每次迭代都根據(jù)下面的公式完成。它是對每個參數(shù)單獨(dú)迭代。
讓我們來看看上面的方程都在做什么。
在第一個方程中,我們計算一個梯度平方的指數(shù)平均值。由于我們需要針對每個梯度分量分別執(zhí)行平方,所以此處的梯度向量 Gt 對應(yīng)的是正在更新的參數(shù)方向的梯度各個方向的投影分量。
為此,我們將上一次更新的超參數(shù)乘希臘字母 nu。然后將當(dāng)前的梯度平方乘(1-nu)。最后我們將他們加到一起得到這一時刻的指數(shù)平均。
我們之所以使用指數(shù)平均是因為在 momentum 例子中看到的那樣,它可以使得間隔和權(quán)重成正比例變化。實(shí)際上使用「指數(shù)」一詞是因為前面項的權(quán)重呈指數(shù)級下降(最近的項權(quán)重是 ρ,次近的 ρ 方,然后是 ρ 立方,以此類推)。
注意我們表示病態(tài)曲率的圖,梯度沿 w1 方向的分量比沿 w2 方向的分量大的多。我們以平方的方式將 w1 和 w2 疊加,w1 不會發(fā)生抵消,w2 在指數(shù)平均后會更小。
第二個方程定義了步長,我們沿負(fù)梯度方向移動,但是步長受到指數(shù)平均值的影響。我們設(shè)置了一個初始學(xué)習(xí)率 eta,用它除指數(shù)平均值。在我們的例子中,因為 w1 平均后比 w2 大很多,所以 w1 的迭代步長就比 w2 要小很多。因此這將避免我們在山脊之間跳躍而朝著正確的方向移動。
第三個方程是更新操作,超參數(shù) p 通常選為 0.9,但是你可能需要調(diào)整它。方程 2 中的 epsilon 是為了防止被 0 除,通常取 1e-10。
還要注意的是,RMSProp 隱含的執(zhí)行模擬退火,假設(shè)我們正朝著極小值前進(jìn)并且我們想要放慢速度避免越過極小值。當(dāng)步長很大時 RMSProp 將自動減小梯度更新的步長(大步長容易越過極小值點(diǎn))。
Adam
到目前為止,我們已經(jīng)對比了 RMSProp 和 Momentum 兩種方法。盡管 Momentum 加速了我們對極小值方向的搜索,但 RMSProp 阻礙了我們在振蕩方向上的搜索。
Adam 或 Adaptive Moment Optimization 算法將 Momentum 和 RMSProp 兩種算法結(jié)合了起來。這里是迭代方程。
我們計算了每個梯度分量的指數(shù)平均和梯度平方指數(shù)平均(方程 1、方程 2)。為了確定迭代步長我們在方程 3 中用梯度的指數(shù)平均乘學(xué)習(xí)率(如 Momentum 的情況)并除以根號下的平方指數(shù)平均(如 Momentum 的情況),然后方程 4 執(zhí)行更新步驟。
超參數(shù) beta1 一般取 0.9 左右,beta_2 取 0.99。Epsilon 一般取1e-10。
結(jié)論
在這篇文章中,我們介紹了 3 種基于梯度下降法來解決病態(tài)曲率同時加快搜索速度的方法。這些方法通常稱為「自適應(yīng)方法」,因為學(xué)習(xí)步驟會根據(jù)等高線拓?fù)溥M(jìn)行調(diào)整。
在上面的三種方法中,盡管 Adam 算法在論文中被認(rèn)為是最有前景的算法,但是 Momentum 方法貌似更主流一些。實(shí)踐結(jié)果表明,在給定損失函數(shù)的情況下,三種算法都能收斂到不同的局部最優(yōu)極小值。但是用帶 Momentum 的 SGD 算法比 Adam 算法找到的極小值更加平坦,而自適應(yīng)方法往往會收斂到更加尖銳的極小值點(diǎn)。平坦的極小值通常好于尖銳的極小值。
盡管自適應(yīng)算法有助于我們在復(fù)雜的損失函數(shù)上找到極小值點(diǎn),但這還不夠,特別是在當(dāng)前網(wǎng)絡(luò)越來越來越深的背景下。除了研究更好的優(yōu)化方法之外,還有一些研究致力于構(gòu)建產(chǎn)生更平滑損失函數(shù)的網(wǎng)絡(luò)架構(gòu)。Batch-Normalization 和殘差連接是其中的解決方法,我們也會盡快在博客上發(fā)布有關(guān)的詳細(xì)介紹。
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4722瀏覽量
100310 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4257瀏覽量
62226
原文標(biāo)題:深度學(xué)習(xí)優(yōu)化入門:Momentum、RMSProp 和 Adam
文章出處:【微信號:vision263com,微信公眾號:新機(jī)器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論