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

  在應用機器學習算法時,咱們一般採用梯度降低法來對採用的算法進行訓練。其實,經常使用的梯度降低法還具體包含有三種不一樣的形式,它們也各自有着不一樣的優缺點。算法

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

  通常線性迴歸函數的假設函數爲:機器學習

$h_{\theta}=\sum_{j=0}^{n}\theta_{j}x_{j}$函數

  對應的能量函數(損失函數)形式爲:性能

$J_{train}(\theta)=1/(2m)\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})^{2}$學習

  下圖爲一個二維參數($\theta_{0}$和$\theta_{1}$)組對應能量函數的可視化圖:優化

1. 批量梯度降低法BGD

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

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

  (2) 因爲是最小化風險函數,因此按照每一個參數$\theta$的梯度負方向來更新每一個$\theta$:數學

  具體的僞代碼形式爲:

  repeat{    

      

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

  }

  從上面公式能夠注意到,它獲得的是一個全局最優解,可是每迭代一步,都要用到訓練集全部的數據,若是樣本數目$m$很大,那麼可想而知這種方法的迭代速度!因此,這就引入了另一種方法,隨機梯度降低。

  優勢:全局最優解;易於並行實現;

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

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

2. 隨機梯度降低法SGD

  因爲批量梯度降低法在更新每個參數時,都須要全部的訓練樣本,因此訓練過程會隨着樣本數量的加大而變得異常的緩慢。隨機梯度降低法(Stochastic Gradient Descent,簡稱SGD)正是爲了解決批量梯度降低法這一弊端而提出的。

  將上面的能量函數寫爲以下形式:

  利用每一個樣本的損失函數對$\theta$求偏導獲得對應的梯度,來更新$\theta$:

  具體的僞代碼形式爲:

  1. Randomly shuffle dataset;

  2. repeat{

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

      

       (for j=0, ... , $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$)

    }

  }

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.

相關文章
相關標籤/搜索