全市政府網(wǎng)站建設(shè)管理的講話seo推廣效果怎么樣
機(jī)器人中的數(shù)值優(yōu)化|【六】線性共軛梯度法,牛頓共軛梯度法
往期回顧
機(jī)器人中的數(shù)值優(yōu)化|【一】數(shù)值優(yōu)化基礎(chǔ)
機(jī)器人中的數(shù)值優(yōu)化|【二】最速下降法,可行牛頓法的python實(shí)現(xiàn),以Rosenbrock function為例
機(jī)器人中的數(shù)值優(yōu)化|【三】無約束優(yōu)化,擬牛頓法理論與推導(dǎo)
機(jī)器人中的數(shù)值優(yōu)化|【四】L-BFGS理論推導(dǎo)與延伸
機(jī)器人中的數(shù)值優(yōu)化|【五】BFGS算法非凸/非光滑處理
關(guān)于牛頓-共軛梯度法,筆者認(rèn)為對(duì)其最直接和最根本的認(rèn)識(shí),這篇帖子寫得特別好,可以參考東雲(yún)正樹的 如何理解共軛梯度法 一文。
為什么要用Conjugate Gradient method?
從前面的系列我們知道,對(duì)于一個(gè)凸的無約束優(yōu)化,我們總是希望通過梯度,基于這樣那樣的方法來到達(dá)最優(yōu)點(diǎn)。在前面基本的梯度下降方法中,我們每次計(jì)算一個(gè)梯度,并根據(jù)線性搜索得到的一個(gè)較為不錯(cuò)的步長,向前優(yōu)化一步。在Newton-CG method中我們不禁要提問了:有沒有一種可以有確定的搜索次數(shù),而且次數(shù)還比較少的方法呢?這個(gè)方法就是Newton-CG method。我們知道在向量中存在標(biāo)準(zhǔn)正交集的概念,在優(yōu)化問題中,我們也存在共軛梯度的概念,關(guān)于共軛梯度的具體定義和推導(dǎo)可以進(jìn)一步查閱相關(guān)的資料。本質(zhì)上,就是把原來隨機(jī)走梯度的過程,變?yōu)樵谕箚栴}空間中“正交”的梯度向量上,每個(gè)向量只走一步,且是最優(yōu)的一步的過程。
從上面的例子我們可以看到,綠色為共軛梯度法,紅色為梯度下降法,我們其實(shí)要做的工作就是在橢圓的切向和法向各走“最優(yōu)”的一步,一步到位即可。
Gram-Schmitd正交化/施密特正交化
理解共軛梯度法,首先我們要回顧一個(gè)東西,那就是施密特正交化。利用施密特正交化,我們可以從空間中的一組向量得到互相正交的一組向量集。如果我們有一組互不平行的向量 [ α 1 , α 2 , α 3 , α 4 , α 5 , . . . ] {[\alpha_1, \alpha_2, \alpha_3, \alpha_4, \alpha_5,...]} [α1?,α2?,α3?,α4?,α5?,...],利用一下公式可以得到正交基:
β 1 = α 1 \beta_1 = \alpha_1 β1?=α1?
β 2 = α 2 ? ( β 1 , α 2 ) ( β 1 , β 1 ) β 1 \beta_2 = \alpha_2 - \frac{(\beta_1, \alpha_2)}{(\beta_1, \beta_1)} \beta_1 β2?=α2??(β1?,β1?)(β1?,α2?)?β1?
β 3 = α 3 ? ( β 1 , α 3 ) ( β 1 , β 1 ) β 1 ? ( β 2 , α 3 ) ( β 2 , β 2 ) β 2 \beta_3 = \alpha_3 - \frac{(\beta_1, \alpha_3)}{(\beta_1, \beta_1)} \beta_1 - \frac{(\beta_2, \alpha_3)}{(\beta_2, \beta_2)} \beta_2 β3?=α3??(β1?,β1?)(β1?,α3?)?β1??(β2?,β2?)(β2?,α3?)?β2?
β 4 = α 4 ? ( β 1 , α 4 ) ( β 1 , β 1 ) β 1 ? ( β 2 , α 4 ) ( β 2 , β 2 ) β 2 ? ( β 3 , α 4 ) ( β 3 , β 3 ) β 3 \beta_4 = \alpha_4 - \frac{(\beta_1, \alpha_4)}{(\beta_1, \beta_1)} \beta_1 - \frac{(\beta_2, \alpha_4)}{(\beta_2, \beta_2)} \beta_2 - \frac{(\beta_3, \alpha_4)}{(\beta_3, \beta_3)} \beta_3 β4?=α4??(β1?,β1?)(β1?,α4?)?β1??(β2?,β2?)(β2?,α4?)?β2??(β3?,β3?)(β3?,α4?)?β3?
. . . ... ...
線性共軛梯度法
對(duì)于如下的一個(gè)問題
a r g m i n x f ( x ) = 1 2 x T A x ? b T x argmin_x f(x) = \frac{1}{2}x^TAx - b^Tx argminx?f(x)=21?xTAx?bTx
我們要求其無約束優(yōu)化。這里我們可以引入共軛梯度的概念,其概念類似于正交向量,對(duì)于一個(gè)正交向量 u , v u,v u,v,有 u T v = 0 u^Tv =0 uTv=0。一個(gè)矩陣 A A A,如果存在向量 u , v u,v u,v,有 u T A v = 0 u^TAv=0 uTAv=0,則我們認(rèn)為 u , v u,v u,v關(guān)于 A A A共軛。在下降過程中,如果我們每一步選擇的下降方向都是一個(gè)獨(dú)立的共軛向量,且一共有 n n n個(gè)共軛向量,則最多需要 n n n步即可下降到最優(yōu)點(diǎn)。
回顧優(yōu)化過程,最核心的公式為
x k + 1 = x k + α u k x_{k+1} = x_k + \alpha u_k xk+1?=xk?+αuk?
其中 u k u_k uk?為下降方向, α \alpha α為步長。將 x k + 1 x_{k+1} xk+1?代入最優(yōu)化目標(biāo)公式,我們有
a r g m i n x f ( x k + 1 ) = a r g m i n x f ( x k + α u k ) argmin_x f(x_{k+1}) = argmin_x f(x_k + \alpha u_k) argminx?f(xk+1?)=argminx?f(xk?+αuk?)
假設(shè)下降方向已經(jīng)確定了,我們要確定最優(yōu)步長
a r g m i n x f ( x k + α u k ) = a r g m i n x 1 2 ( x k + α u k ) T A ( x k + α u k ) ? b T ( x k + α u k ) argmin_x f(x_k + \alpha u_k) = argmin_x \frac{1}{2}(x_k + \alpha u_k)^TA(x_k + \alpha u_k) - b^T(x_k + \alpha u_k) argminx?f(xk?+αuk?)=argminx?21?(xk?+αuk?)TA(xk?+αuk?)?bT(xk?+αuk?)
對(duì) α \alpha α求導(dǎo),有
a r g m i n x f ′ ( x k + α u k ) = 0 argmin_x f'(x_k + \alpha u_k) = 0 argminx?f′(xk?+αuk?)=0
解得
α = b T u k ? x k T A u k u k T A u k \alpha = \frac{b^Tu_k - x_k^TAu_k}{u_k^TAu_k} α=ukT?Auk?bTuk??xkT?Auk??
這里的 α \alpha α是最優(yōu)步長的一個(gè)“尺度”,也就是scalar。那么問題來了,我們想要每次下降都能夠是共軛方向的,怎么辦呢?
設(shè)每次迭代之后的誤差量為
r k = A x k ? b r_k = Ax_k - b rk?=Axk??b
令
u k = ? r k + β k u k ? 1 u_k = -r_k + \beta_k u_{k-1} uk?=?rk?+βk?uk?1?
兩邊乘以 u k ? 1 T A u_{k-1}^TA uk?1T?A有
u k ? 1 T A u k = ? u k ? 1 T A r k + u k ? 1 T A β k u k ? 1 u_{k-1}^TAu_{k} = -u_{k-1}^TAr_k + u_{k-1}^TA\beta_ku_{k-1} uk?1T?Auk?=?uk?1T?Ark?+uk?1T?Aβk?uk?1?
因?yàn)槲覀兿胍玫降氖枪曹椃较?#xff0c;所以認(rèn)為 u k ? 1 T A u k = 0 u_{k-1}^TAu_{k} =0 uk?1T?Auk?=0
? u k ? 1 T A r k + u k ? 1 T A β k u k ? 1 = 0 -u_{k-1}^TAr_k + u_{k-1}^TA\beta_ku_{k-1} = 0 ?uk?1T?Ark?+uk?1T?Aβk?uk?1?=0
β k = r k T A u k ? 1 u k ? 1 T A u k ? 1 \beta_k= \frac{r_k^T A u_{k-1}}{u_{k-1}^TAu_{k-1}} βk?=uk?1T?Auk?1?rkT?Auk?1??
在這里我們就可以得到一個(gè)縮放標(biāo)量 β k \beta_k βk?可以迭代計(jì)算共軛向量,最后得到的算法如下所示
優(yōu)化線性共軛梯度法
進(jìn)一步的,我們可以提出更高效的線性共軛梯度法。首先引入一些定理(這里的 p p p就是 u u u)
根據(jù)前面的公式,有
α = b T u k ? x k T A u k u k T A u k = ? r k T u k u k T A u k \alpha = \frac{b^Tu_k - x_k^TAu_k}{u_k^TAu_k} = \frac{-r_k^Tu_k}{u_k^TAu_k} α=ukT?Auk?bTuk??xkT?Auk??=ukT?Auk??rkT?uk??
由于 u k = ? r k + β k u k ? 1 u_k = -r_{k} + \beta_k u_{k-1} uk?=?rk?+βk?uk?1?
α = ? r k T ( ? r k + β u k ? 1 ) u k T A u k \alpha = \frac{-r_k^T(-r_k+\beta u_{k-1})}{u_k^TA u_k} α=ukT?Auk??rkT?(?rk?+βuk?1?)?
由于 r k T u k ? 1 = 0 r_k^Tu_{k-1}=0 rkT?uk?1?=0
有
α k = r k T r k u k T A u k \alpha_k = \frac{r_k^Tr_k}{u_k^TA u_k} αk?=ukT?Auk?rkT?rk??
由于 α k A p k = r k + 1 ? r k \alpha_kAp_k = r_{k+1}-r_k αk?Apk?=rk+1??rk?
繼續(xù)代入有
β k + 1 = r k + 1 T r k + 1 r k T r k \beta_{k+1} = \frac{r_{k+1}^Tr_{k+1}}{r_{k}^Tr_{k}} βk+1?=rkT?rk?rk+1T?rk+1??
下一節(jié)中,將介紹牛頓共軛梯度法