caffe study(4) - 優化演算法基本原理
【原文:http://blog.sina.com.cn/s/blog_eb3aea990102v41r.html】
機器學習就兩個問題,一個是model的定義,一個就是如何優化,model是戰略,優化則是執行。
在Caffe現在的版本中,主要使用了三種優化演算法SGD、AdaGrad、以及NAG,這三種演算法快速、高效,缺點就是極容易收斂到區域性極值點或者不容易收斂。
a. 就個人理解來說,對於大資料的處理,演算法的高效率要稍微優於精度。對於大規模的非線性優化來說,通過不斷的調參可以有效的降低區域性收斂或者不收斂的狀況,從某種意義上說機器學習的本質就是調的一手好參:),是經驗活也是體力活。
b. 至於哪種演算法好,可能要針對問題做選擇。在幾個月前,餘凱老師在出門問問組織的一次學術活動中提到,目前工業界最為常用的演算法就是mini-batch SGD,價效比最高,其他的一些演算法更多的是學術上的目的。
1. 關於stochastic approximation
一般性的優化目標函式都由兩部分組成,一個是loss term,一個是regularisation term,如下所示,前者就是根據model的形式定義的energy function,後者則對於引數的解空間進行了限制。
其中D為資料集,最後的目標函式就是在資料集上的平均。當資料集小的時候,計算量不算很大,但是當資料量非常大的時候,這種策略就會使得計算效率下降,由此引出了stochastic approximation的策略,也就是使用隨機子集對於原函式近似的思路。
其中N<<D,這種策略成功的一個關鍵點就是大量的資料,主要原因有:
a.使用子集擬合出的函式只代表子集的特徵,因此單一的子集不可避免會帶來誤差。
b.隨著資料的增加,隨機子集的數量越來越多,從概率上講,其中接近真實函式的分佈的的子集會佔多數,因此總體上而言,擬合的函式會越來越接近全部資料擬合的函式。
2. Stochastic gradient decent(SGD)演算法
優化演算法就是看迭代公式,關鍵的就是步長和方向。
caffe中SGD權重迭代公式如下,W_{t}為t時刻的引數,V_{t}為t時刻的增量,a為learning rate,u為前一次更新的權重
通過調節a和u可以有效的改變迭代速度以及迭代的方向。可以看出W_{i}的更新是和上次增量以及梯度線性相關的的。
在Caffe的文件中給出了一個基本的調參規則
a. 初始的learning rate建議設定為0.01。
b. 在迭代過程中當loss到達了一個明顯的“plateau”的時候,則以10倍的速度drop learning rate,相當於稍微減少步長,
c. u是一個調解引數,一般設定為0.9,這個引數起到一個平滑的作用,可以讓SGD演算法更加穩定和快速
d. u和a是一個反相關的,增加u,則降低a,反之亦然。
3. AdaGrad演算法
迭代規則為
其中i是指的W中的每一個維度。這個迭代規則的意思是採用前面的所有時間的梯度生成一個歸一化的因子,對當前的梯度進行一次尺度變換。這個尺度的含義就是如果前面函式梯度大,那麼當前增量的加速度就小一點,反之則大一點;整個趨勢還是隨著迭代的次數增加,增量放緩。
4. Nesterov‘s accelerated Gradient (NAG)
這個演算法嚴格的說來是凸優化中的演算法,具有O(1/t^2)的收斂率,收斂速度比較快。因為DNN是一個non-convex的model,所以NAG方法並不能達到這個收斂速度。caffe文件中指出,這個方法對於某些deeplearning 的 architecture是非常有效的。
這個公式和SGD方法很類似,不同之處在於其梯度項,不再是簡單的當前位置的梯度,而是當前位置加上增量之後的新位置處的梯度。
5. 一點思考
5年前隨著Sparse representation的熱潮的興起,做很多老的凸優化的演算法在新的計算機視覺任務中顯示出了巨大的能力,比如APG、NAG、ADMM等,人們發現了有趣的現象,效率高優化演算法往往都是老演算法,越老效率越高,主要原因是早些時候,計算能力非常有限,早期的數學家只好真正從演算法中擠水分;隨著時代的發展,計算能力強了,演算法效率差不多就行了;現在到了大資料時代,效率終於又成為了瓶頸,所以老演算法又煥發了第二春。另外一些二階段方法 Newton,LBFGS等因為資料儲存量以及計算量大,在大規模的資料中可能不如最簡單的SGD類方法好用,當然選用什麼演算法,要視計算資源以及計算任務而定。
相關文章
- caffe study(5) - AlexNet 之演算法篇演算法
- caffe study - 資料結構(1)資料結構
- Caffe中的優化方法優化
- caffe study- AlexNet 之結構篇
- Study Plan For Algorithms - Part4Go
- 程式分析與優化 - 4 工作列表(worklist)演算法優化演算法
- 【調優篇基本原理】優化器相關引數配置優化
- MySQL優化--IO排程演算法優化MySql優化演算法
- 群體智慧優化演算法之粒子群優化演算法優化演算法
- Webpack4優化之路Web優化
- 4.MySQL效能優化MySql優化
- iOS冒泡演算法優化iOS演算法優化
- 優化演算法總結優化演算法
- 【Dijkstra演算法】未優化版+優先佇列優化版演算法優化佇列
- Study
- Android效能優化(4):UI渲染機制以及優化Android優化UI
- webpack4.x 效能優化Web優化
- 4、React元件之效能優化React元件優化
- 梯度下降優化演算法概述梯度優化演算法
- 蟻群演算法的基本原理演算法
- 使用Webpack4優化Web效能Web優化
- (4)caffe總結之視覺層及引數視覺
- 優化演算法庫DEAP的粒子群優化演算法(PSO)示例程式碼分析優化演算法
- 運籌優化(十四)--離散優化的啟發式演算法優化演算法
- 深度學習 - 常用優化演算法深度學習優化演算法
- 選擇排序-演算法及優化排序演算法優化
- 無約束凸優化演算法優化演算法
- 前端效能優化(慕課網筆記)-4-資源的優化前端優化筆記
- 分治演算法基本原理和實踐演算法
- Ol4網格生成以及優化優化
- Webpack4+Babel7優化70%速度WebBabel優化
- MySQL系列-- 4. 查詢效能優化MySql優化
- oracle 學習筆記---效能優化(4)Oracle筆記優化
- 【調優篇基本原理】物件統計資訊物件
- CSS Variable StudyCSS
- How to Study OracleOracle
- RCE_STUDY
- 深度學習優化演算法總結深度學習優化演算法