理解L-BFGS算法

理解L-BFGS算法

Mar 30, 2015   #數值優化  #無約束最優化 html

L-BFGS(Limited-Memory BFGS)是BFGS算法在受限內存時的一種近似算法,而BFGS是數學優化中一種無約束最優化算法。本文的目的是介紹L-BFGS算法的具體原理,在此過程當中附加上相關背景知識,力求簡單易懂。參考文獻在文後給出。git

無約束優化

無約束最優化的基本形式是,給定一個多元函數f(x)f(x),求出該函數的最小值點x∗x∗。形式化地來講,即:github

x∗=argminxf(x)x∗=arg⁡minxf(x)算法

通常稱f(x)f(x)爲目標函數,x∗x∗爲最優解。在本文中,假定目標函數都是凸函數。由凸函數的性質,可知其局部最優解一定爲全局最優解,所以保證接下來介紹的算法一定收斂到局部最優解附近。框架

牛頓法

在使用計算機求解一個優化問題時,一般使用迭代方法。即咱們的算法不斷迭代,產生一個序列x1,x2…xkx1,x2…xk,若該序列能收斂到x∗x∗,則算法是有效的。函數

因爲目標函數(假設爲凸函數)存在最小值,若上述序列爲遞減序列,則最後會收斂到x∗x∗(不一樣的算法,收斂速度有差別)。優化

假設如今已經有點xnxn,如何構造xn+1xn+1,使得f(xn)<f(xn+1)f(xn)<f(xn+1)呢?spa

牛頓法的基本思想是,在離點xnxn足夠近的距離,f(x)f(x)能夠近似看做一個二次函數。即,在xnxn附近使用f(x)f(x)的二次近似來尋找比xnxn處函數值更小的點。scala

泰勒公式,將f(x)f(x)在固定點xnxn處展開,則有:orm

f(xn+Δx)≈f(xn)+ΔxT∇f(xn)+12ΔxT(∇2f(xn))Δxf(xn+Δx)≈f(xn)+ΔxT∇f(xn)+12ΔxT(∇2f(xn))Δx

其中,∇f(xn)∇f(xn)和∇2f(xn)∇2f(xn)分別爲目標函數在點xnxn處的梯度和Hessian矩陣。當||Δx||→0||Δx||→0時,上面的近似展開式是成立的。

爲了簡化符號,咱們記

hn(Δx)=f(xn+Δx)=f(xn)+ΔxTgn+12ΔxTHnΔxhn(Δx)=f(xn+Δx)=f(xn)+ΔxTgn+12ΔxTHnΔx

其中gngn和HnHn分別表示目標函數在點xnxn處的梯度和Hessian矩陣。假設,咱們取xn+1=xn+Δxxn+1=xn+Δx,爲了找到比xnxn處目標函數值更小的點,咱們能夠取f(xn+Δx)f(xn+Δx)的最小值點做爲xn+1xn+1。

所以,當前任務轉化爲只要找到使hn(Δx)hn(Δx)最小的點ΔxΔx便可。因爲HnHn爲正定矩陣(凸函數任一點的Hessian矩陣爲半正定),hn(Δx)hn(Δx)也是凸函數,其極小值點即爲最小值點。

由下列公式,解出hn(Δx)hn(Δx)最小值點Δx∗Δx∗

∂hn(Δx)∂Δx=gn+HnΔx=0∂hn(Δx)∂Δx=gn+HnΔx=0

Δx∗=−H−1ngnΔx∗=−Hn−1gn

由此,咱們就肯定了下一個點xn+1xn+1的位置。實踐上,一般取Δx∗Δx∗做爲搜索方向,即取xn+1=xn−α(H−1ngn)xn+1=xn−α(Hn−1gn),使用一維搜索,找到合適的αα使得,f(xn+1f(xn+1比f(x)f(x)儘量小。

下面是算法的僞代碼:

NewtonRaphson(f,x0):For n=0,1,… (until converged):Compute gn and H−1n for xnd=H−1ngnα=minα≥0f(xn−αd)xn+1←xn−αdNewtonRaphson(f,x0):For n=0,1,… (until converged):Compute gn and Hn−1 for xnd=Hn−1gnα=minα≥0f(xn−αd)xn+1←xn−αd

αα即步長(step-size)的肯定可使用line search算法中的任何一種,其中最簡單的方法是backtracking line search

牛頓法的不足

上述的牛頓迭代法最大的問題是須要計算Hessian矩陣的逆。首先,當維度很高時(百萬或千萬級),此時計算Hessian矩陣的逆幾乎是不可能的(存儲都很難)。再者,有些函數很難給出Hessian矩陣的解析式。所以,實踐上牛頓法不多用在大型的優化問題上。但幸運的是,咱們不必定須要一個精確的H−1nHn−1,一個對其的近似,也能夠是咱們找到目標函數的遞減方向。

擬牛頓法

基本思想

先看一下擬牛頓法的基本框架

QuasiNewton(f,x0,H−10,QuasiUpdate):For n=0,1,… (until converged):// Compute search direction and step-size d=H−1ngnα←minα≥0f(xn−αd)xn+1←xn−αd// Store the input and gradient deltas gn+1←∇f(xn+1)sn+1←xn+1−xnyn+1←gn+1−gn// Update inverse hessian H−1n+1←QuasiUpdate(H−1n,sn+1,yn+1)QuasiNewton(f,x0,H0−1,QuasiUpdate):For n=0,1,… (until converged):// Compute search direction and step-size d=Hn−1gnα←minα≥0f(xn−αd)xn+1←xn−αd// Store the input and gradient deltas gn+1←∇f(xn+1)sn+1←xn+1−xnyn+1←gn+1−gn// Update inverse hessian Hn+1−1←QuasiUpdate(Hn−1,sn+1,yn+1)

初始時,給了一個參數H−10H0−1,以後每一次迭代經過QuasiUpdateQuasiUpdate方法加上輸入變量與梯度的差值(snsn和ynyn)做爲參數,產生出下一個H−1H−1的估計。

能夠發現,若QuasiUpdateQuasiUpdate每次都返回單位矩陣,則擬牛頓法退化爲梯度降低方法(每一次都沿着梯度方向搜索)。

若QuasiUpdateQuasiUpdate可以返回∇2f(xn+1)∇2f(xn+1),則擬牛頓法與牛頓法就等價了。

從上述僞代碼中能夠看出,擬牛頓法僅僅須要函數值和梯度信息,並不須要二階導信息。

QuasiUpdate & BFGS

有了上面的算法框架以後,下面的問題就是QuasiUpdate函數如何實現?

由中值定理,咱們知道

(gn−gn−1)=Hn(xn−xn−1)(gn−gn−1)=Hn(xn−xn−1)

所以

H−1nyn=snHn−1yn=sn

同時,Hessian矩陣是對稱矩陣。在這兩個條件的基礎上,咱們但願HnHn相對於Hn−1Hn−1的變化並不大。形式化地講,即

minH−1s.t. ∥H−1−H−1n−1∥2H−1yn=snH−1 is symmetric minH−1‖H−1−Hn−1−1‖2s.t. H−1yn=snH−1 is symmetric 

式中的範數|⋅||⋅|爲Weighted Frobenius Norm。這個式子的解爲

H−1n+1=(I−ρnynsTn)H−1n(I−ρnsnyTn)+ρnsnsTnHn+1−1=(I−ρnynsnT)Hn−1(I−ρnsnynT)+ρnsnsnT

其中ρn=(yTnsn)−1ρn=(ynTsn)−1。

這種更新方式,被稱爲Broyden–Fletcher–Goldfarb–Shanno (BFGS)更新,由其發明者命名。

值得注意的是,爲了計算H−1n+1Hn+1−1,咱們只需保存H−10H0−1以及{sn−1sn−1},{yn−1yn−1}序列便可。下面是計算H−1ndHn−1d的僞代碼。

BFGSMultiply(H−10,{sk},{yk},d):r←d// Compute right productfor i=n,…,1:αi←ρisTirr←r−αiyi// Compute centerr←H−10r// Compute left productfor i=1,…,n:β←ρiyTirr←r+(αn−i+1−β)sireturn rBFGSMultiply(H0−1,{sk},{yk},d):r←d// Compute right productfor i=n,…,1:αi←ρisiTrr←r−αiyi// Compute centerr←H0−1r// Compute left productfor i=1,…,n:β←ρiyiTrr←r+(αn−i+1−β)sireturn r

L-BFGS

BFGS雖然不須要計算Hessian矩陣了,可是保存snsn、ynyn的歷史記錄仍須要消耗大量的內存。L-BFGS,即限定內存的BFGS算法,其BFGSMultiply僅使用最近的若干次snsn、ynyn記錄。由最近的m次輸入變量和梯度變量的差值,和初始的H−10H0−1,近似算出當前的H−1ndHn−1d。

通常來講,取m<10便可。由此,L-BFGS能夠被用來求解大型的無約束優化問題(Machine Learning中的不少問題均可以用其求解,如Logistic Regress等)。

關於L-BFGS的實現,有機會專門開一篇來說。能夠參考breeze的實現。

參考

本文大部分改編自:http://aria42.com/blog/2014/12/understanding-lbfgs/ 。

關於數值優化的書強烈推薦 Practical Methods of Optimization 。

相關文章
相關標籤/搜索