機器學習中的最優化方法進階

前言:

        在機器學習方法中,若模型理解爲決策模型,有些模型可以使用解析方法。不過更一般的對模型的求解使用優化的方法,更多的數據可以得到更多的精度。


一、線性規劃

       線性規劃、整數規劃、目標規劃等方法其目標函數與約束條件都是決策變量的一次函數,全部爲線性規劃,具有統一的數學模型及如單純形法這樣的通用解法。1947年丹齊格(G.B.Dantzig)提出了線性規劃的一般方法——單純形法。隨後專業豐富了線性規劃的數學模型和求解方法,並深入分析細節,如對偶理論、線性目標規劃等。

       若建立的一個數學模型,(1)要求一組變量X1, X2, X3….Xn的值(2)滿足特定的約束條件(Xk…Xi的之間約束關係,和Xi的定義域約束關係),(3)同時使一次目標函數 y = K1X1 + K2X2 + … +KnXn 取得極值。即求min y( X1, X2, X3….Xn ) 。此種問題爲線性規劃問題。

       標準形式:

              min y = K1X1 + K2X2 + … + KnXn ;  ( 3 )


                       a11X1 + a12X2 + … + a1nXn    = b1;        ( 2 )

                       a21X1 + a22X2 + … + a2nXn    = b2;        ( 2 )

                       ……………………………………………             ( 2 )

                       am1X1 + am2X2 + … + amnXn = bm;       ( 2 )

                        K1<< Xi  << K2                               ;       ( 2 )


         簡化形式爲:

                 

         矩陣形式爲:

           

重要的定理:

        線性規劃基本定理:若線性規劃存在可行域,則可行域 S = { x | Ax=b,x>=0,A屬於Mm*n, b 屬於R^m, x 屬於R^n } 爲一凸集。

       極點:線性規劃問題的每一個基本可行解x對應可行域S的一個極點。

       最優解:若線性規劃具有最優解,則必可在其某個可行域的某個(或者多個)極點上達到最優解。

       

        示例:若約束矩陣A爲m*n型矩陣,且A的秩r(A)=m,則基本解的個數<=  N= 組合(m,n),也是基本可行解的上限。

                 最基本的尋找線性規劃最優解的方法爲枚舉法,但組合爆炸使其適用範圍極窄,因此有規律尋找最優解成爲必然。


單純形法:

       snip//……………………………



二、非線性規劃

        非線性規劃最簡單的爲一維搜索,即在一維空間尋求最優解,基本方法有黃金分割法、加步探索法、牛頓迭代法、二次優化-拋物線法。

        關於一般非線性規劃優化算法的求解,最優化方法一書已經介紹了很多的方法,比如有梯度下降法座標下降法牛頓法擬牛頓法,共軛梯度法。而機器學習中主要面對非線性問題,所使用的優化方法爲非線性優化方法。

        以下摘抄自百度百科。


1.最速下降法

        梯度下降法是基於目標函數梯度的,算法的收斂速度是線性的,並且當問題是病態時或者問題規模較大時,收斂速度尤其慢(幾乎不適用)。例如。SVM方法使用梯度下降法時其運行可行性受到樣本數目的限制,樣本數目過多會產生較大的係數矩陣,訓練速度極慢。

        變量輪換法(座標下降法)雖然不用計算目標函數的梯度,但是其收斂速度依然很慢,因此它的適用範圍也有侷限;


2.牛頓迭代法

        牛頓法(修正的牛頓法)主要思想是:體現爲一種函數逼近方法,在極小點附近用二階泰勒多項近似代替目標函數f(x), 從而求出極小點的估計值。若f(x)在極小點附近有二階連續偏導數,且在點處的黑塞矩陣正定,可進行迭代估計。       

       牛頓法是基於目標函數的二階導數(海森矩陣)的,其收斂速度較快,迭代次數較少,尤其是在最優值附近時,收斂速度是二次的。但牛頓法的問題在於當海森矩陣稠密時,每次迭代的計算量比較大,因爲每次都會計算目標函數的海森矩陣的逆,這樣一來,當問題規模較大時,不僅計算量大(有時大到不可計算),而且需要的存儲空間也多,因此牛頓法在面對海量數據時由於每一步迭代的開銷巨大而變得不適用;


3.擬牛頓法

        牛頓法在每次迭代時不能總是保證海森矩陣是正定的,一旦海森矩陣不是正定的,優化方向就會 “ 跑偏 ”,從而使得牛頓法失效,也說明了牛頓法的魯棒性較差。擬牛頓法用海森矩陣的逆矩陣來替代海森矩陣,雖然每次迭代不能保證是最優的優化方向,但是近似矩陣始終是正定的,因此算法總是朝着最優值的方向在搜索。

        擬牛頓法(DFP和BFGS)是20世紀50年代,美國Argonne國家實驗室的物理學家W. C. Davidon所提出來的。是在牛頓法的基礎上引入了海森矩陣的近似矩陣,避免每次迭代都要計算海森矩陣的逆,擬牛頓法的收斂速度介於梯度下降法和牛頓法之間,是超線性的。擬牛頓法的問題也是當問題規模很大時,近似矩陣變得很稠密,在計算和存儲上也有很大的開銷,因此也會變得不實用

        優勢:擬牛頓法和最速下降法(Steepest Descent Methods)一樣只要求每一步迭代時知道目標函數的梯度。通過測量梯度的變化,構造一個目標函數的模型使之足以產生超線性收斂性。這類方法大大優於最速下降法,尤其對於困難的問題。另外,因爲擬牛頓法不需要二階導數的信息,所以有時比牛頓法(Newton’s Method)更爲有效。如今,優化軟件中包含了大量的擬牛頓算法用來解決無約束,約束,和大規模的優化問題。


      
      
