1. 程式人生 > >Gradient Descent

Gradient Descent

學習 這樣的 錯誤 優點 div 整理 註意 pan 分享圖片

整理自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