機器學習就兩個問題,乙個是model的定義,乙個就是如何優化,model是戰略,優化則是執行。
在caffe現在的版本中,主要使用了三種優化演算法sgd、adagrad、以及nag,這三種演算法快速、高效,缺點就是極容易收斂到區域性極值點或者不容易收斂。
a. 就個人理解來說,對於大資料的處理,演算法的高效率要稍微優於精度。對於大規模的非線性優化來說,通過不斷的調參可以有效的降低區域性收斂或者不收斂的狀況,從某種意義上說機器學習的本質就是調的一手好參:),是經驗活也是體力活。
b. 至於哪種演算法好,可能要針對問題做選擇。在幾個月前,余凱老師在出門問問組織的一次學術活動中提到,目前工業界最為常用的演算法就是mini-batch sgd,價效比最高,其他的一些演算法更多的是學術上的目的。
一般性的優化目標函式都由兩部分組成,乙個是loss term,乙個是regularisation term,如下所示,前者就是根據model的形式定義的energy function,後者則對於引數的解空間進行了限制。
其中n<
a.使用子集擬合出的函式只代表子集的特徵,因此單一的子集不可避免會帶來誤差。
b.隨著資料的增加,隨機子集的數量越來越多,從概率上講,其中接近真實函式的分布的的子集會占多數,因此總體上而言,擬合的函式會越來越接近全部資料擬合的函式。
2. stochastic gradient decent(sgd)演算法
優化演算法就是看迭代公式,關鍵的就是步長和方向。
caffe中sgd權重迭代公式如下,w_為t時刻的引數,v_為t時刻的增量,a為learning rate,u為前一次更新的權重
通過調節a和u可以有效的改變迭代速度以及迭代的方向。可以看出w_的更新是和上次增量以及梯度線性相關的的。
在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類方法好用,當然選用什麼演算法,要視計算資源以及計算任務而定。
演算法 演算法優化
傳統最優化方法的設計思想主要是通過傳統的序列計算實現的,無法與硬體的並行架構完美相容,這降低了傳統最優化方法在具有大資料背 計算為核心的分布式優化應運而生,這也使得最優化方法得到了比以往任何時候都更加廣泛的應用。平行計算要首先把乙個問題分解成若干個可以同時計算的子問題 部分 並將每個子問題進一步細分...
python優化演算法 python 優化演算法
設k k,n 是從金鑰k開始的長度為n的唯一數的個數.然後,k k,n 1 sum k i,n 其中i在可以從鍵k跳轉到的鍵的範圍內.這可以使用動態程式設計有效地計算 這是一種占用o n 時間和o 1 空間的方法 jumpmap map int,x for x in 46,68,79,48,039,...
gyb優化事項 4
dxi change log支援直接呼叫dxi ddd和dd,而不寫入tb change log後非同步處理 非同步方式在das中存在多個內部伺服器時如何分配,協調tb change log記錄任務存在問題 假設a,b兩個內部伺服器,寫入tb change log後,這些未處理的記錄由誰處理?方案 ...