隨機梯度下降的思想也可以應用于線性回歸、邏輯回歸、神經網絡或者其他依靠梯度下降來進行訓練的算法中。
梯度下降法的問題是當m值很大時,計算這個微分項的計算量就變得很大,因為需要對所有m個訓練樣本求和,這被稱為批量梯度下降(batch gradient descent)?!芭俊本捅硎疚覀冃枰看味伎紤]所有的訓練樣本。

隨機梯度下降在每一步迭代中不用考慮全部的訓練樣本,只需要考慮一個訓練樣本。定義參數θ關于訓練樣(x(i),y(i))的代價等于二分之一倍的,我的假設h(x(i))跟實際輸出y(i)的誤差的平方。這個代價函數值實際上測量的是我的假設在某個樣本(x(i),y(i))上的表現。

隨機梯度下降的算法:
1.將所有數據打亂:將所有m個訓練樣本重新排列,這就是標準的數據預處理過程(保證了我們在掃描訓練集時我們對訓練集樣本的訪問是隨機的順序,能讓隨機梯度下降稍微快一些收斂,跟批量梯度下降不同?)
2.在i等于1到m中進行循環(huán),也就是對所有m個訓練樣本進行遍歷,然后按照公式進行更新 θj

關注第一個樣本然后把參數θ稍微修改一點,使其對第一個訓練樣本的擬合變得好一點,完成這個內層循環(huán)以后再轉向第二個訓練樣本,然后還是稍微把參數修改一點讓它對第二個樣本的擬合更好一點,以此類推 直到完成所有的訓練集。
隨機梯度下降不需要等到對所有m個訓練樣本求和得到梯度項修改參數,而是只需要對單個訓練樣本求出這個梯度項,在單個樣本的梯度項過程中開始優(yōu)化參數了。對隨機梯度下降來說,只需要一次關注一個訓練樣本,一點點把參數朝著全局最小值的方向進行修改了。
批量梯度下降的收斂過程會傾向于一條近似的直線,一直找到全局最小值。在你運行隨機梯度下降的過程中,參數是朝著全局最小值的方向被更新的,但也不一定。它看起來是以某個比較隨機、迂回的路徑在朝全局最小值逼近。因為每一次迭代只需要保證對一個訓練樣本擬合,而不是所有樣本,這會讓參數朝向了一個錯誤的方向。兩者之間的收斂形式是不同的:隨機梯度下降是在某個靠近全局最小值的區(qū)域內徘徊,而不是直接逼近全局最小值并停留在那點,但實際上這并沒有多大問題,只要參數最終移動到某個非??拷肿钚≈档膮^(qū)域內,只要參數逼近到足夠靠近全局最小值,這也會得出一個較為不錯的假設。
在隨機梯度下降中,有一個外層循環(huán),它決定了內層循環(huán)的執(zhí)行次數。所以外層循環(huán)應該執(zhí)行多少次呢,這取決于訓練樣本的大小,通常一次就夠了最多到10次。如果我們有非常大量的數據,有上億的樣本,每次只需要考慮一個訓練樣本也能訓練出非常好的假設,內循環(huán)只用做一次就夠了。