アルゴリズム
1. 初期値x(0)∈Rnを定める(定め方は任意である)
2. 探索方向m(k)を
m(k)=gradf(x(k))+β(k)r(k) により定める。ただし
β(k)=⎩⎨⎧0−⟨r(k),Hx(k)r(k)⟩⟨r(k),Hx(k)gradf(x(k))⟩ifk=0otherwise r(k)=m(k−1) である(r(0)は未定義だが係数のβ(0)が 0 なのでm(0)=gradf(x(0))となる)。
3. ステップサイズα(k)>0を定める。α(k)は通常の直線探索で決定してもよいが、
α(k)=−⟨m(k),Hx(k)m(k)⟩⟨m(k),gradf(x(k))⟩ を用いてもよい。
4. 次の更新式を用いて現在の点を更新する
x(k+1)=x(k)+α(k)m(k)=x(k)+α(k)(gradf(x(k))+β(k)r(k)) 5. 収束していなければ手順 2 へ戻る
原理
ニュートン法と同様に、2次近似した関数
fII(x)=f(x)+⟨gradf(x),Δx⟩+⟨Hessf(x)Δx,Δx⟩(4.4.1) をxで微分して
∇fII(x)=gradf(x)+Hessf(x)Δx(4.4.2) を得る。2次近似した関数の極値は∇fII(x)=0を満たすので
gradf(x(k))+Hx(k)Δx=0(4.4.3) となる。ここでgradf(x(k))⊥r(k)を満たすr(k)を選んだとして、(4.4.3) 式の両辺でr(k)との内積をとると、左辺は
⟨r(k),gradf(x(k))+Hx(k)Δx⟩=⟨r(k),gradf(x(k))⟩+⟨r(k),Hx(k)Δx⟩=0+⟨r(k),Hx(k)Δx⟩=⟨r(k),Hx(k)Δx⟩ であるから、
⟨r(k),Hx(k)Δx⟩=0(4.4.4) となることがわかる。そこで
m(k)=gradf(x(k))+β(k)r(k)(4.4.5) の方向に更新することを考える。
まずβ(k)を導出する。ステップサイズをα(k)とすると
Δx=α(k)m(k)(4.4.6) とおける。これを (4.4.4) 式に代入すると
⟨r(k),Hx(k)(α(k)m(k))⟩=α(k)⟨r(k),Hx(k)m(k)⟩=0∴⟨r(k),Hx(k)m(k)⟩=0 となるので
⟨r(k),Hx(k)m(k)⟩=⟨r(k),Hx(k)(gradf(x(k))+β(k)r(k))⟩=⟨r(k),Hx(k)gradf(x(k))⟩+β(k)⟨r(k),Hx(k)r(k)⟩=0 より
β(k)=−⟨r(k),Hx(k)r(k)⟩⟨r(k),Hx(k)gradf(x(k))⟩(4.4.7) と求まる。
次に共役勾配方向r(k)を求める。r(k)はgradf(x(k))と直交してさえいればよいので選び方には自由度があるが、ここでは古典的な
r(k)=m(k−1)(4.4.8) を用いる。
厳密直線探索を用いるとgradf(x(k))⊥r(k)となることを示しておく。いま点x(k)を始点としてm(k)方向への直線探索を考えると、媒介変数tによる関数
F(t)=f(x(k)+tm(k))(4.4.10) の極値を与えるtを求めることになる。この関数の点x(k+1)=x(k)+tm(k)における方向微分を考えると
dtdF(t)=⟨∇f(x(k+1)),dtdm(k)⟩(4.4.9) である(方向微分を (4.4.10) 式の右辺の形に分解するには微分の連鎖律を用いる)。F(t)が極値をとるときのtをt∗とおくと
dtdF(t)t=t∗=0(4.4.11) であるから、x(k+1)=x(k)+t∗m(k)を選べば、(4.4.10), (4.4.11) 式より
⟨∇f(x(k+1)),dtdm(k)⟩=0(4.4.12) となる。また、直線探索なのでdtdm(k)∥m(k)だから、(4.4.12) 式と定数c=0を用いて
⟨∇f(x(k+1)),dtdm(k)⟩=⟨∇f(x(k+1)),cm(k)⟩=c⟨∇f(x(k+1)),m(k)⟩=0(4.4.13) となることがわかる。ゆえに
⟨∇f(x(k+1)),m(k)⟩=0⇒∇f(x(k+1))⊥m(k)(4.4.14) となる。したがってr(k+1)=m(k)とおけば∇f(x(k+1))⊥r(k+1)となることがわかるので共役勾配方向r(k)が得られたことになる。
残る未知数はステップサイズα(k)であるが、(4.4.8) 式、すなわちr(k)=m(k−1)の正当性を保証しているのは厳密直線探索を行っていることであるから、(4.4.10), (4.4.11) 式のあたりの議論からα(k)=t∗とすればよいことがわかる。
t∗を厳密に求めるのは難しいので、これをどう求めるかもアルゴリズムの構成の自由度となる。もっとも簡単な方法は目的関数を2次近似した極値へ到達するα(k)を求める方法で、 (4.4.3) 式に (4.4.6) 式を代入して
gradf(x(k))+Hx(k)(α(k)m(k))=0∴α(k)⋅Hx(k)m(k)=−gradf(x(k)) となることから、両辺でm(k)との内積をとって
α(k)⟨m(k),Hx(k)m(k)⟩=−⟨m(k),gradf(x(k))⟩∴α(k)=−⟨m(k),Hx(k)m(k)⟩⟨m(k),gradf(x(k))⟩(4.4.15) が求まる。
収束性
共役勾配法は1次収束のアルゴリズムである。
特徴
共役勾配法の収束性は最急降下法と同じ1次収束であるが、経験的に最急降下法よりも早く収束することが知られている。
原始的な共役勾配法でも Hesse 行列の逆行列の計算は回避できるが、Hesse 行列自体はまだβkを求める際の更新式に現れている。現代では Hesse 行列自体の計算も回避するようなバリエーションが提案されており、それが次に解説するような PRP 法や HS 法である。