caffe study(4) - 優化演算法基本原理

查志強發表於2015-08-06

【原文: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,後者則對於引數的解空間進行了限制。


caffe <wbr>study(4) <wbr>- <wbr>優化演算法基本原理


其中D為資料集,最後的目標函式就是在資料集上的平均。當資料集小的時候,計算量不算很大,但是當資料量非常大的時候,這種策略就會使得計算效率下降,由此引出了stochastic approximation的策略,也就是使用隨機子集對於原函式近似的思路。
caffe <wbr>study(4) <wbr>- <wbr>優化演算法基本原理

其中N<<D,這種策略成功的一個關鍵點就是大量的資料,主要原因有:

a.使用子集擬合出的函式只代表子集的特徵,因此單一的子集不可避免會帶來誤差。
b.隨著資料的增加,隨機子集的數量越來越多,從概率上講,其中接近真實函式的分佈的的子集會佔多數,因此總體上而言,擬合的函式會越來越接近全部資料擬合的函式。

2. Stochastic gradient decent(SGD)演算法

優化演算法就是看迭代公式,關鍵的就是步長和方向。

caffe中SGD權重迭代公式如下,W_{t}為t時刻的引數,V_{t}為t時刻的增量,a為learning rate,u為前一次更新的權重

caffe <wbr>study(4) <wbr>- <wbr>優化演算法基本原理

通過調節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演算法

迭代規則為

caffe <wbr>study(4) <wbr>- <wbr>優化演算法基本原理

其中i是指的W中的每一個維度。這個迭代規則的意思是採用前面的所有時間的梯度生成一個歸一化的因子,對當前的梯度進行一次尺度變換。這個尺度的含義就是如果前面函式梯度大,那麼當前增量的加速度就小一點,反之則大一點;整個趨勢還是隨著迭代的次數增加,增量放緩。

4. Nesterov‘s accelerated Gradient (NAG)

這個演算法嚴格的說來是凸優化中的演算法,具有O(1/t^2)的收斂率,收斂速度比較快。因為DNN是一個non-convex的model,所以NAG方法並不能達到這個收斂速度。caffe文件中指出,這個方法對於某些deeplearning 的 architecture是非常有效的。

caffe <wbr>study(4) <wbr>- <wbr>優化演算法基本原理

這個公式和SGD方法很類似,不同之處在於其梯度項,不再是簡單的當前位置的梯度,而是當前位置加上增量之後的新位置處的梯度。

5. 一點思考

5年前隨著Sparse representation的熱潮的興起,做很多老的凸優化的演算法在新的計算機視覺任務中顯示出了巨大的能力,比如APG、NAG、ADMM等,人們發現了有趣的現象,效率高優化演算法往往都是老演算法,越老效率越高,主要原因是早些時候,計算能力非常有限,早期的數學家只好真正從演算法中擠水分;隨著時代的發展,計算能力強了,演算法效率差不多就行了;現在到了大資料時代,效率終於又成為了瓶頸,所以老演算法又煥發了第二春。另外一些二階段方法 Newton,LBFGS等因為資料儲存量以及計算量大,在大規模的資料中可能不如最簡單的SGD類方法好用,當然選用什麼演算法,要視計算資源以及計算任務而定。

相關文章