【原創】batch-GD, SGD, Mini-batch-GD, Stochastic GD, Online-GD -- 大數據背景下的梯度訓練算法

機器學習中梯度降低(Gradient Descent, GD)算法只須要計算損失函數的一階導數,計算代價小,很是適合訓練數據很是大的應用。算法

梯度降低法的物理意義很好理解,就是沿着當前點的梯度方向進行線搜索,找到下一個迭代點。可是,爲何有會派生出 batch、mini-batch、online這些GD算法呢?機器學習

原來,batch、mini-batch、SGD、online的區別在於訓練數據的選擇上:函數

  batch mini-batch Stochastic Online
訓練集 固定 固定 固定 實時更新
單次迭代樣本數 整個訓練集 訓練集的子集 單個樣本 根據具體算法定
算法複雜度 通常
時效性 通常(delta 模型) 通常(delta 模型)
收斂性 穩定 較穩定 不穩定 不穩定

 

1. batch GD學習

每次迭代的梯度方向計算由全部訓練樣本共同投票決定,ip

batch GD的損失函數是:it

\[J(\theta ) = \frac{1}{{2m}}\sum\limits_{i = 1}^m {{{({h_\theta }({x^{(i)}}) - {y^{(i)}})}^2}} \]io

訓練算法爲:table

\[\begin{array}{l}
repeate\{ \\
\theta : = \theta - \alpha \frac{1}{m}\sum\limits_{i = 1}^m ( {h_\theta }({x^{(i)}}) - {y^{(i)}})x_j^{(i)}\\
\}
\end{array}\]ast

什麼意思呢,batch GD算法是計算損失函數在整個訓練集上的梯度方向,沿着該方向搜尋下一個迭代點。」batch「的含義是訓練集中全部樣本參與每一輪迭代。互聯網

2. mini-batch GD

batch GD每一輪迭代須要全部樣本參與,對於大規模的機器學習應用,常常有billion級別的訓練集,計算複雜度很是高。所以,有學者就提出,反正訓練集只是數據分佈的一個採樣集合,咱們能不能在每次迭代只利用部分訓練集樣本呢?這就是mini-batch算法。

假設訓練集有m個樣本,每一個mini-batch(訓練集的一個子集)有b個樣本,那麼,整個訓練集能夠分紅m/b個mini-batch。咱們用\(\omega \)表示一個mini-batch, 用\({\Omega _j}\)表示第j輪迭代中全部mini-batch集合,有:

\[\Omega  = \{ {\omega _k}:k = 1,2...m/b\} \]

那麼, mini-batch GD算法流程以下:

\[\begin{array}{l}
repeate\{ \\
{\rm{ }}repeate\{ \\
{\rm{ for each }}{\omega _k}{\rm{ in }}\Omega :\\
{\rm{ }}\theta : = \theta - \alpha \frac{1}{b}\sum\limits_{i = 1}^b ( {h_\theta }({x^{(i)}}) - {y^{(i)}}){x^{(i)}}\\
{\rm{ }}\} for(k = 1,2...m/b)\\
\}
\end{array}\]

3. Stochastic GD (SGD)

 隨機梯度降低算法(SGD)是mini-batch GD的一個特殊應用。SGD等價於b=1的mini-batch GD。即,每一個mini-batch中只有一個訓練樣本。

4. Online GD

隨着互聯網行業的蓬勃發展,數據變得愈來愈「廉價」。不少應用有實時的,不間斷的訓練數據產生。在線學習(Online Learning)算法就是充分利用實時數據的一個訓練算法。

Online GD於mini-batch GD/SGD的區別在於,全部訓練數據只用一次,而後丟棄。這樣作的好處是能夠最終模型的變化趨勢。好比搜索廣告的點擊率(CTR)預估模型,網民的點擊行爲會隨着時間改變。用batch算法(天天更新一次)一方面耗時較長(須要對全部歷史數據從新訓練);另外一方面,沒法及時反饋用戶的點擊行爲遷移。而Online Leaning的算法能夠實時的最終網民的點擊行爲遷移。

 

Ref:

1. http://en.wikipedia.org/wiki/Gradient_descent

相關文章
相關標籤/搜索