Deep Learning 優化方法總結
Stochastic Gradient Descent (SGD)
SGD的引數
在使用隨機梯度下降(SGD)的學習方法時,一般來說有以下幾個可供調節的引數:
- Learning Rate 學習率
- Weight Decay 權值衰減
- Momentum 動量
- Learning Rate Decay 學習率衰減
再此之中只有第一的引數(Learning Rate)是必須的,其餘部分都是為了提高自適應性的引數,也就是說後3個引數不需要時可以設為0。
Learning Rate
學習率決定了權值更新的速度,設定得太大會使結果越過最優值,太小會使下降速度過慢。僅靠人為干預調整引數需要不斷修改學習率,因此後面3種引數都是基於自適應的思路提出的解決方案。
$$w_i←w_i-\eta\frac{\partial{E}}{\partial{w_i}}$$
Weight decay
在實際運用中,為了避免模型的over-fitting,需要對cost function加入規範項,在SGD中我們加入$−ηλw_i$這一項來對cost function進行規範化。
$$w_i←w_i-\eta\frac{\partial{E}}{\partial{w_i}}-\eta\lambda w_i$$
這個公式的基本思路是減小不重要的引數對結果的影響,而有用的權重則不會受到Weight decay的影響,這種思路與Dropout的思路原理上十分相似。
Learning Rate Decay
一種提高SGD尋優能力的方法,具體做法是每次迭代減小學習率的大小。
- initial learning rate $\eta=\eta_0$
- learning rate decay $\eta_d$
- At each iteration $s$:
$$\eta(s)=\frac{\eta_0}{1+s\cdot{\eta_d}}$$
在許多論文中,另一種比較常見的方法是迭代30-50次左右直接對學習率進行操作($\eta←0.5\cdot\eta$)
Momentum
靈感來自於牛頓第一定律,基本思路是為尋優加入了“慣性”的影響,這樣一來,當誤差曲面中存在平坦區SGD可以一更快的速度學習。
$$w_i←m\cdot w_i-\eta\frac{\partial{E}}{\partial{w_i}}$$注意:這裡的表示方法並沒有統一的規定,這裡只是其中一種
SGD優缺點
- 實現簡單,當訓練樣本足夠多時優化速度非常快
- 需要人為調整很多引數,比如學習率,收斂準則等
Averaged Stochastic Gradient Descent (ASGD)
在SGD的基礎上計算了權值的平均值。
$$\bar{w}t=\frac{1}{t-t_0}\sum^t{i=t_0+1} w_t$$
ASGD的引數
在SGD的基礎上增加引數$t_0$
- 學習率 $\eta$
- 引數 $t_0$
ASGD優缺點
- 運算花費和second order stochastic gradient descent (2SGD)一樣小。
- 比SGD的訓練速度更為緩慢。
- $t_0$的設定十分困難
3. Conjugate Gradient(共軛梯度法)
介於最速下降法與牛頓法之間的一個方法,它僅僅需要利用一階導數的資訊,克服了GD方法收斂慢的特點。
Limited-memory Broyden-Fletcher-Goldfarb-Shanno (LBFGS) (一種擬牛頓演算法)
L-BFGS演算法比較適合在大規模的數值計算中,具備牛頓法收斂速度快的特點,但不需要牛頓法那樣儲存Hesse矩陣,因此節省了大量的空間以及計算資源。
應用分析
不同的優化演算法有不同的優缺點,適合不同的場合:
- LBFGS演算法在引數的維度比較低(一般指小於10000維)時的效果要比SGD(隨機梯度下降)和CG(共軛梯度下降)效果好,特別是帶有convolution的模型。
- 針對高維的引數問題,CG的效果要比另2種好。也就是說一般情況下,SGD的效果要差一些,這種情況在使用GPU加速時情況一樣,即在GPU上使用LBFGS和CG時,優化速度明顯加快,而SGD演算法優化速度提高很小。
- 在單核處理器上,LBFGS的優勢主要是利用引數之間的2階近視特性來加速優化,而CG則得得益於引數之間的共軛資訊,需要計算器Hessian矩陣。
相關文章
- Deep Learning模型中常見的optimizer優化器演算法總結模型優化演算法
- 深度學習模型調優方法(Deep Learning學習記錄)深度學習模型
- 深度學習(Deep Learning)優缺點深度學習
- 總結前端效能優化的方法前端優化
- PHP的效能優化方法總結PHP優化
- Deep learning 資料彙總--持續更新
- Deep Learning with Differential Privacy
- 總結幾個webpack打包優化的方法Web優化
- 深度學習(Deep Learning)深度學習
- 《DEEP LEARNING·深度學習》深度學習
- webpack優化總結Web優化
- APP優化總結APP優化
- 效能優化總結優化
- Hive常用效能優化方法實踐全面總結Hive優化
- JVM調優總結-調優方法JVM
- 機器學習(Machine Learning)&深度學習(Deep Learning)資料機器學習Mac深度學習
- Deep Learning模型之:CNN卷積神經網路(三)CNN常見問題總結模型CNN卷積神經網路
- React 效能優化總結React優化
- SYBASE優化總結(zt)優化
- canvas效能優化總結Canvas優化
- React效能優化總結React優化
- 前端效能優化總結前端優化
- 斜率優化DP總結優化
- iOS 效能優化總結iOS優化
- JDBC優化策略總結JDBC優化
- Oracle SQL優化總結OracleSQL優化
- Oracle SQL優化 總結OracleSQL優化
- Oracle:優化方法總結(關於連表查詢)Oracle優化
- Java 效能優化之——效能優化的過程方法與求職面經總結Java優化求職
- JVM調優總結(十)-調優方法JVM
- Join Query Optimization with Deep Reinforcement Learning AlgorithmsGo
- [Deep Learning] 神經網路基礎神經網路
- SQL Server資料庫查詢優化的方法總結SQLServer資料庫優化
- 【面向程式碼】學習 Deep Learning(二)Deep Belief Nets(DBNs)
- 小程式效能優化總結優化
- App瘦身、效能優化總結APP優化
- 優化演算法總結優化演算法
- 系統效能優化總結優化