梯度下降法理論與實踐

來自微信公眾號 深度學習自然語言處理

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

我們來看看我們的路線

這時會不會有人問為什麼會是極小值。

這時我們重新找一個點

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

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

代碼實踐

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

我們要將數據統一收縮到 [-1 - 1] 之間。

X = ( X - average(X) ) / X.max

Y = ( Y - average(Y) ) / Y.max

為什麼要這麼做呢?

  1. 因為如果不做縮小處理,在矩陣運算時,非常有可能出現無窮大或者無窮小,導致無法計算。
  2. 縮小處理可以很容易畫出模擬線條。
  3. 縮小處理在計算機中處理速度更快。

我們看看圖:

上面圖片的y1 - y4是預測值

下面代碼的Y是真實值

預測值函數

擬合線段形成過程

更新過程

最終的線段是

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


推薦閱讀:

TAG:機器學習 | 深度學習DeepLearning | 優化 |