針對牛頓法中海塞矩陣的計算問題,擬牛頓法主要是使用一個海塞矩陣的近似矩陣來代替原來的還塞矩陣,通過這種方式來減少運算的復雜度。其主要過程是先推導出海塞矩陣需要滿足的條件,即擬牛頓條件(也可以稱為擬牛頓方程)。然后我們構造一個滿足擬牛頓條件的近似矩陣來代替原來的海塞矩陣。
另外,在滿足擬牛頓條件的基礎上如何構造近似的海塞矩陣,這有很多種方法,比如:DFP算法,BFGS算法,L-BFGS算法以及Broyden類算法等。本文主要介紹前兩種算法構造近似還塞矩陣。
1、擬牛頓條件
那么,如何構造一個近似海塞矩陣呢?即構造出來的近似海塞矩陣需要滿足哪些條件呢?為此,我們先來看下牛頓法中的海塞矩陣是如何推導出來的。
在牛頓法中,首先對函數f(x)在x=xk+1處進行泰勒展開,即:
然后對f(x)求偏導:
在牛頓法中,到此步后我們就已經得到了海塞矩陣,然后對f(x)的導數賦值為0,得到x的值。
但是我們這次是為了得到海塞矩陣需要滿足的條件,於是我們令x=xk得到:
即:
為了簡化下面的符號表達式,令:
於是有:
上式中Bk+1為海塞矩陣,Dk+1為海塞矩陣的逆矩陣。
到了此步,我們可以看出海塞矩陣需要滿足(式1.1)這個條件。那么在滿足此條件的基礎上如何構造近似海塞矩陣呢?下面介紹兩個方法:DFP算法和BFGS算法。
1、DFP算法
該算法的核心思想在於通過迭代的方法,逐步改善近似海塞矩陣。我們使用D來表示近似海塞矩陣的逆矩陣。其迭代公式為:
該算法最核心的就是每次迭代的海塞矩陣的變化量如何計算?由於海塞矩陣是正定矩陣,所以可以將其變化量設為:
其中向量u,v為待定向量,其維數為:n*1。(n為x的維度)。通過這種方式得到矩陣變化量一定是對稱矩陣。
根據(式1.1)有:
由於是1*1矩陣,即是一個數,於是我們可以繼續轉化:
為了簡便,我們令:
即:
上面兩個數中,一個賦1,一個賦-1,這可能是先輩們探索出來的,尤其是-1在后面恰好用到。這大大簡化了問題。
於是:
即:
這時,我們再令:
於是有:
所以,我們可以得到:
DFP算法流程:
1)初始化x=x0,閥值a,並令D0=I,k=0.
2)計算搜索方向:
3)搜索步長,使得
。
令:
4)計算,若
,則停止計算,並得到近似解:x=xk+1
5)計算,然后計算
6)令k=k+1,轉第2)步。
2、BFGS算法
BFGS算法是用直接逼近海塞矩陣的方式來構造近似海塞矩陣,同樣,我們使用迭代的方式來逐步逼近。我們使用B來表示海塞矩陣的近似矩陣,而在DFP算法中我們是直接使用D來構造近似海塞矩陣的逆矩陣。
近似海塞矩陣的迭代公式為:
與DFP一樣,我們設:
於是有:
令:
於是有:
令:
所以得:
最終,我們得到:
可以證明,若初試矩陣B0是正定的,則迭代過程中的每個矩陣Bk都是正定的。(證明略)
由於上面計算得到的是海塞矩陣的近似矩陣,而在算法中我們需要用到海塞矩陣的逆矩陣,因而我們還需要對已經得到的近似海塞矩陣求逆矩陣。
海塞矩陣的迭代公式為:
利用Sherman-Morrison公式,我們可以將上式轉化成:
通過這種方法,我們就可以更加方便的使用近似海塞矩陣的逆矩陣來進行計算。該算法的流程和DFP算法完全一樣,只是將迭代公式略作修改,具體過程可以參考上面的DFP算法。
參考文獻:
[1] peghoty, http://blog.csdn.net/itplus/article/details/21896619
[2]李航,統計學習方法。