課程地址:https://www.coursera.org/learn/machine-learning/lecture/8SpIM/gradient-descent
此篇博文是我在聆聽以上課程的筆記,歡迎交流分享。
一 Model and Cost Function 模型及代價函數
1 Model Representation 模型表示
首先,教授介紹了一下課程中將會用到的符號和意義:
m:訓練樣本的數目
x:特征量
y:目標變量
(x,y):一個訓練樣本
(x^(i),y^(i)):i不是指數,而是指第i行的樣本
Univariate linear regression:一元線性回歸
2 Cost Function 代價函數
整體目標函數 --> 代價函數(平方誤差函數,平方誤差代價函數)
二 Gradient Descent 梯度下降
梯度下降算法可以將代價函數j最小化。梯度函數是一種很常用的算法,它不僅被用在線性回歸上,也被廣泛地應用於機器學習領域中的眾多領域之中。
下圖是代價函數J中解決線性回歸問題的問題概述:
我們希望通過改變theta參數的值來最小化代價函數。
這里,我們考慮有兩個參數的情況,我們可以考慮到一個三維圖形,兩條坐標分別表示theta0和theta1。
梯度下降要做的事,就是從某個起始theta對值開始,尋找最快的下降方向往下走,在路途上也不斷地尋找最快下降的方向更改路線,最后到達一個局部最低點。
可以看到,如果起始點稍有偏差,那么我們可能會得到一個非常不同的局部最優解,這也是梯度下降的一個特點。
我們從上圖中獲得了梯度下降的直觀感受,接下來讓我們看看梯度下降的定義:
分析一下梯度下降定義公式的一些細節:
我們用“:=”來表示賦值。注意,如果我們寫作“=”,表達的意識並不是賦值,而是判斷為真的說明,比如a=b,就是斷言a的值是等於b的。
α在這里是一個數字,被稱為學習效率(learning rate),在梯度下降算法中,它控制了我們下山時會賣出多大的步子。因此如果α比較大,那我們用大步子下山,如果它比較小,我們就邁着很小的小碎步下山。
在公式中,有一個很微妙的問題。在梯度下降中,我們要同時更新theta0和theta1,而不是先后更新。如果先更新了theta0,再更新theta1就會造成theta1的值出錯。
三 Gradient Descent Intuition 梯度下降的客觀事實
首先,教授向我們介紹了一下倒數和偏導的概念。教授為了解釋明白,說了很長一段話,大概的意思就是,導數在梯度下降中的存在就是為了指出方向,指示我們向局部最低點進發。
然后,就是α的問題。我們來討論一下學習效率α大小對我們下山的影響:
總結一下:α太小,那我們就像小寶寶一樣往下爬得超級慢,但如果α太大,就可能一步跨過了最低點,甚至南轅北轍,無法收斂反而發散出去了。
那如果我們恰好就在或者剛好走到了局部最低點呢?感受一下,這個時候導數是0,這是在告訴我們不要再走啦,不管步子邁多大,都只是原地踏步。所以此時就不再更新theta的值了。
α值都固定了,梯度下降為什么也可以讓代價函數收斂到一個局部最低點呢?
事實上,我們並不會跨着相同的步子在最低點兩端徘徊做無用功。因為導數不僅為我們指明了方向,也在影響我們每一步的大小。
當我們接近一個局部最低點時,梯度下降也會自然第把步子跨小。所以,沒有必要減小α。
三 Gradient Descent For Linear Regression 梯度下降在線性回歸中的應用
為了了解梯度下降法的應用,我們需要首先對梯度下降公式中的導數項進行分析:
於是,我們直接得到了更新theta0和theta1的公式(如上圖)。要推導這個公式需要一定的微積分基礎,如果不熟悉也沒有關系,你可以直接應用公式:
事實證明,用於線性回歸的代價函數總是一個凸函數(convex function),因此,這個函數沒有任何局部最優解,只有一個全局最優解。並且無論什么時候,你對這種代價函數使用線性回歸/遞歸下降法得到的結果,都會是收斂到全局最優值的。因為沒有全局最優以外的其他局部最優點。
最后,我們剛剛使用的算法有時也被稱為“批量梯度下降法”,意思是——在梯度下降的每一步中,我們最終都要計算所有m值代價的求和運算,所以“批量梯度算法”也是指“一批”訓練集“。