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

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

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

深入淺出地介紹了牛頓法、動(dòng)量法、RMSProp、Adam優(yōu)化算法

zhKF_jqr_AI ? 來源:未知 ? 作者:李倩 ? 2018-10-08 09:15 ? 次閱讀

編者按:DRDO研究人員Ayoosh Kathuria深入淺出地介紹了牛頓法、動(dòng)量法、RMSProp、Adam優(yōu)化算法。

本系列的上一篇文章介紹了隨機(jī)梯度下降,以及如何應(yīng)對(duì)陷入局部極小值或鞍點(diǎn)的問題。在這篇文章中,我們將查看另一個(gè)困擾神經(jīng)網(wǎng)絡(luò)訓(xùn)練的問題,病態(tài)曲率。

局部極小值和鞍點(diǎn)會(huì)使訓(xùn)練停滯,而病態(tài)曲率則會(huì)減慢訓(xùn)練速度,以至于機(jī)器學(xué)習(xí)從業(yè)者可能會(huì)覺得搜索收斂到了一個(gè)次優(yōu)極小值。讓我們深入了解下什么是病態(tài)曲率。

病態(tài)曲率

考慮下面的損失曲面。

如你所見,我們從隨機(jī)點(diǎn)開始,漸漸進(jìn)入藍(lán)色的溝壑區(qū)。(顏色表示損失函數(shù)在特定點(diǎn)的值是高是低,紅色表示高值,藍(lán)色表示低值。)

在到達(dá)最小值之前,我們需要首先穿過溝壑區(qū),也就是病態(tài)曲率。讓我們放大一下這一區(qū)域,看看為什么稱病態(tài)?

紅線為梯度下降的路徑;藍(lán)線為理想路徑

如上圖所示,梯度下降在溝壑區(qū)的脊間反復(fù)振蕩,極其緩慢地向最小值處移動(dòng)。這是因?yàn)閣1方向要陡峭得多。

考慮下圖中A點(diǎn)的梯度,可以分解為w1、w2方向的兩個(gè)分量。w1方向的梯度要大很多,因此梯度的方向大為偏向w1,而不是w2(但w2才是能夠更快到達(dá)最小值處的梯度方向)。

通常情況下,我們使用低學(xué)習(xí)率來應(yīng)對(duì)這樣的反復(fù)振蕩,但在病態(tài)曲率區(qū)域使用低學(xué)習(xí)率,可能要花很多時(shí)間才能達(dá)到最小值處。事實(shí)上,有論文報(bào)告,防止反復(fù)振蕩的足夠小的學(xué)習(xí)率,也許會(huì)導(dǎo)致從業(yè)者相信損失完全沒有改善,干脆放棄訓(xùn)練。

大概,我們需要找到一種方法,首先緩慢地進(jìn)入病態(tài)曲率的平坦底部,然后加速往最小值方向移動(dòng)。二階導(dǎo)數(shù)可以幫助我們做到這一點(diǎn)。

牛頓法

梯度下降是一階優(yōu)化方法。它只考慮損失函數(shù)的一階導(dǎo)數(shù),不考慮高階函數(shù)?;旧线@意味著它對(duì)損失函數(shù)的曲率一無所知。梯度下降可以告訴我們損失是否下降,下降得有多快,但無法區(qū)分曲線的的彎曲程度。

上圖三條曲線,紅點(diǎn)處的梯度都是一樣的,但曲率大不一樣。解決方案?考慮二階導(dǎo)數(shù),或者說梯度改變得有多快。

使用二階導(dǎo)數(shù)解決這一問題的一個(gè)非常流行的技術(shù)是牛頓法(Newton's Method)。為了避免偏離本文的主題,我不會(huì)過多探究牛頓法的數(shù)學(xué)。相反,我將嘗試構(gòu)建牛頓法的直覺。

牛頓法可以提供向梯度方向移動(dòng)的理想步幅。由于我們現(xiàn)在具備了損失曲面的曲率信息,步幅可以據(jù)此確定,避免越過病態(tài)曲率的底部。

牛頓法通過計(jì)算Hessian矩陣做到這一點(diǎn)。Hessian矩陣是損失函數(shù)在所有權(quán)重組合上的二階導(dǎo)數(shù)的矩陣。

Hessian提供了損失曲面每一點(diǎn)上的曲率估計(jì)。正曲率意味著隨著我們的移動(dòng),損失曲面變得不那么陡峭了。負(fù)曲率則意味著,損失曲面變得越來越陡峭了。

注意,如果這一步的計(jì)算結(jié)果是負(fù)的,那就意味著我們可以切換回原本的算法。這對(duì)應(yīng)于下面梯度變得越來越陡峭的情形。

然而,如果梯度變得越來越不陡峭,那么我們也許正向病態(tài)曲率的底部移動(dòng)。這時(shí)牛頓算法提供了一個(gè)修正過的學(xué)習(xí)步幅,和曲率成反比。換句話說,如果損失曲面變得不那么陡峭,學(xué)習(xí)步幅就下降。

為何我們不常使用牛頓法?

你已經(jīng)看到公式中的Hessian矩陣了。Hessian矩陣需要我們計(jì)算損失函數(shù)在所有權(quán)重組合上的梯度。也就是說,需要做的計(jì)算的數(shù)量級(jí)是神經(jīng)網(wǎng)絡(luò)所有權(quán)重?cái)?shù)量的平方。

現(xiàn)代神經(jīng)網(wǎng)絡(luò)架構(gòu)的參數(shù)量可能是數(shù)億,計(jì)算數(shù)億的平方的梯度在算力上不可行。

雖然高階優(yōu)化方法在算力上不太可行,但二階優(yōu)化關(guān)于納入梯度自身如何改變的想法是可以借鑒的。雖然我們無法準(zhǔn)確計(jì)算這一信息,但我們可以基于之前梯度的信息使用啟發(fā)式算法引導(dǎo)優(yōu)化過程。

動(dòng)量

搭配SGD使用的一個(gè)非常流行的技術(shù)是動(dòng)量(Momentum)。動(dòng)量法不僅使用當(dāng)前的梯度,同時(shí)還利用之前的梯度提供的信息。

上面的第一個(gè)等式就是動(dòng)量,動(dòng)量等式由兩部分組成,第一項(xiàng)是上一次迭代的動(dòng)量,乘以“動(dòng)量系數(shù)”。

比如,假設(shè)我們將初始動(dòng)量v設(shè)為0,系數(shù)定為0.9,那么后續(xù)的更新等式為:

我們看到,后續(xù)的更新保留了之前的梯度,但最近的梯度權(quán)重更高。(致喜歡數(shù)學(xué)的讀者,這是梯度的指數(shù)平均。)

下面我們來看看動(dòng)量法如何幫助我們緩解病態(tài)曲率的問題。下圖中,大多數(shù)梯度更新發(fā)生在之字形方向上,我們將每次更新分解為w1和w2方向上的兩個(gè)分量。如果我們分別累加這些梯度的兩個(gè)分量,那么w1方向上的分量將互相抵消,而w2方向上的分量得到了加強(qiáng)。

也就是說,基于動(dòng)量法的更新,積累了w2方向上的分量,清空了w1方向上的分量,從而幫助我們更快地通往最小值。從這個(gè)意義上說,動(dòng)量法也有助于抑制振蕩。

動(dòng)量法同時(shí)提供了加速度,從而加快收斂。但你可能想要搭配模擬退火,以免跳過最小值。

在實(shí)踐中,動(dòng)量系數(shù)一般初始化為0.5,并在多個(gè)epoch后逐漸退火至0.9.

RMSProp

RMSProp,也就是均方根傳播的歷史很有趣。它是傳奇人物Geoffrey Hinton在Coursera授課時(shí)初次提出的。

RMSProp也試圖抑制振蕩,但采取的方法和動(dòng)量不同。此外,RMSProp可以自動(dòng)調(diào)整學(xué)習(xí)率。還有,RMSProp為每個(gè)參數(shù)選定不同的學(xué)習(xí)率。

在第一個(gè)等式中,類似之前的動(dòng)量法,我們計(jì)算了梯度平方的指數(shù)平均。由于我們?yōu)槊總€(gè)參數(shù)單獨(dú)計(jì)算,這里的梯度gt表示正更新的參數(shù)上的梯度投影。

第二個(gè)等式根據(jù)指數(shù)平均決定步幅大小。我們選定一個(gè)初始學(xué)習(xí)率η,接著除以平均數(shù)。在我們上面舉的例子中,w1的梯度指數(shù)平均比w2大得多,所以w1的學(xué)習(xí)步幅比w2小得多。這就幫助我們避免了脊間振蕩,更快地向最小值移動(dòng)。

第三個(gè)等式不過是權(quán)重更新步驟。

上面的等式中,超參數(shù)ρ一般定為0.9,但你可能需要加以調(diào)整。等式2中的ε是為了確保除數(shù)不為零,一般定為1e-10.

注意RMSProp隱式地應(yīng)用了模擬退火。在向最小值移動(dòng)的過程中,RMSProp會(huì)自動(dòng)降低學(xué)習(xí)步幅,以免跳過最小值。

Adam

Adam,即Adaptive Moment Optimization算法結(jié)合了動(dòng)量和RMSProp的啟發(fā)式算法。

