梯度下降法理論與實(shí)踐

理論基礎(chǔ)

現(xiàn)在比如有兩個(gè)參數(shù)的損失函數(shù)

我們的目的是使之最小也就是得到能夠使J函數(shù)最小的theta_0,theta_1,公式表達(dá)為:
我們畫出當(dāng)theta_0,theta_1取不同值時(shí)J的變化圖是這樣的
顏色越深代表J值越大。我們比如隨便取一個(gè)點(diǎn)(theta_0,theta_1各等于某值時(shí)),此點(diǎn)如圖所示:

此時(shí)比如我們站在此點(diǎn)上,想要快速到達(dá)谷底(也就是使J函數(shù)達(dá)到極小值)。此時(shí)我們放眼望去,環(huán)望四周,很自然的向此時(shí)坡最陡的方向的下方邁上一步,接著在繼續(xù)重復(fù)我們的過(guò)程,直到四周都比當(dāng)下高 (此時(shí))為止,就是走到谷底(J函數(shù)達(dá)到極小值),完成目標(biāo)。

我們來(lái)看看我們的路線

這時(shí)會(huì)不會(huì)有人問(wèn)為什么會(huì)是極小值。
這時(shí)我們重新找一個(gè)點(diǎn)

跟上面的過(guò)程一樣,我們?cè)僮咭槐?br>

你瞅瞅,是不是到達(dá)另一個(gè)谷底。所以說(shuō),這種方法找的是局部的最小值,也就是全局的極小值。這種方法就是梯度下降算法。

此時(shí)介紹梯度下降算法,簡(jiǎn)單起見(jiàn),我們從一個(gè)變量開(kāi)始,比如此時(shí)我們的損失函數(shù)J是

隨機(jī)給theta_1取一個(gè)值,此點(diǎn)如上圖所示。對(duì)此點(diǎn)求導(dǎo):

此時(shí)的導(dǎo)數(shù)值為正數(shù),我們要向它的相反方向走一步,到達(dá)如圖所示點(diǎn)


此時(shí)的公式表達(dá)為:
alpha為learning rate 即學(xué)習(xí)率,這里表示用來(lái)控制步伐的大小,取值范圍 (0-1] (一般取值1,0.1,0.01,0.001... 也或者0.3,0.03,0.003...根據(jù)情況而定)。

不斷的重復(fù)上面公式的過(guò)程,直到
等于0或者特別小(多小,根據(jù)實(shí)際情況設(shè)定)停止。
我們?cè)倏紤]隨機(jī)點(diǎn)在左邊的情況。比如取點(diǎn)如圖所示:

此時(shí)的J在theta_1點(diǎn)的導(dǎo)數(shù)
為負(fù)數(shù)。
此時(shí)我們應(yīng)該向右走,則此時(shí)的表達(dá)式為

更新后



跟上面的過(guò)程一樣,直到更新到導(dǎo)數(shù)為0或特別小為止。

由此可見(jiàn),無(wú)論導(dǎo)數(shù)正負(fù),表達(dá)式一樣。所以我們規(guī)定梯度下降算法的更新過(guò)程就是

此時(shí)我們具體談?wù)刟lpha:

alpha取值過(guò)小,則會(huì)有這樣的情況:
到達(dá)極小值的速度特別慢。
而alpha取值過(guò)大,則還會(huì)有這種情況:

永遠(yuǎn)找不到極小值。

所以如果你想再alpha上做優(yōu)化,可以這樣

alpha先大后小。(根據(jù)實(shí)驗(yàn)情況而定)
現(xiàn)在我們?cè)倩貧w到我們的
函數(shù)中來(lái)。
我們對(duì)它進(jìn)行優(yōu)化的表達(dá)式為:
(這里是偏導(dǎo))
這里有個(gè)誤區(qū),正確的更新過(guò)程是這樣的:

等更新完再賦值。

下面的做法是錯(cuò)誤的:

更新完的theta_0在temp1的更新過(guò)程中被調(diào)用,此時(shí)已經(jīng)不是之前的theta_0了。切記。

代碼實(shí)踐

這是個(gè)擬合直線的代碼實(shí)現(xiàn)。


我們要將數(shù)據(jù)統(tǒng)一收縮到 [-1 - 1] 之間。
X = ( X - average(X) ) / X.max
Y = ( Y - average(Y) ) / Y.max

為什么要這么做呢?
因?yàn)槿绻蛔隹s小處理,在矩陣運(yùn)算時(shí),非常有可能出現(xiàn)無(wú)窮大或者無(wú)窮小,導(dǎo)致無(wú)法計(jì)算。

縮小處理可以很容易畫出模擬線條。

縮小處理在計(jì)算機(jī)中處理速度更快。


我們看看圖:


這里我設(shè)置a = 0.01是為了下面的模擬直線除數(shù)不為0設(shè)置的。一般情況下,初始化 a = b = 0。(這里a, b就是上面的theta_0,theta_1)
下面進(jìn)行矩陣化:



上面圖片的y1 - y4是預(yù)測(cè)值
下面代碼的Y是真實(shí)值



預(yù)測(cè)值函數(shù)

擬合線段形成過(guò)程

更新過(guò)程



最終的線段是

注:代碼實(shí)現(xiàn)以上圖片來(lái)自2014stanford機(jī)器學(xué)習(xí)視頻


我的公眾號(hào),喜歡的可以關(guān)注我呀。

公眾號(hào)二維碼.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)載-劉建平Pinard-www.cnblogs.com/pinard/p/5970503.html 在求解機(jī)器學(xué)...
    商三郎閱讀 3,609評(píng)論 0 2
  • 前言 梯度下降算法現(xiàn)在變的越來(lái)越流行,但是對(duì)于使用者來(lái)說(shuō),它的優(yōu)化過(guò)程變的越來(lái)越黑盒。本文我們介紹下不通梯度下降算...
    wendaJ閱讀 1,645評(píng)論 0 1
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,525評(píng)論 19 139
  • 簡(jiǎn)書無(wú)法顯示MathJax數(shù)學(xué)公式,請(qǐng)到這里閱讀: 我的機(jī)器學(xué)習(xí)筆記(二) - 單變量線性回歸 課程地址:Line...
    Daniellaah閱讀 1,923評(píng)論 0 4
  • 肖逸按響門鈴,聽(tīng)到一溜小跑的腳步聲由遠(yuǎn)及近,每一步的音節(jié)仿佛都重重敲擊在溫舒怡的心上,砰砰砰地響。溫舒怡深呼吸一口...
    馮路易閱讀 293評(píng)論 0 0

友情鏈接更多精彩內(nèi)容