擬牛頓法主要有這幾種方法:DFP方法,BFGS方法,SR1方法,Broyden族方法。

DFP方法

       

BFGS方法
 
       
SR1方法
        有別於DFP和BFG方法,SR1是一種秩-1更新。它的公式是:B_{k+1}=(y_k-B_ks_k)(y_k-B_ks_k)^T/((y_k-B_ks_k)^Ts_k)。SR1公式不要求矩陣B_k保持正定性,從而更逼近真實的Hesse矩陣,所以適用於信賴域方法(Trust Region Methods)。

Broyden族

         Boyden族是更廣泛的一類更新公式,其形式爲:B_{k+1}=(1-c_k)B_{k+1}^{BFGS}+c_k B_{k+1}^{DFP}。當c_k=0時,Broyden族公式就變成了BFGS公式;當c_k=1時,Broyden族公式就變成了DFP公式。因此BFGS和DFP均可看成Broyden族的特殊形式或者其中一員。


4.L-FBGS算法

        從上面的綜合描述可以看出,很多優化算法在理論上有很好的結果,並且當優化問題的規模較小時,上面的任何算法都能夠很好地解決問題。而在實際工程中,很多算法卻失效了。比如說,在實際工程中,很多問題是病態的,這樣一來,基於梯度的方法肯定會失效,即便迭代上千上萬次也未必收斂到很好的結果;另外,當數據量大的時候,牛頓法和擬牛頓法需要保存矩陣的內存開銷和計算矩陣的開銷都很大,因此也會變得不適用。

       實際工程中解決大規模優化問題時必然會用到的一種優化算法:L-BFGS算法。

        L-BFGS算法就是對擬牛頓算法的一個改進。它的名字已經告訴我們它是基於擬牛頓法BFGS算法的改進。L-BFGS算法的基本思想是:算法只保存並利用最近m次迭代的曲率信息來構造海森矩陣的近似矩陣。


在介紹L-BFGS算法之前,我們先來簡單回顧下BFGS算法。

       以下參考:http://blog.csdn.net/henryczj/article/details/41542049?utm_source=tuicool&utm_medium=referral

     

在算法的每一步迭代,有如下式:

,      k = 0, 1, 2,…,           (1)

式(1)中ak是步長,Hk的更新通過如下公式:

 (2)

在式(2)中

 (3)

 (4)

 (5)

(6)

從式(2)到式(6)可以看出Hk+1是用{sk, yk}修正Hk來得到的。需要注意的是,這裏Hk表示海森矩陣的逆的近似矩陣。

       在BFGS算法中,由於Hk隨着迭代次數的增加會越來越稠密,當優化問題的規模很大時,存儲和計算矩陣Hk將變得不可行。

       爲了解決上述問題,我們可以不存儲矩陣Hk,而是存儲最近m次迭代的曲率信息,即{sk, yk}。每當完成一次迭代,最舊的曲率信息{si, yi}將被刪除,而最新的曲率信息被保存下來,維持一個曲率隊列。通過這種方式,算法保證了保存的曲率信息是來自於最近的m次迭代。在實際工程中,m取3到20往往能有很好的結果。除了更新矩陣Hk的策略和初始化Hk的方式不同外,L-BFGS算法和BFGS算法是一樣的。

下面將會詳細介紹一下矩陣Hk的更新步驟。

       在第k次迭代,算法求得了xk,並且保存的曲率信息爲{si, yi},其中i = k-m, …, k-1。爲了得到Hk,算法首先選擇一個初始的矩陣Hk0,這是不同於BFGS算法的一個地方,L-BFGS算法允許每次迭代選取一個初始的矩陣,然後用最近的m次曲率信息對該初始矩陣進行修正,從而得到Hk

       通過反覆利用式(2),我們可以得到下式:

     

       關於每次迭代時Hk0的初始值的設定,一個在實踐中經常用到的有效方法爲:

      

 (8)

(9)

        其中rk表示比例係數,它利用最近一次的曲率信息來估計真實海森矩陣的大小,這就使得當前步的搜索方向較爲理想,而不至於跑得“太偏”,從而使得步長ak = 1在大多數時候都是滿足的,這樣就省去了步長搜索的步驟,節省了時間。

        在L-BFGS算法中,通過保存最近m次的曲率信息來更新近似矩陣的這種方法在實踐中是很有效的。

        雖然L-BFGS算法是線性收斂,但是每次迭代的開銷非常小,因此L-BFGS算法執行速度還是很快的,而且由於每一步迭代都能保證近似矩陣的正定,因此算法的魯棒性還是很強的。


        百度最近提出了一個shooting算法,該算法比L-BFGS快了十倍。由於L-BFGS算法的迭代方向不是最優的,所以我猜想shooting算法應該是在迭代的方向上做了優化。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章