機器學習中,有不少優化方法來試圖尋找模型的最優解。好比神經網絡中能夠採起最基本的梯度降低法。算法
梯度降低法是最基本的一類優化器,目前主要分爲三種梯度降低法:標準梯度降低法(GD, Gradient Descent),隨機梯度降低法(SGD, Stochastic Gradient Descent)及批量梯度降低法(BGD, Batch Gradient Descent)。網絡
評價:標準梯度降低法主要有兩個缺點:app
評價:機器學習
評價:函數
動量優化方法是在梯度降低法的基礎上進行的改變,具備加速梯度降低的做用。通常有標準動量優化方法Momentum、NAG(Nesterov accelerated gradient)動量優化方法。性能
NAG在Tensorflow中與Momentum合併在同一函數tf.train.MomentumOptimizer中,能夠經過參數配置啓用。學習
自適應學習率優化算法針對於機器學習模型的學習率,傳統的優化算法要麼將學習率設置爲常數要麼根據訓練次數調節學習率。極大忽視了學習率其餘變化的可能性。然而,學習率對模型的性能有着顯著的影響,所以須要採起一些策略來想辦法更新學習率,從而提升訓練速度。
目前的自適應學習率優化算法主要有:AdaGrad算法,RMSProp算法,Adam算法以及AdaDelta算法。優化
思想:atom
算法描述:spa
思想:
算法描述:
思想:AdaGrad算法和RMSProp算法都須要指定全局學習率,AdaDelta算法結合兩種算法每次參數的更新步長即:
評價:
思想:
算法描述:
評價:Adam一般被認爲對超參數的選擇至關魯棒,儘管學習率有時須要從建議的默認修改。
終於結束的漫長的理論分析,下面對各類優化器作一些有趣的比較。
(1) 示例一
上圖描述了在一個曲面上,6種優化器的表現,從中能夠大體看出:
① 降低速度:
② 降低軌跡:
(2) 示例二
上圖在一個存在鞍點的曲面,比較6中優化器的性能表現,從圖中大體能夠看出:
(3) 示例三
上圖比較了6種優化器收斂到目標點(五角星)的運行過程,從圖中能夠大體看出:
① 在運行速度方面
② 在收斂軌跡方面
#梯度降低:SGD優化器 train_step=tf.compat.v1.train.GradientDescentOptimizer(0.2).minimize(loss) # Iter 0,Testing Accuracy 0.9236 # Iter 1,Testing Accuracy 0.9449 # Iter 2,Testing Accuracy 0.9508 # Iter 3,Testing Accuracy 0.9527 # Iter 4,Testing Accuracy 0.9591 # Iter 5,Testing Accuracy 0.962 # Iter 6,Testing Accuracy 0.9643 # Iter 7,Testing Accuracy 0.9672 # Iter 8,Testing Accuracy 0.9675 # Iter 9,Testing Accuracy 0.9696 # Iter 10,Testing Accuracy 0.9702
#使用自適應學習率,使用AdaGrad優化器 train_step=tf.compat.v1.train.AdagradOptimizer(0.2).minimize(loss) # Iter 0,Testing Accuracy 0.855 # Iter 1,Testing Accuracy 0.8647 # Iter 2,Testing Accuracy 0.957 # Iter 3,Testing Accuracy 0.9633 # Iter 4,Testing Accuracy 0.9683 # Iter 5,Testing Accuracy 0.9723 # Iter 6,Testing Accuracy 0.9707 # Iter 7,Testing Accuracy 0.9727 # Iter 8,Testing Accuracy 0.9748 # Iter 9,Testing Accuracy 0.9738 # Iter 10,Testing Accuracy 0.9752
#使用自適應學習率:使用RMSProp優化器 train_step=tf.compat.v1.train.RMSPropOptimizer(0.02).minimize(loss) # Iter 0,Testing Accuracy 0.9007 # Iter 1,Testing Accuracy 0.9102 # Iter 2,Testing Accuracy 0.9165 # Iter 3,Testing Accuracy 0.9298 # Iter 4,Testing Accuracy 0.9373 # Iter 5,Testing Accuracy 0.9205 # Iter 6,Testing Accuracy 0.9306 # Iter 7,Testing Accuracy 0.9422 # Iter 8,Testing Accuracy 0.9297 # Iter 9,Testing Accuracy 0.9417 # Iter 10,Testing Accuracy 0.9359
# 使用自適應學習綠:使用Adam優化器 train_step=tf.compat.v1.train.AdamOptimizer(0.02,0.9).minimize(loss) # Iter 0,Testing Accuracy 0.8112 # Iter 1,Testing Accuracy 0.8114 # Iter 2,Testing Accuracy 0.81 # Iter 3,Testing Accuracy 0.7948 # Iter 4,Testing Accuracy 0.8212 # Iter 5,Testing Accuracy 0.8145 # Iter 6,Testing Accuracy 0.8443 # Iter 7,Testing Accuracy 0.8678 # Iter 8,Testing Accuracy 0.8394 # Iter 9,Testing Accuracy 0.8934 # Iter 10,Testing Accuracy 0.8917
#使用自適應學習綠:使用AdaDelta優化器 train_step=tf.compat.v1.train.AdadeltaOptimizer(0.02).minimize(loss) # Iter 0,Testing Accuracy 0.4545 # Iter 1,Testing Accuracy 0.5644 # Iter 2,Testing Accuracy 0.7053 # Iter 3,Testing Accuracy 0.759 # Iter 4,Testing Accuracy 0.7785 # Iter 5,Testing Accuracy 0.7925 # Iter 6,Testing Accuracy 0.8028 # Iter 7,Testing Accuracy 0.8114 # Iter 8,Testing Accuracy 0.8165 # Iter 9,Testing Accuracy 0.82 # Iter 10,Testing Accuracy 0.8237
#使用動量優化法:Momentum優化器 train_step=tf.compat.v1.train.MomentumOptimizer(0.2,0.5).minimize(loss) # Iter 0,Testing Accuracy 0.8425 # Iter 1,Testing Accuracy 0.8539 # Iter 2,Testing Accuracy 0.9527 # Iter 3,Testing Accuracy 0.9588 # Iter 4,Testing Accuracy 0.9665 # Iter 5,Testing Accuracy 0.9697 # Iter 6,Testing Accuracy 0.9699 # Iter 7,Testing Accuracy 0.9724 # Iter 8,Testing Accuracy 0.9723 # Iter 9,Testing Accuracy 0.9719 # Iter 10,Testing Accuracy 0.9731
#使用動量優化法:使用NAG優化器 train_step=tf.compat.v1.train.MomentumOptimizer(learning_rate=0.2,momentum=0.5,use_nesterov=True).minimize(loss) # Iter 0,Testing Accuracy 0.8483 # Iter 1,Testing Accuracy 0.8606 # Iter 2,Testing Accuracy 0.953 # Iter 3,Testing Accuracy 0.9558 # Iter 4,Testing Accuracy 0.9601 # Iter 5,Testing Accuracy 0.9657 # Iter 6,Testing Accuracy 0.9666 # Iter 7,Testing Accuracy 0.9683 # Iter 8,Testing Accuracy 0.9721 # Iter 9,Testing Accuracy 0.9721 # Iter 10,Testing Accuracy 0.9717
NAG在Tensorflow中與Momentum合併在同一函數tf.train.MomentumOptimizer中,能夠經過參數配置啓用。
綜上,比較來講AdaGrad優化器和Momentum優化器相對來講比較好