牛頓法將目標函數近似爲二階函數,沿着牛頓方向進行優化(包含了Hession矩陣與負梯度信息)。
阻尼牛頓法在更新參數之前進行了一維搜索確定步長,確保沿着下降的方向優化。
擬牛頓法用常數矩陣近似替代Hession矩陣或Hession矩陣的逆矩陣,不用求偏導與求逆,簡化運算。
1 牛頓法
1.1 算法流程
梯度下降法利用了負梯度方向進行迭代,算法如下:
1.2 證明過程
對於最優化問題:
(1-1)
對函數進行二階泰勒展開得到:
(1-2)
將函數中的看做是變量,令代入(1-2)可以得到:
(1-3)
求解最優的x使函數f(x)取得最小值,等價於找到最優的使得取得最小值。令導數=0即可找到極值點,對(1-3)求導數使其=0得到:
(1-4)
可以得到:
(1-5)
需要逐次迭代可以寫爲:
(1-6)
1.3 幾何理解
梯度下降法搜索方向沿着等高線的法向進行搜索,每次迭代優化方向爲梯度方向,即當前點所在等高線的法向。但往往等高線很少是正圓形,這種情況下搜索次數會過多。
牛頓法搜索方向爲橢圓中心方向,這個方向也叫做牛頓方向,可以看到更新方程的組成分爲兩部分:毋庸置疑是負梯度信息,包含了該處的曲率(Hession矩陣描述局部曲率)。如下圖所示,方向爲牛頓方向,爲負梯度方向。
2 阻尼牛頓法
對於牛頓法,確定了迭代方向之後,迭代步長默認爲1,但是這個迭代方向並不一定是朝着函數值下降的方向。可以進行簡單判斷,對當前迭代的方向與梯度方向進行內積,如果內積爲負,則表明迭代方向爲下降方向。
當前迭代方向如式(1-6),梯度方向\bigtriangledown f(x_i)。二者乘積爲:
(2-1)
可以看到當且僅當Hession矩陣整定,才滿足式(2-1)爲負值。
對於牛頓法,當前點的Hession矩陣是正定的,才滿足更新方程式下降的,這個限制是非常強的。爲了確保每次迭代方向是下降的,提出了阻尼牛頓法,算法如下:
算法步長計算部分採用一維搜索法。可以看到,阻尼牛頓法相比於牛頓法,在每次參數更新之前,利用一維搜索法計算更新步長,確保優化方向爲下降方向。
3 擬牛頓法
3.1 擬牛頓法原理
牛頓法的搜索方向是:
(3-1)
但是求二階偏導數並求逆矩陣會帶來大量計算,爲了避免複雜的運算,擬牛頓法提出了設計矩陣U去近似逆矩陣。但是需要滿足一定條件。
任意兩點梯度之差公式爲:(兩點函數值之差等於斜率乘以距離)
(3-2)
可以寫成:
(3-3)
上式爲擬牛頓條件。
(1)用於近似的矩陣U一定要正定,因爲矩陣U代替了二階偏導矩陣的功能,由式(2-1)可知需要滿足正定。
(2)用於近似的矩陣U一定要滿足擬牛頓條件
常用的擬牛頓法有DFP、BFGS,區別在於如何選取替代矩陣U。
3.2 DFP算法
利用矩陣G去替代,並且每次都需要迭代計算可以得到:(爲了便於區別,此處即爲矩陣G,與3.1中的U同樣)
(3-4)
DFP算法每次採用兩個矩陣去近似,即:
(3-5)
待定。令3-5左右同時乘以可以得到:
(3-6)
爲了滿足擬牛頓條件(3-3),可以令:
(3-7)
滿足3-7的很多,令,可得:
3.3 BFGS算法
GFP算法用於近似擬牛頓條件(3-3),BFGS用於近似擬牛頓條件(3-2)。前者用以替代Hession矩陣的逆,一個用以替代Hession矩陣。
用B矩陣代替:
令,等式兩端乘以以可以得到:
爲了滿足擬牛頓條件(3-2)可以令:
滿足條件的如下: