梯度下降(Gradient Descent)


  轉載請注明出處: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的梯度微調最終的更新方向。這樣一來,可以在一定程度上增加穩定性,從而學習地更快,並且還有一定擺脫局部最優的能力: 

其中, 即momentum,表示要在多大程度上保留原來的更新方向,這個值在0-1之間,在訓練開始時,由於梯度可能會很大,所以初始值一般選為0.5;當梯度不那么大時,改為0.9。 是學習率,即當前batch的梯度多大程度上影響最終更新方向,跟普通的SGD含義相同。 之和不一定為1。

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM