轉載請注明出處:http://www.cnblogs.com/Peyton-Li/
在求解機器學習算法的優化問題時,梯度下降是經常采用的方法之一。
梯度下降不一定能夠找到全局最優解,有可能是一個局部最優解。但如果損失函數是凸函數,梯度下降法得到的一定是全局最優解。
梯度下降的相關概念:
1、步長或學習率(learning rate):步長和學習率是一個東西,只是在不同的地方叫法不一樣,以下叫做步長。步長決定了在梯度下降過程中,每一步沿梯度負方向前進的長度。
2、假設函數(hypothesis function):也就是我們的模型學習到的函數,記為。
3、損失函數(loss function):為了評估模型的好壞,通常用損失函數來度量擬合的程度。在線性回歸中,損失函數通常為樣本label和假設函數輸出的差的平方,比如對樣本,采用線性回歸,損失函數為:
梯度下降算法:
1、先決條件:確認優化模型的假設函數和損失函數
2、參數的初始化:初始化假設函數的參數(
是一個向量),算法終止距離
以及步長
3、算法過程:
1)確定當前位置的損失函數的梯度,對於,其梯度如下:
2)確定是否所有的,梯度下降的距離都小於
,如果小於
則算法終止,當前所有的
即為最終結果。否則進入步驟3
3)更新所有的,對於
,其更新表達式如下。更新完畢后進入步驟1
以上為梯度下降算法。
梯度下降法關於參數更新方式的不同又可分為:
1、批量梯度下降法(Batch Gradient Descent(BGD))
2、隨機梯度下降法(Stochastic Gradient Descent(SGD))
3、小批量梯度下降法(Mini-batch Gradient Descent(MBGD))
1、批量梯度下降法(Batch Gradient Descent(BGD)):
批量梯度下降法是梯度下降法最原始的形式,它的具體思路是在更新每一參數時都使用所有的樣本來進行更新,其數學形式如下:
1)對上述的損失函數求偏導:
2)由於是最小化風險函數,所以按照每個參數的梯度負方向來更新每個
:
具體的偽代碼形式為:
repeat{
(for every j=0,...,n)
}
從上面的公式可以看出,它得到的是一個全局最優解,但是每迭代一次,都要用到訓練集所有的數據,如果樣本數目m很大,那么這種迭代速度將會很慢。
優點:全局最優解;易於並行實現
缺點:當樣本數目很多時,訓練過程會很慢
從迭代次數上來看,BGD迭代的次數相對較少。
2、隨機梯度下降法(Stochastic Gradient Descent(SGD)):
由於批量梯度下降法在更新每一個參數時,都需要所有的訓練樣本,訓練過程會隨着樣本數量的加大而變得異常緩慢。隨機梯度下降法正是為了解決批量梯度下降法這一弊端而提出的。
將損失函數寫為如下形式:
利用每個樣本的損失函數對求偏導得到對應的梯度,來更新
:
具體的偽代碼形式為:
1、Randomly shuffle dataset;
2、repeat{
for i=1,...,m{
(for j=0,...,n)
}
}
隨機梯度下降是通過每個樣本來迭代更新一次,如果樣本量很大的情況(例如幾十萬),那么可能只用其中幾萬條或者幾千條的樣本,就已經將迭代到最優解了,對比上面的批量梯度下降,迭代一次要用到所有的訓練樣本,一次迭代不可能最優。而且,SGD伴隨的一個問題是噪音較BGD要多,使得SGD並不是每次迭代都向着整體最優化方向。
優點:訓練速度快
缺點:准確度下降,並不是全局最優;不易於並行實現
從迭代次數上看,SGD迭代的次數較多,在解空間的搜索過程看起來有些盲目。
SGD方法的一個缺點是,其更新方向完全依賴於當前的batch,因而其更新十分不穩定。解決這一問題的一個簡單的做法便是引入momentum。
momentum即動量,它模擬的是物體運動時的慣性,即更新的時候在一定程度上保留之前更新的方向,同時利用當前batch的梯度微調最終的更新方向。這樣一來,可以在一定程度上增加穩定性,從而學習地更快,並且還有一定擺脫局部最優的能力:




3、小批量梯度下降法(Mini-batch Gradient Descent(MBGD)):
由上述的兩種梯度下降法可以看出,其各自均有優缺點。而小批量梯度下降法(Mini-batch Gradient Descent(MBGD))則在這兩種方法的性能之間取得一個折中,即算法的訓練過程比較快,而且也保證最終參數訓練的准確率。
MBGD在每次更新參數時使用b個樣本(b一般為10),其具體的偽代碼形式為:
set b=10, m=1000
Repeat{
for i=1,11,21,31,991{
(for every j=0,...,n)
}
}
參考博客:
http://www.cnblogs.com/pinard/p/5970503.html
http://www.cnblogs.com/maybe2030/p/5089753.html