學(xué)習(xí)速率是隨著時間的推移神經(jīng)網(wǎng)絡(luò)里信息積累的速度。學(xué)習(xí)速率決定了神經(jīng)網(wǎng)絡(luò)達到(以及是否能達到)所需特定輸出的最佳、最有利位置的速度。在原始隨機梯度下降(SGD)中,學(xué)習(xí)速率與誤差梯度的形狀無關(guān),因為它使用了一個與誤差梯度無關(guān)的全局學(xué)習(xí)速率。
然而可以對原始SGD的更新規(guī)則進行許多修改,這些規(guī)則會將學(xué)習(xí)速率跟誤差梯度的大小和方向關(guān)聯(lián)起來。
為什么要將學(xué)習(xí)速率的可視化出來?
將隨著時間變化的學(xué)習(xí)速率可視化與隨著道路狀況變化的汽車速度可視化是類似的。在高速公路等暢通寬闊的道路上,我們可以提高速度(學(xué)習(xí)速率),但是在狹窄的丘陵或山谷道路上,我們必須放慢速度。此外,我們不想在高速公路上行駛得太慢,否則我們將花費太長時間才能到達目的地(由于參數(shù)不當(dāng)而導(dǎo)致更長的訓(xùn)練時間)。同樣的,我們不想在丘陵和狹窄的道路上(就像優(yōu)化損失函數(shù)表面的溝谷)開車太快,因為我們很容易失去對汽車的控制(陷入局部最小值,或因產(chǎn)生太多的反彈而幾乎沒有改進)或錯過目的地(最優(yōu)值)。
請記住,“…一個高學(xué)習(xí)速率… [表示]系統(tǒng)含有太多的動能,參數(shù)向量胡亂的彈跳從而不能落入損失函數(shù)的較深但較窄的地方”(請參閱Karpathy的cs231n課程筆記)。
基于相同的數(shù)據(jù)來源,可以通過在數(shù)據(jù)集的一個子集上訓(xùn)練網(wǎng)絡(luò)來獲得一個良好的初始學(xué)習(xí)速率估計。理想的策略是從一個很大的學(xué)習(xí)速率開始,逐次減半直到損失不再變化。在接近訓(xùn)練結(jié)束時,學(xué)習(xí)速率的衰減應(yīng)在100倍左右或更高。這種衰減使學(xué)習(xí)好的網(wǎng)絡(luò)能夠抵抗可能使學(xué)習(xí)失敗的隨機波動。在這里,我們將會先選擇一個小的學(xué)習(xí)速率在一個小的數(shù)據(jù)集上測試,并選擇適當(dāng)?shù)闹怠?/p>
學(xué)習(xí)速率衰減
非自適應(yīng)學(xué)習(xí)速率可能不是最佳的。學(xué)習(xí)速率的衰減可以通過每幾個周期減少某個常數(shù)因子,或通過指數(shù)衰減來實現(xiàn),指數(shù)可以采用每幾個周期的指數(shù)的數(shù)學(xué)形式?!八p”通常被認為是一個消極的概念,在當(dāng)前的學(xué)習(xí)速率衰減案例中也是負面的:它指的是學(xué)習(xí)速率下降的程度。然而這種衰減的結(jié)果實際上是我們非常想要的。例如我們降低一輛車的速度以適應(yīng)道路和交通條件,這種減速可以被理解為汽車速度的“衰減”。同樣我們也能從衰減學(xué)習(xí)速率以適應(yīng)梯度中獲益。
降低學(xué)習(xí)速率是必要的,因為高的學(xué)習(xí)速率在進行迭代訓(xùn)練時很可能會落入局部最小值。想象這個局部最小值是一張超速罰單、一個通行費、交通信號燈或是交通擁擠——某些基本上會增加到達目的地的時間的東西。完全避免所有的交通信號燈和通行費是不可能的,但是會有一個我們喜歡的最優(yōu)駕駛路徑。同樣的在模型訓(xùn)練中,我們希望尋找最佳路徑時避免在梯度上的反復(fù)跳躍,并希望模型訓(xùn)練是沿著最佳路徑的。理想情況下,我們不希望加速太快因為我們會因此得到一張超速罰單(陷入局部最小值并拋錨)。同樣的比喻也適用于學(xué)習(xí)速率。
動量是一種自適應(yīng)學(xué)習(xí)速率方法的參數(shù),它允許以較高速度在平緩方向上移動,而在陡峭方向上降低速度。這種動量定義被認為是“經(jīng)典動量”,它會對速度進行校正然后在速度方向上大跳躍移動。動量有助于根據(jù)梯度的變化加速或減速基礎(chǔ)學(xué)習(xí)速率,將引起凈學(xué)習(xí)速率的變化而不影響其在損失函數(shù)表面上的位置。動量使學(xué)習(xí)到的網(wǎng)絡(luò)更能抵抗輸入中的噪聲和隨機性。
將學(xué)習(xí)速率視為超參數(shù)的其他更新規(guī)則包括:
- Duchi等人在2011年提出的AdaGrad,其增加了根據(jù)每個維度的歷史平方和來縮放梯度的各個元素。
- Tieleman和Hinton在2012年提出的RMSProp自適應(yīng)學(xué)習(xí)速率,其保留了每個權(quán)重的平方梯度的移動平均值以正規(guī)化當(dāng)前梯度。RMSProp增強了抵抗波動和隨機噪聲的能力。
- Kingma和Ba在2014年提出的Adam,其引入了零初始化的一個偏差修正值補償。
- 以及rprop,它只使用梯度符號來分別適應(yīng)每個權(quán)重的步長。這不適用于小批量。
除了這些規(guī)則,還有很多遵循牛頓更新規(guī)則但計算量非常大的二階方法。然而二階方法不會把學(xué)習(xí)速率視為超參數(shù),由于其計算量大所以很少被用于大型深度學(xué)習(xí)系統(tǒng)。
圖1顯示了在差不多的超參數(shù)設(shè)置下不同優(yōu)化技術(shù)的比較:

