10個梯度下降優化算法+備忘單

2021-01-18 雷鋒網

原標題 | 10 Gradient Descent Optimisation Algorithms + Cheat Sheet

作者 | Raimi Karim in Towards Data Science

譯者 | 史蒂芬•二狗子(瀋陽化工大學)、intelLigenJ(算法工程師)、星期五、萊特•諾頓、滄海一升

本文編輯:王立魚

英語原文:https://towardsdatascience.com/10-gradient-descent-optimisation-algorithms-86989510b5e9

梯度下降是一種尋找函數極小值的優化方法,在深度學習模型中常常用來在反向傳播過程中更新神經網絡的權值。

在這篇文章中,我會總結應用在目前較為流行深度學習框架中的常見梯度下降算法(如TensorFlow, Keras, PyTorch, Caffe)。本文之目的是為了方便理解和掌握這些內容,因為除此之外總結並不多,而且它可以作為你從零基礎入門的「小抄」。

在一個線性回歸問題中,我已經用梯度下降實現了SGD, momentum, Nesterov, RMSprop 以及Adam,獲取代碼(JavaScript)

通過梯度下降,優化算法可以在如下三個主要方面起作用:

1、修改學習率成分,α, 或

2、修改梯度成分 ∂L/∂w

3、或二者兼有

且看如下方程1:

方程1:隨機梯度下降中的各種量

學習率調度器vs梯度下降優化
主要的不同在於梯度下降優化讓學習率乘以一個因子,該因子是梯度的函數,以此來調整學習率成分,然而學習率調度器讓學習率乘以一個恆為常數或是關於時間步幅的函數的因子,以此來更新學習率。

第1種方法主要通過在學習率(learning rate)之上乘一個0到1之間的因子從而使得學習率降低(例如RMSprop)。第2種方法通常會使用梯度(Gradient)的滑動平均(也可稱之為「動量」)而不是純梯度來決定下降方向。第3種方法則是結合兩者,例如Adam和AMSGrad。

Fig.2:各類梯度下降優化算法、其發表年份和用到的核心思路。

Fig.3 自上而下展示了這些優化算法如何從最簡單的純梯度下降(SGD)演化成Adam的各類變種的。SGD一開始分別往兩個方向演變,一類是AdaGrad,主要是調整學習率(learning rate)。另一類是Momentum,主要調整梯度(gradient)的構成要素(譯註:原文此處寫反了)。隨著演化逐步推進,Momentum和RMSprop融為一體,「亞當」(Adam)誕生了。你可能覺得我這樣的組織方式抱有異議,不過我目前一直是這樣理解的。

Fig.3:各類優化算法的演化圖(gist)

  1. 隨機梯度下降(Stochastic Gradient Descend)

最原始的隨機梯度下降算法主要依據當前梯度∂L/∂w乘上一個係數學習率α來更新模型權重w的。

動量算法使用帶有動量的梯度(梯度的指數滑動平均,Polyak, 1964)而不是當前梯度來對w進行更新。在後續的文章中你會看到,採用指數滑動平均作為動量更新的方式幾乎成為了一個業內標準。

其中

並且V初始化值為0。β一般會被設置為0.9。

值得注意的是,很多文章在引用Momemtum算法時會使用Ning Qian, 1999的文章。但這個算法的原出處為Sutskever et al。而經典動量算法在1964年就被Polyak提出了,所以上文也引用了Polyak的文章。(感謝James指出了這一點)

在Polyak提出了動量法之後(雙關:Polyak勢頭正盛),一個使用Nesterov加速梯度下降法(Sutskever et al., 2013)的類似更新方法也被實現了。此更新方法使用V,即我稱之為投影梯度的指數移動平均值。

其中

且V 初始化為0。

第二個等式中的最後一項就是一個投影梯度。這個值可以通過使用先前的速度「前進一步」獲得(等式4)。這意味著對於這個時間步驟t,我們必須在最終執行反向傳播之前執行另一個前向傳播。這是步驟:

1.使用先前的速度將當前權重w更新為投影權重w* 

 

(等式4)

2. 使用投影權重計算前向傳播

3.獲得投影梯度∂L/∂w* 

4.計算相應的V和w

常見的默認值:

請注意,原始的Nesterov 加速梯度下降法論文( Nesterov, 1983  )並不是關於隨機梯度下降,也沒有明確使用梯度下降方程。因此,更合適的參考是上面提到的Sutskever等人的出版物。在2013年,它描述了NAG在隨機梯度下降中的應用。(再一次,我要感謝James對HackerNews的評論中指出這一點。)

自適應梯度算法,也稱AdaGrad算法(Duchi等,2011),通過將學習率除以S的平方根來研究學習率分量,其中S為當前和過去平方梯度的累積和(即直到時間t)。請注意,和SGD算法相同,自適應學習率算法中的梯度分量也保持不變。

其中,

並將S的初始值置0.

請注意,這裡在分母中添加了ε。Keras稱之為模糊因子,它是一個小的浮點值,以確保我們永遠不會遇到除零的情況。

默認值(來自Keras):

均方根傳遞算法,也稱RMSprop算法(Hinton等,2012),是在AdaGrad算法上進行改進的另一種自適應學習率算法。 它使用指數加權平均計算,而不是使用累積平方梯度和。

其中,

並將S的初始值置0.

默認值(來自Keras):

α = 0.001

β = 0.9 (本文作者推薦)

ε = 10⁻⁶

與RMSprop算法類似,Adadelta(Zeiler,2012)是在AdaGrad算法的基礎上針對學習率進行改進的一種自適應算法。Adadelta應該是是「自適應增量」的縮寫,其中,delta表示當前權重與新更新權重之間的差值。

Adadelta算法和RMSprop算法的區別,在於Adadelta算法中用delta的指數加權平均值D來替代原來在Adadelta算法中的學習率參數。

其中,

並把D和S的初始值置0. 此外,

默認值(來自Keras):

適應矩估計算法,也稱Adam算法(Kingma&Ba,2014),是一種將動量和RMSprop結合使用的算法。它通過
(i) 使用梯度分量V,梯度的指數移動平均值(如動量)和
(ii)將學習率α除以S的平方根,平方梯度的指數移動平均值(如在RMSprop中)來學習率分量而起作用。

其中

是偏差修正,並有

V和S的初始值置0.

作者推薦的默認值:

α = 0.001

β₁ = 0.9

β₂ = 0.999

ε = 10⁻⁸

AdaMax(Kingma&Ba,2015)是使用無限範圍(因此為'max')的由Adam算法的原作者們對其優化器進行改編的一種算法。V是梯度的指數加權平均值,S是過去p階梯度的指數加權平均值,類似於最大函數,如下所示(參見論文收斂證明)。

其中

是對V的偏差修正,並有

V和S的初始值置0.

作者推薦的默認值:

α = 0.002

β₁ = 0.9

β₂ = 0.999

Nadam一詞由(Dozat,2015)是Nesterov和Adam優化器的名稱拼接而成。Nesterov組件在Nadam算法中對學習率產生了更強的約束,同時對梯度的更新也有更直接的影響。一般而言,在想使用帶動量的RMSprop,或者Adam的地方,大多可以使用Nadam取得更好的效果。 

Adam優化器也可以寫成:

公式5:Adam優化器的權重更新

Nadam利用Nesterov通過將上面等式中的前一時刻的V_hat替換為當前時刻的V_hat,實現了提前一步更新梯度:

其中

並有

V和S初始值置0.

默認值(取自Keras):

α = 0.002

β₁ = 0.9

β₂ = 0.999

ε = 10⁻⁷

Adam算法的另一個變體是AMSGrad算法(Reddi等,2018)。該算法重新訪問Adam中的自適應學習速率組件並對其進行更改以確保當前S始終大於前一時間步長。

其中

此外

V和S初始值置0.

默認值(取自Keras):

α = 0.001

β₁ = 0.9

β₂ = 0.999

ε = 10⁻⁷

我想和你們分享一些直觀的見解,為什麼梯度下降法優化器對梯度部分使用的是指數移動平均值(EMA),對學習率部分使用均方根(RMS)。

為什麼要對梯度取指數移動平均? 

