OWL-QN算法
轉(zhuǎn)自:
http://www.cnblogs.com/vivounicorn/archive/2012/06/25/2561071.html
一、BFGS算法
??????算法思想如下:
?????????? Step1?? 取初始點(diǎn),初始正定矩陣,允許誤差,令;
?????????? Step2?? 計(jì)算;
?????????? Step3?? 計(jì)算,使得
???????????????????????????????????????????????;
????????? Step4??? 令;
????????? Step5??? 如果,則取為近似最優(yōu)解;否則轉(zhuǎn)下一步;
????????? Step6??? 計(jì)算
????????????????????????????????,,
?????????????????????????
????????? 令,轉(zhuǎn)Step2.
優(yōu)點(diǎn):
1、不用直接計(jì)算Hessian矩陣;
2、通過(guò)迭代的方式用一個(gè)近似矩陣代替Hessian矩陣的逆矩陣。
缺點(diǎn):
1、矩陣存儲(chǔ)量為,因此維度很大時(shí)內(nèi)存不可接受;
2、矩陣非稀疏會(huì)導(dǎo)致訓(xùn)練速度慢。
?
二、L-BFGS算法
????? 針對(duì)BFGS的缺點(diǎn),主要在于如何合理的估計(jì)出一個(gè)Hessian矩陣的逆矩陣,L-BFGS的基本思想是只保存最近的m次迭代信息,從而大大降低數(shù)據(jù)存儲(chǔ)空間。對(duì)照BFGS,我重新整理一下用到的公式:
??????????????????????????????????????
?????????????????????????????????????????????
?????????????????????????????????
?????????????????????????????????
于是估計(jì)的Hessian矩陣逆矩陣如下:?????????????????????????
????????????????????????????????
???????????????????????????????????????
把
????????????????????????????????
帶入上式,得:
????????????????????????????????
假設(shè)當(dāng)前迭代為k,只保存最近的m次迭代信息,(即:從k-m~k-1),依次帶入,得到:
公式1:
???????????????????????????????
??????????????????????????????????????
??????????????????????????????????????
??????????????????????????????????????
???????????????????????????????????????
??????????????????????????????????????
算法第二步表明了上面推導(dǎo)的最終目的:找到第k次迭代的可行方向,滿足:
????????????????????????????????
為了求可行方向p,有下面的:
? two-loop recursion算法
??????????????????????????????????
??????????????????????????????????
??????????????????????????????????????????
??????????????????????????????????????????
???????????????????????????????????
???????????????????????????????????
???????????????????????????????????
?????????????????????????????????????????
?????????????????????????????????????????
????????????????????????????????????
???????????????????????????????????
該算法的正確性推導(dǎo):
1、令:?????,遞歸帶入q:
????????????????????????????????
?????????????????????????????????????
?????????????????????????????????????
?????????????????????????????????????
?????????????????????????????????????
?????????????????????????????????????
?????????????????????????????????????
相應(yīng)的:
????????????????????????????????
?????????????????????????????????????
2、令:
????????????????????????????????
?????????????????????????????????????
?????????????????????????????????????
于是:
????????????????????????????????
?????????????????????????????????????
?????????????????????????????????????
?????????????????????????????????????
????????????????????????????????????????????????
??????????????????????????????????????
???????????????????????????????????????????
??????????????????????????????????????
??????????????????????????????????????
??????????????????????????????????????
這個(gè)two-loop recursion算法的結(jié)果和公式1*初始梯度的形式完全一樣,這么做的好處是:
1、只需要存儲(chǔ)、(i=1~m);
2、計(jì)算可行方向的時(shí)間復(fù)雜度從O(n*n)降低到了O(n*m),當(dāng)m遠(yuǎn)小于n時(shí)為線性復(fù)雜度。
總結(jié)L-BFGS算法的步驟如下:
????? Step1:?????? 選初始點(diǎn),允許誤差,存儲(chǔ)最近迭代次數(shù)m(一般取6);
????? Step2:??????;
????? Step3:?????? 如果??則返回最優(yōu)解,否則轉(zhuǎn)Step4;
????? Step4:?????? 計(jì)算本次迭代的可行方向:;
????? Step5:?????? 計(jì)算步長(zhǎng),對(duì)下面式子進(jìn)行一維搜索:
?????????????????????????;
????? Step6:?????? 更新權(quán)重x:
?????????????????????????;?????
????? Step7:????? if k > m
???????????????????????????? 只保留最近m次的向量對(duì),需要?jiǎng)h除();
????? Step8:?????? 計(jì)算并保存:
????????????????????????
????????????????????????;
????? Step9:?????? 用two-loop recursion算法求得:
?????????????????????????;
????? k=k+1,轉(zhuǎn)Step3。
需要注意的地方,每次迭代都需要一個(gè),實(shí)踐當(dāng)中被證明比較有效的取法為:
??????????????????????????
??????????????????????????
?
三、OWL-QN算法
1、問(wèn)題描述
對(duì)于類似于Logistic Regression這樣的Log-Linear模型,一般可以歸結(jié)為最小化下面這個(gè)問(wèn)題:
?????????????????????????
其中,第一項(xiàng)為loss function,用來(lái)衡量當(dāng)訓(xùn)練出現(xiàn)偏差時(shí)的損失,可以是任意可微凸函數(shù)(如果是非凸函數(shù)該算法只保證找到局部最優(yōu)解),后者為regularization term,用來(lái)對(duì)模型空間進(jìn)行限制,從而得到一個(gè)更“簡(jiǎn)單”的模型。
??????? 根據(jù)對(duì)模型參數(shù)所服從的概率分布的假設(shè)的不同,regularization term一般有:L2-norm(模型參數(shù)服從Gaussian分布);L1-norm(模型參數(shù)服從Laplace分布);以及其他分布或組合形式。
L2-norm的形式類似于:
????????????????????????
L1-norm的形式類似于:
????????????????????????
L1-norm和L2-norm之間的一個(gè)最大區(qū)別在于前者可以產(chǎn)生稀疏解,這使它同時(shí)具有了特征選擇的能力,此外,稀疏的特征權(quán)重更具有解釋意義。
對(duì)于損失函數(shù)的選取就不在贅述,看兩幅圖:
圖1 - 紅色為L(zhǎng)aplace Prior,黑色為Gaussian Prior?
?
圖2 直觀解釋稀疏性的產(chǎn)生
?
??????? 對(duì)LR模型來(lái)說(shuō)損失函數(shù)選取凸函數(shù),那么L2-norm的形式也是的凸函數(shù),根據(jù)最優(yōu)化理論,最優(yōu)解滿足KKT條件,即有:,但是L1-norm的regularization term顯然不可微,怎么辦呢?
2、Orthant-Wise Limited-memory Quasi-Newton
??????? OWL-QN主要是針對(duì)L1-norm不可微提出的,它是基于這樣一個(gè)事實(shí):任意給定一個(gè)維度象限,L1-norm 都是可微的,因?yàn)榇藭r(shí)它是一個(gè)線性函數(shù):
圖3 任意給定一個(gè)象限后的L1-norm
OWL-QN中使用了次梯度決定搜索方向,凸函數(shù)不一定是光滑而處處可導(dǎo)的,但是它又符合類似梯度下降的性質(zhì),在多元函數(shù)中把這種梯度叫做次梯度,見(jiàn)維基百科http://en.wikipedia.org/wiki/Subderivative
舉個(gè)例子:
圖4 次導(dǎo)數(shù)
對(duì)于定義域中的任何x0,我們總可以作出一條直線,它通過(guò)點(diǎn)(x0,f(x0)),并且要么接觸f的圖像,要么在它的下方。這條直線的斜率稱為函數(shù)的次導(dǎo)數(shù),推廣到多元函數(shù)就叫做次梯度。
次導(dǎo)數(shù)及次微分:
凸函數(shù)f:I→R在點(diǎn)x0的次導(dǎo)數(shù),是實(shí)數(shù)c使得:
????????????????????????
對(duì)于所有I內(nèi)的x。可以證明,在點(diǎn)x0的次導(dǎo)數(shù)的集合是一個(gè)非空閉區(qū)間[a,b],其中a和b是單側(cè)極限
??????????????
??????????????
它們一定存在,且滿足a?≤?b。所有次導(dǎo)數(shù)的集合[a,?b]稱為函數(shù)f在x0的次微分。
OWL-QN和傳統(tǒng)L-BFGS的不同之處在于:
1)、利用次梯度的概念推廣了梯度
?????? 定義了一個(gè)符合上述原則的虛梯度,求一維搜索的可行方向時(shí)用虛梯度來(lái)代替L-BFGS中的梯度:
??????????????????????
????????????????????????
???????????????????????
怎么理解這個(gè)虛梯度呢?見(jiàn)下圖:
對(duì)于非光滑凸函數(shù),那么有這么幾種情況:
圖5??
?
圖6??
?
圖7? otherwise
2)、一維搜索要求不跨越象限
?????? 要求更新前權(quán)重與更新后權(quán)重同方向:
圖8? OWL-QN的一次迭代
總結(jié)OWL-QN的一次迭代過(guò)程:
–Find vector of steepest descent
–Choose sectant
–Find L-BFGS quadratic approximation
–Jump to minimum
–Project back onto sectant
–Update Hessian approximation using gradient of?loss alone
最后OWL-QN算法框架如下:
?????????????????????????????????
?
????? 與L-BFGS相比,第一步用虛梯度代替梯度,第二、三步要求一維搜索不跨象限,也就是迭代前的點(diǎn)與迭代后的點(diǎn)處于同一象限,第四步要求估計(jì)Hessian矩陣時(shí)依然使用loss function的梯度(因?yàn)長(zhǎng)1-norm的存在與否不影響Hessian矩陣的估計(jì))。
四、參考資料
1、Galen Andrew and Jianfeng Gao. 2007. 《Scalable training of L1-regularized log-linear models》. In Proceedings of ICML, pages 33–40.
2、http://freemind.pluskid.org/machine-learning/sparsity-and-some-basics-of-l1-regularization/#d20da8b6b2900b1772cb16581253a77032cec97e
3、http://research.microsoft.com/en-us/downloads/b1eb1016-1738-4bd5-83a9-370c9d498a03/default.aspx
總結(jié)
- 上一篇: EM算法学习笔记
- 下一篇: 基于机器学习方法的POI品类推荐算法