機器學習---梯度下降法

 

       在機器學習算法中,對於很多監督學習模型,需要對原始的模型構建損失函數,接下來便是通過優化算法對損失函數進行優化,以便尋找到最優的參數。在求解機器學習參數的優化算法中,使用較多的是基於梯度下降的優化算法(Gradient Descent, GD)。 

 梯度下降法英語:Gradient descent)是一個一階最優化算法,通常也稱爲最速下降法。 要使用梯度下降法找到一個函數的局部極小值,必須向函數上當前點對應梯度(或者是近似梯度)的反方向的規定步長距離點進行迭代搜索。如果相反地向梯度正方向迭代進行搜索,則會接近函數的局部極大值點;這個過程則被稱爲梯度上升法

  梯度下降法有很多優點,其中,在梯度下降法的求解過程中,只需求解損失函數的一階導數,計算的代價比較小,這使得梯度下降法能在很多大規模數據集上得到應用。梯度下降法的含義是通過當前點的梯度方向尋找到新的迭代點。

  基本思想可以這樣理解:我們從山上的某一點出發,找一個最陡的坡走一步(也就是找梯度方向),到達一個點之後,再找最陡的坡,再走一步,直到我們不斷的這麼走,走到最“低”點(最小花費函數收斂點)。

        這裏寫圖片描述 
  
如上圖所示,得到了局部最優解。x,y表示的是theta0和theta1,z方向表示的是花費函數,很明顯出發點不同,最後到達的收斂點可能不一樣。當然如果是碗狀的,那麼收斂點就應該是一樣的。

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

1. 批量梯度下降法BGD

     批量梯度下降法(Batch Gradient Descent,簡稱BGD)是梯度下降法最原始的形式,它的具體思路是在更新每一參數時都使用所有的樣本來進行更新。
    比如對一個線性迴歸(Linear Logistics)模型,假設下面的h(x)是要擬合的函數,J(theta)爲損失函數,theta是參數,要迭代求解的值,theta求解出來了那最終要擬合的函數h(theta)就出來了。其中m是訓練集的樣本個數,n是特徵的個數。
                                                   
  

     (1)將J(theta)對theta求偏導,得到每個theta對應的的梯度:

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

  (3)從上面公式可以注意到,它得到的是一個全局最優解,但是每迭代一步,都要用到訓練集所有的數據,如果m很大,那麼可想而知這種方法的迭代速度會相當的慢。所以,這就引入了另外一種方法——隨機梯度下降。

   2. 隨機梯度下降法

    隨機梯度下降法(Stochastic Gradient Descent,SGD)是隨機和優化相結合的產物,是一種很神奇的優化方法,屬於梯度下降的一種,適用於大規模問題。它計算過程是隨機抽取樣本進行計算更新參數的。,隨機的情況下其實參數更新衝突的概率就大大降低了,即便衝突了梯度也不完全是往差的方向發展,畢竟都是朝着梯度下降的方向更新的。

      

(1)上面的風險函數可以寫成如下這種形式,損失函數對應的是訓練集中每個樣本的粒度,而上面批量梯度下降對應的是所有的訓練樣本:

  (2)每個樣本的損失函數,對theta求偏導得到對應梯度,來更新theta:

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

      隨機梯度下降每次迭代只使用一個樣本,當樣本個數m很大的時候,隨機梯度下降迭代一次的速度要遠高於批量梯度下降方法。兩者的關係可以這樣理解:隨機梯度下降方法以損失很小的一部分精確度和增加一定數量的迭代次數爲代價,換取了總體的優化效率的提升。增加的迭代次數遠遠小於樣本的數量。

   對批量梯度下降法和隨機梯度下降法的總結:

  批量梯度下降---最小化所有訓練樣本的損失函數,使得最終求解的是全局的最優解,即求解的參數是使得風險函數最小,但是對於大規模樣本問題效率低下。

  隨機梯度下降---最小化每條樣本的損失函數,雖然不是每次迭代得到的損失函數都向着全局最優方向, 但是大的整體的方向是向全局最優解的,最終的結果往往是在全局最優解附近,適用於大規模訓練樣本情況。

3 小批量梯度下降法

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

    在上述的批梯度的方式中每次迭代都要使用到所有的樣本,對於數據量特別大的情況,如大規模的機器學習應用,每次迭代求解所有樣本需要花費大量的計算成本。是否可以在每次的迭代過程中利用部分樣本代替所有的樣本呢?基於這樣的思想,便出現了mini-batch的概念。 
  假設訓練集中的樣本的個數爲1000,則每個mini-batch只是其一個子集,假設,每個mini-batch中含有10個樣本,這樣,整個訓練數據集可以分爲100個mini-batch

    MBGD在每次更新參數時使用b個樣本(b一般爲10),其具體的僞代碼形式爲:

  Say b=10, m=1000.

  Repeat{

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

    

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

    }

  }





















發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章