梯度下降算法小結

梯度下降一類算法小結

標籤(空格分隔): 梯度下降


以下內容爲*An overview of gradient descent optimization
algorithms*讀後筆記.

梯度下降算法變種

算法概覽

最經典的梯度下降算法有:1.梯度下降(Batch gradient descent) 2. 隨機梯度下降(Batch gradient descent) 3. mini-batch梯度下降(Mini-batch gradient descent)

算法的缺點

  1. Batch梯度下降, 當遍歷計算整個數據集的梯度時候後, 對參數只進行了一次更新,梯度下降很可能變得很慢,同時對於數據集很大的時候內存可能不足.
  2. 隨機梯度下降每次訓練一個數據的時候就會更新一下參數.更新速度比1更快,同時1在更新的時候對相似的數據會存在計算冗餘.

    Batch gradient descent performs redundant computations for large datasets, as it recomputes gradients for similar examples before each parameter update. SGD does away with this redundancy by performing one update at a time.

  3. mini-batch梯度下降是1和2的折中,減少了參數更新時候的variance,一般mini-batch size設置爲50-256.但是他不能保證很好的收斂性.

梯度下降的挑戰

  1. 小的學習率導致學習慢, 大的學習率導致最優解附近波動
  2. 制定學習率表來動態調節, 這個表必須預先定義, 所以不能夠捕捉到數據集的一些特徵
  3. 所有參數都是相同的學習率, 如果數據很稀疏,特徵都有着不同的頻率, 就不能以相同的學習率來更新他們
  4. 當最小化非凸函數的時候, 會遇到很多次優解,必須防止無法跳出次優點.然而問題最大的就是馬鞍點
    馬鞍點

梯度下降的優化算法

1. Momentum

Momentum
如上圖,帶有衝量的sgd能夠很快進入最優值附近

2. NAG(Nesterov accelerated gradient )

NAG1
NAG1

帶有預測的衝量, 想象一下快到最優解附近的時候,如果最優解附近梯度比較大,那麼這裏步伐就會很大導致很久才收斂,先預測未來的梯度來優化???還沒有合理解釋,顯著增加了RNN的性能

3. Adagrad

之前所有參數的學習率都是相同的,這顯然是不合理的,對於稀疏數據,對變化頻率大的數據應該使用小的學習率,變化頻率小的數據應該使用大的學習率
Adagrad
這裏G是一個對角矩陣,Giiθt,i 的根號和,這就能反應變化快慢

但是這個算法有一個缺點就是, 他的學習率是一直衰減的!!!

4. Adadelta

他是Adagrad算法的改進, 主要改進Adagrad算法的激進以及一直衰減的學習率

第一步優化,其中分母是RMS形式
Adadelta

第二步,作者發現什麼了???
Adadelta
假設空間之類的,在分子添加了RMS(delta)

5. RMSprop

RMSprop
這個算法是Hinton自己獨立想出來的一個算法,和上一個算法有着相同想法

6. Adam

這個算法和之前動量想法一樣,分別構造了g,g2 的動量
Adam1
同時爲了無偏估計,除以了一個係數
Adam2
Adam3

7. AdaMax

對Adam分母V_t進行了泛化,原來的形式相當於L2正則,現在改爲LP正則,並讓p趨於無窮大

8. Nadam

這裏Dozat修改了NAG的算法,將原來對梯度提前的預估改爲對動量的預估

這裏NAG2在和最原始的衝量對比,發現只是修改了對比the momentum update rule 只是多一個梯度

那麼將這種變化應用到Adam就可以得到Nadam

這裏只是原本t-1時刻m的估計改爲t時刻m的估計

參考文獻
1. An overview of gradient descent optimization algorithms
2. Deep learning via Hessian-free optimization

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章