白話梯度下降法

在做數據挖掘的時候經常會遇到梯度下降法求參的問題,一直隱隱約約感覺是那麼回事,可是又說不出具體原理,剛好看到一個文章介紹,通過大白話就把原理說清楚了。

在求解機器學習算法的模型參數,即無約束優化問題時,梯度下降是最常採用的方法之一,另一種常用的方法是最小二乘法。

在求解損失函數的最小值時,可以通過梯度下降法來一步步的迭代求解,得到最小化的損失函數和模型參數值。

看一個簡單的例子,f(x)=x**2+2,如下圖

白話梯度下降法

剛開始我們不知道f(x)的極值在什麼地方,那我們可以在函數曲線上隨機一個點(x,x**2+2)

假設取得是(5,27),這個是不是極值點呢?讓計算機網兩邊看看找兩個各一個點,x=4.9,x=5.1

分別對於兩個點(4.9,26.1)和(5.1,28.01),一看x=4.9這個點的值更低,那好,就往這邊移動,迭代二十幾次就可以挪到極值點x=0處了

白話梯度下降法

白話梯度下降法

梯度下降法就是為了解決這種問題,這個方法寫出來就是這樣:

白話梯度下降法

這是一個迭代過程,每次迭代更新的值賦給下一次迭代的值

η又稱學習率,是一個挪動步長的基數,df(x)/dx是導函數,當離得遠的時候導數大,移動的就快,當接近極值時,導數非常小,移動的就非常小,防止跨過極值點

那怎麼確定到極值點了呢?

循環迭代,知道x的值變化使得f(x)在兩次迭代之間的差極小或者基本沒有變化的時候,說明已經達到局部最小了,此時的x 就是極值點了

如果我們遇到多元函數怎麼辦?

比如這樣的:f(x,y) = x**2+y**2

圖像如下:

白話梯度下降法

像一個碗,和一元函數只有兩個挪動方向不同,我們有4個方向可以挪動嘗試

那麼此時的方法應該是這樣的:

白話梯度下降法

分別表示在x,y上的偏導數,

在實際的機器學習或者深度學習中,有成百上千個維度需要更新,在快速跌倒靠近極值點時,我們希望能產生更高效的收斂效果,也就是高效的通過迭代來逼近極值的過程,那麼什麼樣的迭代原則收斂速度會更快呢?

白話梯度下降法

在多維空間中,要想快的話,就得沿著最陡峭的方向走。

梯度:

白話梯度下降法

多維度情況下,要沿著各個偏導函數組成的向量迭代才更高效,也就是沿著梯度方向

白話梯度下降法

此時根據偏導數來完成更新迭代

如果維度變量很多,有上千個怎麼辦?也可以表示成這樣的

白話梯度下降法

多維函數的梯度

白話梯度下降法

基於基本的梯度下降法發展了兩種梯度下降方法,分別為隨機梯度下降法和批量梯度下降法。

1,批量梯度下降法。

在梯度下降法的每一步迭代計算後,我們都需要計算成本函數及其導數的情況。每一次的迭代計算過程就被稱為一批次,因此這個形式的梯度下降法也被稱為批量梯度下降法。批量梯度下降法是機器學習領域中常見的一種梯度下降方法。,

2,隨機梯度下降法

處理大規模的數據時,批量梯度下降法的運算效率非常低。因為梯度下降法在每次迭代過程中都需要計算訓練集的預測情況,所以當數據量非常大時需要耗費較長的時間。當你處理大規模的數據時,你可以利用隨機梯度下降法來提高計算效率。

該算法與批量梯度下降法的不同之處在於它對每個隨機訓練樣本都執行係數更新過程,而不是在每批樣本運算完後才執行係數更新過程。隨機梯度下降法的第一個步驟要求訓練集的樣本是隨機排序的,這是為了打亂係數的更新過程。因為我們將在每次訓練實例結束後更新系數值,所以係數值和成本函數值將會出現隨機跳躍的情況。通過打亂係數更新過程的順序,我們可以利用這個隨機遊走的性質來避免模型不收斂的問題。

總結:

1,梯度下降法常常用來求凸函數的最小值,例如機器學習中各種代價函數的最小值。

2,對於非凸函數,梯度下降法求的是極小值,而不是最小值,梯度下降算法只能求出一個局部最小值,不一定是全局最小值,但這不影響它是一個好的方法。如下圖,可能只是進去多個山谷中的一個

白話梯度下降法


分享到:


相關文章: