OWL-QN算法
轉自:
http://www.cnblogs.com/vivounicorn/archive/2012/06/25/2561071.html
一、BFGS算法
??????算法思想如下:
?????????? Step1?? 取初始點,初始正定矩陣,允許誤差,令;
?????????? Step2?? 計算;
?????????? Step3?? 計算,使得
???????????????????????????????????????????????;
????????? Step4??? 令;
????????? Step5??? 如果,則取為近似最優解;否則轉下一步;
????????? Step6??? 計算
????????????????????????????????,,
?????????????????????????
????????? 令,轉Step2.
優點:
1、不用直接計算Hessian矩陣;
2、通過迭代的方式用一個近似矩陣代替Hessian矩陣的逆矩陣。
缺點:
1、矩陣存儲量為,因此維度很大時內存不可接受;
2、矩陣非稀疏會導致訓練速度慢。
?
二、L-BFGS算法
????? 針對BFGS的缺點,主要在于如何合理的估計出一個Hessian矩陣的逆矩陣,L-BFGS的基本思想是只保存最近的m次迭代信息,從而大大降低數據存儲空間。對照BFGS,我重新整理一下用到的公式:
??????????????????????????????????????
?????????????????????????????????????????????
?????????????????????????????????
?????????????????????????????????
于是估計的Hessian矩陣逆矩陣如下:?????????????????????????
????????????????????????????????
???????????????????????????????????????
把
????????????????????????????????
帶入上式,得:
????????????????????????????????
假設當前迭代為k,只保存最近的m次迭代信息,(即:從k-m~k-1),依次帶入,得到:
公式1:
???????????????????????????????
??????????????????????????????????????
??????????????????????????????????????
??????????????????????????????????????
???????????????????????????????????????
??????????????????????????????????????
算法第二步表明了上面推導的最終目的:找到第k次迭代的可行方向,滿足:
????????????????????????????????
為了求可行方向p,有下面的:
? two-loop recursion算法
??????????????????????????????????
??????????????????????????????????
??????????????????????????????????????????
??????????????????????????????????????????
???????????????????????????????????
???????????????????????????????????
???????????????????????????????????
?????????????????????????????????????????
?????????????????????????????????????????
????????????????????????????????????
???????????????????????????????????
該算法的正確性推導:
1、令:?????,遞歸帶入q:
????????????????????????????????
?????????????????????????????????????
?????????????????????????????????????
?????????????????????????????????????
?????????????????????????????????????
?????????????????????????????????????
?????????????????????????????????????
相應的:
????????????????????????????????
?????????????????????????????????????
2、令:
????????????????????????????????
?????????????????????????????????????
?????????????????????????????????????
于是:
????????????????????????????????
?????????????????????????????????????
?????????????????????????????????????
?????????????????????????????????????
????????????????????????????????????????????????
??????????????????????????????????????
???????????????????????????????????????????
??????????????????????????????????????
??????????????????????????????????????
??????????????????????????????????????
這個two-loop recursion算法的結果和公式1*初始梯度的形式完全一樣,這么做的好處是:
1、只需要存儲、(i=1~m);
2、計算可行方向的時間復雜度從O(n*n)降低到了O(n*m),當m遠小于n時為線性復雜度。
總結L-BFGS算法的步驟如下:
????? Step1:?????? 選初始點,允許誤差,存儲最近迭代次數m(一般取6);
????? Step2:??????;
????? Step3:?????? 如果??則返回最優解,否則轉Step4;
????? Step4:?????? 計算本次迭代的可行方向:;
????? Step5:?????? 計算步長,對下面式子進行一維搜索:
?????????????????????????;
????? Step6:?????? 更新權重x:
?????????????????????????;?????
????? Step7:????? if k > m
???????????????????????????? 只保留最近m次的向量對,需要刪除();
????? Step8:?????? 計算并保存:
????????????????????????
????????????????????????;
????? Step9:?????? 用two-loop recursion算法求得:
?????????????????????????;
????? k=k+1,轉Step3。
需要注意的地方,每次迭代都需要一個,實踐當中被證明比較有效的取法為:
??????????????????????????
??????????????????????????
?
三、OWL-QN算法
1、問題描述
對于類似于Logistic Regression這樣的Log-Linear模型,一般可以歸結為最小化下面這個問題:
?????????????????????????
其中,第一項為loss function,用來衡量當訓練出現偏差時的損失,可以是任意可微凸函數(如果是非凸函數該算法只保證找到局部最優解),后者為regularization term,用來對模型空間進行限制,從而得到一個更“簡單”的模型。
??????? 根據對模型參數所服從的概率分布的假設的不同,regularization term一般有:L2-norm(模型參數服從Gaussian分布);L1-norm(模型參數服從Laplace分布);以及其他分布或組合形式。
L2-norm的形式類似于:
????????????????????????
L1-norm的形式類似于:
????????????????????????
L1-norm和L2-norm之間的一個最大區別在于前者可以產生稀疏解,這使它同時具有了特征選擇的能力,此外,稀疏的特征權重更具有解釋意義。
對于損失函數的選取就不在贅述,看兩幅圖:
圖1 - 紅色為Laplace Prior,黑色為Gaussian Prior?
?
圖2 直觀解釋稀疏性的產生
?
??????? 對LR模型來說損失函數選取凸函數,那么L2-norm的形式也是的凸函數,根據最優化理論,最優解滿足KKT條件,即有:,但是L1-norm的regularization term顯然不可微,怎么辦呢?
2、Orthant-Wise Limited-memory Quasi-Newton
??????? OWL-QN主要是針對L1-norm不可微提出的,它是基于這樣一個事實:任意給定一個維度象限,L1-norm 都是可微的,因為此時它是一個線性函數:
圖3 任意給定一個象限后的L1-norm
OWL-QN中使用了次梯度決定搜索方向,凸函數不一定是光滑而處處可導的,但是它又符合類似梯度下降的性質,在多元函數中把這種梯度叫做次梯度,見維基百科http://en.wikipedia.org/wiki/Subderivative
舉個例子:
圖4 次導數
對于定義域中的任何x0,我們總可以作出一條直線,它通過點(x0,f(x0)),并且要么接觸f的圖像,要么在它的下方。這條直線的斜率稱為函數的次導數,推廣到多元函數就叫做次梯度。
次導數及次微分:
凸函數f:I→R在點x0的次導數,是實數c使得:
????????????????????????
對于所有I內的x。可以證明,在點x0的次導數的集合是一個非空閉區間[a,b],其中a和b是單側極限
??????????????
??????????????
它們一定存在,且滿足a?≤?b。所有次導數的集合[a,?b]稱為函數f在x0的次微分。
OWL-QN和傳統L-BFGS的不同之處在于:
1)、利用次梯度的概念推廣了梯度
?????? 定義了一個符合上述原則的虛梯度,求一維搜索的可行方向時用虛梯度來代替L-BFGS中的梯度:
??????????????????????
????????????????????????
???????????????????????
怎么理解這個虛梯度呢?見下圖:
對于非光滑凸函數,那么有這么幾種情況:
圖5??
?
圖6??
?
圖7? otherwise
2)、一維搜索要求不跨越象限
?????? 要求更新前權重與更新后權重同方向:
圖8? OWL-QN的一次迭代
總結OWL-QN的一次迭代過程:
–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相比,第一步用虛梯度代替梯度,第二、三步要求一維搜索不跨象限,也就是迭代前的點與迭代后的點處于同一象限,第四步要求估計Hessian矩陣時依然使用loss function的梯度(因為L1-norm的存在與否不影響Hessian矩陣的估計)。
四、參考資料
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
總結
- 上一篇: EM算法学习笔记
- 下一篇: 基于机器学习方法的POI品类推荐算法