優化演算法之梯度下降演算法

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

1.批量梯度下降法BGD

現在下面以LR演算法為例對這三種演算法從原理到代碼進行講解

由LR演算法可知LR演算法的損失函數為

損失函數J(θ)最小值時的θ則為要求的最佳參數。通過梯度下降法求最小值。θ的初始值可以全部為1.0,更新過程為:

其中(j表樣本第j個特徵(屬性),共n個特徵,alfa表示步長每次移動量大小可自由指定)

下面是偏導的求導過程:

結果:

代碼

我們每一次的參數更新都用到了所有的訓練數據(比如有m個,就用到了m個),如果訓練數據非常多的話,是非常耗時的。

下面給出批梯度下降的收斂圖:

從圖中,我們可以得到BGD迭代的次數相對較少。

隨機梯度下降法SGD

由於批梯度下降每跟新一個參數的時候,要用到所有的樣本數,所以訓練速度會隨著樣本數量的增加而變得非常緩慢。隨機梯度下降正是為了解決這個辦法而提出的。它是利用每個樣本的損失函數對θ求偏導得到對應的梯度,來更新θ:

更新過程如下:

隨機梯度下降是通過每個樣本來迭代更新一次,對比上面的批量梯度下降,迭代一次需要用到所有訓練樣本(往往如今真實問題訓練數據都是非常巨大),一次迭代不可能最優,如果迭代10次的話就需要遍歷訓練樣本10次。

但是,SGD伴隨的一個問題是噪音較BGD要多,使得SGD並不是每次迭代都向著整體最優化方向。

隨機梯度下降收斂圖如下:

我們可以從圖中看出SGD迭代的次數較多,在解空間的搜索過程看起來很盲目。但是大體上是往著最優值方向移動。

min-batch 小批量梯度下降法MBGD

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

我們假設每次更新參數的時候用到的樣本數為10個(不同的任務完全不同,這裡舉一個例子而已

更新偽代碼如下:

拖了許久的梯度下降演算法更新完了,克服懶惰。。。

reference

純乾貨 | 機器學習中梯度下降法的分類及對比分析(附源碼)

批量梯度下降(BGD)、隨機梯度下降(SGD)、小批量隨機梯度下降(MSGD)實現過程詳解 - 雲計算技術頻道 - 紅黑聯盟

詳解梯度下降法的三種形式BGD,SGD以及MBGD


推薦閱讀:

小型 Web 頁項目打包優化方案
Unity優化技巧(中)
關於演算法競賽中快速乘的一些優化
看完性能簡報,想不優化好都難!
請問將方陣做特徵值分解,再去掉對角陣中的較小特徵值,這種操作叫什麼?

TAG:梯度下降 | 优化 |