我們需要使用一些數值來更新權重。我們唯一有的數值呢就是當前梯度,所以讓我們利用它來更新權重。

但僅取當前梯度值是不夠好的。我們希望我們的更新是(對模型來說,是)「更好的指導」。讓我們考慮(每次更新中)包括之前的梯度值。

將當前梯度值和過去梯度信息的結合起來一種方法是,我們可以對過去和現在的所有梯度進行簡單的平均。但這意味著每個梯度的權重是相等的。這樣做是反直覺的,因為在空間上,如果我們正在接近最小值,那麼最近的梯度值可能會提供更有效的信息。

因此,最安全的方法是採用指數移動平均法,其中最近的梯度值的權重(重要性)比前面的值高。

為什麼要把學習速率除以梯度的均方根呢?

這個目的是為了調整學習的速率。調整為了適應什麼?答案是梯度。我們需要確保的是,當梯度較大時,我們希望更新適當縮小(否則,一個巨大的值將減去當前的權重!) 

為了到達這種效果,讓我們學習率α除以當前梯度得到一個調整學習速率。  

請記住,學習率成分必須始終是正的(因為學習率成分,當乘以梯度成分,後者應該有相同的符號)。為了確保它總是正的,我們可以取它的絕對值或者它的平方。當我們取當前梯度的平方,可以再取平方根"取消"這個平方。

但是就像動量的思路一樣,僅僅採用當前的梯度值是不夠好的。我們希望我們的訓練中的(每次)更新update都能更好的指導(模型)。因此,我們也需要使用之前的梯度值。正如上面所討論的,我們取過去梯度的指數移動平均值('mean square') ,然後取其平方根('root') ,也就是'均方根'(RMS)。除了 AdaGrad (採用累積的平方梯度之和)之外,本文中所有的優化器都會對學習速率部分進行優化。

(上述要點)

如果有什麼不妥之處,或者如果這篇文章中的內容可以再改進,請與我聯繫!?

梯度下降優化算法概述(ruder.io)

為什麼Momentum真的有效
這是一個關於動量的流行故事:梯度下降是一個人走在山上。 

感謝Ren Jie,Derek,William Tjhi,Chan Kai,Serene和James對本文的想法,建議和更正。

想要繼續查看該篇文章相關連結和參考文獻?雷鋒網雷鋒網雷鋒網(公眾號:雷鋒網)

點擊【10個梯度下降優化算法+備忘單】即可訪問:

免費贈送課程啦~「好玩的Python:從數據挖掘到深度學習」該課程涵蓋了從Python入門到CV、NLP實踐等內容,是非常不錯的深度學習入門課程,共計9節32課時,總長度約為13個小時。。現AI研習社將此課程免費開放給社區認證用戶,只要您在認證時在備註框裡填寫「Python」,待認證通過後,即可獲得該課程全部解鎖權限。心動不如行動噢~

課程頁面:https://ai.yanxishe.com/page/domesticCourse/37

認證方式:https://ai.yanxishe.com/page/blogDetail/11609


