梯度下降優(yōu)化方法概述

梯度下降是優(yōu)化神經網絡和機器機器學習算法的首選優(yōu)化方法跛璧。本文重度參考SEBASTIAN RUDER的文章。對于英文比較好的同學請直接閱讀原文。本文只為個人的學習總結,難免有所欠缺和不足镐依。

一、梯度下降變種

根據訓練數(shù)據集的大小,梯度下降有三種變體僻他,但是本質是一樣的,不一樣的是每次使用多少條樣本腊尚。如果內存一次可以計算所有樣本的梯度吨拗,稱為:批梯度下降(Batch gradient descent);如果內存一次只允許一個樣本婿斥,稱為:隨機梯度下降(Stochastic gradient descent)劝篷;大部分時候,內存一次是可以計算部分樣本的民宿,稱為:最小批梯度下降(Mini-batch gradient descent)娇妓。三種變體的數(shù)據表達如下:

1.1批梯度下降(Vanilla gradient descent,又稱Batch gradient descent)

\theta = \theta - \eta \cdot \nabla_\theta J( \theta)

1.2隨機梯度下降(Stochastic gradient descent)

\theta = \theta - \eta \cdot \nabla_\theta J( \theta; x^{(i)}; y^{(i)})

1.3最小批梯度下降(Mini-batch gradient descent)

\theta = \theta - \eta \cdot \nabla_\theta J( \theta; x^{(i:i+n)}; y^{(i:i+n)})

注意,在其他地方并沒對上述三種變體做嚴格區(qū)別勘高,統(tǒng)稱為SGD(隨機梯度下降)峡蟋,下文其余部分,我們也不加區(qū)分华望,統(tǒng)稱為SGD

二蕊蝗、梯度下降的幾種優(yōu)化方法

傳統(tǒng)的梯度下降法不能保證一個很好的收斂,而且有一些挑戰(zhàn)需要被解決赖舟。

  1. 選擇這個合適的學習率是比較困難的蓬戚。特別是對一個新的模型和新數(shù)據集時候,我們是不知道選擇什么樣的學習率是合適的宾抓。只能不斷的去嘗試子漩。
  2. 學習率調度算法可以在訓練的過程中去調整模型的學習率。模型一開始的時候可以使用大一點的學習率石洗,后面再使用小一點的學習率去微調模型幢泼。更好的方法是一開始也用一個小的學習率去warm-up訓練,讓參數(shù)先適應數(shù)據集讲衫。但是無論哪種學習率調度算法都需要預先定義調度算法缕棵,這種方法也是沒有辦法很好的適應模型的特征的、
  3. 對每一個參數(shù)都使用同樣的學習率是不合適的涉兽。對于稀疏的數(shù)據或者特征非常不均衡的數(shù)據招驴。最好是使用不同學習率學習不同頻率的特征。
  4. 另外的挑戰(zhàn)是對于高階非凸的損失函數(shù)枷畏,往往會陷于局部極值點别厘。還有一種鞍點的情況,模型也是很難學習的拥诡。此時損失函數(shù)在各個方向的梯度接近于0触趴。SGD是很難逃脫與鞍點或者局部極值點的氮发。

針對上面的一些問題,慢慢出現(xiàn)了一些針對梯度下降的優(yōu)化方法雕蔽。
在介紹SGD變種之前折柠。先給出各個變種的一般范式。后天的各個變種優(yōu)化方法都離不開這個范式批狐。

(1)計算目標函數(shù)關于參數(shù)的梯度

g_t = \nabla_\theta J( \theta)

(2)根據歷史梯度計算一階和二階動量(二階指的是梯度的平方)
m_t = \phi(g_1, g_2, ..., g_t) \\ v_t = \psi(g_1, g_2, ..., g_t)

(3)更新模型參數(shù)
\theta_{t+1}=\theta_t-\frac{1}{\sqrt{v_t+\epsilon}}m_t

2.1 動量法(Momentum)

v_t = \gamma v_{t-1} + \eta \nabla_\theta J( \theta) \\ \theta = \theta - v_t

做一個簡單的推導扇售。

image.png

發(fā)現(xiàn),參數(shù)\theta每次的更新量為之前的梯度和乘以一個常量嚣艇。下圖坐標是樸樹SGD的圖示承冰,右邊是加上動量的SGD圖示。發(fā)現(xiàn)在水平方向得到了加速食零,在豎直方向得到了收斂困乒。所以如果之前1到t-1時刻的梯度方向比較一致,那么加了動量的SGD會在這個方向加速贰谣;如果之前時刻的梯度方向不太一致娜搂,或者說抖動的比較厲害;那么加了動量的SGD會在這個方向減速吱抚,也就是以更小的速度更新參數(shù)百宇。
image.png

Adagrad

