在邏輯迴歸中提到過梯度下降法,還有一篇博客詳細的介紹了梯度下降法這裏我再介紹一下梯度下降法中的常用優化器。如果不知道邏輯迴歸和梯度下降法,請先閱讀上面2篇博客。
梯度下降法的優化器比較多,比如:BGD、SGD 、MBGD、Momentum、NAG、Adagrad、Adadelta、RMSprop、Adam。
但是常用的就2個:SGD和Adadelta,所以這主要介紹着2中優化器
SGD
即隨機梯度下降法,他是梯度下降法中的一種方式。在求解損失函數最小值時,它隨機採用樣本不斷的迭代,從而得到最小化損失函數
特點
- 採用的是隨機樣本,隨機打亂數據並重復執行
- 很容易進入局部最小值,而將局部最小值當做全局最優解
- 學習率設置過大,將導致收斂過程震盪,難以收斂
- 學習率設置過小,將導致收斂速度緩慢,同時也容易進入局部最小值
- 由於樣本只有一個,下降過程難免出現震盪,但由於數據量小,計算也非常快
與BGD(批量梯度下降法)對比
- BGD(批量梯度下降法)每次樣本量更大,下降更穩定,但是計算量更大
- SGD收斂到最小值時,容易更發生震盪,每次更新,方向不一定是對的
- SGD可以在進入最小值時,較少學習率,減小震盪
- SGD因爲計算速度更快,所以被人喜歡使用
keras代碼
sgd = optimizers.SGD(lr=0.01,decay=1e-6,momentum=0.9,nesterov=True)
- lr:學習率,是一個非負數
- momentum:擴展功能,表示動量優化,用於加速SGD在相關方向上前進,並抑制震盪,是一個非負數。
- decay:擴展功能,表示每次參數更新後的學習率衰減參數,是一個非負數
- nesterov:擴展功能,是一個布爾值,表示是否使用Nestrov動量(NAG)優化
Adadelta
我們都希望模型訓練能快速收斂到一個好的結果,於是就有了Adadelta,他可以根據參數在訓練期間更新頻率進行自動調整學習率。
- 自動調節優化器,比如SGD訓練時,我們希望前期他的學習率高,跑的快,當快收斂的時候又能減少學習率,以至於收斂的時候不震盪。所以自動調節應運而生。
- Adadelta的超參數推薦默認值即可,不建議修改
- 它是Momentum、NAG、Adagrad等優化器一步步優化出來的結果
總結
對於新手來說,使用Adadelta就足夠了,但是往往熟悉的程序員更喜歡SGD,因爲SGD更能掌控模型收斂的過程