1. 程式人生 > >梯度下降法和隨機梯度下降法和小批量梯度對比

梯度下降法和隨機梯度下降法和小批量梯度對比

對於梯度下降法 如果訓練樣本集特別大(假設為樣本3億:表示在美國大學3億人口,因此美國的人口普查擁有這樣數量級的資料),如果想用這些資料去擬合一個線性迴歸模型,那麼需要對著3億資料進行求和,計算量太大了,這種梯度下降也被稱為批量地圖下降法,(批量:表示每次我們都要同事考慮所有訓練樣本,我們稱之為一批訓練樣本)

可以想象一下如果真有3億資料存在計算機硬碟中,那麼這種演算法需要將這3億人口資料讀入到計算機中,僅僅為了計算這個微分項(下圖中的),需要不斷的將這些資料傳入計算機的記憶體中但是計算機的記憶體存不了這個多資料,所以需要慢慢讀取這些資料,然後進行一次求和,再算出這個微分,做完這些以後,自己才剛剛完成梯度下降法中的其中一步,你還得再來一遍遍歷這3億資料,然後計算和的值,做完這一步你依然只完成了梯度下降法一小步,一直這樣下去進行下去,為了計算收斂結果,需要花費很長的時間,對比這種批量梯度下降法,下面介紹一種新的演算法隨機梯度下降法

。這種方法完全不同了,每次迭代中不需要考慮所有的訓練樣本啦,僅僅只需要考慮一個樣本。

一、隨機梯度下降(Stochastic gradient descent)

如果我們一定需要一個大規模的訓練集,我們可以嘗試使用隨機梯度下降法來代替批量梯度下降法。

 隨機梯度下降演算法在每一次計算之後便更新引數\large \Theta,而不需要將所有的訓練集求和,而在梯度下降法還沒有完成一次迭代的時候,隨機梯度下降法便已經走了好遠了,但是這樣的演算法存在一定的問題,不是每一步都是朝著正確的方向邁出的,因此演算法雖然會逐漸走向全域性最小值的位置,但是可能無法站到那個最小值得那一點,而是在最小值的附近徘徊。

 注意點:隨機梯度下降法的外層我們一般認為1-10都是合理的,當然如果m非常的大,即是內層迴圈非常的大,那麼我們外層這時候可以設定為1為合理的。

二、 小批量梯度下降(Mini-Batch gradient descent)

           小批量梯度下降演算法是介於批量梯度下降演算法和隨機梯度下降演算法之間的,每計算常數b次訓練例項,便更新一次引數\large \Theta

批量梯度下降:use all examples in each iteration. 
           隨機梯度下降:use 1 example in each iteration 
           mini-batch梯度下降:use b examples in each iteration

下面這個例子中: b = 10 m=1000

通常我們令b在2-200之間,這樣做的好處是:我們可以用向量化的方式來迴圈b個訓練例項,如果我們用線性代數庫比較好,能夠支援平行處理,那麼演算法的總體表現將不受影響(與隨機梯度下降相同)

三、下面三種演算法優缺點對比:

(1)批量梯度下降法(Batch Gradient Descent) :在更新引數時都使用所有的樣本來進行更新。

  優點:全域性最優解,能保證每一次更新權值,都能降低損失函式;易於並行實現。

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

(2)隨機梯度下降法(Stochastic Gradient Descent):在更新引數時都使用一個樣本來進行更新。每一次跟新引數都用一個樣本,更新很多次。如果樣本量很大的情況(例如幾十萬),那麼可能只用其中幾萬條或者幾千條的樣本,就已經將引數迭代到最優解了,對比上面的批量梯度下降,迭代一次需要用到十幾萬訓練樣本,一次迭代不可能最優,如果迭代10次的話就需要遍歷訓練樣本10次,這種方式計算複雜度太高。

  優點:訓練速度快;

  缺點:準確度下降,並不是全域性最優;不易於並行實現。從迭代的次數上來看,隨機梯度下降法迭代的次數較多,在解空間的搜尋過程看起來很盲目。噪音很多,使得它並不是每次迭代都向著整體最優化方向。

(3)小批量梯度下降法(Mini-batch Gradient Descen):在更新每一引數時都使用一部分樣本來進行更新。為了克服上面兩種方法的缺點,又同時兼顧兩種方法的優點。

4)三種方法使用的情況:如果樣本量比較小,採用批量梯度下降演算法。如果樣本太大,或者線上演算法,使用隨機梯度下降演算法。在實際的一般情況下,採用小批量梯度下降演算法。