Gradient Descent
整理自Andrew Ng的machine learning課程。
目錄:
- 梯度下降算法
- 梯度下降算法的直觀展示
- 線性回歸中的梯度下降
前提:
線性回歸模型 :$h(\theta_0,\theta_1)=\theta_0+\theta_1x$
損失函數:$J(\theta_0,\theta_1)=\frac{1}{2m} \sum_{i=1}^m (h_\theta(x^(i))-y^(i))^2$
1、梯度下降算法
目的:求解出模型的參數 / estimate the parameters in the hypothesis function
如下圖所示,$\theta_0,\theta_1$代表模型的參數,$J(\theta_0,\theta_1)$代表模型的損失函數
目的:從某一點出發,走到最低點。
怎麽走:沿著所在點處最陡的方向下降。某一點山坡最陡的方向就是這一點的切線方向,也就是這一點的導數。每一步走多大取決於學習率$\alpha$。
在圖中,每一個十字星之間的距離取決與$\alpha$的大小。小的$\alpha$會使兩點之間的距離比較小,大的$\alpha$會產生大的步距。每一步走的方向取決於所在點的偏導。不同的起始點會有不同的終點,如上圖從A出發最終到達B,而從C出發最終到達D。
梯度下降算法如下:
$\theta_j:=\theta_j-\alpha\frac{\partial}{\partial \theta_j}J(\theta_0,\theta_1)$ repeat util convergence
註意:$\theta_0,\theta_1$在每一步的叠代中都是同步更新的
2、梯度下降算法的直觀展示
如下圖:此圖是一個損失函數的圖像
當$\theta_1$在最小值點的右邊時,圖像的斜率(導數)是正的,學習率$\alpha$也是正的,根據梯度下降算法的公式,更新後的$\theta_1$是往左邊方向走了,的確是朝著最小值點去了;
當$\theta_1$在最小值點的左邊時,圖像的斜率(導數)是負的,學習率$\alpha$是正的,根據梯度下降算法的公式,更新後的$\theta_1$是往右邊方向走了,也是朝著最小值點去了;
另外,我們需要調整$\alpha$使的算法可以在一定的時間內收斂。收斂失敗或者收斂的非常慢,都說明使用的步長$\alpha$是錯誤的。
如果使用固定的$\alpha$,算法會收斂嗎?
梯度下降算法隱含的一個信息就是,當點越來越接近最小值點的時候,梯度也會越來越小,到達最小值點時,梯度為0;
所以即使不去調整$\alpha$,走的步長也是會越來越短的,算法最終也還是會收斂的,所以沒必要每次都調整$\alpha$的大小。
3、線性回歸中的梯度下降算法
當把梯度下降算法具體的運用到線性回歸上去的時候,算法就可以在偏導部分寫的更加具體了:
repear until convergence {
$\qquad \theta_0:=\theta_0-\alpha \frac {1}{m} \sum_{i=1}^m (h_\theta(x_i)-y_i)$
$\qquad \theta_1:=\theta_1-\alpha \frac {1}{m} \sum_{i=1}^m ((h_\theta(x_i)-y_i)x_i)$
}
batch gradient descent
以上:在每一步更新參數時,讓所有的訓練樣本都參與更新的做法,稱為batch gradient descent;
註意到:雖然梯度下降算法可能會陷入局部最優的情況,但是在線性回歸中不存在這種問題,線性回歸只有一個全局最優,沒有局部最優,算法最終一定可以找到全局最優點(假設$\alpha$不是特別大)。
線性回歸中,J是一個凸二次函數,這樣的函數是碗狀的(bowl-shaped),沒有局部最優,只有一個全局最優。
Gradient Descent