SGD、SGD-M都是相同的學習率更新參數(shù)秘豹。但是對于高頻出現(xiàn)的特征我們希望用更小的學習率更新參數(shù)携御。所以提出了自適應梯度更新方法Adagrad。Adagrad對于低頻出現(xiàn)的特征我們希望用更大的學習率更新參數(shù)既绕。所以在稀疏數(shù)據的場景下Adagrad表現(xiàn)較好啄刹。Adagrad中的ada是adapt(自適應)的意思

\theta_{t+1, i} = \theta_{t, i} - \dfrac{\eta}{\sqrt{G_{t, ii} + \epsilon}} \cdot g_{t, i}

其中G_{t,ii}表示\theta過去所有時刻梯度平方和,注意分母是帶根號的凄贩,不帶根號效果會很差誓军。
缺點:分母會越來越大,導致最后的學習率是無窮小的值疲扎。這樣模型就學不到東西了谭企。

RMSprop

E[g^2]_t = 0.9E[g^2]_{t-1} + 0.1g^2_t \\ \theta_{t+1} = \theta_{t} - \dfrac{\eta}{\sqrt{E[g^2]_t} + \epsilon} g_t
從表達是可以看出RMSprop是為了解決Adagrad中學習率會越來越小的問題。RMSprop處理使用之前的累計額梯度平方和還使用了當前時刻的梯度平方评肆。這樣就會防止學習率越來越小。

Adam

Adam可以認為是RMSprop和Momentum的結合非区。

m_t = \beta_1 m_{t-1} + (1 - \beta_1) g_t \\ v_t = \beta_2 v_{t-1} + (1 - \beta_2) g_t^2

其中m_0=0, v_0=0
由于\beta_1, \beta_2都是趨向于1的數(shù)瓜挽,所以開始時刻m_t,v_t趨向于0的一端,導致一開始的時候梯度很小征绸。所以作者Adam對上面的公式做了偏差矯正(bias-corrected)久橙。公式如下

\hat{m}_t = \dfrac{m_t}{1 - \beta^t_1} \\ \hat{v}_t = \dfrac{v_t}{1 - \beta^t_2}

即在原來的基礎上除以1-\beta^t俄占。 那么\hat{m}_0=g_1, 隨著t的變大,1-\beta^t趨向于1淆衷。即\hat{m}_t趨向于m_t缸榄。
最終參數(shù)更新表達如下:

\theta_{t+1} = \theta_{t} - \dfrac{\eta}{\sqrt{\hat{v}_t} + \epsilon} \hat{m}_t

所以理論上Adam優(yōu)化方法是比較好的優(yōu)化方法。即加了動量祝拯,針對不同參數(shù)又使用了不同的學習率甚带。當時在目前很多開源的代碼中,很多了大佬還是使用了SGD-M方法佳头,并沒有使用Adam鹰贵。關于這一點歡迎大家一起討論。

放一張經典的圖

contours_evaluation_optimizers.gif
v2-4a3b4a39ab8e5c556359147b882b4788_b.gif

參考文獻

  1. An overview of gradient descent optimization algorithms
  2. 從 SGD 到 Adam —— 深度學習優(yōu)化算法概覽(一)
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末康嘉,一起剝皮案震驚了整個濱河市碉输,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌亭珍,老刑警劉巖敷钾,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異肄梨,居然都是意外死亡阻荒,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門峭范,熙熙樓的掌柜王于貴愁眉苦臉地迎上來财松,“玉大人,你說我怎么就攤上這事纱控×菊保” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵甜害,是天一觀的道長舶掖。 經常有香客問我,道長尔店,這世上最難降的妖魔是什么眨攘? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮嚣州,結果婚禮上鲫售,老公的妹妹穿的比我還像新娘。我一直安慰自己该肴,他們只是感情好情竹,可當我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著匀哄,像睡著了一般秦效。 火紅的嫁衣襯著肌膚如雪雏蛮。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天阱州,我揣著相機與錄音挑秉,去河邊找鬼。 笑死苔货,一個胖子當著我的面吹牛犀概,可吹牛的內容都是我干的。 我是一名探鬼主播蒲赂,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼阱冶,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了滥嘴?” 一聲冷哼從身側響起木蹬,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎若皱,沒想到半個月后镊叁,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡走触,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年晦譬,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片互广。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡敛腌,死狀恐怖,靈堂內的尸體忽然破棺而出惫皱,到底是詐尸還是另有隱情像樊,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布旅敷,位于F島的核電站生棍,受9級特大地震影響,放射性物質發(fā)生泄漏媳谁。R本人自食惡果不足惜涂滴,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望晴音。 院中可真熱鬧柔纵,春花似錦、人聲如沸锤躁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至加缘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間觉啊,已是汗流浹背拣宏。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留杠人,地道東北人勋乾。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像嗡善,于是被迫代替她去往敵國和親辑莫。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內容