1. 程式人生 > >機器學習 學習筆記(4)牛頓法 擬牛頓法

機器學習 學習筆記(4)牛頓法 擬牛頓法

牛頓法

考慮無約束最優化問題\min \limits_{x \in R^n} f(x)

其中x^*為目標函式的極小點。

假設f(x)有二階連續偏導數,若第k次迭代值為x^{(k)},則可將f(x)在x^{(k)}附近進行二階泰勒展開:

f(x)=f(x^{(k)})+g^T_k(x-x^{(k)})+\frac{1}{2}(x-x^{(k)})^TH(x^{(k)})(x-x^{(k)})

這裡g_k=g(x^{(k)})= \nabla f(x^{(k)})是f(x)的梯度向量在點x^{(k)}的值,H(x^{(k)})是f(x)的海塞矩陣:

H(x)=[ \frac{\partial ^2f}{\partial x_i \partial x_j} ]_{n\times n} 

在點x^{(k)}的值,函式f(x)有極值的必要條件是在極值點處一階導數為0,即梯度向量為0.特別是當H(x^{(k)})是正定矩陣時,函式f(x)的極值為極小值。

牛頓法利用極小點的必要條件\nabla f(x)=0,每次迭代從x^{(k)}開始,求目標函式的極小點,作為第k+1次迭代值x^{(k+1)},具體地,假設x^{(k+1)}滿足\nabla f(x^{(k+1)})=0,則有\nabla f(x)=g_k+H_k(x-x^{(k)})(解釋為:當x接近於xk時,\nabla f(x)=\nabla f(x^{(k)})+H_k(x-x^{(k)}),則g_k+H_k(x^{(k+1)}-x^{(k)})=0,可以得出:

x^{(k+1)}=x^{(k)}-H^{-1}_kg_k

牛頓法步驟如下:

輸入:目標函式f(x),梯度g(x)=\nabla f(x),海塞矩陣H(x),精度要求\varepsilon

輸出:f(x)的極小值點x^*

(1)取初始點x^{(0)},置k=0

(2)計算g_k=g(x^{(k)})

(3)若||g_k||< \varepsilon,則停止計算,得近似解x^*=x^{(k)}

(4)計算H_k=H(x^{(k)}),並求p_kH_kp_k=-g_k

(5)置x^{(k+1)}=x^{(k)}+p_k

(6)置k=k+1,轉(2)

擬牛頓法

牛頓法計算海塞矩陣的逆矩陣開銷太多,擬牛頓法用一個近似的矩陣代替海塞矩陣的逆矩陣。

H_k滿足條件g_{k+1}-g_k=H_k(x^{(k+1)}-x^{(k)})

y_k=g_{k+1}-g_k\delta _k=x^{(k+1)}-x^{(k)},則y_k=H_k\delta _k,或H^{-1}_ky_k=\delta _k

擬牛頓法將G_k作為H^{-1}_k的近似

DFP(Davidon-Fletcher-Powell)演算法:

DFP選擇G_{k+1}的方法是,假設每一步迭代中矩陣G_{k+1}是由G_k加上兩個附加項構成的,即G_{k+1}=G_k+P_k+Q_kP_kQ_k是待定矩陣,這時G_{k+1}y_k=G_ky_k+P_ky_k+Q_ky_k,為了使得G_{k+1}滿足擬牛頓條件,可以使得P_kQ_k滿足條件:P_ky_k=\delta _kQ_ky_k=-G_ky_k,當P_k=\frac {\delta _k\delta ^T_k}{\delta ^T_k y_k}Q_k=- \frac{G_k y_ky^T_kG_k}{y^T_k G_ky_k}時,滿足上述條件,則可以得到G_{k+1}=G_k+\frac {\delta _k\delta ^T_k}{\delta ^T_k y_k}-\frac{G_k y_ky^T_kG_k}{y^T_k G_ky_k}。如果初始G_k是正定的,那麼迭代過程中的每個矩陣G_k都是正定的。

DFP演算法步驟如下:

輸入:目標函式f(x),梯度g(x)=\nabla f(x),精度要求\varepsilon

輸出:f(x)的極小值點x^*

(1)選定初始點x^{(0)},取G_0為正定矩陣,置k=0

(2)計算g_k=g(x^{(k)}),若||g_k|| < \varepsilon,則停止計算,得近似解x^*=x^{(k)},否則轉(3)

(3)置p_k=-G_kg_k

(4)一維搜尋:求\lambda_k使得f(x^{(k)}+\lambda _kp_k)=\min \limits_{\lambda>0} f(x^{(k)}+\lambda p_k)

(5)置x^{(k+1)}=x^{(k)}+\lambda_kp_k

(6)計算g_{k+1}=g(x^{(k+1)}),若||g_{(k+1)}||<\varepsilon,則停止計算,的近似解x^*=x^{(k+1)},否則,按照G_{k+1}=G_k+\frac {\delta _k\delta ^T_k}{\delta ^T_k y_k}-\frac{G_k y_ky^T_kG_k}{y^T_k G_ky_k}計算G_{k+1}

(7)置k=k+1,轉(3)

BFGS(Broyden-Fletcher-Goldfarb-Shanno)演算法

BFGS演算法是最流行的擬牛頓演算法,可以考慮用G_k逼近海塞矩陣的逆矩陣H^{-1},也可以考慮用B_k逼近海塞矩陣H。這時候,相應的擬牛頓條件是B_{k+1}\delta_k=y_k,則迭代公式B_{k+1}=B_k+P_k+Q_k,則B_{k+1}\delta_k=B_k\delta_k+P_k\delta_k+Q_k\delta_kP_kQ_k滿足P_k\delta_k=y_kQ_k\delta_k=-B_k\delta_k,最終得到B_{k+1}的迭代公式B_{k+1}=B_k+\frac{y_ky^T_k}{y^T_k\delta_k}-\frac{B_k\delta_k\delta^T_kB_k}{\delta^T_kB_k\delta_k}

BFGS演算法步驟為:

輸入:目標函式f(x),梯度g(x)=\nabla f(x)

,精度要求\varepsilon

輸出:f(x)的極小值點x^*

(1)選定初始點x^{(0)},取G_0為正定矩陣,置k=0

(2)計算g_k=g(x^{(k)}),若||g_k|| < \varepsilon,則停止計算,得近似解x^*=x^{(k)},否則轉(3)

(3)由B_kp_k=-g_k,求出p_k

(4)一維搜尋,求\lambda_k使得f(x^{(k)}+\lambda _kp_k)=\min \limits_{\lambda>0} f(x^{(k)}+\lambda p_k)

(5)置x^{(k+1)}=x^{(k)}+\lambda_kp_k

(6)計算g_{k+1}=g(x^{(k+1)}),若||g_{(k+1)}||<\varepsilon,則停止計算,的近似解x^*=x^{(k+1)},否則,按照B_{k+1}=B_k+\frac{y_ky^T_k}{y^T_k\delta_k}-\frac{B_k\delta_k\delta^T_kB_k}{\delta^T_kB_k\delta_k}計算B_{k+1}

(7)置k=k+1,轉(3)

關於牛頓法和梯度下降法的效率對比:

  從本質上去看,牛頓法是二階收斂,梯度下降是一階收斂,所以牛頓法就更快。如果更通俗地說的話,比如你想找一條最短的路徑走到一個盆地的最底部,梯度下降法每次只從你當前所處位置選一個坡度最大的方向走一步,牛頓法在選擇方向時,不僅會考慮坡度是否夠大,還會考慮你走了一步之後,坡度是否會變得更大。所以,可以說牛頓法比梯度下降法看得更遠一點,能更快地走到最底部。(牛頓法目光更加長遠,所以少走彎路;相對而言,梯度下降法只考慮了局部的最優,沒有全域性思想。)

  根據wiki上的解釋,從幾何上說,牛頓法就是用一個二次曲面去擬合你當前所處位置的局部曲面,而梯度下降法是用一個平面去擬合當前的局部曲面,通常情況下,二次曲面的擬合會比平面更好,所以牛頓法選擇的下降路徑會更符合真實的最優下降路徑。

參考: