參考:
https://zhuanlan.zhihu.com/p/261695487(推薦)
https://blog.csdn.net/qq_19917367/article/details/119208803
https://zhuanlan.zhihu.com/p/61955391(推薦)
https://zhuanlan.zhihu.com/p/86591381
一、隨機梯度下降法(Stochastic Gradient Descent, SGD)
1、參數更新
注:α為學習率,可以隨着時間推移進行調整。
2、特點
訓練速度快,隨機梯度下降所帶來的的波動性有利於找到較好的局部極值點,甚至全局極值點。但是當遇到局部最優點或鞍點時,梯度為0,無法繼續更新參數。並且沿陡峭維度震盪,而沿平緩維度進展緩慢,難以迅速收斂。
二、SGD with Momentum(SGD-M)
1、參數更新
注:β為歷史梯度貢獻的衰減速率,一般為 0.5,0.9或0.99。可以隨着時間的推移進行調整。
2、特點
因為加入了動量因素,SGD-M緩解了SGD在局部最優點梯度為0,無法持續更新和震盪幅度過大的問題。但是,即使有動量的加持,仍舊有可能陷入局部最優點。
三、Nesterov加速(NAG)
1、參數更新
2、特點
有利於跳出局部最優解,但是收斂速度慢。
四、AdaGrad(自適應學習率)
1、參數更新
注:δ是一個小的平滑項,為了避免分母為0。大約設為10-7。
2、特點
該算法的思想就是針對於不同的維度設置不同的學習率。偏導數較大的參數,學習率較小;偏導數較小的參數,學習率較大。該算法在稀疏數據場景下表現非常好。但是由於st的不斷累積,學習率一直在下降,可能會導致訓練過程提前結束。
五、RMSProp
1、參數更新
注:建議的初始值:α=0.001,β=0.9。δ為平滑項,一般取值1e-8~1e-10,tensorflow中的默認值為1e-10。
2、特點
不累積全部歷史梯度,而只關注過去一段時間窗口的下降梯度。避免了AdaGrad中學習率過度衰減的問題。
六、Adam
1、參數更新
注:建議的初始值:α=0.001,β1=0.9,β2=0.999,δ=1e-8
2、特點
通過一階動量和二階動量,有效控制學習率步長和梯度方向,防止梯度的震盪和在鞍點的靜止。但是(1)可能不收斂。二階動量是固定時間窗口內的累積,隨着時間窗口的變化,遇到的數據可能發生巨變,使得st可能會時大時小,不是單調變化。這就可能在訓練后期引起學習率的震盪,導致模型無法收斂。修正方法:(2)可能錯過全局最優解。自適應學習率算法可能會對前期出現的特征過擬合,后期才出現的特征很難糾正前期的擬合效果。后期Adam的學習率太低,影響了有效的收斂。