理解 Gradient Descent 演算法

最近在看吳恩達的機器學習課程,剛看到第四周,其中線性回歸和邏輯回歸都用到了 Gradient Descent 演算法,用來求價值函數的最小值。由於課程里沒有對這個演算法詳細解釋,我就自己研究了下。

首先好比我們有一個這樣的價值函數 J(	heta)=frac{1}{2m}sum_i^m(h(x(i))-y(i))^2 ,其中預測函數是一個簡單的線性方程  h(x)=	heta_{0}+	heta_{1}x_{1}

然後每次循環的時候同時更新 	heta 的值

	heta_{j}:=	heta_{j}-alphafrac{partial}{partial 	heta_{j}}J(	heta_{0},	heta_{1}) (j = 0, i = 1)

問題來了, frac{partial}{partial} 是什麼東西?

其實這個時候就是體現數學基礎的地方了。

維基百科解釋:

Derivative 導數,我記得當時課程里用的就是這個詞,我查字典發現是派生的意思。。。(黑人問號臉.jpg),然後就沒有然後了。

現在弄明白了,更新 	heta_{j} 的時候,其實是對 Cost Function 的 	heta_{j} 求的導數,那麼用當前的 theta 減去 alpha 和導數的乘積,必然會找到 theta 對應 Cost Function 的更低的一個點。不服?我可以證明。

假設,我們的初始 theta 是 	heta_{init},這個時候我們對 Cost Function 求關於 	heta_{init} 的導數,它的值有三種情況,大於0,小於0,或者等於0。如果等於0,那麼函數則已經達到最小值。我們主要討論不等於0的兩種情況。

大於0,那麼就是說,Cost Function 在theta 等於 	heta_{init} 的時候,如果 theta 增加那麼,Cost Function 的值會有增大的趨勢,又因為 theta 的導數乘以 alpha 大於0,所以 theta 減去他們的乘積會將新的 theta 更新為更小的值,也就是說 Cost Function 會往更小的值逼近。

小於0,其實和大於0的情況相似,只不過變化趨勢變了,同時此時更新 theta 後 theta 更大,從而 Cost Function 的值還是更小。

至此,關於 Gradient Descent 的困惑都已解開。

(另外,我發現 hostmath.com/ 提供的數學函數編輯器還是很好用的)

參考文章:

gradient descent 梯度下降演算法 - Kenney Qin 的專欄 - CSDN博客

維基百科 - Gradient descent


推薦閱讀:

數學建模競賽的一些心得體會(關於每年的比賽)
美國教育繞不過去的坎,更是學生的痛
科普小說《遇見喜歡數學的女孩》三部曲下載地址
有趣的數學問題
學好數學要注意什麼?

TAG:演算法 | 數學 | 機器學習 |