優化演算法之梯度下降演算法
在應用機器學習演算法時,我們通常採用梯度下降法來對採用的演算法進行訓練。其實,常用的梯度下降法還具體包含有三種不同的形式,它們也各自有著不同的優缺點。
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優化技巧(中)
※關於演算法競賽中快速乘的一些優化
※看完性能簡報,想不優化好都難!
※請問將方陣做特徵值分解,再去掉對角陣中的較小特徵值,這種操作叫什麼?