姓名:尤學(xué)強? 學(xué)號:17101223374
轉(zhuǎn)載自:http://mp.weixin.qq.com/s/DbAagAvzwy8iNYzeA1A8RA
【嵌牛導(dǎo)讀】:采用梯度下降法來對采用的算法進行訓(xùn)練
【嵌牛鼻子】:函數(shù)杈湾,算法
【嵌牛提問】:怎樣才是最優(yōu)算法澳叉?
【嵌牛正文】:
在應(yīng)用機器學(xué)習(xí)算法時盖喷,我們通常采用梯度下降法來對采用的算法進行訓(xùn)練夯秃。其實愤惰,常用的梯度下降法還具體包含有三種不同的形式,它們也各自有著不同的優(yōu)缺點锨推。
下面我們以線性回歸算法來對三種梯度下降法進行比較铅歼。
一般線性回歸函數(shù)的假設(shè)函數(shù)為:
對應(yīng)的損失函數(shù)為:
(這里的1/2是為了后面求導(dǎo)計算方便)
下圖作為一個二維參數(shù)(theta0,theta1)組對應(yīng)能量函數(shù)的可視化圖:
下面我們來分別講解三種梯度下降法
1
批量梯度下降法BGD
我們的目的是要誤差函數(shù)盡可能的小换可,即求解weights使誤差函數(shù)盡可能小椎椰。首先,我們隨機初始化weigths沾鳄,然后不斷反復(fù)的更新weights使得誤差函數(shù)減小慨飘,直到滿足要求時停止。這里更新算法我們選擇梯度下降算法译荞,利用初始化的weights并且反復(fù)更新weights:
這里代表學(xué)習(xí)率瓤的,表示每次向著J最陡峭的方向邁步的大小。為了更新weights磁椒,我們需要求出函數(shù)J的偏導(dǎo)數(shù)。首先當(dāng)我們只有一個數(shù)據(jù)點(x,y)的時候玫芦,J的偏導(dǎo)數(shù)是:
則對所有數(shù)據(jù)點浆熔,上述損失函數(shù)的偏導(dǎo)(累和)為:
再最小化損失函數(shù)的過程中,需要不斷反復(fù)的更新weights使得誤差函數(shù)減小,更新過程如下:
那么好了医增,每次參數(shù)更新的偽代碼如下:
由上圖更新公式我們就可以看到慎皱,我們每一次的參數(shù)更新都用到了所有的訓(xùn)練數(shù)據(jù)(比如有m個,就用到了m個)叶骨,如果訓(xùn)練數(shù)據(jù)非常多的話茫多,是非常耗時的。
下面給出批梯度下降的收斂圖:
從圖中忽刽,我們可以得到BGD迭代的次數(shù)相對較少天揖。
2
隨機梯度下降法SGD
由于批梯度下降每跟新一個參數(shù)的時候,要用到所有的樣本數(shù)跪帝,所以訓(xùn)練速度會隨著樣本數(shù)量的增加而變得非常緩慢今膊。隨機梯度下降正是為了解決這個辦法而提出的。它是利用每個樣本的損失函數(shù)對θ求偏導(dǎo)得到對應(yīng)的梯度伞剑,來更新θ:
更新過程如下:
隨機梯度下降是通過每個樣本來迭代更新一次斑唬,對比上面的批量梯度下降,迭代一次需要用到所有訓(xùn)練樣本(往往如今真實問題訓(xùn)練數(shù)據(jù)都是非常巨大)黎泣,一次迭代不可能最優(yōu)恕刘,如果迭代10次的話就需要遍歷訓(xùn)練樣本10次。
但是抒倚,SGD伴隨的一個問題是噪音較BGD要多褐着,使得SGD并不是每次迭代都向著整體最優(yōu)化方向。
隨機梯度下降收斂圖如下:
我們可以從圖中看出SGD迭代的次數(shù)較多衡便,在解空間的搜索過程看起來很盲目献起。但是大體上是往著最優(yōu)值方向移動。
3
min-batch 小批量梯度下降法MBGD
我們從上面兩種梯度下降法可以看出镣陕,其各自均有優(yōu)缺點谴餐,那么能不能在兩種方法的性能之間取得一個折衷呢?既算法的訓(xùn)練過程比較快呆抑,而且也要保證最終參數(shù)訓(xùn)練的準(zhǔn)確率岂嗓,而這正是小批量梯度下降法(Mini-batch Gradient Descent,簡稱MBGD)的初衷鹊碍。
我們假設(shè)每次更新參數(shù)的時候用到的樣本數(shù)為10個(不同的任務(wù)完全不同厌殉,這里舉一個例子而已)
更新偽代碼如下:
4
實例以及代碼詳解
這里參考他人博客,創(chuàng)建了一個數(shù)據(jù)侈咕,如下圖所示:
待訓(xùn)練數(shù)據(jù)A公罕、B為自變量,C為因變量耀销。