隨機梯度下降優化算法-----批量梯度下降,隨機梯度下降,小批量梯度下降


  梯度下降算法是通過沿着目標函數J(θ)參數θ∈R的梯度(一階導數)相反方向−∇θJ(θ)來不斷更新模型參數來到達目標函數的極小值點(收斂),更新步長為η。有三種梯度下降算法框架,它們不同之處在於每次學習(更新模型參數)使用的樣本個數,每次更新使用不同的樣本會導致每次學習的准確性和學習時間不同。

  • 批量梯度下降(Batch gradient descent)

每次使用全量的訓練集樣本來更新模型參數,即: θ=θ−η⋅∇θJ(θ)

其代碼如下:

epochs 是用戶輸入的最大迭代次數。通過上訴代碼可以看出,每次使用全部訓練集樣本計算損失函數 loss_function 的梯度 params_grad,然后使用學習速率 learning_rate 朝着梯度相反方向去更新模型的每個參數params。一般各現有的一些機器學習庫都提供了梯度計算api。如果想自己親手寫代碼計算,那么需要在程序調試過程中驗證梯度計算是否正確。

批量梯度下降每次學習都使用整個訓練集,因此其優點在於每次更新都會朝着正確的方向進行,最后能夠保證收斂於極值點(凸函數收斂於全局極值點,非凸函數可能會收斂於局部極值點),但是其缺點在於每次學習時間過長,並且如果訓練集很大以至於需要消耗大量的內存,並且全量梯度下降不能進行在線模型參數更新。

  • 隨機梯度下降(Stochastic gradient descent)

隨機梯度下降算法每次從訓練集中隨機選擇一個樣本來進行學習,即: θ=θ−η⋅∇θJ(θ;xi;yi)

批量梯度下降算法每次都會使用全部訓練樣本,因此這些計算是冗余的,因為每次都使用完全相同的樣本集。而隨機梯度下降算法每次只隨機選擇一個樣本來更新模型參數,因此每次的學習是非常快速的,並且可以進行在線更新。

其代碼如下:

隨機梯度下降最大的缺點在於每次更新可能並不會按照正確的方向進行,因此可以帶來優化波動(擾動),如下圖:

圖1 SGD擾動

不過從另一個方面來看,隨機梯度下降所帶來的波動有個好處就是,對於類似盆地區域(即很多局部極小值點)那么這個波動的特點可能會使得優化的方向從當前的局部極小值點跳到另一個更好的局部極小值點,這樣便可能對於非凸函數,最終收斂於一個較好的局部極值點,甚至全局極值點。

由於波動,因此會使得迭代次數(學習次數)增多,即收斂速度變慢。不過最終其會和全量梯度下降算法一樣,具有相同的收斂性,即凸函數收斂於全局極值點,非凸損失函數收斂於局部極值點。

  • 小批量梯度下降(Mini-batch gradient descent)

Mini-batch 梯度下降綜合了 batch 梯度下降與 stochastic 梯度下降,在每次更新速度與更新次數中間取得一個平衡,其每次更新從訓練集中隨機選擇 m,m<n 個樣本進行學習,即:

θ=θ−η⋅∇θJ(θ;xi:i+m;yi:i+m)

其代碼如下:

相對於隨機梯度下降,Mini-batch梯度下降降低了收斂波動性,即降低了參數更新的方差,使得更新更加穩定。相對於全量梯度下降,其提高了每次學習的速度。並且其不用擔心內存瓶頸從而可以利用矩陣運算進行高效計算。一般而言每次更新隨機選擇[50,256]個樣本進行學習,但是也要根據具體問題而選擇,實踐中可以進行多次試驗,選擇一個更新速度與更次次數都較適合的樣本數。mini-batch梯度下降可以保證收斂性,常用於神經網絡中。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM