單變量隨機梯度下降(SDG(Stochastic Grident Descent))
正向計算過程:
Zn×1=Wn×f⋅Xf×1+Bn×1 An×1=a(Z)
反向計算過程:
ΔZn×1=J′(W,B)=An×1−Y1×1 Wn×f=Wn×f−η⋅(ΔZn×1⋅XT1×f) Bn×1=Bn×1−η⋅ΔZn×1
其中:
f=特徵值數,m=樣本數,n=神經元數,η=步長 A=預測值,Y=標籤值,X=輸入值,XT=X的轉置
- 訓練樣本:每次使用一個樣本數據進行一次訓練,更新一次梯度,重複以上過程。
- 優點:訓練開始時損失值下降很快,隨機性大,找到最優解的可能性大。
- 缺點:受單個樣本的影響最大,損失函數值波動大,到後期徘徊不前,在最優解附近震盪。不能並行計算。
上圖,迭代時,Loss值毛刺波動非常大,受樣本差異影響。
上圖,梯度下降時,開始收斂較快,到後期波動較大,找不到準確的方向。
全批量梯度下降(Batch Gradient Descent)
正向計算過程:
Zn×m=Wn×f⋅Xf×m+Bn×1 An×m=a(Z)
反向計算過程:
ΔZn×m=J′(W,B)=An×m−Y1×m Wn×f=Wn×f−η⋅m1(ΔZn×m⋅XTm×f) Bn×1=Bn×1−η⋅m1∑(ΔZn×m,axis=1)(按列相加變成nx1)
其中:
f=特徵值數,m=樣本數,n=神經元數,η=步長 A=預測值,Y=標籤值,X=輸入值,XT=X的轉置
- 訓練樣本:每次使用全部數據集進行一次訓練,更新一次梯度,重複以上過程。
- 優點:受單個樣本的影響最小,一次計算全體樣本速度快,損失函數值沒有波動,到達最優點平穩。方便並行計算。
- 缺點:數據量較大時不能實現(內存限制),訓練過程變慢。初始值不同,可能導致獲得局部最優解,並非全局最優解。
上圖,迭代時,Loss值沒有毛刺波動。
上圖,梯度下降時,直接了當達到最佳點。
小批量梯度下降(Mini-Batch Gradient Descent)
正向計算過程:
Zn×k=Wn×f⋅Xf×k+Bn×1
An×k=a(Z)
反向計算過程:
ΔZn×k=J′(W,B)=An×k−Y1×k Wn×f=Wn×f−η⋅k1(ΔZn×k⋅XTk×f) Bn×1=Bn×1−η⋅k1∑(ΔZn×k,axis=1)(按列相加變成N x 1)
其中:
f=特徵值數,k=批樣本數,n=神經元數,η=步長 A=預測值,Y=標籤值,X=輸入值,XT=X的轉置
結合了前兩種的優點,又避免了前兩者的缺點。
- 訓練樣本:選擇一**小部分樣本進行訓練,**更新一次梯度,然後再選取另外一小部分樣本進行訓練,再更新一次梯度/
- 優點:不受單樣本噪聲影響,訓練速度較快。
- 缺點:batch size的數值選擇很關鍵,會影響訓練結果。
一些概念:
- Batch Size:批大小,一次訓練的樣本數量。
- Iteration:迭代,一次正向+一次反向。
- Epoch:所有樣本被使用了一次,叫做一個Epoch。
假設一共有樣本1000個,batch size=20,則一個Epoch中,需要1000/20=50次Iteration才能訓練完所有樣本。
上圖,迭代時,Loss值毛刺波動較小。
上圖,梯度下降時,在接近中心時有小波動。圖太小看不清楚,可以用matplot工具放大局部來觀察。和全批量的圖比較,靠近中心的線比較粗,說明有微小波動,而全批量是一根單直線。
小批量的大小通常由以下幾個因素決定:
- 更大的批量會計算更精確的梯度,但是回報卻是小於線性的
- 極小批量通常難以充分利用多核架構。這決定了最小批量的數值,低於這個值的小批量處理不會減少計算時間
- 如果批量處理中的所有樣本可以並行地處理,那麼內存消耗和批量大小成正比。對於多硬件設施,這是批量大小的限制因素。
- 某些硬件上使用特點大小的數組時,運行時間會更少,尤其是GPU,通常使用2的冪數作爲批量大小可以更快,如32 ~ 256,大模型時嘗試用16
- 可能是由於小批量在學習過程中加入了噪聲,會帶來一些正則化的效果。泛化誤差通常在批量大小爲1時最好。因爲梯度估計的高方差,小批量使用較小的學習率,以保持穩定性,但是降低學習率會使迭代次數增加
在實際工程中,我們通常使用小批量梯度下降形式。
https://github.com/microsoft/ai-edu/blob/master/B-教學案例與實踐/B6-神經網絡基本原理簡明教程/04.4-梯度下降的三種形式.md