相關焦點

  • 深度| 如何理解深度學習的優化?通過分析梯度下降的軌跡
    /http://www.offconvex.org/2016/03/24/saddles-again/他們描述了梯度下降可以如何通過逃避所有的嚴格鞍點來達到二階局部最小值(Hessian 為正半定的臨界點),並還描述了當將擾動加入到該算法時這個過程是如何有效的。
  • Adam 優化算法詳解
    據牛津字典的定義,優化是指最好或最有效地利用一種情況或資源,或者簡單地使自己的事物達到最佳狀態的行為。 通常,如果可以對某事進行數學建模,則很有可能可以對其進行優化。 這在深度學習領域起著至關重要的作用(可能是整個人工智慧),因為您選擇的優化算法可能是在數分鐘,數小時或數天(有時甚至是數周)內獲得高質量結果的區別。
  • 線性回歸和梯度下降的初學者教程
    這就是為什麼我們需要使用梯度下降。梯度下降是一種找到最佳擬合線的工具。在深入研究梯度下降之前,先看看另一種計算最佳擬合線的方法。接下來讓我們研究梯度下降。計算最佳擬合線的梯度下降法:在使用梯度下降法時,我們從一條隨機線開始,一點一點地改變直線的參數(即斜率和y軸截距),以得到最佳擬合的直線。那麼我們怎麼知道什麼時候到達最合適的位置呢?
  • 直接對梯度下手,阿里提出新型優化技巧,一行代碼即可改善現有優化器
    DNN 優化技術——梯度中心化(GC)。如圖 1(a) 所示,GC 只是通過中心化梯度向量使其達到零均值。只需要一行代碼,即可將其輕鬆嵌入到當前基於梯度的優化算法(如 SGDM、Adam)。儘管簡單,但 GC 達到了多個期望效果,比如加速訓練過程,提高泛化性能,以及對於微調預訓練模型的兼容性。
  • 文科生都能看懂的機器學習教程:梯度下降、線性回歸、邏輯回歸
    舉個例子。你正在應聘機器學習工程師,面對的是文科出身的HR,如果能在最短時間內讓她了解你的專業能力,就能極大地提升面試成功率。現在,機器學習這麼火,想入行的人越來越多,然而被搞糊塗的人也越來越多。因為大眾很難理解機器學習是幹嗎的?那些神秘拗口的概念,比如邏輯回歸、梯度下降到底是什麼?
  • 淺談ICA算法的概念、本質和流程
    ICA理論基礎: ICA理論基礎如下: 1)標準正交基 2)白化 3)梯度下降 ICA目標函數: ICA的目標函數如下:  樣本數據 x 經過參數矩陣 W 線性變換後的結果的L1範數,實際上也就是描述樣本數據的特徵。
  • 二階梯度優化新崛起,超越 Adam,Transformer 只需一半迭代量
    目前,無論是從理論還是應用層面來說,機器學習中的優化都是以隨機梯度下降等一階梯度方法為主。囊括二階梯度和/或二階數據統計的二階優化方法雖然理論基礎更強,但受限於計算量、內存和通信花銷等因素,二階梯度優化方法的普及度不高。可能你用各種框架搭建過各種神經網絡,同時也嘗試過調用 Adam、AdaGrad、SGD+Momentum 等形形色色的最優化器。
  • 梳理數百個問題後,我總結出10個數據科學面試必掌握概念……
    在梳理了數百個數據科學面試問題之後,本文總結出了10個最常出現的深度學習概念。話不多說,讓我們開始吧!ReLU函數優於S型函數和雙曲正切函數函數,因為它執行梯度下降的速度更快。請注意,在圖像中,當x(或z)很大時,斜率非常小,這會顯著減緩梯度下降,但這種情況不會出現在ReLU函數中。2.代價函數(Cost Function)神經網絡的代價函數類似於其他機器學習模型的成本函數。它衡量的是神經網絡的預測值與實際值相比有多「好」。
  • 梯度向量的意義與運用
    現在我們已經對向量有了基本的了解,讓我們來談談梯度向量。梯度向量無論維數如何,梯度向量是一個包含了函數的所有一階偏導數的向量。讓我們計算以下函數的梯度…梯度記為也可以標記為:這是函數f(x, y)的梯度向量,但有什麼意義呢?梯度向量能做什麼——它到底意味著什麼?
  • 基於ADCensus的改進雙目立體匹配算法
    匹配的正確性直接關係到深度圖計算的準確 性,所以,如何優化及聚合匹配代價使匹配算法有更高 的匹配率,是匹配算法優化的首要目標[3]。本文保留了 ADCensus中匹配代價的聚合方法,在AD算法匹配代價 的部分中加入了圖像像素梯度信息作為灰度信息的補 充,提出了結合圖像像素梯度、灰度的ADCensus匹配 算法。
  • 集齊葉蔭宇、藍光輝、陳溪、李建、王子卓的大牛圓桌會,關於算法...
    反過來,AI 也對算法優化領域提供了一條新的思路:以前我認為要搞出個萬能的算法,解所有的線性規劃都能解得快,但是後來反觀 AI 研究者的思維並非這樣,它是非常定製的,什麼方法對某一類問題用的好就用那個方法,不追求某一個統一的算法,或者類別法。所以這點上,AI 對我們的思維有所改變。
  • 深度學習中7種最優化算法的可視化與理解
    *x)/3 + np.cos(5*x)/5 + np.sin(7*x)/7def df(x): return (9/200)*x - np.sin(x) -np.sin(5*x) + np.cos(3*x) + np.cos(7*x)points_x = np.linspace(-20, 20, 1000)points_y = f(points_x)# 純粹的梯度下降法
  • 百度搜尋引擎算法一共有哪些?優化網站需要著重注意哪些算法?
    百度搜尋引擎算法一共有哪些?優化網站需要著重注意哪些算法?  曾幾何時,從來不相信百度的算法有那樣的神奇,但是百度確針對這一系列的算法做出了公告與K站降權的舉動,於是對於小編這樣技術控來說不得不仔細分析百度算法的原理。以下是小編整理的相關資料,希望能與同道中人共同探討有價值的東西。
  • ICML 2020|提升神經網絡架構搜索穩定性,UCLA提出新型NAS算法
    為了支持梯度下降,DARTS 對於搜索空間做了連續化近似,並始終在優化一組連續可微的框架權重 A。但是在生成最終框架時,需要將這個權重離散化。本研究作者觀察到這組連續框架權重 A 在驗證集上的損失函數非常不平滑,DARTS 總是會收斂到一個非常尖銳的區域。因此對於 A 輕微的擾動都會讓驗證集性能大幅下降,更不用說最終的離散化過程了。
  • 基於PPO強化學習算法的AI成功拿下29個關卡!
    近端策略優化算法(PPO)已成為深度強化學習基於策略中效果最優的算法之一。有關該算法的論文已經發布在arXiv預印論文庫中。論文中指出,PPO是一種新型的策略梯度(Policy Gradient)算法,它提出新的「目標函數」可以進行多個訓練步驟,實現小批量的更新,解決PG算法中步長難以確定的問題。
  • 人工智慧的本質是一串算法?美國「愛奇藝」優化AI算法多賺10億!
    AI的基礎是「算法」,即計算機遵循的一組規則或指令。機器學習(ML)可以定義為「無需依賴基於規則的編程即可從數據中進行學習的算法」。網際網路基於算法運行,所有在線搜索均通過算法完成。藉助算法,電子郵件知道發去哪裡。
  • 熊貓算法對谷歌優化的意義
    …多問自己幾個問題,我估計大部分同學會打消文章外包的念頭)熊貓算法 2.0版本這一次的算法更新於第一個版本2個月之後,主要針對的是不同版本的谷歌搜尋引擎自然排名結果。因為第一版的 熊貓算法 只是在美國谷歌也就是(google.com)上調整排名算法,而且取得了非常好的效果。
  • SEO算法:巴郎深談石榴算法與算法對策
    這套算法的出臺最終目的有 2 個:1.規範白帽SEO走向正規SEO發展到這時期,已經在中國發展 11 年了,其間SEO行業經歷了野蠻生長期,撿錢期,SEM大表哥誕生期,黑帽SEO盛行期,站群農場期,然後進入歷史調整期。
  • 案例實踐丨最優化算法的前世今生
    凸優化問題的經典算法對於凸優化的問題,黃鉑博士給大家介紹幾個最經典的算法。第一個算法,最速下降法。首先,我們看下圖,這是一個等高線,我們可以把它理解為我們的高樓,每一個圈代表一層,最中心是最高的位置,我們最終目標是用最快的方式上到中心位置。
  • 杉數科技高季堯:定製優化算法——為複雜商業問題「量體裁衣」 |...
    ,優化思想已經應用到商業、生產、乃至生活的方方面面,在本次公開課中,講者結合生活場景普及運籌優化的思想,並藉助優化問題和具體案例深入剖析定製化算法所能帶來的巨大價值。=Leiphone分享主題:定製優化算法:為複雜商業問題「量體裁衣」分享提綱:何為運籌優化生活中的優化思想優化算法概述MILFP 問題的高效定製算法其他案例分享雷鋒網 AI 研習社將其分享內容整理如下: