1. 程式人生 > >[Machine Learning] 梯度下降法的三種形式BGD、SGD以及MBGD

[Machine Learning] 梯度下降法的三種形式BGD、SGD以及MBGD

閱讀目錄

  在應用機器學習演算法時,我們通常採用梯度下降法來對採用的演算法進行訓練。其實,常用的梯度下降法還具體包含有三種不同的形式,它們也各自有著不同的優缺點。

  下面我們以線性迴歸演算法來對三種梯度下降法進行比較。

  一般線性迴歸函式的假設函式為:

h θ =∑ n j=0 θ j x j  hθ=∑j=0nθjxj

  對應的能量函式(損失函式)形式為:

J train (θ)=1/(2m)∑ m i=1 (h θ (x (i) )−y (i) ) 2  Jtrain(θ)=1/(2m)∑i=1m(hθ(x(i))−y(i))2

  下圖為一個二維引數(θ 0  θ0 和θ 1  θ1 )組對應能量函式的視覺化圖:

回到頂部

1. 批量梯度下降法BGD

   批量梯度下降法(Batch Gradient Descent,簡稱BGD)是梯度下降法最原始的形式,它的具體思路是在更新每一引數時都使用所有的樣本來進行更新,其數學形式如下:

  (1) 對上述的能量函式求偏導:

  (2) 由於是最小化風險函式,所以按照每個引數θ θ 的梯度負方向來更新每個θ θ :

  具體的虛擬碼形式為:

  repeat{    

      

        (for every j=0, ... , n)

  }

  從上面公式可以注意到,它得到的是一個全域性最優解,但是每迭代一步,都要用到訓練集所有的資料,如果樣本數目m m 很大,那麼可想而知這種方法的迭代速度!所以,這就引入了另外一種方法,隨機梯度下降。

  優點:全域性最優解;易於並行實現;

  缺點:當樣本數目很多時,訓練過程會很慢。

  從迭代的次數上來看,BGD迭代的次數相對較少。其迭代的收斂曲線示意圖可以表示如下:

回到頂部

2. 隨機梯度下降法SGD

  由於批量梯度下降法在更新每一個引數時,都需要所有的訓練樣本,所以訓練過程會隨著樣本數量的加大而變得異常的緩慢。隨機梯度下降法(Stochastic Gradient Descent,簡稱SGD)正是為了解決批量梯度下降法這一弊端而提出的。

  將上面的能量函式寫為如下形式:

  利用每個樣本的損失函式對θ θ 求偏導得到對應的梯度,來更新θ θ :

  具體的虛擬碼形式為:

  1. Randomly shuffle dataset;

  2. repeat{

    for i=1, ... , m m {

      

       (for j=0, ... , n n )

    }

  }

  隨機梯度下降是通過每個樣本來迭代更新一次,如果樣本量很大的情況(例如幾十萬),那麼可能只用其中幾萬條或者幾千條的樣本,就已經將theta迭代到最優解了,對比上面的批量梯度下降,迭代一次需要用到十幾萬訓練樣本,一次迭代不可能最優,如果迭代10次的話就需要遍歷訓練樣本10次。但是,SGD伴隨的一個問題是噪音較BGD要多,使得SGD並不是每次迭代都向著整體最優化方向。

  優點:訓練速度快;

  缺點:準確度下降,並不是全域性最優;不易於並行實現。

  從迭代的次數上來看,SGD迭代的次數較多,在解空間的搜尋過程看起來很盲目。其迭代的收斂曲線示意圖可以表示如下:

回到頂部

3. 小批量梯度下降法MBGD

  有上述的兩種梯度下降法可以看出,其各自均有優缺點,那麼能不能在兩種方法的效能之間取得一個折衷呢?即,演算法的訓練過程比較快,而且也要保證最終引數訓練的準確率,而這正是小批量梯度下降法(Mini-batch Gradient Descent,簡稱MBGD)的初衷。

  MBGD在每次更新引數時使用b個樣本(b一般為10),其具體的虛擬碼形式為:

  Say b=10, m=1000.

  Repeat{

    for i=1, 11, 21, 31, ... , 991{

    

    (for every j=0, ... , n n )

    }

  }

回到頂部

4. 總結

  Batch gradient descent: Use all examples in each iteration;

  Stochastic gradient descent: Use 1 example in each iteration;

  Mini-batch gradient descent: Use b examples in each iteration.