看了一下前一篇 是半個月前了~過了個年 生了個病 就發(fā)現(xiàn)攤久了就真的成為惰性 很舒服了…今早不想看教資的時候 就去校正了一下論文 看到隨機梯度下降算法 那就再來記錄一下 也算是假期最后一更啦 接下來要等9號考完試 再更辣盖桥!
隨機梯度下降算法
先解釋一些概念屠升。
1.什么是梯度下降
我們先從一張圖來直觀解釋這個過程馒胆。
如上圖假設這樣一個場景:一個人被困在山上消返,需要從山上下來,但此時山上的濃霧很大劣领,導致可視度很低姐军。因此,下山的路徑就無法確定尖淘,他必須利用自己周圍的信息去找到下山的路徑奕锌。這個時候,他就可以利用梯度下降算法來幫助自己下山村生。具體來說就是惊暴,以他當前的所處的位置為基準,尋找方向趁桃,然后朝著山的高度下降的地方走辽话。
但是因為選擇方向的原因,我們找到的的最低點可能不是真正的最低點卫病。如圖所示油啤,黑線標注的路線所指的方向并不是真正的地方。
那么問題來了蟀苛?
既然是選擇一個方向下山益咬,那么這個方向怎么選?每次該怎么走屹逛?
先說選方向础废,在算法中是以隨機方式給出的,這也是造成有時候走不到真正最低點的原因罕模。如果選定了方向评腺,以后每走一步,都是選擇最陡的方向淑掌,直到最低點蒿讥。
總結(jié)起來就一句話:隨機選擇一個方向,然后每次邁步都選擇最陡的方向抛腕,直到這個方向上能達到的最低點芋绸。其實梯度下降的過程即可類比與上述描述的下山的過程。
我們可以這樣理解:首先担敌,我們有一個可微分的函數(shù)摔敛。這個函數(shù)就代表著一座山。我們的目標就是找到這個函數(shù)的最小值全封,也就是山底马昙。最快的下山的方式就是找到當前位置最陡峭的方向,然后沿著此方向向下走刹悴,對應到函數(shù)中行楞,就是找到給定點的梯度,然后朝著梯度相反的方向土匀,就能讓函數(shù)值下降的最快子房!因為梯度的方向就是函數(shù)之變化最快的方向。
所以就轧,我們重復利用這個方法证杭,反復求取梯度,最后就能到達局部的最小值钓丰,這就類似于我們下山的過程躯砰。2.那什么是梯度?求取梯度有什么用?
還是從例子入手:
上圖就是一個求梯度的實例携丁,由這個實例我們可以看到琢歇,梯度就是分別對每個變量進行微分,然后用逗號分割開梦鉴,梯度是用<>包括起來李茫,說明梯度其實一個向量。
在單變量的函數(shù)中肥橙,梯度其實就是函數(shù)的微分魄宏,代表著函數(shù)在某個給定點的切線的斜率;在多變量函數(shù)中存筏,梯度是一個向量宠互,向量有方向味榛,梯度的方向就指出了函數(shù)在給定點的上升最快的方向。
這也就告訴我們?yōu)槭裁葱枰筇荻扔璧N覀冃枰竭_山底搏色,就需要在每一步觀測到此時最陡峭的地方,梯度就恰巧告訴了我們這個方向券册。梯度的方向是函數(shù)在給定點上升最快的方向频轿,那么梯度的反方向就是函數(shù)在給定點下降最快的方向。所以我們只要沿著梯度的方向一直走烁焙,就能走到局部上的一個最低點航邢。3.我們使用梯度下降來做什么?有什么優(yōu)缺點骄蝇?
a. 在機器學習算法中,有時候需要對原始的模型構(gòu)建損失函數(shù),然后通過優(yōu)化算法對損失函數(shù)進行優(yōu)化膳殷,以便尋找到最優(yōu)的參數(shù),使得損失函數(shù)的值最小九火。而在求解機器學習參數(shù)的優(yōu)化算法中秽之,使用較多的就是基于梯度下降的優(yōu)化算法(Gradient Descent, GD)。
b.優(yōu)缺點
優(yōu)點:效率吃既。在梯度下降法的求解過程中考榨,只需求解損失函數(shù)的一階導數(shù),計算的代價比較小鹦倚,可以在很多大規(guī)模數(shù)據(jù)集上應用河质。
缺點:求解的是局部最優(yōu)值,即由于方向選擇的問題震叙,得到的結(jié)果不一定是全局最優(yōu)步長選擇掀鹅,過小使得函數(shù)收斂速度慢,過大又容易找不到最優(yōu)解媒楼。
進入一個分支~
隨機梯度算法
概念
隨機梯度下降(SGD)是一種簡單但非常有效的方法乐尊,多用用于支持向量機、邏輯回歸等凸損失函數(shù)下的線性分類器的學習划址。并且SGD已成功應用于文本分類和自然語言處理中經(jīng)常遇到的大規(guī)模和稀疏機器學習問題扔嵌。
SGD既可以用于分類計算,也可以用于回歸計算夺颤。
分類和回歸的實現(xiàn)可參考:
(https://blog.csdn.net/qq_38150441/article/details/80533891)
SGD算法是從樣本中隨機抽出一組痢缎,訓練后按梯度更新一次,然后再抽取一組世澜,再更新一次独旷,在樣本量及其大的情況下,可能不用訓練完所有的樣本就可以獲得一個損失值在可接受范圍之內(nèi)的模型了。(劃個重點:每次迭代使用一組樣本嵌洼。)
為什么叫隨機梯度下降算法呢案疲?這里的隨機是指每次迭代過程中,樣本都要被隨機打亂麻养,這個也很容易理解络拌,打亂是有效減小樣本之間造成的參數(shù)更新抵消問題。
分類
隨機梯度下降算法通常還有三種不同的應用方式回溺,它們分別是SGD、Batch-SGD混萝、Mini-Batch SGD
a.SGD是最基本的隨機梯度下降遗遵,它是指每次參數(shù)更新只使用一個樣本,這樣可能導致更新較慢逸嘀;
b.Batch-SGD是批隨機梯度下降车要,它是指每次參數(shù)更新使用所有樣本,即把所有樣本都代入計算一遍崭倘,然后取它們的參數(shù)更新均值翼岁,來對參數(shù)進行一次性更新,這種更新方式較為粗糙司光;
c.Mini-Batch-SGD是小批量隨機梯度下降琅坡,它是指每次參數(shù)更新使用一小批樣本,這批樣本的數(shù)量通巢屑遥可以采取trial-and-error的方法來確定榆俺,這種方法被證明可以有效加快訓練速度
運用
訓練模型的目的是使得目標函數(shù)達到極小值。對于一個深度神經(jīng)網(wǎng)絡坞淮,它的參數(shù)數(shù)目比較龐大茴晋,因此目標函數(shù)通常是一個包含很多參量的非線性函數(shù)。對于這個非線性函數(shù)回窘,我們采用的是隨機梯度下降算法來對參數(shù)進行更新诺擅。具體步驟如下:
(1)對網(wǎng)絡參數(shù)進行初始化,一般情況下啡直,權(quán)重初始化為均值是0烁涌,方差為0.01的高斯分布隨機值,而偏置統(tǒng)一初始化為0酒觅;
(2)將參數(shù)代入網(wǎng)絡計算前饋輸出值烹玉,從而可以根據(jù)已有的目標標簽得出目標函數(shù)值;
(3)根據(jù)目標函數(shù)值以及各參數(shù)與目標函數(shù)所構(gòu)成的樹結(jié)構(gòu)阐滩,運用后向傳播算法計算出每個參數(shù)的梯度二打;
(4)設置學習率大小(隨著迭代的步驟增多掂榔,學習率通常要逐漸減小继效,這樣可以有效避免訓練中出現(xiàn)誤差震蕩情況)症杏,進行參數(shù)更新,最一般的更新方式是 新參數(shù)=舊參數(shù)-學習率×梯度瑞信;
(5)重復進行第2~4步厉颤,直到網(wǎng)絡收斂為止。
實現(xiàn)代碼參考(https://blog.csdn.net/kwame211/article/details/80364079)
今天又是一個合格的搬運工辣~
參考資料
(http://www.reibang.com/p/c7e642877b0e)
(https://blog.csdn.net/LW_GHY/article/details/71054965)
End~
加油凡简!