【機器學習】擬牛頓下降優化方法-BFGS

  牛頓法是求解最優化,理論上最好最精確的方法,公式爲:xk+1=xkf(xk)f(xk) ,原理是求解導數爲0的情況。如果xk 是一個高維數據,且函數f(x) 非常複雜,那麼求解1/f(x) 就是很麻煩的過程。擬牛頓法的思路是,在牛頓法的基礎上,對1/f(x) 做個近似估計就行了,不需要精確計算。這樣雖然結果會有些差異,但是速度上來了。
  擬牛頓法 基於原函數f(xk+1) 關於f(xk) 的二階泰勒展開。設

f(xk)=f(xk+1)+f(xk+1)(xkxk+1)+12(xkxk+1)Tf(xk+1)(xkxk+1)+o(xk+1)
f(xk+1)=Bk+1 ,去掉餘項o(xk+1) ,對xk 求導有f(xk)=f(xk+1)+Bk+1(xkxk+1) ,解出
Bk+1=f(xk)f(xk+1)xkxk+1=f(xk+1)f(xk)xk+1xkxk+2=xk+1λf(xk+1)/Bk+1
由於包含要求解的xk+1 ,我們只能試着取一個值,隨機取值風險很大,上述方程只能作爲擬牛頓方程成立的一個必要條件。。
  BFGS算法是一種迭代擬牛頓法,在滿足上述必要條件的情況,保證了計算過程中的穩定,具體證明太難了。設Bk+1=Bk+δB 。數學家用了一個很技巧性很偶然的方法,令δB=αuuT+βvvT ,則
Bk+1=Bk+αuuT+βvvTBk+1(xk+1xk)=f(xk+1)f(xk)=Bk(xk+1xk)+[αuT(xk+1xk)]u+[βvT(xk+1xk)]v
αuT(xk+1xk)=1βvT(xk+1xk)=1u=f(xk+1)f(xk)v=Bk(xk+1xk) ,剛好恆等式成立。於是有
α=1[f(xk+1)f(xk)]T(xk+1xk)β=1[Bk(xk+1xk)]T(xk+1xk)=1(xk+1xk)TBk(xk+1xk)
其中Bk=BTk ,原理是我們近似認爲B是二階導,當原函數是一元函數時,B是常量,轉置就是本身;當原函數是多元函數時,B近似海森矩陣,表示爲
2fx212fx2x1...2fx1x22fx22............
顯然B可以認爲是一個對稱矩陣。
  獲得上述式子後,令sk=xk+1xk,yk=f(xk+1)f(xk 我們寫得
Bk+1=Bk+sksTkyTkskBksksTkBksTkBKsk
值得注意的是,Bk+1 的表達式還是包含未知的xk+1 。定義步長參數λk ,遍歷計算f(xk+λkdk)dk=f(xk)/Bk ,取其中函數值最小時的λk ,即求解λk=argminf(xk+λdk) ,近似得到sk=λk(f(xk)/Bk) ,然後代入Bk+1 表達式即可。當然λk 還有一些設置方法。我們用上述方法預先取的值,一般都受到BFGS本身的約束而不會太離譜。

  BFGS方法步驟如下:
  1、給定初值x0 ,收斂閾值η ,初始二階導B0=Ik=0
  2、計算得到dk=f(xk)/Bk ,一般Bk 是可以求逆的
  3、解λk=argminf(xk+λdk) ,得到xk+1=xkλkdk
  4、如果|f(xk+1)|<η ,終止運行
  5、計算yk=f(xk+1f(xk)),sk=λkdk ,代入Bk+1 求解方程,求取Bk+1
  6、k=k+1,從步驟1開始。

發佈了114 篇原創文章 · 獲贊 140 · 訪問量 42萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章