花書《深度學(xué)習(xí)》《Deep Learning》學(xué)習(xí)筆記chapter 6

第6章在泛泛而談,初學(xué)者感覺很難了解到實(shí)際性的東西签财,不過也根據(jù)章節(jié)結(jié)構(gòu)結(jié)合相關(guān)資料做下梳理。

6.1 XOR

**

6.2 基于梯度的學(xué)習(xí)

參考鏈接:An overview of gradient descent optimization algorithms

梯度下降法:

擬合函數(shù):h(x)

損失函數(shù)J(\theta)

梯度:\frac{\partial{J(\theta)}}{\partial\theta}

迭代過程:沿著負(fù)梯度方向更新參數(shù)\theta = \theta - \alpha*\frac{\partial{J(\theta)}}{\partial\theta}疮鲫,其中\alpha為學(xué)習(xí)率(learning rate)或稱步長残揉,直到達(dá)到終止條件。

(1)三種梯度下降變體

a.全量梯度下降法(Batch gradient descent)

采用全部訓(xùn)練樣本更新參數(shù)

for i in range ( nb_epochs ): # nb_epochs 為最大迭代次數(shù)
    params_grad = evaluate_gradient ( loss_function , data , params )
    params = params - learning_rate * params_grad

使用全部訓(xùn)練集肴盏,可以保證每次更新都會朝著正確的方向進(jìn)行科盛,最后收斂于極值點(diǎn);但是學(xué)習(xí)時間太長菜皂,計算冗余且不能進(jìn)行在線模型參數(shù)更新贞绵。

b.隨機(jī)梯度下降法(Stochastic gradient descent)

每次從訓(xùn)練樣本中隨機(jī)取一個樣本來更新參數(shù)

for i in range ( nb_epochs ):
    np.random.shuffle( data )
    for example in data :
        params_grad = evaluate_gradient ( loss_function , example , params )
        params = params - learning_rate * params_grad

計算速度快,但每次更新不一定會按照正確的方向進(jìn)行恍飘,造成擾動榨崩,使得迭代次數(shù)增多,即收斂速度變慢章母,最終會收斂于極值點(diǎn)母蛛。

c.批量梯度下降(Mini-batch gradient descent)

每次從所有的訓(xùn)練樣本中選取一部分樣本來更新模型參數(shù)。

for i in range ( nb_epochs ):
    np.random.shuffle( data )
    for batch in get_batches ( data , batch_size =50):
        params_grad = evaluate_gradient ( loss_function , batch , params )
        params = params - learning_rate * params_grad

相對于SGD乳怎,更新過程更加穩(wěn)定彩郊;相對于全量梯度下降,學(xué)習(xí)速度加快蚪缀。

(2)挑戰(zhàn)

  • 選擇合適的learning rate.lr過小秫逝,收斂速度太慢;lr過大椿胯,會出現(xiàn)在極值點(diǎn)附近震蕩


    來源:http://cs231n.github.io/neural-networks-3/
  • learnig rate schedules筷登。目的是每次在更新參數(shù)時改變其學(xué)習(xí)速率。pytorch的learning rate schedule:LambdaLR,StepLR,MultiStepLR,ExponentialLR,CosineAnnealingLR,ReduceLROnPlateau

  • 模型的參數(shù)更新都是使用相同的學(xué)習(xí)速率哩盲。如果數(shù)據(jù)特征相對稀疏或者每個特征有著不同的分布前方,我們并不希望對所有參數(shù)適用相同的學(xué)習(xí)速率狈醉,對某些幾乎很少出現(xiàn)的特征用較大的學(xué)習(xí)速率。

  • 對于非凸目標(biāo)函數(shù)惠险,容易陷入局部極小值苗傅。在神經(jīng)網(wǎng)絡(luò)的過程中,要盡量避免這個問題班巩。但Dauphin在《Identifying and attacking the saddle point problem in high-dimensional non-convex optimization》指出更嚴(yán)重的是鞍點(diǎn)(saddle point)(鞍點(diǎn)處的梯度為零渣慕,鞍點(diǎn)通常被相同誤差值的平面所包圍(這個平面又叫Plateaus,Plateaus是梯度接近于零的平緩區(qū)域抱慌,會降低神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)速度)逊桦。高位特征空間中這個鞍點(diǎn)附近的平坦區(qū)域范圍可能非常大,這使得SGD算法很難脫離區(qū)域抑进,即可能會長時間卡在該點(diǎn)附近(因?yàn)樘荻仍谒芯S度上接近于零))

(3)梯度下降優(yōu)化算法(Gradient descent optimization algorithms)

a.Momentum

沖量梯度下降法就是在原來的梯度上加上了沖量(積累量)强经。個人理解就是當(dāng)梯度與沖量方向一致時,增加參數(shù)更新的增量寺渗,加快了收斂匿情;當(dāng)梯度與沖量方向不一致時,減少了增量信殊,使得參數(shù)更新過程的震蕩減少炬称。本質(zhì)上與SGD沒有區(qū)別。
v_t = \gamma v_{t-1}+\eta \nabla_{\theta}J(\theta)
\theta = \theta - v_t

有無沖量的參數(shù)更新過程

b.Nesterov accelerated gradient

NAG比Momentum的速度更快涡拘,因?yàn)榘言瓉碛嬎?img class="math-inline" src="https://math.jianshu.com/math?formula=%5Cnabla_%7B%5Ctheta%7DJ(%5Ctheta)" alt="\nabla_{\theta}J(\theta)" mathimg="1">換成計算\nabla_{\theta}J(\theta-\gamma v_{t-1})玲躯,就是在提前計算了下一個梯度。
v_t = \gamma v_{t-1}+\eta \nabla_{\theta}J(\theta-\gamma v_{t-1})
\theta = \theta - v_t

c.Adagrad

前面的兩種方法鲸伴,在更新參數(shù)時府蔗,學(xué)習(xí)速率\eta并沒有發(fā)生變化晋控。Adagrad是一種自適應(yīng)學(xué)習(xí)速率的梯度優(yōu)化算法汞窗。對于更新頻繁的參數(shù),學(xué)習(xí)速率會較小赡译,對于更新不頻繁的參數(shù)仲吏,學(xué)習(xí)速率會較大,挺適合處理適合處理稀疏特征數(shù)據(jù)蝌焚。

\theta_{t+1} = \theta_{t}-\frac{\eta}{\sqrt{G_t+\epsilon}}\odot g_t

G_t是個對角矩陣裹唆,其中第i行的對角元素e_{ii}為過去到當(dāng)前第i個參數(shù)\theta_i的梯度的平方和,\epsilon為平滑參數(shù),避免分母為0只洒,通常取1e-8许帐。開根號只是為了優(yōu)化下算法性能。

從公式可以看出毕谴,G_t的對角元素的值是不斷累加的成畦,學(xué)習(xí)速率衰減很快距芬。為了避免學(xué)習(xí)速率衰減過快的問題,提出Adadelta算法

d.Adadelta

學(xué)習(xí)率衰減的分母采用梯度平方的移動平均循帐。

得到

E[g^2]_t = \gamma E[g_{t-1}^2]+(1-\gamma)g_t^2

\theta_{t+1} = \theta_{t}-\frac{\eta}{\sqrt{E[g^2]_t+\epsilon}}\odot g_t

上式有個問題在于\eta\theta的單位不匹配框仔,故采用參數(shù)更新的平方的移動平均來替代學(xué)習(xí)率。

得到

E[\triangle \theta^2 ]_t = \gamma E[\triangle \theta_{t-1}^2]+(1-\gamma)\triangle \theta_t^2

\theta_{t+1} = \theta_{t}-\frac{\sqrt{E[\triangle \theta^2 ]_{t-1}}}{\sqrt{E[g^2]_t+\epsilon}}\odot g_t(當(dāng)前\triangle \theta_t未知)

e.RMSprop

RMSprop其實(shí)就是Adadelta的中間形式拄养,即

\theta_{t+1} = \theta_{t}-\frac{\eta}{\sqrt{E[g^2]_t+\epsilon}}\odot g_t

f.Adam

Adam算法式結(jié)合了RMSprop和Momentum离斩,即

m_t = \beta_1m_{t-1}+(1-\beta_1)g_t

v_t = \beta_2v_{t-1}+(1-\beta_2)g_t^2

在進(jìn)行偏差修正。(可以了解下指數(shù)加權(quán)平均的偏差修正(Bias correction in exponentially weighted averages))瘪匿,得到:

\overset{\wedge}{m_t} = \frac{m_t}{1-\beta_1^t}

\overset{\wedge}{v_t} = \frac{v_t}{1-\beta_2^t}

最終得到參數(shù)的更新公式為:

\theta_{t+1} = \theta_t-\frac{\eta}{\sqrt{\overset{\wedge}{v_t}}+\epsilon}\odot\overset{\wedge}{m_t}

g.AdaMax

v_t中的g_t^2就相當(dāng)于對g_tL^2范數(shù)跛梗,將其泛化到L^p范數(shù)。雖然當(dāng)p值較大時棋弥,數(shù)值會變得不穩(wěn)定茄袖。但當(dāng)p—>\infty時,得到:

u_t = \beta_2^{\infty}v_{t-1}+(1-\beta_2)|g_t|^{\infty}

=max(\beta_2v_{t-1},|g_t|)

u_t替代Adam中的\sqrt{\overset{\wedge}{v_t}}+\epsilon得到

\theta_{t+1} = \theta_t-\frac{\eta}{u_t}\odot\overset{\wedge}{m_t}

