1. 程式人生 > >【重磅】批量梯度下降、隨機梯度下降、小批量梯度下降

【重磅】批量梯度下降、隨機梯度下降、小批量梯度下降

梯度下降有三種

1. 批量梯度下降(Batch Gradient Descent,BGD)

2. 隨機梯度下降(Gradient Descent,SGD)

3. 小批量梯度下降(Mini-Batch Gradient Descent,MBGD)

不同點在於損失函式使用的樣本量的不同,其根本流程是一毛一樣的啊!

各有優缺點。

方法 說明 優點 缺點 適用例項
批量梯度下降 BGD 最原始方法,每次跟新引數時,使用所有樣本,即損失函式由所有樣本構成。

1. 全域性最優解;

2. 易於並行實現。

1. 樣本多時,訓練時間慢 樣本量比較小
隨機梯度下降 SGD 損失函式使用一個樣本,噪聲比BGD要多 1. 訓練速度快

1. 準確度降低,經常非全域性最優

2. 不易於並行實現

樣本量比較大,或者線上學習演算法
小批量梯度下降 MBGD 損失函式使用一部分樣本 綜合BGD、SGD 綜合BGD、SGD 一般情況

傳統普通梯度下降

或:  批量梯度下降(Batch Gradient Descent,BGD)

根據李航《統計學習方法》改編

梯度下降為最優化演算法,顧名思義,優化,需要迭代才能找出最優值。

這裡\theta未知,所以梯度下降整個過程 其實就是求 \theta

 !! 求出來還是個估計值!

輸入:損失函式J(\theta), \theta為向量,\theta = (\theta_0,\theta_1,\theta_2,...,\theta_n ),n個特徵

輸出:\theta的最優值,用\theta^{*}表示,\small \theta^{*} = (\theta_0^{*},\theta_1^{*},\theta_2^{*},...,\theta_n^{*} )

設 損失函式為 J(\theta)  

說明:J(\theta)一般為平方損失、log對數損失等 能求導的 損失函式0-1損失不能求導不能用梯度下降

(圖片)

說明:

1. k=0,是為了方便,有需要可以輸出迭代次數,這樣可以比較不同優化演算法中的速率。

2. \small \theta^{(k)}=\theta^{(0)}=0也是自己為了方便設定的,當然也可以設別的初值,或者設定不同初值重複多次試驗,對比最優值結果。不同初值可能會得出不同的優化結果,這是由於進入的區域性最優值的情況,但是!如果損失函式為凸函式,那麼最優值只有一個!只有一個!可以放心設定初值,只是時間不同而已,多迭代幾次便是了。

3. \small \epsilon是一個大於0,但非常接近0的一個數,比如0.000001,用來做最後的參考,比如兩個函式值的差值小於\small \epsilon,那麼就可以判定兩個函式值相等,那麼基本收斂了,數學分析的收斂知識點就這玩意兒。當然根據實際需求,\small \epsilon = 0.01,\epsilon = 0.1,也是可以的。

4. 在第(1)步 求梯度中,需要注意的是,這裡需要求n個方程,因為有n個引數(或者說係數),目前我的理解是 先對n個\small \theta求偏導數,然後在睇(4)步迭代時,同時對n個\small \theta引數進行更新。(如果我的理解不對請和我聯絡,我將虛心改正。)

5. 第(3)步,求步長\eta,可以理解為遍歷所有正數\eta,在一定的方向(梯度即方向),求出 使得損失函式下降最多時 的\eta

6. 也有人不求\eta,直接自己設定,比如\eta= 1,\eta= 0.5,\eta= 0.3,\eta= 0.01......等等,李航大佬求出來也是蠻6的,這得求多久。或者其實大部分都是自己設定然後看效果罷了。反正就是整出個 步長\eta(也稱學習率)。

7. 梯度下降中,損失函式不同,梯度(導數)就不同。

隨機梯度下降

在傳統的普通梯度下降中,我們可以從

參考:

李航《統計學習方法》