神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)的目的是找到使損失函數(shù)的值盡可能小的參數(shù)。這是尋找最優(yōu)參數(shù)的問題,解決這個問題的過程稱為最優(yōu)化(optimization)。遺憾的是,神經(jīng)網(wǎng)絡(luò)的最優(yōu)化問題非常難。這是因為參數(shù)空間非常復(fù)雜,無法輕易找到最優(yōu)解(無法使用那種通過解數(shù)學(xué)式一下子就求得最小值的方法)。而且,在 深度神經(jīng)網(wǎng)絡(luò)中,參數(shù)的數(shù)量非常龐大,導(dǎo)致最優(yōu)化問題更加復(fù)雜。
為了找到最優(yōu)參數(shù),我們將參數(shù)的梯度(導(dǎo)數(shù))作為了線索。 使用參數(shù)的梯度,沿梯度方向更新參數(shù),并重復(fù)這個步驟多次,從而逐漸靠近最優(yōu)參數(shù),這個過程稱為隨機(jī)梯度下降法(stochastic gradient descent),簡稱SGD。SGD是一個簡單的方法,不過比起胡亂地搜索參數(shù)空間,也算是“聰明”的方法。
打個比方: 有一個性情古怪的探險家。他在廣袤的干旱地帶旅行,堅持尋找幽 深的山谷。他的目標(biāo)是要到達(dá)最深的谷底(他稱之為“至深之地”)。這 也是他旅行的目的。并且,他給自己制定了兩個嚴(yán)格的“規(guī)定”:一個 是不看地圖;另一個是把眼睛蒙上。因此,他并不知道最深的谷底在這個廣袤的大地的何處,而且什么也看不見。在這么嚴(yán)苛的條件下,這位 探險家如何前往“至深之地”呢?他要如何邁步,才能迅速找到“至深 之地”呢?
尋找最優(yōu)參數(shù)時,我們所處的狀況和這位探險家一樣,是一個漆黑的世界。我們必須在沒有地圖、不能睜眼的情況下,在廣袤、復(fù)雜的地形中尋找 “至深之地”。大家可以想象這是一個多么難的問題。
在這么困難的狀況下,地面的坡度顯得尤為重要。探險家雖然看不到周 圍的情況,但是能夠知道當(dāng)前所在位置的坡度(通過腳底感受地面的傾斜狀況)。 于是,朝著當(dāng)前所在位置的坡度最大的方向前進(jìn),就是SGD的策略。勇敢的探險家心里可能想著只要重復(fù)這一策略,總有一天可以到達(dá)“至深之地”。
SGD
用數(shù)學(xué)式將SGD可以寫成如下形式:
為需要更新的權(quán)重參數(shù),?L?W\frac{\partial L}{\partial W}?W?L為損失函數(shù)LLL關(guān)于WWW的梯度。η\etaη表示學(xué)習(xí)率,一般會取0.01或0.001這些事先決定好的值。式中的←\leftarrow←表示用右邊的值更新左邊的值。
缺點:
(1)SGD 因為更新比較頻繁,會造成 cost function 有嚴(yán)重的震蕩。
SGD呈 “之”字形移動。這是一個相當(dāng)?shù)托У穆窂?。也就是說, SGD的缺點是, 如果函數(shù)的形狀非均向(anisotropic),比如呈延伸狀,搜索的路徑就會非常低效。因此,我們需要比單純朝梯度方向前進(jìn)的SGD更聰 明的方法。 SGD低效的根本原因是, 梯度的方向并沒有指向最小值的方向。
(2)容易收斂到局部最優(yōu),并且容易被困在鞍點。
Momentum
Momentum算法借用了物理中的動量概念,它模擬的是物體運(yùn)動時的慣性,即更新的時候在一定程度上保留之前更新的方向,同時利用當(dāng)前batch的梯度微調(diào)最終的更新方向。這樣一來,可以在一定程度上增加穩(wěn)定性,從而學(xué)習(xí)地更快,并且還有一定擺脫局部最優(yōu)的能力:
和前面的SGD一樣, WWW表示要更新的權(quán)重參數(shù), 表示損失函數(shù)關(guān)于WWW的梯度,ηηη表示學(xué)習(xí)率。 這里新出現(xiàn)了一個變量vvv,對應(yīng)物理上的速度。 式(1)表示了物體在梯度方向上受力,在這個力的作用下,物體的速度增加這一物理法則。Momentum方法給人的感覺就像是小球在地面上滾動。
式(1)中有αvαvαv這一項。在物體不受任何力時,該項承擔(dān)使物體逐漸減速的任務(wù)(α設(shè)定為0.9之類的值),對應(yīng)物理上的地面摩擦或空氣阻力。
和SGD相比, “之”字形的“程度”減輕了。這是因為雖然x軸方向上受到的力非常小,但是一直在同一方向上受力,所以朝同一個方向會有一定的加速。反過來,雖然y軸方向上受到的力很大,但是因為交互地受到正方向和反方向的力,它們會互相抵消,所以y軸方向上的速度不穩(wěn)定。因此,和SGD時的情形相比, 可以更快地朝x軸方向靠近,減弱“之”字形的變動程度。
AdaGrad
在神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)中,學(xué)習(xí)率(數(shù)學(xué)式中記為ηηη)的值很重要。學(xué)習(xí)率過小, 會導(dǎo)致學(xué)習(xí)花費(fèi)過多時間;反過來,學(xué)習(xí)率過大,則會導(dǎo)致學(xué)習(xí)發(fā)散而不能 正確進(jìn)行。
在關(guān)于學(xué)習(xí)率的有效技巧中,有一種被稱為學(xué)習(xí)率衰減(learning rate decay) 的方法,即隨著學(xué)習(xí)的進(jìn)行,使學(xué)習(xí)率逐漸減小。實際上,一開始“多” 學(xué),然后逐漸“少”學(xué)的方法,在神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)中經(jīng)常被使用。
逐漸減小學(xué)習(xí)率的想法,相當(dāng)于將“全體”參數(shù)的學(xué)習(xí)率值一起降低。 而AdaGrad進(jìn)一步發(fā)展了這個想法,針對“一個一個”的參數(shù),賦予其“定 制”的值。
AdaGrad會為參數(shù)的每個元素適當(dāng)?shù)卣{(diào)整學(xué)習(xí)率, 與此同時進(jìn)行學(xué)習(xí) (AdaGrad的Ada來自英文單詞Adaptive,即“適當(dāng)?shù)摹钡囊馑迹?。下面,讓我們用?shù)學(xué)式表示AdaGrad的更新方法。
其中,hhh為梯度累積變量,它保存了以前的所有梯度值的平方和,hhh的初始值為0。?\bigodot?表示對應(yīng)矩陣元素的乘法,η\etaη表示學(xué)習(xí)率,δ\deltaδ為很小的一個數(shù)值,是為了防止分母為0。然后,在更新參數(shù)時,通過乘以 1h√\frac{1}{\sqrt h}h1,就可以調(diào)整學(xué)習(xí)的尺度。這意味著, 參數(shù)的元素中變動較大(被大幅更新)的元素的學(xué)習(xí)率將變小。也就是說, 可以按參數(shù)的元素進(jìn)行學(xué)習(xí)率衰減,使變動大的參數(shù)的學(xué)習(xí)率逐漸減小。
由圖可知,函數(shù)的取值高效地向著最小值移動。由于y軸方 向上的梯度較大,因此剛開始變動較大,但是后面會根據(jù)這個較大的變動按 比例進(jìn)行調(diào)整,減小更新的步伐。因此,y軸方向上的更新程度被減弱,“之” 字形的變動程度有所衰減。
RMSProp
AdaGrad會記錄過去所有梯度的平方和。因此,學(xué)習(xí)越深入,更新 的幅度就越小。實際上,如果無止境地學(xué)習(xí),更新量就會變?yōu)?0, 完全不再更新。為了改善這個問題,可以使用 RMSProp 方法。RMSProp方法并不是將過去所有的梯度一視同仁地相加,而是逐漸 地遺忘過去的梯度,在做加法運(yùn)算時將新梯度的信息更多地反映出來。 這種操作從專業(yè)上講,稱為“指數(shù)移動平均”,呈指數(shù)函數(shù)式地減小過去的梯度的尺度。
其中ppp一般可取0.9,其它參數(shù)和AdaGrad一致。
Adam
Momentum參照小球在碗中滾動的物理規(guī)則進(jìn)行移動,AdaGrad為參數(shù)的每個元素適當(dāng)?shù)卣{(diào)整更新步伐。如果將這兩個方法融合在一起會怎么樣呢?這就是Adam方法的基本思路。直觀地講,Adam就是融合了Momentum和AdaGrad的方法。通過組合前面兩個方法的優(yōu)點,有望實現(xiàn)參數(shù)空間的高效搜索。此外,進(jìn)行超參數(shù)的“偏置校正”也是Adam的特征。Adam結(jié)合了Adagrad善于處理稀疏梯度和RMSprop善于處理非平穩(wěn)目標(biāo)的優(yōu)點。
可以看出,直接對梯度的矩估計對內(nèi)存沒有額外的要求,而且可以根據(jù)梯度進(jìn)行動態(tài)調(diào)整,而?m?tn?t√+δ-\frac{\hat m_t}{\sqrt {\hat n_t} + \delta }?n^t+δm^t對學(xué)習(xí)率η\etaη形成了一個動態(tài)約束,而且有明確的范圍。
如圖,基于 Adam 的更新過程就像小球在碗中滾動一樣。雖然 Momentun 也有類似的移動,但是相比之下, Adam的小球左右搖晃的程度有所減輕。這得益于學(xué)習(xí)的更新程度被適當(dāng)?shù)卣{(diào)整了。
-
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5560瀏覽量
122769
原文標(biāo)題:【知識點】長文超詳講解深度學(xué)習(xí)中你總是掌握不牢的若干知識點
文章出處:【微信號:zenRRan,微信公眾號:深度學(xué)習(xí)自然語言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
一文詳解機(jī)器學(xué)習(xí)和深度學(xué)習(xí)的區(qū)別

解析深度學(xué)習(xí):卷積神經(jīng)網(wǎng)絡(luò)原理與視覺實踐
基于深度學(xué)習(xí)的異常檢測的研究方法
深度學(xué)習(xí)技術(shù)的開發(fā)與應(yīng)用
C語言深度解析
一文讀懂深度學(xué)習(xí)與機(jī)器學(xué)習(xí)的差異

模型驅(qū)動深度學(xué)習(xí)的標(biāo)準(zhǔn)流程與學(xué)習(xí)方法解析

一文解讀深度學(xué)習(xí)的發(fā)展
解析人工智能中深度學(xué)習(xí)的經(jīng)典算法

人工智能之深度強(qiáng)化學(xué)習(xí)DRL的解析
一文讀懂何為深度學(xué)習(xí)1

一文讀懂何為深度學(xué)習(xí)3

評論