深度學習優化方法-AdaGrad
阿新 • • 發佈:2019-01-05
梯度下降演算法、隨機梯度下降演算法(SGD)、小批量梯度下降演算法(mini-batch SGD)、動量法(momentum)、Nesterov動量法有一個共同的特點是:對於每一個引數都用相同的學習率進行更新。 但是在實際應用中,各個引數的重要性肯定是不一樣的,所以我們對於不同的引數要動態的採取不同的學習率,讓目標函式更快的收斂。 AdaGrad演算法就是將每一個引數的每一次迭代的梯度取平方累加後在開方,用全域性學習率除以這個數,作為學習率的動態更新。 (3)經驗上已經發現,對於訓練深度神經網路模型而言,從訓練開始時積累梯度平方會導致有效學習率過早和過量的減小。AdaGrade在某些深度學習模型上效果不錯,但不是全部。
AdaGrad演算法介紹
表示第i個引數的梯度,對於經典的SGD優化方法,引數θth的更新為:
再來看AdaGrad演算法表示為:
其中,r為梯度累積變數,r的初始值為0。ε為全域性學習率,需要自己設定。δ為小常數,為了數值穩定大約設定為。
AdaGrad演算法分析
(1)從AdaGrad演算法中可以看出,隨著演算法不斷迭代,r會越來越大,整體的學習率會越來越小。所以,一般來說AdaGrad演算法一開始是激勵收斂,到了後面就慢慢變成懲罰收斂,速度越來越慢。
(2)在SGD中,隨著梯度的增大,我們的學習步長應該是增大的。但是在AdaGrad中,隨著梯度g的增大,我們的r也在逐漸的增大,且在梯度更新時r在分母上,也就是整個學習率是減少的,這是為什麼呢?這是因為隨著更新次數的增大,我們希望學習率越來越慢。因為我們認為在學習率的最初階段,我們距離損失函式最優解還很遠,隨著更新次數的增加,越來越接近最優解,所以學習率也隨之變慢。Reference
【1】深度學習,Ian Goodfellow / Yoshua Bengio所著。