h.Nadam

借鑒Adam和NAG算法

先看下NAG算法嘁锯,在提前計算下一個梯度宪祥,即\nabla J(\theta-\gamma m_{t-1})

m_t = \gamma m_{t-1}+\eta \nabla_{\theta}J(\theta-\gamma m_{t-1})
\theta = \theta - m_t

Nadam中把這種“先見之明”的思想用到了對參數(shù)\theta的更新上,可以看下這個過程:

m_t = \gamma m_{t-1}+\eta \nabla_{\theta}J(\theta)
\theta = \theta - (\gamma m_t+\eta g_t) , g_t=\nabla_{\theta}J(\theta)

先記下這個“先見之明”家乘,之后會用到

回顧Adam的公式

\theta_{t+1} = \theta_t-\frac{\eta}{\sqrt{\overset{\wedge}{v_t}}+\epsilon}\overset{\wedge}{m_t}蝗羊,拆分\overset{\wedge}{m_t}得到,

\theta_{t+1} = \theta_t-\frac{\eta}{\sqrt{\overset{\wedge}{v_t}}+\epsilon}\frac{ \beta_1m_{t-1}+(1-\beta_1)g_t}{1-\beta_1^t}

=\theta_t-\frac{\eta}{\sqrt{\overset{\wedge}{v_t}}+\epsilon}(\overset{\wedge}{m}_{t-1}+\frac{ (1-\beta_1)g_t}{1-\beta_1^t})

應(yīng)用下“先見之明”,Nadam對參數(shù)的更新為
\theta_{t+1}= \theta_t-\frac{\eta}{\sqrt{\overset{\wedge}{v_t}}+\epsilon}(\overset{\wedge}{m}_{t}+\frac{ (1-\beta_1)g_t}{1-\beta_1^t})

來一張現(xiàn)成的圖對比下上文提到的幾個梯度:


來源:http://cs231n.github.io/neural-networks-3/,原地址是動圖

從左圖中可以看到仁锯,SGD很慢耀找,但會往正確的方向前進(jìn),Momentum和NAG速度較快业崖,但有很大的偏離野芒,NAG由于提前預(yù)估下一梯度的位置,因此對偏離的響應(yīng)會快一點(diǎn)双炕。而 Adagrad狞悲、Adadelta與RMSprop由于具有自適應(yīng)學(xué)習(xí)率的能力,能夠快速在正確的方向上得到收斂妇斤。
從右圖可以看出摇锋,SGD基本就在鞍點(diǎn)附近震蕩,很難脫離鞍點(diǎn)站超。而Momentum和NAG本質(zhì)沒有自適應(yīng)學(xué)習(xí)率荸恕,一開始仍然在鞍點(diǎn)附近震蕩,但由于速度會比SGD快死相,蕩久了然后脫離了鞍點(diǎn)融求。其他三種Adagrad、Adadelta與RMSprop很快脫離了鞍點(diǎn)算撮。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末生宛,一起剝皮案震驚了整個濱河市施掏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌茅糜,老刑警劉巖七芭,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蔑赘,居然都是意外死亡狸驳,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進(jìn)店門缩赛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來耙箍,“玉大人,你說我怎么就攤上這事酥馍”缋ィ” “怎么了?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵旨袒,是天一觀的道長汁针。 經(jīng)常有香客問我,道長砚尽,這世上最難降的妖魔是什么施无? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮必孤,結(jié)果婚禮上猾骡,老公的妹妹穿的比我還像新娘。我一直安慰自己敷搪,他們只是感情好兴想,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著赡勘,像睡著了一般嫂便。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上狮含,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天顽悼,我揣著相機(jī)與錄音,去河邊找鬼几迄。 笑死,一個胖子當(dāng)著我的面吹牛冰评,可吹牛的內(nèi)容都是我干的映胁。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼甲雅,長吁一口氣:“原來是場噩夢啊……” “哼解孙!你這毒婦竟也來了坑填?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤弛姜,失蹤者是張志新(化名)和其女友劉穎脐瑰,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體廷臼,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡苍在,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了荠商。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片寂恬。...
    茶點(diǎn)故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖莱没,靈堂內(nèi)的尸體忽然破棺而出初肉,到底是詐尸還是另有隱情,我是刑警寧澤饰躲,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布牙咏,位于F島的核電站,受9級特大地震影響嘹裂,放射性物質(zhì)發(fā)生泄漏眠寿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一焦蘑、第九天 我趴在偏房一處隱蔽的房頂上張望盯拱。 院中可真熱鬧,春花似錦例嘱、人聲如沸狡逢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽奢浑。三九已至,卻和暖如春腋腮,著一層夾襖步出監(jiān)牢的瞬間雀彼,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工即寡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留徊哑,地道東北人。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓聪富,卻偏偏與公主長得像莺丑,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容