機器學習 學習筆記(4)牛頓法 擬牛頓法
牛頓法
考慮無約束最優化問題
其中為目標函式的極小點。
假設f(x)有二階連續偏導數,若第k次迭代值為,則可將f(x)在附近進行二階泰勒展開:
這裡是f(x)的梯度向量在點的值,是f(x)的海塞矩陣:
在點的值,函式f(x)有極值的必要條件是在極值點處一階導數為0,即梯度向量為0.特別是當是正定矩陣時,函式f(x)的極值為極小值。
牛頓法利用極小點的必要條件,每次迭代從開始,求目標函式的極小點,作為第k+1次迭代值,具體地,假設滿足,則有(解釋為:當x接近於xk時,,則,可以得出:
牛頓法步驟如下:
輸入:目標函式f(x),梯度,海塞矩陣H(x),精度要求
輸出:f(x)的極小值點
(1)取初始點,置k=0
(2)計算
(3)若,則停止計算,得近似解
(4)計算,並求:
(5)置
(6)置k=k+1,轉(2)
擬牛頓法
牛頓法計算海塞矩陣的逆矩陣開銷太多,擬牛頓法用一個近似的矩陣代替海塞矩陣的逆矩陣。
滿足條件
記,,則,或
擬牛頓法將作為的近似
DFP(Davidon-Fletcher-Powell)演算法:
DFP選擇的方法是,假設每一步迭代中矩陣是由加上兩個附加項構成的,即,和是待定矩陣,這時,為了使得滿足擬牛頓條件,可以使得和滿足條件:,,當,時,滿足上述條件,則可以得到。如果初始是正定的,那麼迭代過程中的每個矩陣都是正定的。
DFP演算法步驟如下:
輸入:目標函式f(x),梯度,精度要求
輸出:f(x)的極小值點
(1)選定初始點,取為正定矩陣,置k=0
(2)計算,若,則停止計算,得近似解,否則轉(3)
(3)置
(4)一維搜尋:求使得
(5)置
(6)計算,若,則停止計算,的近似解,否則,按照計算
(7)置k=k+1,轉(3)
BFGS(Broyden-Fletcher-Goldfarb-Shanno)演算法
BFGS演算法是最流行的擬牛頓演算法,可以考慮用逼近海塞矩陣的逆矩陣,也可以考慮用逼近海塞矩陣H。這時候,相應的擬牛頓條件是,則迭代公式,則,和滿足,,最終得到的迭代公式
BFGS演算法步驟為:
輸入:目標函式f(x),梯度
輸出:f(x)的極小值點
(1)選定初始點,取為正定矩陣,置k=0
(2)計算,若,則停止計算,得近似解,否則轉(3)
(3)由,求出
(4)一維搜尋,求使得
(5)置
(6)計算,若,則停止計算,的近似解,否則,按照計算
(7)置k=k+1,轉(3)
關於牛頓法和梯度下降法的效率對比:
從本質上去看,牛頓法是二階收斂,梯度下降是一階收斂,所以牛頓法就更快。如果更通俗地說的話,比如你想找一條最短的路徑走到一個盆地的最底部,梯度下降法每次只從你當前所處位置選一個坡度最大的方向走一步,牛頓法在選擇方向時,不僅會考慮坡度是否夠大,還會考慮你走了一步之後,坡度是否會變得更大。所以,可以說牛頓法比梯度下降法看得更遠一點,能更快地走到最底部。(牛頓法目光更加長遠,所以少走彎路;相對而言,梯度下降法只考慮了局部的最優,沒有全域性思想。)
根據wiki上的解釋,從幾何上說,牛頓法就是用一個二次曲面去擬合你當前所處位置的局部曲面,而梯度下降法是用一個平面去擬合當前的局部曲面,通常情況下,二次曲面的擬合會比平面更好,所以牛頓法選擇的下降路徑會更符合真實的最優下降路徑。
參考: