牛頓法和擬牛頓法 -- BFGS, L-BFGS, OWL-QN

牛頓法和擬牛頓法 -- BFGS, L-BFGS, OWL-QN

轉載自:http://www.cnblogs.com/richqian/p/4535550.html

數據、特徵和數值優化算法是機器學習的核心,而牛頓法及其改良(擬牛頓法)是機器最常用的一類數字優化算法,今天就從牛頓法開始,介紹幾個擬牛頓法算法。本博文只介紹算法的思想,具體的數學推導過程不做介紹。

1. 牛頓法

牛頓法的核心思想是”利用函數在當前點的一階導數,以及二階導數,尋找搜尋方向“(回想一下更簡單的梯度下降法,她只用了當前點一階導數信息決定搜索方向)。

牛頓法的迭代公式是(稍微有修改,最原始的牛頓法γ=1

xn+1=xn−γ[Hf(xn)]−1∇f(xn)

其中,[Hf(xn)]−1∇f(xn)是線搜索方向。這個方向的含義是什麼呢。有兩種物理解釋:

  1. 一階導數∇f(x)當前搜尋點 與 ∇f(x)=0連線的方向。

  2. 當前點泰勒展開(捨棄二階以上項)函數中 當前搜尋點 與 泰勒展開函數極小值連線方向。

2. 擬牛頓算法

上述的牛頓法需要計算Hessian矩陣的逆矩陣,運算複雜度太高。在動輒百億、千億量級特徵的大數據時代,模型訓練耗時太久。因此,很多牛頓算法的變形出現了,這類變形統稱擬牛頓算法。擬牛頓算法的核心思想用一個近似矩陣B替代逆Hessian矩陣H−1。不同算法的矩陣B的計算有差異,但大多算法都是採用迭代更新的思想在tranning的沒一輪更新矩陣B

下面介紹兩種最常用的擬牛頓算法:

  • BFGS

BFGS(Broyden–Fletcher–Goldfarb–Shanno)的算法流程如下:

1. 初始化:初始點x0以及近似逆Hessian矩陣B0−1。通常,B0=I,既爲單位矩陣。

2. 計算線搜索方向:pk=−Bk−1∇f(xk)

3. 用”Backtracking line search“算法沿搜索方向找到下一個迭代點:xk+1=xk+αkpk

4. 根據Armijo–Goldstein 準則,判斷是否停止。

5. 計算xk+1=xk+αkpk; 以及 yk=∇f(xk+1)−∇f(xk)

6. 迭代近似逆Hessian矩陣:

Bk+1−1=(I−skykTykTsk)Bk−1(I−ykskTykTsk)+skskTykTsk

上式5中的推到方法比較複雜,有興趣的可以搜一下相關文獻。

  • L-BFGS

BFGS算法需要存儲近似逆Hessian矩陣B0−1。對於很多應用來說(比如百度的CTR預估),千億量級的feature數需要1016p存儲。顯然,目前的計算機技術還很難滿足這樣的空間需求。因此,內存受限的BFGS算法(Limited-memory BFGS)就誕生了。

L-BFGS算法不存儲近似逆Hessian矩陣B0−1, 而是直接通過迭代算法獲取本輪的搜索方向pk=−Bk−1∇f(xk)

雖然L-BFGS算法不需要保存B0−1矩陣,但要保存每次迭代的中間信息,不過都是一維數組,而迭代次數有不會很多(100次以內),所以存儲要求大大降低。

L-BFGS算法的流程如下:

定義:

sk=xk+1−xk

yk=gk+1−gk

以上兩個一維數組需要保存每次迭代的結果。

再定義:

ρk=1ykTsk

gk≡∇f(xk)

L-BFGS算法如下:

1. 初始化:初始點x0以及近似逆Hessian矩陣B0−1。通常,B0=I,既爲單位矩陣。

2. 用”Backtracking line search“算法沿搜索方向找到下一個迭代點:xk+1=xk+αkpk

3. 根據Armijo–Goldstein 準則,判斷是否停止。

4. 更新搜索方向 pk; 用下面的”two loop recursion"算法。

two loop recursion算法:

q=gkFor(i=k−1,k−2,…,k−m):αi=ρisiTqq=q−αiyiHk=yk−1Tsk−1/yk−1Tyk−1z=HkqdoneFor(i=k−m,k−m+1,…,k−1):βi=ρiyiTzz=z+si(αi−βi)donepk=Bk−1gk=z

  • OWQN

OWL-QN算法的全稱是Orthant-Wise Limited-memory Quasi-Newton。從全稱可以看出,該算法是單象限的L-BFGS算法,也就是說,OWL-QN算法每次迭代都不會超出當前象限。

爲什麼要加象限限制呢?L-BFGS算法需要計算函數的導數,這就要求優化函數需要處處可導。對於l2−norm正則項,這個要求是滿足的,但對l1−norm正則項,這函數並非處處可導:

f(x)=ℓ(x)+c∑i|xi|−−−(1)

l1−norm正則項具有特徵選擇的效果,是很多大規模機器學習算法的選擇。爲了牛頓法思想可以應用於l1−norm正則項的機器學習算法,學者提出了OWL-QN算法。

觀察式(1),正則項在任意一個象限裏都是線性的,一階導數爲常數,二階導數爲0。OWL-QN算法的核心思想就是將參數每次迭代更新都限制在一個象限內,即每次迭代都不改變參數的正負性。

但是,優化過程中,很多參數的正負肯定是需要改變的。OWL-QN算法通過在下次迭代中選擇合適的象限來改變參數的正負。比如,一個參數在當前點是正相權重,在線搜索時,按照標準的線搜索算法,該參數會變成負。OWL-QN算法限制了符號變換,對於需要變換符號的參數,將其置爲0。待下一次迭代時,再根據情況決定該維度的搜索方向。

與L-BFGS算法相比,OWL-QN算法做了以下幾點調整:

1. 採用僞梯度(pseudo-gradient)♢f(xk)替代BFGS裏的梯度

2. 線搜索是,如果某一維度變量需要跨越象限(正負號改變),則該維度值置爲0

其中,1中的僞梯度是這麼算的,不爲0的參數,其偏微分即爲其正負號(線性),若某一位爲0,其梯度也置爲0。

總結OWL-QN算法如下[4]:

 

 

參考文獻:

1. http://en.wikipedia.org/wiki/Broyden%E2%80%93Fletcher%E2%80%93Goldfarb%E2%80%93Shanno_algorithm

2. http://en.wikipedia.org/wiki/Limited-memory_BFGS

3. http://aria42.com/blog/2014/12/understanding-lbfgs/

4. Andrew, Galen, and Jianfeng Gao. "Scalable training of L 1-regularized log-linear models." Proceedings of the 24th international conference on Machine learning. ACM, 2007.

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