数值计算之 共轭梯度法(1)线性共轭梯度法
數值計算之 共軛梯度法(1)線性共軛梯度法
- 前言
- 共軛梯度法的引出
- 線性共軛梯度法
- 共軛向量組構造
- 線性共軛梯度流程
- 補充:線性共軛梯度法的簡化
前言
本篇繼續無約束優化算法學習,線性共軛梯度法。
共軛梯度法的引出
回顧之前的牛頓法、擬牛頓法,目的都是尋找迭代方向。牛頓法中的HΔx=JH\Delta x=JHΔx=J,高斯牛頓的JJTp=?JfJJ^Tp=-JfJJTp=?Jf,都涉及到一個解方程組的問題。如果方程組是線性的,則解線性方程組Ax=bAx=bAx=b的問題可以轉化為一個優化問題:
Ax=b→arg?min?xf(x)=12xTAx?bTxbecause?f(x)=Ax?b=0whenf(x)=min?f(x)Ax=b \\ \to \argmin_{x} f(x) = \frac{1}{2}x^TAx-b^Tx \\ \quad \\ because \quad \nabla f(x)=Ax-b=0 \\ when \quad f(x)=\min f(x) Ax=b→xargmin?f(x)=21?xTAx?bTxbecause?f(x)=Ax?b=0whenf(x)=minf(x)
在梯度下降法中,迭代過程可能出現下圖的折線。這是因為梯度下降法只考慮了一階梯度,當前迭代的方向可能與上次迭代的方向線性相關,使得迭代過程來回抖動。
即使通過線搜索方法得到最優步長時,相鄰兩次迭代的梯度正交,如下圖所示,將增量進行分解,不朝向極值點的分量仍然會導致抖動。
這里證明一下精確線搜索的梯度下降法,兩次梯度正交:
最優步長處,f關于α的導數為0f′(xk+1)=f′(xk+α(??f(xk)))=0→f′(xk+α(??f(xk))=??f(xk)T?f(xk+1)=0最優步長處,f關于\alpha的導數為0 \\ f' (x_{k+1})=f'(x_k+\alpha (-\nabla f(x_k)))=0 \\ \to f'(x_k+\alpha (-\nabla f(x_k))= -\nabla f(x_k)^T\nabla f(x_{k+1}) =0 最優步長處,f關于α的導數為0f′(xk+1?)=f′(xk?+α(??f(xk?)))=0→f′(xk?+α(??f(xk?))=??f(xk?)T?f(xk+1?)=0
共軛梯度法要解決的就是生成下面這條綠線的迭代過程。
線性共軛梯度法
對于對稱正定矩陣AAA,如果存在一個向量組{δn},δiTAδj=0\{ \delta _n\},\delta_i^TA\delta_j=0{δn?},δiT?Aδj?=0對于任意兩個不同的向量都成立,稱向量組是AAA的共軛向量組。共軛向量組是線性無關的,可以用反證法證明:
ifd1=λ2d2+?+λndnthendiTAdj=(λ2d2+?+λndn)TAdj=λdjTAdj=0then?j,dj=0?if \quad d_1=\lambda_2d_2+\dots+\lambda_nd_n \\ then \quad d_i^TAd_j=(\lambda_2d_2+\dots+\lambda_nd_n)^TAd_j \\ = \lambda d_j^TAd_j=0 \\ then \quad \forall j, \quad d_j=\vec 0 ifd1?=λ2?d2?+?+λn?dn?thendiT?Adj?=(λ2?d2?+?+λn?dn?)TAdj?=λdjT?Adj?=0then?j,dj?=0
共軛梯度法證明了對于二次型的優化問題,可以通過構造共軛向量組{δn}\{ \delta _n\}{δn?},依次沿著每個共軛向量(梯度)上優化后,就能得到極小值。也就是說,迭代nnn次后就能得到結果。
共軛向量組構造
第一個共軛向量可以通過梯度下降法獲得p0p_0p0?,梯度下降法得到的相鄰梯度是正交的(線性無關),因此可以用來構造共軛向量:
α0通過精確線搜索獲得p0=??f(x0)p^1=??f(x0+α0p0)p1=p^1+β1p0=?f(x0+α0p0)?β1p0p0TAp1=0β1p0TAp0?p0TA?f(x0+α0p0)=0β1=p0TA?f(x0+α0p0)p0TAp0\alpha_0通過精確線搜索獲得 \\ p_0 = -\nabla f(x_0) \\ \hat p_1=-\nabla f(x_0+\alpha_0 p_0) \\ p_1 =\hat p_1 + \beta_1p_0=\nabla f(x_0+\alpha_0 p_0)-\beta_1p_0 \\ \quad \\ p_0^TAp_1=0 \\ \beta_1p_0^TAp_0 - p_0^TA\nabla f(x_0+\alpha_0 p_0)=0 \\ \quad \\ \beta_1 = \frac{p_0^TA\nabla f(x_0+\alpha_0 p_0)}{p_0^TAp_0} \\ \quad \\ α0?通過精確線搜索獲得p0?=??f(x0?)p^?1?=??f(x0?+α0?p0?)p1?=p^?1?+β1?p0?=?f(x0?+α0?p0?)?β1?p0?p0T?Ap1?=0β1?p0T?Ap0??p0T?A?f(x0?+α0?p0?)=0β1?=p0T?Ap0?p0T?A?f(x0?+α0?p0?)?
然后迭代構造每一步的共軛向量:
αk通過精確線搜索獲得pk+1=βk+1pk+p^k+1βk+1=pkTA?f(xk+αkpk)pkTApk\alpha_k通過精確線搜索獲得 \\ p_{k+1} = \beta_{k+1} p_{k}+\hat p_{k+1} \\ \beta_{k+1}=\frac{p_k^T A \nabla f(x_k+\alpha_kp_k)}{p_k^TAp_k} αk?通過精確線搜索獲得pk+1?=βk+1?pk?+p^?k+1?βk+1?=pkT?Apk?pkT?A?f(xk?+αk?pk?)?
可以證明,上面的迭代出的共軛向量可以構成共軛向量組。
然后通過精確線搜索獲得αk+1\alpha_{k+1}αk+1?:
αk+1=pk+1Tp^k+1pk+1TApk+1\alpha_{k+1}=\frac{p_{k+1}^T\hat p_{k+1}}{p_{k+1}^TAp_{k+1}} αk+1?=pk+1T?Apk+1?pk+1T?p^?k+1??
線性共軛梯度流程
補充:線性共軛梯度法的簡化
前面推導的時候,沒有用到線性條件?f(x)=Ax?b\nabla f(x)=Ax-b?f(x)=Ax?b,這里可以進行簡化。首先給出簡化后的精確線搜索步長:
f′(xk+αkpk)=pkT?f(xk+αkpk)=0→pkT(A(xk+αkpk)?b)=0→pkTAxk+αkpkTApk=pkTb→αk=pkT(b?Axk)pkTApksetb?Axk=rk,αk=rkTpkpkTApkf'(x_k+\alpha_k p_k)=p_k^T\nabla f(x_k+\alpha_k p_k)=0 \\ \to p_k^T(A(x_k+\alpha_k p_k)-b)=0 \\ \to p_k^TAx_k+\alpha_k p_k^TAp_k=p_k^Tb \\ \quad \\ \to \alpha_k=\frac {p_k^T(b-Ax_k)}{p^T_kAp_k} \\ set \quad b-Ax_k=r_k, \quad \alpha_k = \frac {r^T_kp_k}{p^T_kAp_k} f′(xk?+αk?pk?)=pkT??f(xk?+αk?pk?)=0→pkT?(A(xk?+αk?pk?)?b)=0→pkT?Axk?+αk?pkT?Apk?=pkT?b→αk?=pkT?Apk?pkT?(b?Axk?)?setb?Axk?=rk?,αk?=pkT?Apk?rkT?pk??
然后構造共軛梯度向量:
pk+1=?f(xk+αkpk)+βk+1pkandpkTApk+1=0→pkTA?f(xk+αkpk)+βk+1pkTApk=0→βk+1pkTApk=?pkTA?f(xk+αkpk)βk+1=?pkTA?f(xk+αkpk)pkTApk=?pkTA(Axk+1?b)pkTApk=rk+1TApkpkTApkp_{k+1}=\nabla f(x_{k}+\alpha_kp_k)+\beta_{k+1} p_k \\ and \quad p_{k}^TAp_{k+1}=0 \\ \to p_k^TA\nabla f(x_{k}+\alpha_kp_k)+\beta_{k+1} p_k^TAp_k=0 \\ \to \beta_{k+1} p_k^TAp_k= -p_k^TA\nabla f(x_{k}+\alpha_kp_k) \\ \quad \\ \beta_{k+1} = -\frac{p_k^TA\nabla f(x_{k}+\alpha_kp_k)}{p_k^TAp_k} \\ \quad \\ = -\frac {p_k^TA(Ax_{k+1}-b)}{p_k^TAp_k} \\ = \frac {r_{k+1}^TAp_{k}}{p_k^TAp_k} \\ pk+1?=?f(xk?+αk?pk?)+βk+1?pk?andpkT?Apk+1?=0→pkT?A?f(xk?+αk?pk?)+βk+1?pkT?Apk?=0→βk+1?pkT?Apk?=?pkT?A?f(xk?+αk?pk?)βk+1?=?pkT?Apk?pkT?A?f(xk?+αk?pk?)?=?pkT?Apk?pkT?A(Axk+1??b)?=pkT?Apk?rk+1T?Apk??
最后梳理一下:
總結
以上是生活随笔為你收集整理的数值计算之 共轭梯度法(1)线性共轭梯度法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mongodb java报授权,mong
- 下一篇: java内嵌html5浏览器_Jcef内