這里,我們計(jì)算了梯度的指數(shù)平均和梯度平方的指數(shù)平均(等式1和等式2)。為了得出學(xué)習(xí)步幅,等式3在學(xué)習(xí)率上乘以梯度的平均(類似動(dòng)量),除以梯度平方平均的均方根(類似RMSProp)。等式4是權(quán)重更新步驟。

超參數(shù)β1一般取0.9,β2一般取0.99. ε一般定為1e-10.

結(jié)語

本文介紹了三種應(yīng)對(duì)病態(tài)曲率同時(shí)加速訓(xùn)練過程的梯度下降方法。

在這三種方法之中,也許動(dòng)量法用得更普遍,盡管從論文上看Adam更吸引人。經(jīng)驗(yàn)表明這三種算法都能收斂到給定損失曲面的不同的最優(yōu)局部極小值。然而,動(dòng)量法看起來要比Adam更容易找到比較平坦的最小值,而自適應(yīng)方法(自動(dòng)調(diào)整學(xué)習(xí)率)傾向于迅速地收斂于較尖的最小值。比較平坦的最小值概括性更好。

盡管這些方法有助于我們馴服深度網(wǎng)絡(luò)難以控制的損失平面,隨著網(wǎng)絡(luò)日益變深,它們開始變得不夠用了。除了選擇更好的優(yōu)化方法,有相當(dāng)多的研究試圖尋找能夠生成更平滑的損失曲面的架構(gòu)。批量歸一化(Batch Normalization)和殘差連接(Residual Connections)正是這方面的兩個(gè)例子。我們會(huì)在后續(xù)的文章中詳細(xì)介紹它們。但這篇文章就到此為止了

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

原文標(biāo)題:深度學(xué)習(xí)優(yōu)化算法入門:二、動(dòng)量、RMSProp、Adam

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    節(jié)點(diǎn)電壓和回路電流的選取原則

    節(jié)點(diǎn)電壓和回路電流是電路分析中兩種常用的方法。它們各有優(yōu)缺點(diǎn),適用于不同的電路類型和分析需求,它們的選擇原則主要基于電路的特性和求解的便利性。以下是對(duì)這兩種方法選取原則的介紹: 節(jié)點(diǎn)電壓
    的頭像 發(fā)表于 08-09 17:22 ?957次閱讀

    回路電流和節(jié)點(diǎn)電壓適用范圍

    回路電流和節(jié)點(diǎn)電壓是電路分析中兩種常用的方法,它們各自具有不同的適用范圍和優(yōu)勢(shì)。 回路電流適用范圍 回路電流,簡稱回路,是以回路電
    的頭像 發(fā)表于 08-09 17:18 ?862次閱讀

    回路電流和支路電流的實(shí)質(zhì)是什么

    回路電流和支路電流是電路分析的兩種基本方法,它們?cè)陔娐吩O(shè)計(jì)和分析中具有重要的應(yīng)用價(jià)值。 一、引言 電路是電子技術(shù)的基礎(chǔ),而電路分析則是電路設(shè)計(jì)和應(yīng)用的關(guān)鍵。在電路分析中,有兩種基本的方法:回路
    的頭像 發(fā)表于 08-09 17:13 ?488次閱讀

    深入淺出系列之代碼可讀性

    原創(chuàng)聲明:該文章是個(gè)人在項(xiàng)目中親歷后的經(jīng)驗(yàn)總結(jié)和分享,如有搬運(yùn)需求請(qǐng)注明出處。 這是“深入淺出系列”文章的第一篇,主要記錄和分享程序設(shè)計(jì)的一些思想和方法論,如果讀者覺得所有受用,還請(qǐng)“一鍵三連
    的頭像 發(fā)表于 08-09 16:00 ?204次閱讀

    深入淺出理解三極管

    記憶(比如在介紹相對(duì)論中引力扭曲時(shí)空的概念時(shí),國外科學(xué)家們就用生活中的漩渦,或者在彈性膜中間的重球,來類比星體引力對(duì)時(shí)空的影響,這樣會(huì)大大簡化我們學(xué)習(xí)、理解和記憶的過程,這種學(xué)習(xí)方法被稱為類比學(xué)習(xí))。 我們
    的頭像 發(fā)表于 02-23 08:41 ?585次閱讀
    <b class='flag-5'>深入淺出</b>理解三極管

    【年度精選】2023年度top5榜單——電機(jī)控制資料

    讀懂PID控制算法(拋棄公式,從原理上真正理解PID控制) 作者:ben111 下載量:360 推薦理由: 這篇資料從原理上深入淺出地解釋PID控制算法,讓讀者真正理解其核心
    發(fā)表于 01-16 14:34

    深入淺出Yolov3和Yolov4

    Yolov3是目標(biāo)檢測(cè)Yolo系列非常非常經(jīng)典的算法,不過很多同學(xué)拿到Y(jié)olov3或者Yolov4的cfg文件時(shí),并不知道如何直觀的可視化查看網(wǎng)絡(luò)結(jié)構(gòu)。
    的頭像 發(fā)表于 01-11 10:42 ?677次閱讀
    <b class='flag-5'>深入淺出</b>Yolov3和Yolov4

    深入淺出理解PagedAttention CUDA實(shí)現(xiàn)

    vLLM 中,LLM 推理的 prefill 階段 attention 計(jì)算使用第三方庫 xformers 的優(yōu)化實(shí)現(xiàn),decoding 階段 attention 計(jì)算則使用項(xiàng)目編譯 CUDA 代碼實(shí)現(xiàn)。
    的頭像 發(fā)表于 01-09 11:43 ?1558次閱讀
    <b class='flag-5'>深入淺出</b>理解PagedAttention CUDA實(shí)現(xiàn)

    半導(dǎo)體發(fā)布STM32 ZeST*(零速滿轉(zhuǎn)矩)軟件算法

    半導(dǎo)體發(fā)布STM32 ZeST*(零速滿轉(zhuǎn)矩)軟件算法。該算法運(yùn)行在STM32微控制器上,讓無感電機(jī)驅(qū)動(dòng)器能夠在零轉(zhuǎn)速時(shí)產(chǎn)生最大轉(zhuǎn)矩。
    的頭像 發(fā)表于 12-26 09:21 ?1305次閱讀

    javascript深入淺出介紹

    JavaScript是一種廣泛使用的腳本語言,用于開發(fā)互聯(lián)網(wǎng)應(yīng)用程序。它非常受歡迎,因?yàn)樗梢杂糜诰W(wǎng)頁開發(fā),服務(wù)器端開發(fā)以及移動(dòng)應(yīng)用程序開發(fā)。本文將深入淺出介紹JavaScript的各個(gè)方面,包括
    的頭像 發(fā)表于 12-03 11:09 ?5.7w次閱讀

    節(jié)點(diǎn)電壓實(shí)際應(yīng)用有哪些

    的模擬等。下面將詳細(xì)介紹節(jié)點(diǎn)電壓在實(shí)際應(yīng)用中的幾個(gè)典型例子。 一、電力系統(tǒng)的分析 在電力系統(tǒng)中,節(jié)點(diǎn)電壓被廣泛應(yīng)用于電力系統(tǒng)的分析、設(shè)計(jì)和優(yōu)化。例如,通過節(jié)點(diǎn)電壓
    的頭像 發(fā)表于 11-24 11:44 ?1972次閱讀

    python牛頓迭代

    軸的交點(diǎn)處得到近似解。通過不斷迭代切線與x軸的交點(diǎn),可以逐漸接近方程的解。牛頓迭代在數(shù)學(xué)和工程領(lǐng)域有廣泛的應(yīng)用,如求根、優(yōu)化等問題。 牛頓迭代
    的頭像 發(fā)表于 11-21 15:06 ?871次閱讀

    《網(wǎng)絡(luò)安全》、CRA與開源——“心寄源”法律沙龍2023第七期 | 總第十二期成功召開

    近日,“心寄源”法律沙龍2023第七期 | 總第十二期在開放原子開源基金會(huì)成功舉辦。本期沙龍邀請(qǐng)到了國浩律師(南京)事務(wù)所的陶冶律師,圍繞前沿?zé)狳c(diǎn)話題“《網(wǎng)絡(luò)安全》、CRA與開源”進(jìn)行了深入淺出
    的頭像 發(fā)表于 11-17 20:25 ?855次閱讀

    javascript深入淺出

    JavaScript是一種廣泛使用的編程語言,常用于Web開發(fā)。下面是對(duì)JavaScript的深入淺出的解釋: JavaScript簡介 JavaScript是一種解釋型、動(dòng)態(tài)類型、基于原型的語言
    的頭像 發(fā)表于 11-16 10:34 ?2188次閱讀

    Linux內(nèi)核slab性能優(yōu)化的核心思想

    今天分享一篇內(nèi)存性能優(yōu)化的文章,文章用了大量精美的圖深入淺出地分析Linux內(nèi)核slab性能優(yōu)化的核心思想,slab是Linux內(nèi)核小對(duì)象內(nèi)存分配最重要的
    的頭像 發(fā)表于 11-13 11:45 ?546次閱讀
    Linux內(nèi)核slab性能<b class='flag-5'>優(yōu)化</b>的核心思想