圖1 優(yōu)化技術(shù)的比較。資料來源:Alec Radford,經(jīng)許可使用
在這個圖像中,動量更新越過了目標(biāo),但是到達全局最小值的速度更快?!癗AG”是Nesterov加速梯度(Nesterov Accelerated Gradient),其首先沿速度的方向移動然后基于新位置對速度矢量進行校正。
從本質(zhì)上講,我們的目標(biāo)不是衰減而是利用衰減到達正確的位置。為了到達全局最優(yōu)或者期望的目的地,必須有選擇性地增大或者減小學(xué)習(xí)速率。不要害怕這些,因為我們經(jīng)常要做很多遍。
可視化
想要了解模型學(xué)習(xí)的進展,可視化是很必要的。例如,損失周期圖對于了解損失是如何隨著周期變化是非常有用的。當(dāng)所有數(shù)據(jù)點在當(dāng)前訓(xùn)練中至少被看到過一次時就完成一個周期。與迭代相比,跟蹤周期更好。這是因為迭代次數(shù)取決于可以任意設(shè)定的批量大小。
生成這個圖的一個好方法是通過疊加不同參數(shù)集合的每個周期曲線的損失。這個過程有助于我們識別最適合訓(xùn)練的一組參數(shù)。這些圖的y軸是損失,x軸是周期數(shù)。總體來說,圖2所示的幾個損失曲線看起來比較相似,但是它們的優(yōu)化模式存在一些微小的差異,具體表現(xiàn)在其收斂所需的周期數(shù)量和結(jié)果誤差上。
在眾多的損失函數(shù)中,選擇使用哪一種是很重要的。對于一些分類任務(wù),交叉熵誤差往往比其他度量更適合(如均方誤差),這是因為交叉熵誤差背后所代表的數(shù)學(xué)假設(shè)。如果我們將神經(jīng)網(wǎng)絡(luò)視為概率模型,則交叉熵會變成一個直觀的損失函數(shù),其利用Sigmoid或softmax非線性函數(shù)使輸入數(shù)據(jù)被正確分類的可能性最大化。另一方面,均方誤差更多地關(guān)注于標(biāo)簽不正確的數(shù)據(jù)。因此平均分類誤差是一個粗略的標(biāo)準(zhǔn)。
交叉熵的優(yōu)點是包括一個log項,使其粒度更細,同時考慮到了預(yù)測值與目標(biāo)值的接近度。交叉熵也有更好的偏導(dǎo)數(shù)以產(chǎn)生較大的誤差,這會使梯度更大以確保更快的學(xué)習(xí)速度。通常損失函數(shù)應(yīng)根據(jù)輸出單元跟概率模型假設(shè)相匹配的假設(shè)來選擇。例如,softmax和交叉熵最適合多類分類。繪制交叉熵函數(shù)可能更容易解釋,因為log項僅僅是因為學(xué)習(xí)過程主要表現(xiàn)為指數(shù)形式的一個指數(shù)過程。
試驗不同的學(xué)習(xí)速率
學(xué)習(xí)速率是控制更新步驟大小的超參數(shù)。隨著學(xué)習(xí)速率的提高,振蕩次數(shù)會隨之增加。如圖2所示,隨著學(xué)習(xí)速率的增加會引起更多混亂或隨機噪聲。圖2里的所有的圖都是針對MNIST數(shù)據(jù)集訓(xùn)練的單層神經(jīng)網(wǎng)絡(luò)。
我們可以從圖中推斷出,高的學(xué)習(xí)速率更有可能使整個模型爆炸,導(dǎo)致數(shù)值不穩(wěn)定(如向上或向下溢出),這也是在運行這些實驗時經(jīng)驗性的發(fā)現(xiàn)。事實上,NAN在第一個訓(xùn)練周期之后就出現(xiàn)了。
| 學(xué)習(xí)速率 | 交叉熵 | 分類誤差 |
| 1 | ![]() |
![]() |
| .5 | ![]() |
![]() |
| .2 | ![]() |
![]() |
| .1 | ![]() |
![]() |
| .01 | ![]() |
![]() |
圖2 在不同學(xué)習(xí)速率下?lián)p失隨周期的變化。資料來源:Siddha Ganju
圖2顯示了不同學(xué)習(xí)速率下隨周期變化的損失曲線。它比較了兩種不同的損失函數(shù):交叉熵和分類誤差。這些圖表明,在較低的學(xué)習(xí)速率下,模型改進是線性的(如學(xué)習(xí)速率0.01)。當(dāng)學(xué)習(xí)速率高時,可以看到幾乎指數(shù)級的跳躍(如學(xué)習(xí)速率1和0.5)。較高的學(xué)習(xí)速率能夠更快地衰減損失,但缺點是大的跳躍可能會使他們陷入局部最低點,然后陷入較差的損失值。
這種現(xiàn)象通常表現(xiàn)為圖中的振蕩,表明所學(xué)習(xí)的參數(shù)主要是跳來跳去,并且不能使梯度向全局最小值移動。如果驗證曲線跟訓(xùn)練曲線相近,則網(wǎng)絡(luò)已被正確訓(xùn)練。然而,驗證曲線和訓(xùn)練曲線之間的巨大差距表明網(wǎng)絡(luò)在訓(xùn)練集上過度擬合(學(xué)習(xí)速率0.01)。這可以通過使用dropout或其他正則化技術(shù)來減少過擬合的幾率。
為每個連接使用單獨的自適應(yīng)學(xué)習(xí)速率
神經(jīng)網(wǎng)絡(luò)通常不止只有一層。每層具有不同的扇入或輸入單元的數(shù)量,其決定了由于同時更新單元輸入權(quán)重所引起的超過目標(biāo)的結(jié)果,這些權(quán)重用于校正相同錯誤(如全局學(xué)習(xí)速率)。另外梯度的大小因不同層而異,特別是如果初始權(quán)重小時(通常是初始化的情況)。因此適當(dāng)?shù)膶W(xué)習(xí)速率在不同權(quán)重時有很大的不同。
這個問題的一個解決方案是設(shè)置全局學(xué)習(xí)速率,并將其乘以一個合適的局部增益,該增益是由每個權(quán)重憑經(jīng)驗確定的。為了提高網(wǎng)絡(luò)性能,增益應(yīng)在合理的預(yù)定范圍內(nèi)。在使用單獨的自適應(yīng)學(xué)習(xí)速率時,或?qū)⒄麄€批量用于學(xué)習(xí),或使用比較大的小批量,以確保梯度信號的變化不是主要是由于小批量的抽樣誤差或隨機波動引起的。這些每個權(quán)重的自適應(yīng)學(xué)習(xí)速率也可以與動量相結(jié)合。(有關(guān)更多信息,請參見Coursera的神經(jīng)網(wǎng)絡(luò)課程的第6b節(jié)。)
遷移學(xué)習(xí)的學(xué)習(xí)速率
遷移學(xué)習(xí)是調(diào)整一個已有預(yù)先訓(xùn)練好的模型以供另一個應(yīng)用使用。這種模型的復(fù)用是必要的,因為在某些應(yīng)用領(lǐng)域中獲取用于訓(xùn)練的大數(shù)據(jù)集是相對困難的。微調(diào)是遷移學(xué)習(xí)的一種,其中網(wǎng)絡(luò)的一部分(比如最后一層)被修改以提供其他應(yīng)用所需的特定數(shù)量的輸出。還有許多我們沒有在本文中討論的其他類型的遷移學(xué)習(xí)。如圖3所示,當(dāng)網(wǎng)絡(luò)已經(jīng)在一種類型的數(shù)據(jù)上(鋼琴數(shù)據(jù))被訓(xùn)練好時,微調(diào)可以調(diào)整該網(wǎng)絡(luò)去學(xué)習(xí)稍微不同的其他類型的數(shù)據(jù)(手風(fēng)琴數(shù)據(jù))

圖3 對以前獲得的鋼琴知識進行微調(diào)用于學(xué)習(xí)手風(fēng)琴。源自Anirudh Koul的《將深度學(xué)習(xí)放入移動電話中》,經(jīng)許可使用
由于神經(jīng)網(wǎng)絡(luò)已被預(yù)先訓(xùn)練好,微調(diào)訓(xùn)練所需的時間要少得多,因為網(wǎng)絡(luò)已經(jīng)獲得了需要的大部分信息,并且只需要在微調(diào)階段改進這些知識。
在微調(diào)時,我們降低了整體學(xué)習(xí)速率同時提高了部分網(wǎng)絡(luò)(最后一層或新層)的學(xué)習(xí)速率。例如,在開源Caffe框架中,base_lr應(yīng)該在求解器prototxt中減少,而新引入的層的lr_mult應(yīng)該增加。這有助于實現(xiàn)整體模型的緩慢變化,同時利用新數(shù)據(jù)快速改變新層。經(jīng)驗法則是保持需要更新的層的學(xué)習(xí)速率是其他靜態(tài)層(全局學(xué)習(xí)速率)的至少10倍或更高。
結(jié)論
在這篇文章中,我們只是簡要介紹了深度學(xué)習(xí)算法的多元參數(shù)宇宙中的一點東西。學(xué)習(xí)速率衰減是一個參數(shù),其對于避免陷入局部極小值是至關(guān)重要的。在進行深度學(xué)習(xí)實驗時,請記住盡可能地使用可視化。他們是了解深度學(xué)習(xí)黑匣子中到底發(fā)生了什么事情的最重要的方式之一。
想象一下深度學(xué)習(xí)里充滿了各種小按鈕和開關(guān),就像飛行員的儀表板。我們需要學(xué)習(xí)如何調(diào)整這些按鍵以獲得最佳的輸出結(jié)果。我們可以隨時為我們正在開發(fā)的應(yīng)用找到一個預(yù)先訓(xùn)練好的模型,有選擇性地添加或刪除某些部分,并最終針對我們需要的應(yīng)用進行微調(diào)。而且如果我們能精確地將學(xué)習(xí)速率畫出來,我們就能較快地到達目的地。
Siddha Ganju
Siddha畢業(yè)于卡內(nèi)基梅隆大學(xué),獲得計算數(shù)據(jù)科學(xué)碩士學(xué)位。她的工作包括視覺問題回答以及利用生成對抗網(wǎng)絡(luò)理解CERN的PB級數(shù)據(jù)。她已經(jīng)在諸如CVPR等頂級會議上發(fā)表過文章。她是Strata數(shù)據(jù)大會和人工智能大會的常客(作為講師),并為NASA的數(shù)據(jù)實驗室提供咨詢。不工作時她會去徒步旅行!可以訪問Siddha的網(wǎng)站http://sidgan.me/siddhaganju












更多人工智能內(nèi)容請關(guān)注2018年4月10-13日人工智能北京大會。