在應用機器學習演算法時,我們通常採用梯度下降法來對採用的演算法進行訓練。其實,常用的梯度下降法還具體包含有三種不同的形式,它們也各自有著不同的優缺點。
下面我們以線性回歸演算法來對三種梯度下降法進行比較。
一般線性回歸函式的假設函式為:
對應的損失函式為:
下圖為乙個二維引數(θ
0'>θ0和θ1
'>θ1
)組對應能量函式的視覺化圖:θ0
批量梯度下降法(batch gradient descent,簡稱bgd)是梯度下降法最原始的形式,它的具體思路是在更新每一引數時都使用所有的樣本來進行更新。
我們的目的是要誤差函式盡可能的小,即求解weights使誤差函式盡可能小。首先,我們隨機初始化weigths,然後不斷反覆的更新weights使得誤差函式減小,直到滿足要求時停止。這裡更新演算法我們選擇梯度下降演算法,利用初始化的weights並且反覆更新weights:
這裡代表學習率,表示每次向著j最陡峭的方向邁步的大小。為了更新weights,我們需要求出函式j的偏導數。首先當我們只有乙個資料點(x,y)的時候,j的偏導數是:
則對所有資料點,上述損失函式的偏導(累和)為:
再最小化損失函式的過程中,需要不斷反覆的更新weights使得誤差函式減小,更新過程如下:
那麼好了,每次引數更新的偽**如下:
由上圖更新公式我們就可以看到,我們每一次的引數更新都用到了所有的訓練資料(比如有m個,就用到了m個),如果訓練資料非常多的話,是非常耗時的。
下面給出批梯度下降的收斂圖:
從圖中,我們可以得到bgd迭代的次數相對較少。
**實現:
def2、隨機梯度下降法sgd由於批梯度下降每跟新乙個引數的時候,要用到所有的樣本數,所以訓練速度會隨著樣本數量的增加而變得非常緩慢。隨機梯度下降正是為了解決這個辦法而提出的。它是利用每個樣本的損失函式對θ求偏導得到對應的梯度,來更新θ:batchgradientdescent(x, y, theta, alpha, m, maxiteration):
for i in
range(maxiteration):
hypothesis =np.dot(x, theta)
loss = hypothesis -y
gradient = np.dot(x.transpose(), loss) /m
theta = theta - alpha * gradient #
對所有樣本求和
return theta
更新過程如下:
隨機梯度下降是通過每個樣本來迭代更新一次,對比上面的批量梯度下降,迭代一次需要用到所有訓練樣本(往往如今真實問題訓練資料都是非常巨大),一次迭代不可能最優,如果迭代10次的話就需要遍歷訓練樣本10次。
但是,sgd伴隨的乙個問題是噪音較bgd要多,使得sgd並不是每次迭代都向著整體最優化方向。
隨機梯度下降收斂圖如下:
我們可以從圖中看出sgd迭代的次數較多,在解空間的搜尋過程看起來很盲目。但是大體上是往著最優值方向移動。
**實現:
def3、min-batch 小批量梯度下降法mbgd我們從上面兩種梯度下降法可以看出,其各自均有優缺點,那麼能不能在兩種方法的效能之間取得乙個折衷呢?既演算法的訓練過程比較快,而且也要保證最終引數訓練的準確率,而這正是小批量梯度下降法(mini-batch gradient descent,簡稱mbgd)的初衷。stochasticgradientdescent(x, y, theta, alpha, m, maxiteration):
data =
for i in range(10):
#這裡隨便挑選乙個進行更新點進行即可(不用想bgd一樣全部考慮)
for i in
range(maxiteration):
hypothesis =np.dot(x, theta)
loss = hypothesis - y #
這裡還是有十個樣本
index = random.sample(data, 1)[0] #
隨機抽取乙個樣本,得到它的下標
gradient = loss[index] * x[index] #
只取乙個點進行更新計算
theta = theta - alpha *gradient.t
return theta
我們假設每次更新引數的時候用到的樣本數為10個(不同的任務完全不同,這裡舉乙個例子而已)
更新偽**如下:
4、三種梯度下降方法的總結
1.批梯度下降每次更新使用了所有的訓練資料,最小化損失函式,如果只有乙個極小值,那麼批梯度下降是考慮了訓練集所有資料,是朝著最小值迭代運動的,但是缺點是如果樣本值很大的話,更新速度會很慢。
2.隨機梯度下降在每次更新的時候,只考慮了乙個樣本點,這樣會大大加快訓練資料,也恰好是批梯度下降的缺點,但是有可能由於訓練資料的雜訊點較多,那麼每一次利用雜訊點進行更新的過程中,就不一定是朝著極小值方向更新,但是由於更新多輪,整體方向還是大致朝著極小值方向更新,又提高了速度。
3.小批量梯度下降法是為了解決批梯度下降法的訓練速度慢,以及隨機梯度下降法的準確性綜合而來,但是這裡注意,不同問題的batch是不一樣的。
梯度下降法的三種形式BGD SGD以及MBGD
在應用機器學習演算法時,我們通常採用梯度下降法來對採用的演算法進行訓練。其實,常用的梯度下降法還具體包含有三種不同的形式,它們也各自有著不同的優缺點。下面我們以線性回歸演算法來對三種梯度下降法進行比較。一般線性回歸函式的假設函式為 h nj 0 j xjh j 0n jxj 對應的能量函式 損失函式...
梯度下降法的三種形式BGD SGD以及MBGD
閱讀目錄 在應用機器學習演算法時,我們通常採用梯度下降法來對採用的演算法進行訓練。其實,常用的梯度下降法還具體包含有三種不同的形式,它們也各自有著不同的優缺點。下面我們以線性回歸演算法來對三種梯度下降法進行比較。一般線性回歸函式的假設函式為 h n j 0 jxj h j 0n jxj 對應的能量函...
梯度下降法的三種形式BGD SGD以及MBGD
閱讀目錄 1.批量梯度下降法bgd 2.隨機梯度下降法sgd 3.小批量梯度下降法mbgd 4.總結 在應用機器學習演算法時,我們通常採用梯度下降法來對採用的演算法進行訓練。其實,常用的梯度下降法還具體包含有三種不同的形式,它們也各自有著不同的優缺點。下面我們以線性回歸演算法來對三種梯度下降法進行比...