机器学习基础:最优化方法
本文先總結了凸函數、hessian矩陣、泰勒展開、拉格朗日乘子、對偶函數,隨后介紹了最優化中常用的梯度下降法、牛頓法、共軛梯度法、線性搜索法、置信域方法,最后介紹了其他的一些流行的最優化方法,模擬退火法和爬山法、遺傳算法、神經網絡、支持向量機。
? ? ?一、最優化基礎:
? ? 1. ?凸函數:
? ? ? ? ? ? ? 凸函數有很多優良的特性,而且在求解極大值極小值時,十分有用。先看一下凸函數的定義:凸函數:在函數的區間I上,若對任意x1和x2,任意0<t<1,都有
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ?或者對任意x1,x2都有:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ?凸函數有很多優良的:
? ? ? ? ? ? ? ? ? ? ? ? 1. 凸函數任何極小值也是最小值。
? ? ? ? ? ? ? ? ? ? ? ? 2. 一元二階的函數在區間上市凸的,當且僅當它的二階倒數是非負的;如果一個函數的二階導數是正數,那么函數也就是嚴格凸的。反過來不成立。多遠二次可微的連續函數在凸集上是可微的,當且僅當它的hessian矩陣在凸集內部是半正定的。
? ? ? ? ? ? ? ? ? ? ? ? 3. ? 對于凸函數f,水平子集{x| f(x) <=a}和{x|f(x)<=a}是凸集。然而,水平子集是凸集的函數不一定是凸函數;這樣的函數被稱為擬凸函數。
? ? ? ? ? ? ? ? ? ? ? ? 4. ?凸函數的求和、最大也是凸函數;如果g(x)是遞增的,那么g(f(x))仍然是凸函數。
? ? 2. ?hessian矩陣:
? ? ? ? ? ? ? hessian(海瑟矩陣)就是所謂的二階偏倒矩陣。對于一個臨界點有一階偏導等于零,然而憑借一階偏導數無法確定這個點是鞍點、局部極大點還是局部極小點。而hessian矩陣可以回答這個問題。
? ? ? ? ? ? ? ? ? ? ??? ? ? ?
? ? ? ? ? ? ?若x0是f(x)的極值點,如果存在,則進一步設在一個鄰域內所有二階導數連續,H為在點x0的海瑟矩陣。而且x0是f(x)的極小值點時H>=0,即H的特征根均為非負。x0是f(x)的極大值點,H<=0, 即H的特征根均為非負。H>0,即H為正定矩陣,x0是f(x)的極小值點;H<0,即H為負定矩陣,x0是f(x)的極大值點;H的特征值有正有負,x0不是f(x)的極值點。
? ? 3. ?正定矩陣:
? ? ? ? ? ? ?設M是n階方陣,如果對任何非零變量z,都有z'Mz>0,其中z'表示z的轉置,就稱M正定矩陣。
? ? ? ? ? ? ?判定定理1:矩陣A的特征值全為正。
? ? ? ? ? ? ?判定定理2:A的各階主子式為正。
? ? ? ? ? ? ?判定定理3:A合同于單位陣。
? ? 4. ?泰勒展開:
? ? ? ? ? ? ?泰勒公式可以用若干項加一起來表示一個函數。對于正整數n,若函數f(x)在閉區間[a,b]上n階可導,切在(a,b)上面n+1階可導數。任取a<=x<=b,則有:
? ? ? ? ? ? ?
? ? ? ? ? ? 拉格朗日余數:
? ? ? ? ? ??
? ? ? ? ? ? 請注意:泰勒展開在很多地方都有重要的應用,例如開方的計算。這里添加上牛頓迭代和泰勒級數展開求解根號的計算過程。另外我一直以為泰勒級數和牛頓迭代有一定關系,后來發現好像沒有,不過可以把牛頓迭代看做僅取泰勒級數的一階展開。
? ? ? ? ? ? 1). 使用泰勒級數求解根號2。此時我們可以得到f(x)=x^2-2;
? ? ? ? ? ? ? ? ? ? ? ? 取泰勒級數前兩項,我們可以得到: f(x)=f(a) + f'(a)(x-a),令f(x)=0我們可以得到:
? ? ? ? ? ? ? ? ? ? ? ? ?x=a-f(a)/f'(a); 其實我們可以把x看做是f(x)=0的解,使用這個式子多次迭代就可以得到根號的值。使用x(n+1)替換x,x(n)替換a,我們就可以得到:x(n+1)=x(n)-f(x(n))/f'(x(n))=x(n)-(x(n)^2-2)/2*x(n).
? ? ? ? ? ? 2). 牛頓迭代法:
? ? ? ? ? ? ? ? ? ? ? ? 如下圖,已知(x0,y0) ,我們通過對f(x0)做切線,得到切線與x軸的交點(x1,0),然后根據(x1,f(x1))繼續遞推得到(x2,f(x2)):
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? 那么對已知的(x0,y0),我們可以得到斜率:f'(x0)和點(x0,y0),那么我們可以得到直線:y-f(x0)=f'(x0)(x-x0)。再令y=0,我們可以得到:f(x)=x0-f(x0)/f'(x0)。其實我們已經得到了與泰勒級數展開相同的迭代公式。
? ? ?5. ?拉格朗日乘子:
? ? ? ? ? ? ?拉格朗日乘子,就是求函數f(x1,x2,....)在g(x1,x2,....)=0的約束條件下的極值的方法。主要思想是通過引入一個新的參數λ,將約束條件和原函數聯系到一起,從而求出原函數極值的各個變量的解。假設需要求極值的目標函數f(x,y),約束條件為φ(x,y)=M,然后我們得到新的函數:?F(x,y,λ)=f(x,y)+λg(x,y),將新函數分別對x,y,?λ求解即可得到原函數的極值。
? ? ?6. ?對偶函數:
? ? ?一、最優化常見方法:
? ? ?1. ?牛頓法:
? ? ? ? ? ? ?看了一些文章我的理解是牛頓法在最優化求解和前面的函數求解略有不同,此時是通過泰勒級數的二階展開來進行計算的。展開泰勒級數的二階形式:
? ? ? ? ? ? ? ? ? ? ??
?? ? ? ? ? ? ?當Δx 無限趨近于零時f(x+Δx )=f(x),然后可以得到(注意f''(x)Δx+1/2f''(x))Δx^2=0),然后將f'(x)和f''(x)看作常數,對Δx 再次求導即可得到如下公式:
? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? 繼續迭代可以得到:
? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ?得出迭代公式:
? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ?對于高緯的情況,我們可以得到如下迭代公式(其中H是海瑟矩陣):
? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? 牛頓法引入了高階導數,利用了曲線的額外信息,迭代次數更很少,更容易收斂,可是也引入了hessian矩陣的復雜性。下圖為牛頓法和梯度下降法求解的一個例子,牛頓法為紅色,梯度下降法沿梯度方向為綠色。其實牛頓法每次迭代都需要計算hessian矩陣,這極大增加了求解的復雜性,因而也有擬牛頓法和各種近似優化方法,避免了每次都需要進行迭代的方法。
? ? ?2. ?梯度下降法:
? ? ? ? ? ? ?梯度下降法,若實值函數F(x)在點a處可微且有意義,那么函數F(x)在a點沿著梯度相反的方向下降最快。因而并且足夠小時,我們從預估的F函數的局部極小值x0出發可以得到遞推公式:
如果順利的話,我們可以得到如下式子,并且xn會收斂到極值(注意可變):
如果滿足條件,并且迭代收斂的話,我們就會沿著梯度下降的方向找到最小值。
? ? ?3. ?共軛梯度法:
? ? ? ? ? ? ?共軛梯度法是結余最快下降法和牛頓法的一個方法,它僅需利用一階導數信息,但克服了最快下降法收斂慢的缺點,又避免了牛頓法需要存儲和計算hessian矩陣并求逆的缺點(這么牛逼的介紹,簡直是集眾多優點于一身呀。。。存儲小、收斂快、穩定性高、不需要額外參數。。。看來還是需要深入研究)。
參考文獻:
1. 泰勒級數、牛頓展開、求解根號:?http://www.linuxidc.com/Linux/2012-09/71467.htm
2. 拉格朗日乘子:http://baike.baidu.com/view/2415642.htm?fr=aladdin
3. 深入理解拉格朗日乘子和KKT法:http://blog.csdn.net/xianlingmao/article/details/7919597
4. 拉格朗日對偶:?http://www.cnblogs.com/liqizhou/archive/2012/05/11/2495689.html
5. 牛頓法和梯度下降法:http://blog.csdn.net/luoleicn/article/details/6527049
6. 共軛梯度法:?http://baike.baidu.com/view/2565822.htm?fr=aladdin
總結
以上是生活随笔為你收集整理的机器学习基础:最优化方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习中的范数规则化之(二)核范数与规
- 下一篇: 矩阵的奇异值分解