轉:深度學習筆記:優化方法總結(BGD,SGD,Momentum,AdaGrad,RMSProp,Adam)
from:http://blog.csdn.net/u014595019/article/details/52989301
最近在看Google的Deep Learning一書,看到優化方法那一部分,正巧之前用tensorflow也是對那些優化方法一知半解的,所以看完後就整理了下放上來,主要是一階的梯度法,包括SGD, Momentum, Nesterov Momentum, AdaGrad, RMSProp, Adam。 其中SGD,Momentum,Nesterov Momentum是手動指定學習速率的,而後面的AdaGrad, RMSProp, Adam,就能夠自動調節學習速率.
二階的方法目前我水平太差,看不懂….就不放上來了。
BGD
即batch gradient descent. 在訓練中,每一步迭代都使用訓練集的所有內容. 也就是說,利用現有引數對訓練集中的每一個輸入生成一個估計輸出
具體實現:
需要:學習速率
每步迭代過程:
1. 提取訓練集中的所有內容
2. 計算梯度和誤差並更新引數:
優點:
由於每一步都利用了訓練集中的所有資料,因此當損失函式達到最小值以後,能夠保證此時計算出的梯度為0,換句話說,就是能夠收斂.因此,使用BGD時不需要逐漸減小學習速率
缺點:
由於每一步都要使用所有資料,因此隨著資料集的增大,執行速度會越來越慢.
SGD
SGD全名 stochastic gradient descent, 即隨機梯度下降。不過這裡的SGD其實跟MBGD(minibatch gradient descent)是一個意思,即隨機抽取一批樣本,以此為根據來更新引數.
具體實現:
需要:學習速率
每步迭代過程:
1. 從訓練集中的隨機抽取一批容量為m的樣本
2. 計算梯度和誤差並更新引數:
優點:
訓練速度快,對於很大的資料集,也能夠以較快的速度收斂.
缺點:
由於是抽取,因此不可避免的,得到的梯度肯定有誤差.因此學習速率需要逐漸減小.否則模型無法收斂
因為誤差,所以每一次迭代的梯度受抽樣的影響比較大,也就是說梯度含有比較大的噪聲,不能很好的反映真實梯度.
學習速率該如何調整:
那麼這樣一來,
而在實際操作中,一般是進行線性衰減:
其中
Momentum
上面的SGD有個問題,就是每次迭代計算的梯度含有比較大的噪音. 而Momentum方法可以比較好的緩解這個問題,尤其是在面對小而連續的梯度但是含有很多噪聲的時候,可以很好的加速學習.Momentum借用了物理中的動量概念,即前幾次的梯度也會參與運算.為了表示動量,引入了一個新的變數v(velocity).v是之前的梯度的累加,但是每回合都有一定的衰減.
具體實現:
需要:學習速率
每步迭代過程:
1. 從訓練集中的隨機抽取一批容量為m的樣本
2. 計算梯度和誤差,並更新速度v和引數
其中引數
也就是說,Momentum最好情況下能夠將學習速率加速
特點:
前後梯度方向一致時,能夠加速學習
前後梯度方向不一致時,能夠抑制震盪
Nesterov Momentum
這是對之前的Momentum的一種改進,大概思路就是,先對引數進行估計,然後使用估計後的引數來計算誤差
具體實現:
需要:學習速率
每步迭代過程:
1. 從訓練集中的隨機抽取一批容量為m的樣本
2. 計算梯度和誤差,並更新速度v和引數
注意在估算
AdaGrad
AdaGrad可以自動變更學習速率,只是需要設定一個全域性的學習速率
其中
具體實現:
需要:全域性學習速率
中間變數: 梯度累計量r(初始化為0)
每步迭代過程:
1. 從訓練集中的隨機抽取一批容量為m的樣本
2. 計算梯度和誤差,更新r,再根據r和梯度計算引數更新量
優點:
能夠實現學習率的自動更改。如果這次梯度大,那麼學習速率衰減的就快一些;如果這次梯度小,那麼學習速率衰減的就滿一些。
缺點:
任然要設定一個變數
經驗表明,在普通演算法中也許效果不錯,但在深度學習中,深度過深時會造成訓練提前結束。
RMSProp
RMSProp通過引入一個衰減係數,讓r每回合都衰減一定比例,類似於Momentum中的做法。
具體實現:
需要:全域性學習速率
中間變數: 梯度累計量r(初始化為0)
每步迭代過程:
1. 從訓練集中的隨機抽取一批容量為m的樣本
2. 計算梯度和誤差,更新r,再根據r和梯度計算引數更新量
優點:
相比於AdaGrad,這種方法很好的解決了深度學習中過早結束的問題
適合處理非平穩目標,對於RNN效果很好
缺點:
又引入了新的超參,衰減係數
依然依賴於全域性學習速率
RMSProp with Nesterov Momentum
當然,也有將RMSProp和Nesterov Momentum結合起來的
具體實現:
需要:全域性學習速率
中間變數: 梯度累計量r(初始化為0)
每步迭代過程:
1. 從訓練集中的隨機抽取一批容量為m的樣本
2. 計算梯度和誤差,更新r,再根據r和梯度計算引數更新量
Adam
Adam(Adaptive Moment Estimation)本質上是帶有動量項的RMSprop,它利用梯度的一階矩估計和二階矩估計動態調整每個引數的學習率。Adam的優點主要在於經過偏置校正後,每一次迭代學習率都有個確定範圍,使得引數比較平穩。
具體實現:
需要:步進值
其中幾個取值一般為:
中間變數:一階動量s,二階動量r,都初始化為0
每步迭代過程:
1. 從訓練集中的隨機抽取一批容量為m的樣本
2. 計算梯度和誤差,更新r和s,再根據r和s以及梯度計算引數更新量
相關文章
- 優化器:SGD > Momentum > AdaGrad > RMSProp > Adam優化
- Optimizer: SGD, SGD with Momentum, Adagrad, RMSProp, Adam, AdamW
- 研究一下不同梯度下降的最佳化器和自己的最佳化器的比較(SGD,Momentum,AdaGrad,Adam)梯度
- 深度學習優化演算法總結深度學習優化演算法
- 【深度學習】深度學習md筆記總結第1篇:深度學習課程,要求【附程式碼文件】深度學習筆記
- 深度學習中的優化方法(二)深度學習優化
- 深度學習中的優化方法(一)深度學習優化
- 斜率優化學習筆記優化筆記
- mysql優化學習筆記MySql優化筆記
- Redux 學習總結筆記Redux筆記
- LDAP學習筆記總結LDA筆記
- 學習筆記:深度學習中的正則化筆記深度學習
- oracle 學習總結(效能優化)Oracle優化
- Mysql 優化(學習筆記二十)MySql優化筆記
- 11迴歸演算法-BGD、SGD、MBGD梯度下降演算法梯度
- 學習筆記900天總結筆記
- 學習筆記800天總結筆記
- PL/SQL學習筆記-總結SQL筆記
- oracle 學習筆記---效能優化學習(1)Oracle筆記優化
- 深度學習模型調優方法(Deep Learning學習記錄)深度學習模型
- WebView深度學習(二)之全面總結WebView遇到的坑及優化WebView深度學習優化
- 深度學習keras筆記深度學習Keras筆記
- 深度學習 筆記一深度學習筆記
- MySQL優化學習筆記之索引MySql優化筆記索引
- MySQL優化學習筆記之explainMySql優化筆記AI
- Android卡頓優化學習筆記Android優化筆記
- HTTPS 效能優化學習筆記HTTP優化筆記
- ORACLE學習筆記--效能優化FAQ。Oracle筆記優化
- oracle 學習筆記---效能優化(1)Oracle筆記優化
- oracle 學習筆記---效能優化(2)Oracle筆記優化
- oracle 學習筆記---效能優化(3)Oracle筆記優化
- oracle 學習筆記---效能優化(4)Oracle筆記優化
- oracle 學習筆記---效能優化(5)Oracle筆記優化
- oracle 學習筆記---效能優化(6)Oracle筆記優化
- oracle 學習筆記---效能優化(7)Oracle筆記優化
- 階段性總結_學習筆記筆記
- Hbase學習筆記問題總結筆記
- MySQL學習筆記之命令總結MySql筆記