11迴歸演算法-BGD、SGD、MBGD梯度下降

白爾摩斯發表於2018-10-20

=== 名詞解釋 ===

BGD: 批量 – 梯度下降演算法
SGD: 隨機 – 梯度下降演算法
__MBGD:__小批量 – 梯度下降演算法

=== 批量梯度下降演算法 BGD ===

在上一章10 迴歸演算法 – 梯度下降中講述的梯度下降演算法是針對某一個樣本進行的。實際上,我們擁有m個樣本,針對每一個樣本我們都應該有一個對應的梯度下降。

所以引入可批量梯度下降演算法(BGD),這是一個$color{red}{求解相對精確}$ ,但是計算時$color{red}{迭代速度相對比較慢}$的演算法。

原因如下:
BGD
如上公式所示,批量梯度演算法BGD,是對__所有樣本的梯度__進行了__求和__的操作。

公式化簡後:
BGD

=== 隨機梯度下降演算法 SGD===

隨機梯度下降演算法:不再考慮樣本梯度的求和了,而是來一個新的樣本,我就更新一次θ。
SGD

如果有m條資料,我就更新m次。
但是在批量梯度下降演算法 BGD中,對於θ我只更新了1次 (全部樣本都計算完後求和)

所以在隨機梯度下降演算法中,迭代更新的速度會更快。
實際生產當中,我們選擇隨機梯度下降的場景會更多。

畢竟,如果我有上百萬條資料,如果一次性全遍歷完後再得到θ的值,這樣太慢了。

總結一下BGD和SGD的區別:
1、SGD速度比BGD快(迭代次數少)
2、SGD在某些情況下(全域性存在多個相對最優解,或 J(θ)是一個二次以上的函式 ),SGD有可能跳出某些小的區域性最優解,所以不會比BGD壞。
3、BGD一定能夠得到一個區域性最優解(線上性迴歸模型中一定是一個全域性最優解),SGD由於隨機性的存在,可能導致最終結果比BGD差。

優先選擇:SGD


=== 小批量梯度下降法 MBGD===

如果既需要保證演算法訓練速度,又需要保證引數訓練的準確率,使用MBGD。

MBGD中不是每拿一個樣本就更新一次梯度,而是拿b個樣本(一般取10個)的平均梯度作為更新方向。

MBGD是BGD和SGD的結合:
隨機抽若干個樣本,求和。再不斷更新引數。

MBGD


PS 回答幾個問題:
1、學習率(步長)的選擇:
學習率都是人為設定的,或者可以理解為不斷得嘗試。根據迭代速度和結果進行不斷得調整。
學習率沒有一個明確的設定範圍,一般可以選擇1左右的數字進行嘗試,如果迭代的速度還可以,且結果能夠獲得即可。

2、一般生產中,在深度學習中,對於損失函式的求解我們會自己去寫。
但在機器學習中我們可以直接使用sklearn的LinearRegression進行最小二乘來求解θ:
$θ=(X^TX)$-1$X^TY$


相關文章