A-03 牛頓法和擬牛頓法

更新、更全的《機器學習》的更新網站,更有python、go、數據結構與算法、爬蟲、人工智能教學等着你:http://www.javashuo.com/article/p-vozphyqp-cm.htmlpython

牛頓法和擬牛頓法

牛頓法(Newton method)和擬牛頓法(quasi-Newton method)和梯度降低法同樣也是求解最優化問題的經常使用方法,可是他們的收斂速度比梯度降低法快。牛頓法是迭代算法,每一步都須要求目標函數的海森矩陣的逆矩陣,計算複雜;擬牛頓法經過正定矩陣近似海森矩陣的逆矩陣,簡化這個計算過程。算法

1、牛頓法詳解

1.1 無約束最優化問題

對於一個約束問題
\[ \underbrace{min}_{x\in{R^n}}f(x) \]
其中\(x^*\)爲目標函數的極小點。數據結構

1.2 牛頓法迭代公式

假設\(f(x)\)具備二階連續偏導數,若是第\(k\)次迭代值爲\(x^{(k)}\),則能夠把\(f(x)\)\(x^{(k)}\)附近使用二階泰勒展開
\[ f(x)=f(x^{(k)})+g_k^T(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}}]_{m*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)}) \]
其中\(H_k=H(x^{(k)})\),由此\(\nabla{f(x^{(k+1)}}=0\)變成
\[ g_k+H_k(x^{(k+1)}-x^{(k)}) = 0 \]
所以
\[ x^{(k+1)}=x^{(k)}-H_k^{-1}g_k \]

\[ x^{(k+1)}=x^{(k)}+p_k \]
其中
\[ \begin{align} & x^{(k+1)}=x^{(k)}-H_k^{-1}g_k=x^{(k)}+p_k \\ & -H_k^{-1}g_k=p_k \\ & H_kp_k=-g_k \end{align} \]
使用\(x^{(k+1)}=x^{(k)}-H_k^{-1}g_k\)做爲迭代公式的算法就是牛頓法。機器學習

1.3 牛頓法和梯度降低法

從本質上去看,牛頓法是二階收斂,梯度降低是一階收斂,因此牛頓法更快。若是更通俗地說的話,好比你想找一條最短的路徑走到一個盆地的最底部,梯度降低法每次只從你當前所處位置選一個坡度最大的方向走一步,牛頓法在選擇方向時,不只會考慮坡度是否夠大,還會考慮你走了一步以後,坡度是否會變得更大。因此,能夠說牛頓法比梯度降低法看得更遠一點,能更快地走到最底部。函數

雖然牛頓法看起來比梯度降低法好不少,可是別忘記了牛頓法迭代過程當中須要計算海森矩陣的逆矩陣,若是數據量較大的話,牛頓法的計算開銷將遠遠大於梯度降低法。學習

2、牛頓法流程

2.1 輸入

目標函數\(f(x)\),梯度\(g(x)=\nabla{f(x)}\),海森矩陣\(H(x)\),精度要求\(\epsilon\)優化

2.2 輸出

\(f(x)\)的極小點\(x^*\)網站

2.3 流程

  1. 取初始點\(x^{(0)}\),而且讓\(k=0\)
  2. 計算\(g_k=g(x^{(k)})\)
  3. 若是\(||g_k||\leq\epsilon\),中止計算,獲得近似解\(x^*=x^{(k)}\)
  4. 計算\(H_k=H(x^{(k)})\),並求出\(p_k\)
    \[ H_kp_k=-g_k \]
  5. \(x^{(k+1)}=x^{(k)}+p_k\)
  6. \(k=k+1\),轉到第2步

在第4步求\(p_k\)的時候,\(p_k=-H_k^{-1}g_k\),要求求海森矩陣的逆矩陣\(H_k^{-1}\),計算會比較複雜。人工智能

3、擬牛頓法簡介

在牛頓法的迭代中,須要計算海森矩陣的逆矩陣\(H^{-1}\),這個過程是比較複雜的,而擬牛頓法則使用了一個\(n\)階矩陣\(G_k=G(x^{(k)})\)近似替代\(H_k^{-1}=H^{-1}(x^{(k)})\),此處很少贅述。

相關文章
相關標籤/搜索