12、說說梯度下降法

1 什麼是梯度下降法
經常在機器學習中的優化問題中看到一個算法,即梯度下降法,那到底什麼是梯度下降法呢?

維基百科給出的定義是梯度下降法(Gradient descent)是一個一階最優化算法,通常也稱爲最速下降法。 要使用梯度下降法找到一個函數的局部極小值,必須向函數上當前點對應梯度(或者是近似梯度)的反方向的規定步長距離點進行迭代搜索。如果相反地向梯度正方向迭代進行搜索,則會接近函數的局部極大值點;這個過程則被稱爲梯度上升法。

額,問題又來了,什麼是梯度?爲了避免各種複雜的說辭,咱們可以這樣簡單理解,在單變量的實值函數的情況,梯度就是導數,或者,對於一個線性函數,也就是線的斜率。

1.1 梯度下降法示例

舉個形象的例子吧,比如當我們要做一個房屋價值的評估系統,那都有哪些因素決定或影響房屋的價值呢?比如說面積、房子的大小(幾室幾廳)、地段、朝向等等,這些影響房屋價值的變量被稱爲特徵(feature)。在這裏,爲了簡單,我們假定房屋只由一個變量影響,那就是房屋的面積。

假設有一個房屋銷售的數據如下:
面積(m^2)  銷售價錢(萬元)
123            250
150            320
87              160
102            220
…               …

插句題外話,順便吐下槽,這套房屋價格數據在五年前可能還能買到帝都5環左右的房子,但現在只能買到二線城市的房屋了。

我們可以做出一個圖,x軸是房屋的面積。y軸是房屋的售價,如下:

如果來了一個新的房子/面積,假設在房屋銷售價格的記錄中沒有的,我們怎麼辦呢?

我們可以用一條曲線去儘量準的擬合這些數據,然後如果有新的輸入面積,我們可以在將曲線上這個點對應的值返回。如果用一條直線去擬合房屋價格數據,可能如下圖這個樣子:

而圖中綠色的點就是我們想要預測的點。

而圖中綠色的點就是我們想要預測的點。

爲了數學建模,首先給出一些概念和常用的符號。

房屋銷售記錄表 – 訓練集(training set)或者訓練數據(training data), 是我們流程中的輸入數據,一般稱爲x
房屋銷售價錢 – 輸出數據,一般稱爲y
擬合的函數(或者稱爲假設或者模型),一般寫做 y = h(x)
訓練數據的條目數(#training set), 一條訓練數據是由一對輸入數據和輸出數據組成的
輸入數據的維度(特徵的個數,#features),n

然後便是一個典型的機器學習的過程,首先給出一個輸入數據,我們的算法會通過一系列的過程得到一個估計的函數,這個函數有能力對沒有見過的新數據給出一個新的估計,也被稱爲構建一個模型。

我們用X1,X2..Xn 去描述feature裏面的分量,比如x1=房間的面積,x2=房間的朝向等等,我們可以做出一個估計函數:

θ在這兒稱爲參數,在這兒的意思是調整feature中每個分量的影響力,就是到底是房屋的面積更重要還是房屋的地段更重要。

如果我們令X0 = 1,就可以用向量的方式來表示了:

我們程序也需要一個機制去評估我們θ是否比較好,所以說需要對我們做出的h函數進行評估,一般這個進行評估的函數稱爲損失函數(loss function),描述h函數不好的程度,這裏我們稱這個函數爲J函數。

換言之,我們把對x(i)的估計值與真實值y(i)差的平方和作爲損失函數,前面乘上的係數1/2是爲了方便求導(且在求導的時候,這個係數會消掉)。

如何調整θ以使得J(θ)取得最小值有很多方法,其中有最小二乘法(min square),是一種完全是數學描述的方法,另外一種就是梯度下降法。

1.2 梯度下降算法流程

梯度下降法的算法流程如下:
1)首先對θ賦值,這個值可以是隨機的,也可以讓θ是一個全零的向量。
2)改變θ的值,使得J(θ)按梯度下降的方向進行減少。

爲了描述的更清楚,給出下面的圖:

這是一個表示參數θ與誤差函數J(θ)的關係圖,紅色的部分是表示J(θ)有着比較高的取值,我們需要的是,能夠讓J(θ)的值儘量的低,也就是達到深藍色的部分(讓誤差/損失最小嘛)。θ0,θ1表示θ向量的兩個維度。

在上面提到梯度下降法的第一步是給θ給一個初值,假設隨機給的初值是在圖上的十字點。

然後我們將θ按照梯度下降的方向進行調整,就會使得J(θ)往更低的方向進行變化,如下圖所示,算法的結束將是在J(θ)下降到無法繼續下降爲止。

當然,可能梯度下降的最終點並非是全局最小點,即也可能是一個局部最小點,如下圖所示:

 

上面這張圖就是描述的一個局部最小點,這是我們重新選擇了一個初始點得到的,看來我們這個算法將會在很大的程度上被初始點的選擇影響而陷入局部最小點。

下面我將用一個例子描述一下梯度減少的過程,對於我們的函數J(θ)求偏導J:

下面是更新的過程,也就是θi會向着梯度最小的方向進行減少。θi表示更新之前的值,-後面的部分表示按梯度方向減少的量,α表示步長,也就是每次按照梯度減少的方向變化多少。

一個很重要的地方值得注意的是,梯度是有方向的,對於一個向量θ,每一維分量θi都可以求出一個梯度的方向,我們就可以找到一個整體的方向,在變化的時候,我們就朝着下降最多的方向進行變化就可以達到一個最小點,不管它是局部的還是全局的。

用更簡單的數學語言進行描述步驟2)是這樣的:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章