梯度下降法理論與實踐

理論基礎

現在比如有兩個參數的損失函數

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

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

我們來看看我們的路線

這時會不會有人問為什么會是極小值。
這時我們重新找一個點

跟上面的過程一樣,我們再走一遍

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

此時介紹梯度下降算法,簡單起見,我們從一個變量開始,比如此時我們的損失函數J是

隨機給theta_1取一個值,此點如上圖所示。對此點求導:

此時的導數值為正數,我們要向它的相反方向走一步,到達如圖所示點


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

不斷的重復上面公式的過程,直到
等于0或者特別小(多小,根據實際情況設定)停止。
我們再考慮隨機點在左邊的情況。比如取點如圖所示:

此時的J在theta_1點的導數
為負數。
此時我們應該向右走,則此時的表達式為

更新后



跟上面的過程一樣,直到更新到導數為0或特別小為止。

由此可見,無論導數正負,表達式一樣。所以我們規定梯度下降算法的更新過程就是

此時我們具體談談alpha:

alpha取值過小,則會有這樣的情況:
到達極小值的速度特別慢。
而alpha取值過大,則還會有這種情況:

永遠找不到極小值。

所以如果你想再alpha上做優化,可以這樣

alpha先大后小。(根據實驗情況而定)
現在我們再回歸到我們的
函數中來。
我們對它進行優化的表達式為:
(這里是偏導)
這里有個誤區,正確的更新過程是這樣的:

等更新完再賦值。

下面的做法是錯誤的:

更新完的theta_0在temp1的更新過程中被調用,此時已經不是之前的theta_0了。切記。

代碼實踐

這是個擬合直線的代碼實現。


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

為什么要這么做呢?
因為如果不做縮小處理,在矩陣運算時,非常有可能出現無窮大或者無窮小,導致無法計算。

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

縮小處理在計算機中處理速度更快。


我們看看圖:


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



上面圖片的y1 - y4是預測值
下面代碼的Y是真實值



預測值函數

擬合線段形成過程

更新過程



最終的線段是

注:代碼實現以上圖片來自2014stanford機器學習視頻


我的公眾號,喜歡的可以關注我呀。

公眾號二維碼.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 轉載-劉建平Pinard-www.cnblogs.com/pinard/p/5970503.html 在求解機器學...
    商三郎閱讀 3,521評論 0 2
  • 前言 梯度下降算法現在變的越來越流行,但是對于使用者來說,它的優化過程變的越來越黑盒。本文我們介紹下不通梯度下降算...
    wendaJ閱讀 1,589評論 0 1
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,991評論 19 139
  • 簡書無法顯示MathJax數學公式,請到這里閱讀: 我的機器學習筆記(二) - 單變量線性回歸 課程地址:Line...
    Daniellaah閱讀 1,856評論 0 4
  • 肖逸按響門鈴,聽到一溜小跑的腳步聲由遠及近,每一步的音節仿佛都重重敲擊在溫舒怡的心上,砰砰砰地響。溫舒怡深呼吸一口...
    馮路易閱讀 222評論 0 0