梯度下降是最小化風險函數(shù)/損失函數(shù)的一種經(jīng)典常見的方法牌废,下面總結下三種梯度下降算法異同。
1、 批量梯度下降算法(Batch gradient descent)
以線性回歸為例丁屎,損失函數(shù)為
BGD算法核心思想為每次迭代用所有的訓練樣本來更新Theta鲁沥,這對于訓練樣本數(shù)m很大的情況是很耗時的呼股。
BGD算法表示為
或者表示為
其中X(m*n)為訓練樣本矩陣,α為學習速率画恰,m為樣本數(shù)彭谁,y(m*1)為樣本結果標簽向量,Theta(n*1)為參數(shù)向量
其中損失函數(shù) J 對Theta的導數(shù)為
foriter =1:num_iterstheta=theta-alpha/m*X'*(X*theta-y);end
1
2
3
4
5
迭代num_iters次的BGD如上述代碼所示
BGD大體執(zhí)行過程
2允扇、隨機梯度下降算法(Stochastic Gradient Descent)
SGD在大規(guī)模訓練集上會更高效
SGD的損失函數(shù)也與BGD有所不同
SGD算法在于每次只去擬合一個訓練樣本马靠,這使得在梯度下降過程中不需去用所有訓練樣本來更新Theta。BGD每次迭代都會朝著最優(yōu)解逼近蔼两,而SGD由于噪音比BGD多甩鳄,多以SGD并不是每次迭代都朝著最優(yōu)解逼近,但大體方向是朝著最優(yōu)解额划,SGD大約要遍歷1-10次數(shù)據(jù)次來獲取最優(yōu)解妙啃。
SGD算法大體分兩步
SGD算法大體執(zhí)行過程
其中學習速率α一般設置為常數(shù),但我們也可以將α隨迭代次數(shù)而減小俊戳,這樣更有利于我們函數(shù)收斂向最優(yōu)解
小批量梯度下降算法(Mini-batch Gradient Descent)
MBGD有時候甚至比SGD更高效揖赴。
MBGD不像BGD每次用m(所有訓練樣本數(shù))個examples去訓練,也不像SGD每次用一個example抑胎。MBGD使用中間值b個examples
經(jīng)典的b取值大約在2-100
例如 b=10燥滑,m=1000
此處MBGD每次只用10個examples來訓練。
參考自Andrew NG 在coursera的machine learning week10