Lemma

第6章ニュートン法と準ニュートン法

目安 8〜11 時間定理など 6演習 7 問
ここまでの道

この章の目標

  • ニュートン法を 2 次近似の最小化として導き、ヘッセ行列のリプシッツ連続性と正則性のもとで局所 2 次収束を証明できる
  • ニュートン法が大域的には発散しうる例を挙げ、減衰ニュートン法で直せることを説明できる
  • 非線形最小二乗問題にガウス–ニュートン法とレーベンバーグ–マーカート法を適用し、両者の違いを説明できる
  • セカント条件から BFGS 更新を導き、曲率条件のもとで正定値性が保たれることを証明できる
  • L-BFGS と、対数バリアと中心パスによる内点法の考え方を説明できる

前提:第5章、01-calculus 第7章(ヘッセ行列・作用素ノルム)。6.7 節では第3章の生産計画の例と第4章の弱双対性を使う。

第5章で見たように、勾配法の反復回数は条件数 κ\kappa に比例し、悪条件の問題では数万回に達する。ニュートン法はヘッセ行列で各方向の曲がり方を補正するので、変数のスケールの影響を受けず、解の近くでは正しい桁数が毎回ほぼ 2 倍になる。ロジスティック回帰など正準リンクの一般化線形モデルの標準的な計算法(IRLS)もニュートン法である(22 統計学 第6章 定理 6.7)。

代償は二つある。1 回の反復でヘッセ行列を作って nn 元の連立一次方程式を解く手間と、解から遠いと発散しうることである。本章では、ニュートン法の局所的な速さを証明したあと、大域的な振る舞いを直す減衰ニュートン法、最小二乗に特化したガウス–ニュートン法とレーベンバーグ–マーカート法、ヘッセ行列を勾配から推定する準ニュートン法(BFGS, L-BFGS)を学ぶ。最後に、制約付き問題にニュートン法を使う内点法の考え方を述べる。

∥A∥\lVert A \rVert は行列の作用素ノルム sup⁡∥x∥≤1∥Ax∥\sup_{\lVert x \rVert \leq 1}\lVert Ax \rVert である(01-calculus 第7章。∥AB∥≤∥A∥∥B∥\lVert AB \rVert \leq \lVert A \rVert\lVert B \rVert が成り立つ)。線形収束・2 次収束などの言葉は第5章で定義した。

6.1 ニュートン法

点 xkx_k のまわりで ff を 2 次のテイラー多項式

mk(d)=f(xk)+∇f(xk)⊤d+12d⊤∇2f(xk)dm_k(d) = f(x_k) + \nabla f(x_k)^{\top}d + \frac{1}{2}d^{\top}\nabla^2 f(x_k)d

で近似する。∇2f(xk)≻0\nabla^2 f(x_k) \succ 0 なら mkm_k は強凸な二次関数で、最小点は ∇2f(xk)d=−∇f(xk)\nabla^2 f(x_k)d = -\nabla f(x_k) の解である(第1章 命題 1.21)。これは方程式 ∇f(x)=0\nabla f(x) = 0 を xkx_k で 1 次近似して解くこと(1 変数のニュートン–ラフソン法の多変数版)とも同じである。

定義 6.1(ニュートン法, Newton's method)∇2f(xk)\nabla^2 f(x_k) が正則のとき、連立一次方程式 ∇2f(xk)dk=−∇f(xk)\nabla^2 f(x_k)d_k = -\nabla f(x_k) を解いて xk+1=xk+dkx_{k+1} = x_k + d_k とする。dkd_k をニュートン方向 (Newton direction) という。

実装では逆行列を作らず、連立一次方程式を解く(正定値ならコレスキー分解で約 n3/3n^3/3 回の浮動小数点演算)。変数を x=Ay+bx = Ay + b(AA は正則)と取り替えてもニュートン法の点列は対応する(問題 6.2)。勾配法と違って、変数のスケールに依存しない。

例 6.2 f(x)=x−log⁡xf(x) = x - \log x(x>0x > 0、最小点 x∗=1x^{\ast} = 1)では f′(x)=1−1/xf'(x) = 1 - 1/x, f′′(x)=1/x2f''(x) = 1/x^2 なので、xk+1=xk−(1−1/xk)xk2=2xk−xk2x_{k+1} = x_k - (1 - 1/x_k)x_k^2 = 2x_k - x_k^2。誤差 ek=1−xke_k = 1 - x_k は ek+1=ek2e_{k+1} = e_k^2 を満たす。x0=1/2x_0 = 1/2 なら xk=3/4,15/16,255/256,65535/65536,…x_k = 3/4, 15/16, 255/256, 65535/65536, \dots で、e5=2−32≈2.3×10−10e_5 = 2^{-32} \approx 2.3 \times 10^{-10}。正しい桁数が毎回 2 倍になる。一方 x0=3x_0 = 3 なら x1=−3x_1 = -3 で、定義域から出てしまう(問題 6.1)。

6.2 局所 2 次収束

補題 6.3(逆行列の摂動)AA を正則な nn 次正方行列、BB を nn 次正方行列とし、∥A−1∥∥B−A∥<1\lVert A^{-1} \rVert\lVert B - A \rVert < 1 とする。このとき BB は正則で

∥B−1∥≤∥A−1∥1−∥A−1∥∥B−A∥\lVert B^{-1} \rVert \leq \frac{\lVert A^{-1} \rVert}{1 - \lVert A^{-1} \rVert\lVert B - A \rVert}

証明. ∥x∥=∥A−1Ax∥≤∥A−1∥∥Ax∥\lVert x \rVert = \lVert A^{-1}Ax \rVert \leq \lVert A^{-1} \rVert\lVert Ax \rVert より、すべての xx で

∥Bx∥≥∥Ax∥−∥(B−A)x∥≥(1∥A−1∥−∥B−A∥)∥x∥\lVert Bx \rVert \geq \lVert Ax \rVert - \lVert (B - A)x \rVert \geq \Bigl(\frac{1}{\lVert A^{-1} \rVert} - \lVert B - A \rVert\Bigr)\lVert x \rVert

右辺の係数は正なので Bx=0⇒x=0Bx = 0 \Rightarrow x = 0、すなわち BB は単射で正則である。x=B−1yx = B^{-1}y を代入すれば評価を得る。□\square

定理 6.4(ニュートン法の局所 2 次収束)U⊂RnU \subset \mathbb{R}^n を開集合、f ⁣:U→Rf\colon U \to \mathbb{R} を C2C^2 級とし、x∗∈Ux^{\ast} \in U で ∇f(x∗)=0\nabla f(x^{\ast}) = 0 かつ ∇2f(x∗)\nabla^2 f(x^{\ast}) は正則とする。さらに r>0r > 0, M>0M > 0 があって、閉球 Bˉ={x∣∥x−x∗∥≤r}⊂U\bar{B} = \lbrace x \mid \lVert x - x^{\ast} \rVert \leq r \rbrace \subset U 上で

∥∇2f(x)−∇2f(y)∥≤M∥x−y∥(x,y∈Bˉ)\lVert \nabla^2 f(x) - \nabla^2 f(y) \rVert \leq M\lVert x - y \rVert \quad (x, y \in \bar{B})

とする(ヘッセ行列のリプシッツ連続性)。β=∥∇2f(x∗)−1∥\beta = \lVert \nabla^2 f(x^{\ast})^{-1} \rVert, δ=min⁡(r,12βM)\delta = \min(r, \frac{1}{2\beta M}) とおく。∥x0−x∗∥<δ\lVert x_0 - x^{\ast} \rVert < \delta ならば、ニュートン法の点列はすべて定義されて ∥xk−x∗∥<δ\lVert x_k - x^{\ast} \rVert < \delta を満たし、

∥xk+1−x∗∥≤βM∥xk−x∗∥2≤12∥xk−x∗∥\lVert x_{k+1} - x^{\ast} \rVert \leq \beta M\lVert x_k - x^{\ast} \rVert^2 \leq \frac{1}{2}\lVert x_k - x^{\ast} \rVert

が成り立つ。特に xk→x∗x_k \to x^{\ast} で、収束は 2 次である。

証明. ∥x−x∗∥<δ\lVert x - x^{\ast} \rVert < \delta となる xx について、x+=x−∇2f(x)−1∇f(x)x^{+} = x - \nabla^2 f(x)^{-1}\nabla f(x) が定義されて ∥x+−x∗∥≤βM∥x−x∗∥2\lVert x^{+} - x^{\ast} \rVert \leq \beta M\lVert x - x^{\ast} \rVert^2 となることを示せばよい(このとき右辺は βMδ∥x−x∗∥≤12∥x−x∗∥\beta M\delta\lVert x - x^{\ast} \rVert \leq \frac{1}{2}\lVert x - x^{\ast} \rVert 以下なので、帰納法ですべての主張が従う)。

(i) ∥∇2f(x)−∇2f(x∗)∥≤M∥x−x∗∥<Mδ≤12β\lVert \nabla^2 f(x) - \nabla^2 f(x^{\ast}) \rVert \leq M\lVert x - x^{\ast} \rVert < M\delta \leq \frac{1}{2\beta} なので、補題 6.3(A=∇2f(x∗)A = \nabla^2 f(x^{\ast}), B=∇2f(x)B = \nabla^2 f(x))より ∇2f(x)\nabla^2 f(x) は正則で、∥∇2f(x)−1∥≤β/(1−12)=2β\lVert \nabla^2 f(x)^{-1} \rVert \leq \beta/(1 - \frac{1}{2}) = 2\beta。

(ii) h=x∗−xh = x^{\ast} - x、R=∇f(x∗)−∇f(x)−∇2f(x)hR = \nabla f(x^{\ast}) - \nabla f(x) - \nabla^2 f(x)h とおく。単位ベクトル ww について φ(s)=⟨w,∇f(x+sh)⟩\varphi(s) = \langle w, \nabla f(x + sh) \rangle(0≤s≤10 \leq s \leq 1。線分は Bˉ\bar{B} に含まれる)は C1C^1 級で、連鎖律より φ′(s)=⟨w,∇2f(x+sh)h⟩\varphi'(s) = \langle w, \nabla^2 f(x + sh)h \rangle。微分積分学の基本定理(01-calculus 第5章 定理 5.13)より

⟨w,R⟩=φ(1)−φ(0)−⟨w,∇2f(x)h⟩=∫01⟨w,(∇2f(x+sh)−∇2f(x))h⟩ ds≤∫01Ms∥h∥2 ds=M2∥h∥2\langle w, R \rangle = \varphi(1) - \varphi(0) - \langle w, \nabla^2 f(x)h \rangle = \int_0^1 \bigl\langle w, (\nabla^2 f(x + sh) - \nabla^2 f(x))h \bigr\rangle\,ds \leq \int_0^1 Ms\lVert h \rVert^2\,ds = \frac{M}{2}\lVert h \rVert^2

R≠0R \neq 0 なら w=R/∥R∥w = R/\lVert R \rVert として ∥R∥≤M2∥x−x∗∥2\lVert R \rVert \leq \frac{M}{2}\lVert x - x^{\ast} \rVert^2。

(iii) ∇f(x∗)=0\nabla f(x^{\ast}) = 0 より x+−x∗=∇2f(x)−1(∇2f(x)(x−x∗)−∇f(x))=∇2f(x)−1Rx^{+} - x^{\ast} = \nabla^2 f(x)^{-1}\bigl(\nabla^2 f(x)(x - x^{\ast}) - \nabla f(x)\bigr) = \nabla^2 f(x)^{-1}R。(i)(ii) より ∥x+−x∗∥≤2β⋅M2∥x−x∗∥2=βM∥x−x∗∥2\lVert x^{+} - x^{\ast} \rVert \leq 2\beta \cdot \frac{M}{2}\lVert x - x^{\ast} \rVert^2 = \beta M\lVert x - x^{\ast} \rVert^2。□\square

∇2f(x∗)≻0\nabla^2 f(x^{\ast}) \succ 0 なら x∗x^{\ast} は狭義の局所最小点である(第1章 定理 1.19)。仮定の役割を確かめておく。

  • 正則性:f(x)=x4f(x) = x^4 では f′′(0)=0f''(0) = 0 で、ニュートン法は xk+1=xk−4xk312xk2=23xkx_{k+1} = x_k - \frac{4x_k^3}{12x_k^2} = \frac{2}{3}x_k となり、線形収束しかしない。
  • 初期点の近さ:定理の δ\delta は保守的なことが多い。例 6.2 では、定理は ∣x0−1∣\lvert x_0 - 1 \rvert が 0.150.15 程度以下なら収束を保証するが(問題 6.1)、実際には 0<x0<20 < x_0 < 2 で収束する。それでも、遠い初期点で収束が保証されないことは本質的である(6.3 節)。
  • 最小点とは限らない:定理は ∇f(x∗)=0\nabla f(x^{\ast}) = 0 と正則性しか使わないので、極大点や鞍点にも同じ速さで収束する。

注意

ニュートン法は「勾配が 00 の点」を探す方法であって、最小化の方法ではない。凸でない関数では、ヘッセ行列が正定値でない点でニュートン方向が上り方向になることがあり、極大点や鞍点に収束することもある(問題 6.3)。ヘッセ行列が正定値でないときは、∇2f(xk)+τI\nabla^2 f(x_k) + \tau I(τ>0\tau > 0)に取り替えて正定値にする、信頼領域法を使う、などの修正が必要である(Nocedal–Wright, Numerical Optimization 第2版の第3・4章。本章で引く同書の章番号は第2版のもの)。

6.3 大域的な振る舞いと減衰ニュートン法

例 6.5(狭義凸でも発散する)f(x)=1+x2f(x) = \sqrt{1 + x^2} は f′′(x)=(1+x2)−3/2>0f''(x) = (1 + x^2)^{-3/2} > 0 で狭義凸、最小点は 00 だけである(∣x∣→∞\lvert x \rvert \to \infty で f′′(x)→0f''(x) \to 0 なので強凸ではない)。f′(x)=x/1+x2f'(x) = x/\sqrt{1 + x^2} より f′(x)/f′′(x)=x(1+x2)f'(x)/f''(x) = x(1 + x^2) で、ニュートン法は

xk+1=xk−xk(1+xk2)=−xk3x_{k+1} = x_k - x_k(1 + x_k^2) = -x_k^3

となる。∣x0∣<1\lvert x_0 \rvert < 1 なら非常に速く 00 に収束するが(x0=0.5x_0 = 0.5 から −0.125,0.00195,−7.5×10−9-0.125, 0.00195, -7.5 \times 10^{-9})、∣x0∣=1\lvert x_0 \rvert = 1 なら ±1\pm 1 を往復し、∣x0∣>1\lvert x_0 \rvert > 1 なら発散する(x0=1.1x_0 = 1.1 から −1.331,2.358,−13.11,2253,…-1.331, 2.358, -13.11, 2253, \dots)。遠くでは ff がほぼ ∣x∣\lvert x \rvert のように平らで、2 次近似の最小点がはるか遠くに出るからである。

対策は、ニュートン方向を「進む方向」としてだけ使い、進む距離は直線探索で決めることである。

定義 6.6(減衰ニュートン法, damped Newton method)∇2f(xk)≻0\nabla^2 f(x_k) \succ 0 のとき、ニュートン方向 dkd_k に沿って、tˉ=1\bar{t} = 1 から始めるアルミホ条件のバックトラッキング(第5章 定義 5.5)で tkt_k を選び、xk+1=xk+tkdkx_{k+1} = x_k + t_kd_k とする。

∇2f(xk)≻0\nabla^2 f(x_k) \succ 0 で ∇f(xk)≠0\nabla f(x_k) \neq 0 なら ∇f(xk)⊤dk=−∇f(xk)⊤∇2f(xk)−1∇f(xk)<0\nabla f(x_k)^{\top}d_k = -\nabla f(x_k)^{\top}\nabla^2 f(x_k)^{-1}\nabla f(x_k) < 0 なので、dkd_k は降下方向で、バックトラッキングは有限回で終わる(第5章 命題 5.6)。λ(x)=(∇f(x)⊤∇2f(x)−1∇f(x))1/2\lambda(x) = \bigl(\nabla f(x)^{\top}\nabla^2 f(x)^{-1}\nabla f(x)\bigr)^{1/2} をニュートン減少量 (Newton decrement) という。xx での 2 次近似を m(d)m(d) とすると λ(x)2/2=f(x)−min⁡dm(d)\lambda(x)^2/2 = f(x) - \min_d m(d) は 2 次近似で見込まれる減少量なので、停止判定に使われる。

例 6.5 で x0=3x_0 = 3 から、c=1/4c = 1/4, β=1/2\beta = 1/2 の減衰ニュートン法を行うと、tk=1/8,1/2,1,1,1t_k = 1/8, 1/2, 1, 1, 1 と選ばれて xk=−0.75,−0.164,0.0044,−8.6×10−8,6.4×10−22x_k = -0.75, -0.164, 0.0044, -8.6 \times 10^{-8}, 6.4 \times 10^{-22} となる(多倍長の計算で確かめた。最後の値は倍精度では桁落ちで数 % ずれる)。最初は短い歩幅で近づき、近づくと t=1t = 1 が受け入れられて純粋なニュートン法の速さに戻る。この振る舞いは一般に成り立つ。

定理 6.7(減衰ニュートン法の 2 段階の収束、主張)f ⁣:Rn→Rf\colon \mathbb{R}^n \to \mathbb{R} を C2C^2 級の凸関数とし、初期点の下位集合 S={x∣f(x)≤f(x0)}S = \lbrace x \mid f(x) \leq f(x_0) \rbrace 上で μI⪯∇2f(x)⪯LI\mu I \preceq \nabla^2 f(x) \preceq LI(μ>0\mu > 0)を満たし、∇2f\nabla^2 f が SS 上でリプシッツ連続であるとする。アルミホ条件の定数を 0<c<1/20 < c < 1/2 とすると、減衰ニュートン法は最小点 x∗x^{\ast} に収束する。さらに、有限回の反復のあとは tk=1t_k = 1 が常に受け入れられ、収束は 2 次である。f(xk)−p∗≤εf(x_k) - p^{\ast} \leq \varepsilon までの反復回数は f(x0)−p∗γ+log⁡2log⁡2ε0ε\frac{f(x_0) - p^{\ast}}{\gamma} + \log_2\log_2\frac{\varepsilon_0}{\varepsilon} 以下である(γ,ε0\gamma, \varepsilon_0 は μ,L\mu, L、ヘッセ行列のリプシッツ定数と直線探索の定数 c,βc, \beta で決まる正の数。Boyd–Vandenberghe, Convex Optimization 9.5 節)。

log⁡2log⁡2(ε0/ε)\log_2\log_2(\varepsilon_0/\varepsilon) は ε=10−15ε0\varepsilon = 10^{-15}\varepsilon_0 でも 66 程度で、2 次収束の段階は実際上数回で終わる。c<1/2c < 1/2 が要るのは、二次関数では t=1t = 1 の一歩による減少量がちょうど λ(x)2/2\lambda(x)^2/2 で、アルミホ条件 f(x+d)≤f(x)−cλ(x)2f(x + d) \leq f(x) - c\lambda(x)^2 が c≤1/2c \leq 1/2 のときしか成り立たないからである(c>1/2c > 1/2 では解の近くでも t=1t = 1 が受け入れられず、収束は線形に落ちる)。前半の段階でも線形収束することは、第5章と同じ議論で示せる(問題 6.7)。

6.4 ガウス–ニュートン法とレーベンバーグ–マーカート法

測定値に非線形なモデルをあてはめる問題(薬の血中濃度の減衰、センサーの較正曲線、需要の飽和曲線など)は、r ⁣:Rn→Rmr\colon \mathbb{R}^n \to \mathbb{R}^m(残差、m≥nm \geq n)について

f(x)=12∥r(x)∥2=12∑i=1mri(x)2f(x) = \frac{1}{2}\lVert r(x) \rVert^2 = \frac{1}{2}\sum_{i=1}^{m}r_i(x)^2

を最小化する非線形最小二乗問題になる。ヤコビ行列を J(x)=(∂ri/∂xj)J(x) = (\partial r_i/\partial x_j)(m×nm \times n)とすると

∇f(x)=J(x)⊤r(x),∇2f(x)=J(x)⊤J(x)+∑i=1mri(x)∇2ri(x)\nabla f(x) = J(x)^{\top}r(x), \qquad \nabla^2 f(x) = J(x)^{\top}J(x) + \sum_{i=1}^{m}r_i(x)\nabla^2 r_i(x)

である。残差が小さいときや rr が一次関数に近いときは、第 2 項が小さい。

定義 6.8(ガウス–ニュートン法・レーベンバーグ–マーカート法)ヘッセ行列の第 2 項を無視して Jk⊤Jkd=−Jk⊤rkJ_k^{\top}J_kd = -J_k^{\top}r_k(Jk=J(xk)J_k = J(x_k), rk=r(xk)r_k = r(x_k))を解き、xk+1=xk+dx_{k+1} = x_k + d とする方法をガウス–ニュートン法 (Gauss–Newton method) という。λ>0\lambda > 0 について (Jk⊤Jk+λI)d=−Jk⊤rk(J_k^{\top}J_k + \lambda I)d = -J_k^{\top}r_k を解く方法をレーベンバーグ–マーカート法 (Levenberg–Marquardt method) という。

ガウス–ニュートン方向は、線形化した残差の最小二乗問題 min⁡d∥Jkd+rk∥2\min_d\lVert J_kd + r_k \rVert^2 の解である(02-linear-algebra 第7章 定理 7.19 の正規方程式)。2 階微分が要らず、Jk⊤JkJ_k^{\top}J_k は常に半正定値である。

命題 6.9 g=J⊤r≠0g = J^{\top}r \neq 0 とする。

  1. JJ の列が一次独立なら、ガウス–ニュートン方向 dGN=−(J⊤J)−1gd_{\mathrm{GN}} = -(J^{\top}J)^{-1}g は降下方向である。
  2. λ>0\lambda > 0 なら、d(λ)=−(J⊤J+λI)−1gd(\lambda) = -(J^{\top}J + \lambda I)^{-1}g は降下方向であり、∥d∥≤∥d(λ)∥\lVert d \rVert \leq \lVert d(\lambda) \rVert の範囲で ∥Jd+r∥2\lVert Jd + r \rVert^2 を最小にする。

証明. 1・2 の前半:対称行列 P=J⊤JP = J^{\top}J(1 の場合。v⊤Pv=∥Jv∥2v^{\top}Pv = \lVert Jv \rVert^2 で列が一次独立だから)または P=J⊤J+λIP = J^{\top}J + \lambda I(2 の場合)は正定値なので P−1P^{-1} も正定値で、g⊤d=−g⊤P−1g<0g^{\top}d = -g^{\top}P^{-1}g < 0。2 の後半:d(λ)d(\lambda) は強凸な二次関数 q(d)=∥Jd+r∥2+λ∥d∥2q(d) = \lVert Jd + r \rVert^2 + \lambda\lVert d \rVert^2 の最小点である(∇q=2(J⊤Jd+J⊤r+λd)\nabla q = 2(J^{\top}Jd + J^{\top}r + \lambda d))。∥d∥≤∥d(λ)∥\lVert d \rVert \leq \lVert d(\lambda) \rVert なら ∥Jd+r∥2=q(d)−λ∥d∥2≥q(d(λ))−λ∥d∥2≥∥Jd(λ)+r∥2\lVert Jd + r \rVert^2 = q(d) - \lambda\lVert d \rVert^2 \geq q(d(\lambda)) - \lambda\lVert d \rVert^2 \geq \lVert Jd(\lambda) + r \rVert^2。□\square

λ\lambda が小さければガウス–ニュートン法に近く、λ\lambda が大きければ d(λ)≈−g/λd(\lambda) \approx -g/\lambda と短い勾配方向になる(問題 6.4)。命題 6.9 の 2 は、レーベンバーグ–マーカート法が「線形化が信頼できる半径 ∥d(λ)∥\lVert d(\lambda) \rVert の中で最良の一歩」をとる信頼領域法 (trust-region method) であることを意味する。実装では、ff が減れば一歩を採用して λ\lambda を小さくし(線形化を信頼する)、減らなければ一歩を捨てて λ\lambda を大きくする。収束について、ガウス–ニュートン法は解での残差が 00 で JJ の列が一次独立なら局所的に 2 次収束し、残差が小さければ速く線形収束するが、残差が大きいと収束しないこともある(主張。Nocedal–Wright 第10章)。

次のコードは、y=10e−0.5ty = 10e^{-0.5t} に雑音を加えた 10 点のデータに y≈ae−bty \approx ae^{-bt} をあてはめる。

import numpy as np

rng = np.random.default_rng(0)
t = np.arange(10.0)                                    # 計測時刻
y = 10.0 * np.exp(-0.5 * t) + 0.2 * rng.standard_normal(10)
r = lambda p: p[0] * np.exp(-p[1] * t) - y            # 残差、p = (a, b)
J = lambda p: np.column_stack([np.exp(-p[1] * t), -p[0] * t * np.exp(-p[1] * t)])
F = lambda p: 0.5 * np.sum(r(p) ** 2)

def gauss_newton(p, iters=20):
    for _ in range(iters):
        p = p + np.linalg.lstsq(J(p), -r(p), rcond=None)[0]
    return p

def levenberg_marquardt(p, iters=20, lam=1.0):
    for _ in range(iters):
        Jp = J(p)
        d = np.linalg.solve(Jp.T @ Jp + lam * np.eye(2), -Jp.T @ r(p))
        if F(p + d) < F(p):
            p, lam = p + d, lam / 10      # 成功:ガウス–ニュートン法に近づける
        else:
            lam = lam * 10                # 失敗:短い勾配方向に近づける
    return p

for p0 in [(1.0, 0.0), (1.0, 1.0)]:
    p_gn, p_lm = gauss_newton(np.array(p0)), levenberg_marquardt(np.array(p0))
    print(f"start {p0}:  GN {np.round(p_gn, 4)} F={F(p_gn):.4f}"
          f"  LM {np.round(p_lm, 4)} F={F(p_lm):.4f}")
start (1.0, 0.0):  GN [10.0022  0.4933] F=0.1066  LM [10.0022  0.4933] F=0.1066
start (1.0, 1.0):  GN [-0.     -7.1409] F=79.8532  LM [10.0022  0.4933] F=0.1066

(a,b)=(1,0)(a, b) = (1, 0) からはどちらも最小点 (10.0022,0.4933)(10.0022, 0.4933) に着く。(1,1)(1, 1) からのガウス–ニュートン法は、最初の一歩で b≈−7.14b \approx -7.14(減衰ではなく急増するモデル)に飛んで F≈3.2×1057F \approx 3.2 \times 10^{57} となり、その後 a≈0a \approx 0(−0.-0. は −1.7×10−29-1.7 \times 10^{-29} を丸めた表示)で動けなくなる。このときモデル ae7.14tae^{7.14t} は、最後の時刻 t=9t = 9 の測定値(雑音で負の −0.14-0.14 になっている)だけに合い、ほかの時刻ではほぼ 00 である。JJ の第 1 列 e7.14te^{7.14t} は 11 から約 8×10278 \times 10^{27} まで変わり、JJ の 2 つの特異値は約 8×10278 \times 10^{27} と 1×10−41 \times 10^{-4} になる。lstsq は小さいほうの特異値を数値的に 00 とみなして捨てるので、一歩は事実上 00 になる(勾配は 00 でなく、停留点で止まったのではない)。レーベンバーグ–マーカート法は値が増える一歩を捨てるので、同じ初期点から最小点に着く。

ヒント

実務では 曲線のあてはめでは、初期値の選び方が結果を左右する。y>0y > 0 なら log⁡y≈log⁡a−bt\log y \approx \log a - bt に直線をあてはめて初期値を作る、といったモデルに合わせた工夫が有効である。収束したら残差を時刻に対してプロットし、系統的なずれがないかを確かめる(モデルの誤りは最適化では直らない)。パラメータの桁が大きく違うときは、スケールをそろえると J⊤JJ^{\top}J の条件数が改善する。パラメータの不確かさの評価には、最小点での J⊤JJ^{\top}J から作る近似的な共分散がよく使われる(線形の場合は 22 統計学 第5章)。

6.5 準ニュートン法と BFGS 更新

ヘッセ行列が計算できない、または計算が高すぎるとき、勾配の変化からヘッセ行列を推定しながら進むのが準ニュートン法 (quasi-Newton method) である。sk=xk+1−xks_k = x_{k+1} - x_k, yk=∇f(xk+1)−∇f(xk)y_k = \nabla f(x_{k+1}) - \nabla f(x_k) とおく。

定義 6.10(セカント条件, secant condition)対称行列 Bk+1B_{k+1} が Bk+1sk=ykB_{k+1}s_k = y_k を満たすとき、Bk+1B_{k+1} はセカント条件を満たすという。

微分積分学の基本定理を成分ごとに使うと yk=(∫01∇2f(xk+τsk) dτ)sky_k = \bigl(\int_0^1 \nabla^2 f(x_k + \tau s_k)\ d\tau\bigr)s_k なので、セカント条件は「Bk+1B_{k+1} が線分上の平均のヘッセ行列と sks_k 方向で一致する」ことを要求する。1 変数なら Bk+1=(f′(xk+1)−f′(xk))/(xk+1−xk)B_{k+1} = (f'(x_{k+1}) - f'(x_k))/(x_{k+1} - x_k) で、割線(セカント)の傾きである。

正定値な Bk+1B_{k+1} がセカント条件を満たすには、sk⊤yk=sk⊤Bk+1sk>0s_k^{\top}y_k = s_k^{\top}B_{k+1}s_k > 0 でなければならない。この曲率条件 (curvature condition) sk⊤yk>0s_k^{\top}y_k > 0 は、ff が μ\mu-強凸なら sk⊤yk≥μ∥sk∥2s_k^{\top}y_k \geq \mu\lVert s_k \rVert^2(第2章 定理 2.22 の 3)で自動的に成り立ち、一般の ff では次の直線探索で保証される。

定義 6.11(ウルフ条件, Wolfe conditions)0<c1<c2<10 < c_1 < c_2 < 1 とし、dd を降下方向とする。ステップ幅 tt がアルミホ条件 f(x+td)≤f(x)+c1t∇f(x)⊤df(x + td) \leq f(x) + c_1t\nabla f(x)^{\top}d と ∇f(x+td)⊤d≥c2∇f(x)⊤d\nabla f(x + td)^{\top}d \geq c_2\nabla f(x)^{\top}d を満たすとき、ウルフ条件を満たすという。

tt がウルフ条件を満たせば、s=tds = td, y=∇f(x+td)−∇f(x)y = \nabla f(x + td) - \nabla f(x) について s⊤y=t(∇f(x+td)−∇f(x))⊤d≥t(c2−1)∇f(x)⊤d>0s^{\top}y = t(\nabla f(x + td) - \nabla f(x))^{\top}d \geq t(c_2 - 1)\nabla f(x)^{\top}d > 0 である。ff が C1C^1 級でその直線上で下に有界なら、ウルフ条件を満たす tt は存在する(主張。Nocedal–Wright 第3章)。準ニュートン法では c2=0.9c_2 = 0.9 がよく使われる。

セカント条件だけでは Bk+1B_{k+1} は決まらない(n(n+1)/2n(n + 1)/2 個の未知数に nn 個の式)。そこで BkB_k を少しだけ修正する。

BFGS 更新の導出. BkB_k を対称正定値とし、Bk+1B_{k+1} を対称な 2 階の修正 Bk+1=Bk+a uu⊤+b vv⊤B_{k+1} = B_k + a\ uu^{\top} + b\ vv^{\top}(a,b∈Ra, b \in \mathbb{R}, u,v∈Rnu, v \in \mathbb{R}^n)の形で探す。セカント条件は Bksk+a(u⊤sk)u+b(v⊤sk)v=ykB_ks_k + a(u^{\top}s_k)u + b(v^{\top}s_k)v = y_k となる。左辺の BkskB_ks_k を打ち消して yky_k を作るために u=yku = y_k, v=Bkskv = B_ks_k とし、a(yk⊤sk)=1a(y_k^{\top}s_k) = 1, b(sk⊤Bksk)=−1b(s_k^{\top}B_ks_k) = -1 とすれば満たされる。こうして

Bk+1=Bk−Bksksk⊤Bksk⊤Bksk+ykyk⊤yk⊤sk(6.1)B_{k+1} = B_k - \frac{B_ks_ks_k^{\top}B_k}{s_k^{\top}B_ks_k} + \frac{y_ky_k^{\top}}{y_k^{\top}s_k} \tag{6.1}

を得る。第 2 項は BkB_k がもっていた sks_k 方向の曲率の情報を取り除き、第 3 項は観測した曲率 yky_k を入れる。これを BFGS 更新(ブロイデン–フレッチャー–ゴールドファーブ–シャノ)という。同じ考え方を逆行列 Hk=Bk−1H_k = B_k^{-1} について行うと DFP 更新が得られる。BFGS 更新の逆行列 Hk+1H_{k+1}(定理 6.12 の 3)は、Hyk=skHy_k = s_k(逆行列の形のセカント条件)を満たす対称行列 HH のうち、(ある重みつきのフロベニウスノルムで)HkH_k に最も近いものとしても特徴づけられる(主張。Nocedal–Wright 第6章)。

定理 6.12(BFGS 更新の性質)BkB_k を対称正定値、sk⊤yk>0s_k^{\top}y_k > 0 とし、Bk+1B_{k+1} を (6.1) で定める。ρk=1/(yk⊤sk)\rho_k = 1/(y_k^{\top}s_k), Hk=Bk−1H_k = B_k^{-1} とする。

  1. Bk+1B_{k+1} は対称で、セカント条件 Bk+1sk=ykB_{k+1}s_k = y_k を満たす。
  2. Bk+1B_{k+1} は正定値である。
  3. Bk+1B_{k+1} の逆行列は Hk+1=(I−ρkskyk⊤)Hk(I−ρkyksk⊤)+ρksksk⊤H_{k+1} = (I - \rho_ks_ky_k^{\top})H_k(I - \rho_ky_ks_k^{\top}) + \rho_ks_ks_k^{\top} である。

証明. 添字 kk を省く。1:Bk+1s=Bs−Bss⊤Bss⊤Bs+yy⊤sy⊤s=yB_{k+1}s = Bs - Bs\frac{s^{\top}Bs}{s^{\top}Bs} + y\frac{y^{\top}s}{y^{\top}s} = y。

2:z≠0z \neq 0 について

z⊤Bk+1z=(z⊤Bz−(s⊤Bz)2s⊤Bs)+(y⊤z)2y⊤sz^{\top}B_{k+1}z = \Bigl(z^{\top}Bz - \frac{(s^{\top}Bz)^2}{s^{\top}Bs}\Bigr) + \frac{(y^{\top}z)^2}{y^{\top}s}

内積 ⟨u,v⟩B=u⊤Bv\langle u, v \rangle_B = u^{\top}Bv についてのコーシー–シュワルツの不等式 (s⊤Bz)2≤(s⊤Bs)(z⊤Bz)(s^{\top}Bz)^2 \leq (s^{\top}Bs)(z^{\top}Bz) より括弧内は 00 以上で、等号は zz が ss の定数倍のときに限る。そのとき z=αsz = \alpha s(α≠0\alpha \neq 0)で、最後の項は α2y⊤s>0\alpha^2y^{\top}s > 0。いずれにしても z⊤Bk+1z>0z^{\top}B_{k+1}z > 0。

3:Hk+1y=(I−ρsy⊤)H(y−ρy(s⊤y))+ρs(s⊤y)=sH_{k+1}y = (I - \rho sy^{\top})H(y - \rho y(s^{\top}y)) + \rho s(s^{\top}y) = s なので Bk+1Hk+1y=Bk+1s=yB_{k+1}H_{k+1}y = B_{k+1}s = y。s⊤z=0s^{\top}z = 0 となる zz では Hk+1z=Hz−ρ(y⊤Hz)sH_{k+1}z = Hz - \rho(y^{\top}Hz)s で、Bk+1Hz=z−Bss⊤zs⊤Bs+ρy(y⊤Hz)=z+ρ(y⊤Hz)yB_{k+1}Hz = z - Bs\frac{s^{\top}z}{s^{\top}Bs} + \rho y(y^{\top}Hz) = z + \rho(y^{\top}Hz)y と Bk+1s=yB_{k+1}s = y より Bk+1Hk+1z=zB_{k+1}H_{k+1}z = z。s⊤y>0s^{\top}y > 0 より yy は ss の直交補空間に含まれないので、yy とこの補空間で Rn\mathbb{R}^n が張られ、Bk+1Hk+1=IB_{k+1}H_{k+1} = I。□\square

逆に sk⊤yk≤0s_k^{\top}y_k \leq 0 なら、セカント条件を満たす正定値行列は存在しない(問題 6.5)。準ニュートン法でウルフ条件を使うのはこのためである。

BFGS 法は、H0≻0H_0 \succ 0(たとえば II)から始め、dk=−Hk∇f(xk)d_k = -H_k\nabla f(x_k) に沿ってウルフ条件を満たす tkt_k で進み、定理 6.12 の 3 で HkH_k を更新する。dkd_k は常に降下方向で、1 回の反復の手間は行列とベクトルの積と 2 階の更新の O(n2)O(n^2) で済み、連立一次方程式を解く必要もない。ff が C2C^2 級で、初期点の下位集合 {x∣f(x)≤f(x0)}\lbrace x \mid f(x) \leq f(x_0) \rbrace が凸で、その上で μI⪯∇2f⪯LI\mu I \preceq \nabla^2 f \preceq LI(μ>0\mu > 0)なら、ウルフ条件の BFGS 法は任意の H0≻0H_0 \succ 0 から最小点に収束する。さらにヘッセ行列が最小点の近くでリプシッツ連続で、直線探索が t=1t = 1 を最初に試し c1<1/2c_1 < 1/2 なら、収束は超 1 次である(主張。Nocedal–Wright 第6章)。

次のコードは、列のスケールが大きく異なる特徴量をもつリッジ正則化つきロジスティック回帰(第1章 例 1.6・例 1.13)で、勾配のノルムが初期値の 10−610^{-6} 倍以下になるまでの反復回数を比べる。直線探索はアルミホ条件のバックトラッキングだけを使っているが、この目的関数は強凸なので曲率条件は自動的に成り立つ。

import numpy as np

rng = np.random.default_rng(0)
m, n = 500, 10
scale = np.logspace(0, 1.5, n)                      # 列のスケールが 1〜約 32 倍
A = rng.standard_normal((m, n)) * scale
y = (rng.random(m) < 1 / (1 + np.exp(-A @ (rng.standard_normal(n) / scale)))).astype(float)
sig = lambda s: 1 / (1 + np.exp(-s))
f = lambda x: np.sum(np.logaddexp(0, A @ x) - y * (A @ x)) + x @ x / 2   # リッジ正則化つき
grad = lambda x: A.T @ (sig(A @ x) - y) + x
hess = lambda x: A.T @ (A * (sig(A @ x) * (1 - sig(A @ x)))[:, None]) + np.eye(n)

def run(method):
    x, H, I, k = np.zeros(n), np.eye(n), np.eye(n), 0
    g = grad(x); tol = 1e-6 * np.linalg.norm(g)
    while np.linalg.norm(g) > tol:
        if method == "gradient": d = -g
        elif method == "BFGS": d = -H @ g
        else: d = -np.linalg.solve(hess(x), g)
        t = 1.0                                            # アルミホ条件のバックトラッキング
        while f(x + t * d) > f(x) + 1e-4 * t * (g @ d):
            t /= 2
        s = t * d; x = x + s
        g_new = grad(x); yk = g_new - g; g, k = g_new, k + 1
        if method == "BFGS":                               # 強凸なので s^T y > 0
            rho = 1 / (yk @ s)
            H = (I - rho * np.outer(s, yk)) @ H @ (I - rho * np.outer(yk, s)) + rho * np.outer(s, s)
    return k

for method in ["gradient", "BFGS", "Newton"]:
    print(f"{method:8s} {run(method)}")
gradient 9037
BFGS     21
Newton   6

勾配法(バックトラッキングつき)は 9037 回かかる。BFGS 法は最初の 10 回ほどは短い歩幅で曲率を学習し、その後は t=1t = 1 が受け入れられて勾配のノルムが急速に小さくなる。ニュートン法は 6 回で、最後の 3 回で勾配のノルムが 29→2.1→0.014→5.8×10−729 \to 2.1 \to 0.014 \to 5.8 \times 10^{-7} と 2 次収束の様子を示す。1 回の反復の手間は、勾配法が O(mn)O(mn)、BFGS 法が O(mn+n2)O(mn + n^2)、ニュートン法がヘッセ行列を作る O(mn2)O(mn^2) と解く O(n3)O(n^3) である。

6.6 L-BFGS(紹介)

n=106n = 10^6 では n×nn \times n の HkH_k を記憶することさえできない(101210^{12} 個の成分)。L-BFGS(記憶制限つき BFGS, limited-memory BFGS)は、直近の mm 組(数個から 20 個程度)の (si,yi)(s_i, y_i) だけを記憶し、Hk0=γkIH_k^0 = \gamma_kI(γk=sk−1⊤yk−1/yk−1⊤yk−1\gamma_k = s_{k-1}^{\top}y_{k-1}/y_{k-1}^{\top}y_{k-1} がよく使われる)から始めて、記憶した組で定理 6.12 の 3 の更新を古い順に mm 回施した行列 HkH_k を、行列を作らずに ∇f(xk)\nabla f(x_k) に掛ける。この積は 2 重のループによる再帰で O(mn)O(mn) の手間で計算できる(Nocedal–Wright 第7章)。記憶容量は O(mn)O(mn) で、勾配法とほぼ同じ手間で曲率の情報を使えるため、変数の多い滑らかな問題(大規模なロジスティック回帰、物理シミュレーションのパラメータ推定など)の標準的な解法の一つになっている。

ヒント

実務では 滑らかな凸問題では、ヘッセ行列を作って解ける規模ならニュートン法、変数がそれより多ければ L-BFGS がよく使われる。準ニュートン法は勾配の誤差に弱い。勾配を差分近似で代用したり、勾配の実装に誤りがあったりすると yky_k が狂い、曲率の推定が壊れる。勾配は解析的に、または自動微分で計算し、いくつかの点で差分商 (f(x+ϵei)−f(x−ϵei))/(2ϵ)(f(x + \epsilon e_i) - f(x - \epsilon e_i))/(2\epsilon) と比べて確かめておく。データを少し追加するたびに解き直すときは、前回の解を初期点にする(ウォームスタート)と反復回数が大きく減る。

6.7 内点法の考え方:対数バリアと中心パス

制約付き問題にニュートン法を使うために、制約を目的関数の「壁」に置き換える。不等式形の線形計画問題

minimizec⊤xsubject toai⊤x≤bi(i=1,…,m)\text{minimize} \quad c^{\top}x \qquad \text{subject to} \quad a_i^{\top}x \leq b_i \quad (i = 1, \dots, m)

を考え、ai⊤x<bia_i^{\top}x < b_i(すべての ii)を満たす点があり、実行可能領域は有界であるとする。対数バリア関数 (logarithmic barrier) を

ϕ(x)=−∑i=1mlog⁡(bi−ai⊤x)(ai⊤x<bi for all i)\phi(x) = -\sum_{i=1}^{m}\log(b_i - a_i^{\top}x) \quad (a_i^{\top}x < b_i \ \text{for all} \ i)

と定める。ϕ\phi は凸で、境界に近づくと +∞+\infty に発散する。t>0t > 0 について、tc⊤x+ϕ(x)tc^{\top}x + \phi(x) を実行可能領域の内部で最小化する点を x∗(t)x^{\ast}(t) とする(境界で +∞+\infty に発散し領域が有界なので最小点が存在する。また、ai⊤d=0a_i^{\top}d = 0(すべての ii)となる d≠0d \neq 0 があれば直線 x+sdx + sd が領域に含まれて有界性に反するので、aia_i たちは Rn\mathbb{R}^n を張り、∇2ϕ=∑iaiai⊤/(bi−ai⊤x)2≻0\nabla^2\phi = \sum_i a_ia_i^{\top}/(b_i - a_i^{\top}x)^2 \succ 0 より最小点は一つである)。曲線 t↦x∗(t)t \mapsto x^{\ast}(t) を中心パス (central path) という。tt が小さいと壁の効果が強く x∗(t)x^{\ast}(t) は領域の「中心」にあり、tt が大きいと目的関数が優勢になって最適解に近づく。

命題 6.13(中心パス上の双対ギャップ)λi(t)=1t(bi−ai⊤x∗(t))>0\lambda_i(t) = \dfrac{1}{t(b_i - a_i^{\top}x^{\ast}(t))} > 0 とすると A⊤λ(t)+c=0A^{\top}\lambda(t) + c = 0(AA は ai⊤a_i^{\top} を行とする行列)であり、最適値 p∗p^{\ast} について

c⊤x∗(t)−p∗≤c⊤x∗(t)+b⊤λ(t)=mtc^{\top}x^{\ast}(t) - p^{\ast} \leq c^{\top}x^{\ast}(t) + b^{\top}\lambda(t) = \frac{m}{t}

証明. x∗(t)x^{\ast}(t) で勾配が 00 なので tc+∑iaibi−ai⊤x∗(t)=0tc + \sum_i\frac{a_i}{b_i - a_i^{\top}x^{\ast}(t)} = 0 で、tt で割れば c+A⊤λ=0c + A^{\top}\lambda = 0。実行可能な任意の xx について、λ≥0\lambda \geq 0 と Ax≤bAx \leq b より c⊤x=−λ⊤Ax≥−λ⊤bc^{\top}x = -\lambda^{\top}Ax \geq -\lambda^{\top}b なので p∗≥−b⊤λp^{\ast} \geq -b^{\top}\lambda(第4章 定理 4.11 の弱双対性の特別な場合)。また c⊤x∗(t)+b⊤λ=λ⊤(b−Ax∗(t))=∑i1t=mtc^{\top}x^{\ast}(t) + b^{\top}\lambda = \lambda^{\top}(b - Ax^{\ast}(t)) = \sum_i\frac{1}{t} = \frac{m}{t}。□\square

λ(t)\lambda(t) は双対問題の実行可能解で、KKT 条件(第4章 定義 4.2)の相補性 λi(bi−ai⊤x)=0\lambda_i(b_i - a_i^{\top}x) = 0 を λi(bi−ai⊤x)=1/t\lambda_i(b_i - a_i^{\top}x) = 1/t にゆるめたものを満たしている。t→∞t \to \infty で KKT 条件に近づく。

例 6.14(生産計画の中心パス)第3章 例 3.1 の生産計画(40x1+30x240x_1 + 30x_2 を、機械 2x1+x2≤1002x_1 + x_2 \leq 100、作業 x1+x2≤80x_1 + x_2 \leq 80、原料 x1≤40x_1 \leq 40、x≥0x \geq 0 のもとで最大化。最適解 (20,60)(20, 60)、最大利益 26002600)を、c=(−40,−30)c = (-40, -30), m=5m = 5 の最小化として中心パスをたどると次のようになる(ニュートン法で計算し、sympy の高精度計算で確かめた)。

tt x∗(t)x^{\ast}(t) 利益 2600−2600 - 利益 (λ1,λ2,λ3)(\lambda_1, \lambda_2, \lambda_3)
0.010.01 (15.45,59.78)(15.45, 59.78) 2411.292411.29 188.71188.71 (10.73,20.95,4.07)(10.73, 20.95, 4.07)
0.10.1 (19.48,60.03)(19.48, 60.03) 2580.012580.01 19.9919.99 (9.86,20.31,0.49)(9.86, 20.31, 0.49)
11 (19.95,60.00)(19.95, 60.00) 2598.002598.00 2.002.00 (9.98,20.03,0.05)(9.98, 20.03, 0.05)
1010 (19.995,60.000)(19.995, 60.000) 2599.802599.80 0.200.20 (9.998,20.003,0.005)(9.998, 20.003, 0.005)

最適値とのずれは命題 6.13 の上界 5/t5/t 以下で(主双対のギャップはちょうど 5/t5/t)、機械・作業・原料の制約の乗数 λ1,λ2,λ3\lambda_1, \lambda_2, \lambda_3 は第3章 例 3.31 のシャドウプライス (10,20,0)(10, 20, 0) に近づく。

バリア法は、tt を μ\mu 倍(たとえば μ=10\mu = 10)ずつ大きくしながら、前の x∗(t)x^{\ast}(t) を初期点にして減衰ニュートン法で次の x∗(μt)x^{\ast}(\mu t) を求める(中心化)。命題 6.13 より、最初の中心化で x∗(t0)x^{\ast}(t_0) を求めたあと、双対ギャップ m/tm/t が ε\varepsilon 以下になるまでの外側の反復は ⌈log⁡(m/(t0ε))/log⁡μ⌉\lceil \log(m/(t_0\varepsilon))/\log\mu \rceil 回である。各中心化のニュートン反復の回数は、自己整合性 (self-concordance) の理論により tt によらない上界をもち(上界は mm, μ\mu と直線探索の定数に依存する)、μ=1+1/m\mu = 1 + 1/\sqrt{m} とすると全体で O(mlog⁡(m/(t0ε)))O(\sqrt{m}\log(m/(t_0\varepsilon))) 回のニュートン反復で足りる(主張。Boyd–Vandenberghe 第11章)。一般の凸問題でも、gi(x)≤0g_i(x) \leq 0 に対して ϕ(x)=−∑ilog⁡(−gi(x))\phi(x) = -\sum_i\log(-g_i(x)) とすれば同じ構成ができ、双対ギャップは m/tm/t になる(主張。同書 11.2 節)。実用的なソルバーの多くは、主問題と双対問題の変数を同時に更新する主双対内点法を使っている。

まとめ

  • ニュートン法は 2 次近似の最小化 ∇2f(xk)d=−∇f(xk)\nabla^2 f(x_k)d = -\nabla f(x_k) で、変数のスケールに依存しない。
  • ∇2f(x∗)\nabla^2 f(x^{\ast}) が正則でヘッセ行列がリプシッツ連続なら、x∗x^{\ast} の近くから局所的に 2 次収束する:∥xk+1−x∗∥≤βM∥xk−x∗∥2\lVert x_{k+1} - x^{\ast} \rVert \leq \beta M\lVert x_k - x^{\ast} \rVert^2。正則性がないと線形収束に落ちることがある(x4x^4)。極大点や鞍点にも収束しうる。
  • 遠くからは狭義凸関数でも発散しうる(1+x2\sqrt{1 + x^2} で xk+1=−xk3x_{k+1} = -x_k^3)。減衰ニュートン法は、強凸性などの仮定のもとで直線探索により大域的に収束し、最後は t=1t = 1 で 2 次収束する(アルミホ条件の定数は c<1/2c < 1/2)。
  • 非線形最小二乗ではガウス–ニュートン法が 2 階微分なしで速いが、初期値が悪いと破綻しうる。レーベンバーグ–マーカート法は信頼領域法として安定に動く。
  • 準ニュートン法はセカント条件 Bk+1sk=ykB_{k+1}s_k = y_k を満たすように近似を更新する。BFGS 更新は 2 階の修正として導かれ、曲率条件 sk⊤yk>0s_k^{\top}y_k > 0 のもとで正定値性を保つ。ウルフ条件がこれを保証する。
  • L-BFGS は mm 組のベクトルだけで BFGS を近似し、大規模問題の標準的な解法になっている。
  • 内点法は対数バリアで制約を壁に置き換え、中心パスを t→∞t \to \infty にたどる。中心パス上の双対ギャップは m/tm/t である。

演習問題

問題 6.1 ★ 例 6.2 の f(x)=x−log⁡xf(x) = x - \log x について、(1) ニュートン法が収束する初期点 x0x_0 の範囲を求めよ。(2) 定理 6.4 を r=1/4r = 1/4 として適用すると、収束が保証される δ\delta はいくらか。

解答

(1) ek+1=ek2e_{k+1} = e_k^2 より ek=e02ke_k = e_0^{2^k} なので、x0>0x_0 > 0 で ∣e0∣=∣1−x0∣<1\lvert e_0 \rvert = \lvert 1 - x_0 \rvert < 1、すなわち 0<x0<20 < x_0 < 2 なら xk→1x_k \to 1。x0=2x_0 = 2 なら x1=0x_1 = 0、x0>2x_0 > 2 なら x1<0x_1 < 0 で定義域を出る。

(2) f′′(x)=x−2f''(x) = x^{-2} なので β=1/f′′(1)=1\beta = 1/f''(1) = 1。[3/4,5/4][3/4, 5/4] 上で ∣f′′′(x)∣=2/x3≤2/(3/4)3=128/27\lvert f'''(x) \rvert = 2/x^3 \leq 2/(3/4)^3 = 128/27 なので、平均値の定理より M=128/27M = 128/27 ととれる。δ=min⁡(1/4,27/256)=27/256≈0.105\delta = \min(1/4, 27/256) = 27/256 \approx 0.105。rr を変えて最適化しても δ\delta は約 0.1520.152 どまりで(4r=(1−r)34r = (1 - r)^3 の解)、実際の収束域 ∣x0−1∣<1\lvert x_0 - 1 \rvert < 1 よりずっと狭い。定理は「十分近ければ速い」ことを保証するもので、収束域を正確に与えるものではない。

問題 6.2 ★★ AA を正則な nn 次正方行列、b∈Rnb \in \mathbb{R}^n とし、g(y)=f(Ay+b)g(y) = f(Ay + b) とする。(1) y0y_0 から gg にニュートン法を適用した点列 yky_k と、x0=Ay0+bx_0 = Ay_0 + b から ff に適用した点列 xkx_k について、xk=Ayk+bx_k = Ay_k + b を示せ。(2) 最急降下法では同じことが成り立たないことを、f(x)=12(x12+100x22)f(x) = \frac{1}{2}(x_1^2 + 100x_2^2), A=diag⁡(1,1/10)A = \operatorname{diag}(1, 1/10), b=0b = 0 で説明せよ。

解答

(1) 連鎖律より ∇g(y)=A⊤∇f(Ay+b)\nabla g(y) = A^{\top}\nabla f(Ay + b), ∇2g(y)=A⊤∇2f(Ay+b)A\nabla^2 g(y) = A^{\top}\nabla^2 f(Ay + b)A。x=Ay+bx = Ay + b とすると

y−∇2g(y)−1∇g(y)=y−A−1∇2f(x)−1(A⊤)−1A⊤∇f(x)=y−A−1∇2f(x)−1∇f(x)y - \nabla^2 g(y)^{-1}\nabla g(y) = y - A^{-1}\nabla^2 f(x)^{-1}(A^{\top})^{-1}A^{\top}\nabla f(x) = y - A^{-1}\nabla^2 f(x)^{-1}\nabla f(x)

で、AA を掛けて bb を足すと x−∇2f(x)−1∇f(x)x - \nabla^2 f(x)^{-1}\nabla f(x) になる。帰納法で xk=Ayk+bx_k = Ay_k + b。

(2) g(y)=12(y12+y22)g(y) = \frac{1}{2}(y_1^2 + y_2^2) は条件数 11 で、ステップ幅 11 の最急降下法は 1 回で最小点 00 に着く。一方 ff は条件数 100100 で、最急降下法の反復回数は κ=100\kappa = 100 に比例する(第5章)。最急降下法 yk+1=yk−t∇g(yk)y_{k+1} = y_k - t\nabla g(y_k) を xx で書くと xk+1=xk−tAA⊤∇f(xk)x_{k+1} = x_k - tAA^{\top}\nabla f(x_k) で、ff の最急降下法とは別の方法(前処理つき勾配法)になる。ニュートン法は座標の取り方によらないので、スケーリングの工夫を要しない。

問題 6.3 ★★ f(x)=x3−3xf(x) = x^3 - 3x の極小点 x=1x = 1 を求めるため、次の実装をした。「ニュートン法 xk+1=xk−f′(xk)/f′′(xk)x_{k+1} = x_k - f'(x_k)/f''(x_k) を、∣f′(xk)∣<10−10\lvert f'(x_k) \rvert < 10^{-10} になるまで繰り返す」。(1) x0=−2x_0 = -2 から始めると何が起こるか。(2) 「ニュートン方向にアルミホ条件のバックトラッキングをつければ安全だ」という修正案の問題点を述べ、正しい対策を挙げよ。

解答

(1) xk+1=xk−3xk2−36xk=xk2+12xkx_{k+1} = x_k - \frac{3x_k^2 - 3}{6x_k} = \frac{x_k^2 + 1}{2x_k} なので、x0=−2x_0 = -2 から −1.25,−1.025,−1.0003,…-1.25, -1.025, -1.0003, \dots と −1-1 に 2 次収束し、停止条件を満たして終わる。しかし f′′(−1)=−6<0f''(-1) = -6 < 0 で、x=−1x = -1 は極大点である(f(−2)=−2f(-2) = -2 から f(−1)=2f(-1) = 2 へ値が増えている)。

(2) x0=−2x_0 = -2 では f′′(−2)=−12<0f''(-2) = -12 < 0 で、ニュートン方向 d=−f′(−2)/f′′(−2)=0.75d = -f'(-2)/f''(-2) = 0.75 は f′(−2)d=6.75>0f'(-2)d = 6.75 > 0 の上り方向である。上り方向ではアルミホ条件 (5.1) の右辺が f(x)f(x) より大きくなり、条件は「十分に減った」ことを表さない。この例では、f′(x)=3x2−3f'(x) = 3x^2 - 3 が [−2,−1.25][-2, -1.25] で減少するので、(f(−2+0.75t)−f(−2))/t(f(-2 + 0.75t) - f(-2))/t(区間 [−2,−2+0.75t][-2, -2 + 0.75t] での ff の平均変化率の 0.750.75 倍)は tt について減少し、t=1t = 1 で 3.796875=916⋅6.753.796875 = \frac{9}{16} \cdot 6.75 なので、0<t≤10 < t \leq 1 で f(−2+0.75t)−f(−2)≥916⋅6.75tf(-2 + 0.75t) - f(-2) \geq \frac{9}{16} \cdot 6.75t である。よって通常の c<1/2c < 1/2 ではどの tt も条件を満たさず、バックトラッキングは終わらない(tt が 00 に近づき続ける)。c≥9/16c \geq 9/16 なら t=1t = 1 が受け入れられるが、値は −2-2 から約 1.801.80 へ増える。どちらにしても対策にならない。正しい対策は、ヘッセ行列(ここでは f′′f'')が正定値でないときに f′′+τf'' + \tau(τ>0\tau > 0 を正定値になるまで大きくする)や勾配方向に取り替えて降下方向を保証し、そのうえで直線探索を使うことである。ただしこの ff は x→−∞x \to -\infty で −∞-\infty に発散する(下に有界でない)。x0=−2x_0 = -2 では降下方向は左向きなので、降下法は値を減らしながら左へ進み続け、x=1x = 1 には着かない。局所最小点 x=1x = 1 を求めるには x0>−1x_0 > -1 から始める必要があり、停止時には f′′(x)>0f''(x) > 0 を確かめるべきである。

問題 6.4 ★★ JJ を m×nm \times n 行列、r∈Rmr \in \mathbb{R}^m, g=J⊤r≠0g = J^{\top}r \neq 0 とし、d(λ)=−(J⊤J+λI)−1gd(\lambda) = -(J^{\top}J + \lambda I)^{-1}g(λ>0\lambda > 0)とする。(1) ∥d(λ)∥\lVert d(\lambda) \rVert は λ\lambda について単調減少であることを示せ。(2) λ→∞\lambda \to \infty で λd(λ)→−g\lambda d(\lambda) \to -g、JJ の列が一次独立なら λ→+0\lambda \to +0 で d(λ)→dGNd(\lambda) \to d_{\mathrm{GN}} であることを示せ。

解答

J⊤JJ^{\top}J を直交行列で対角化し(固有値 σi≥0\sigma_i \geq 0、正規直交な固有ベクトル viv_i)、g=∑iγivig = \sum_i\gamma_iv_i と展開すると d(λ)=−∑iγiσi+λvid(\lambda) = -\sum_i\frac{\gamma_i}{\sigma_i + \lambda}v_i。

(1) ∥d(λ)∥2=∑iγi2(σi+λ)2\lVert d(\lambda) \rVert^2 = \sum_i\frac{\gamma_i^2}{(\sigma_i + \lambda)^2} の各項は λ\lambda について単調減少で、g≠0g \neq 0 よりある γi≠0\gamma_i \neq 0 なので狭義に減少する。

(2) λd(λ)=−∑iλσi+λγivi→−∑iγivi=−g\lambda d(\lambda) = -\sum_i\frac{\lambda}{\sigma_i + \lambda}\gamma_iv_i \to -\sum_i\gamma_iv_i = -g。列が一次独立なら J⊤JJ^{\top}J は正定値で σi>0\sigma_i > 0 なので、d(λ)→−∑iγiσivi=−(J⊤J)−1g=dGNd(\lambda) \to -\sum_i\frac{\gamma_i}{\sigma_i}v_i = -(J^{\top}J)^{-1}g = d_{\mathrm{GN}}。λ\lambda を動かすと、一歩はガウス–ニュートン方向から短い最急降下方向まで連続に変わる。

問題 6.5 ★★ (1) B0=IB_0 = I, s0=(1,1)s_0 = (1, 1), y0=(1,4)y_0 = (1, 4)(f(x)=12(x12+4x22)f(x) = \frac{1}{2}(x_1^2 + 4x_2^2) なら y0=diag⁡(1,4)s0y_0 = \operatorname{diag}(1, 4)s_0)として BFGS 更新 (6.1) の B1B_1 を求め、セカント条件と正定値性を確かめよ。定理 6.12 の 3 の式で H1H_1 を求め、B1H1=IB_1H_1 = I を確かめよ。(2) s≠0s \neq 0, s⊤y≤0s^{\top}y \leq 0 のとき、Bs=yBs = y を満たす正定値対称行列 BB は存在しないことを示せ。

解答

(1) s0⊤B0s0=2s_0^{\top}B_0s_0 = 2, y0⊤s0=5y_0^{\top}s_0 = 5 より

B1=I−12(1111)+15(14416)=110(73337)B_1 = I - \frac{1}{2}\begin{pmatrix} 1 & 1 \\ 1 & 1 \end{pmatrix} + \frac{1}{5}\begin{pmatrix} 1 & 4 \\ 4 & 16 \end{pmatrix} = \frac{1}{10}\begin{pmatrix} 7 & 3 \\ 3 & 37 \end{pmatrix}

B1s0=110(10,40)=(1,4)=y0B_1s_0 = \frac{1}{10}(10, 40) = (1, 4) = y_0。B1B_1 の (1,1)(1, 1) 成分は 7/10>07/10 > 0, det⁡B1=(259−9)/100=5/2>0\det B_1 = (259 - 9)/100 = 5/2 > 0 なので正定値(固有値は約 0.6700.670 と 3.7303.730)。ρ0=1/5\rho_0 = 1/5, H0=IH_0 = I で

I−ρ0s0y0⊤=15(4−4−11),H1=125(4−4−11)(4−1−41)+15(1111)=125(37−3−37)I - \rho_0s_0y_0^{\top} = \frac{1}{5}\begin{pmatrix} 4 & -4 \\ -1 & 1 \end{pmatrix}, \qquad H_1 = \frac{1}{25}\begin{pmatrix} 4 & -4 \\ -1 & 1 \end{pmatrix}\begin{pmatrix} 4 & -1 \\ -4 & 1 \end{pmatrix} + \frac{1}{5}\begin{pmatrix} 1 & 1 \\ 1 & 1 \end{pmatrix} = \frac{1}{25}\begin{pmatrix} 37 & -3 \\ -3 & 7 \end{pmatrix}

掛けると

B1H1=1250(259−9−21+21111−111−9+259)=IB_1H_1 = \frac{1}{250}\begin{pmatrix} 259 - 9 & -21 + 21 \\ 111 - 111 & -9 + 259 \end{pmatrix} = I

である。なお ∇2f=diag⁡(1,4)\nabla^2 f = \operatorname{diag}(1, 4) と比べると、B1B_1 は 1 回の更新で s0s_0 方向の曲率だけを正しく取り込んでいる。

(2) Bs=yBs = y なら s⊤Bs=s⊤y≤0s^{\top}Bs = s^{\top}y \leq 0 で、s≠0s \neq 0 なので BB は正定値でない。

問題 6.6 ★★ 1 変数の線形計画「0≤x≤10 \leq x \leq 1 のもとで xx を最小化」(p∗=0p^{\ast} = 0)について、中心パス x∗(t)x^{\ast}(t) を求め、x∗(t)≤2/tx^{\ast}(t) \leq 2/t を確かめよ。また t→∞t \to \infty で x∗(t)≈1/tx^{\ast}(t) \approx 1/t であることを示せ。

解答

ϕ(x)=−log⁡x−log⁡(1−x)\phi(x) = -\log x - \log(1 - x) で、tx+ϕ(x)tx + \phi(x) の導関数 t−1x+11−xt - \frac{1}{x} + \frac{1}{1 - x} を 00 とおいて x(1−x)x(1 - x) を掛けると tx2−(t+2)x+1=0tx^2 - (t + 2)x + 1 = 0。(0,1)(0, 1) にある根は

x∗(t)=t+2−t2+42tx^{\ast}(t) = \frac{t + 2 - \sqrt{t^2 + 4}}{2t}

((t+2)2>t2+4(t + 2)^2 > t^2 + 4 より正、t+2−2t<t2+4t + 2 - 2t < \sqrt{t^2 + 4} より 11 未満)。命題 6.13 は m=2m = 2 で x∗(t)−0≤2/tx^{\ast}(t) - 0 \leq 2/t を与える。直接にも、t2+4>t\sqrt{t^2 + 4} > t より x∗(t)<22t=1t≤2tx^{\ast}(t) < \frac{2}{2t} = \frac{1}{t} \leq \frac{2}{t}。また t2+4=t+2t+O(t−3)\sqrt{t^2 + 4} = t + \frac{2}{t} + O(t^{-3}) より x∗(t)=1t−1t2+O(t−4)x^{\ast}(t) = \frac{1}{t} - \frac{1}{t^2} + O(t^{-4}) で、t=1,10,100t = 1, 10, 100 では 0.382,0.0901,0.00990.382, 0.0901, 0.0099 である。乗数は λ1=1tx∗\lambda_1 = \frac{1}{tx^{\ast}}(x≥0x \geq 0 の制約)、λ2=1t(1−x∗)\lambda_2 = \frac{1}{t(1 - x^{\ast})} で、λ1→1\lambda_1 \to 1, λ2→0\lambda_2 \to 0 となり、最適解 x=0x = 0 での KKT 条件の乗数に近づく。

問題 6.7 ★★★ ff を C2C^2 級とし、すべての xx で μI⪯∇2f(x)⪯LI\mu I \preceq \nabla^2 f(x) \preceq LI(0<μ≤L0 < \mu \leq L)とする。減衰ニュートン法(アルミホ条件の定数 0<c<1/20 < c < 1/2、縮小率 β\beta、tˉ=1\bar{t} = 1)について、tmin⁡=min⁡(1,2β(1−c)μ/L)t_{\min} = \min(1, 2\beta(1 - c)\mu/L) として

f(xk+1)−p∗≤(1−2cμtmin⁡L)(f(xk)−p∗)f(x_{k+1}) - p^{\ast} \leq \Bigl(1 - \frac{2c\mu t_{\min}}{L}\Bigr)(f(x_k) - p^{\ast})

を示せ(任意の初期点から線形収束する)。

解答

x=xkx = x_k, g=∇f(x)g = \nabla f(x), H=∇2f(x)H = \nabla^2 f(x), d=−H−1gd = -H^{-1}g, λ2=g⊤H−1g\lambda^2 = g^{\top}H^{-1}g とする。H−1⪰1LIH^{-1} \succeq \frac{1}{L}I より λ2≥∥g∥2/L\lambda^2 \geq \lVert g \rVert^2/L。H−1⪯1μIH^{-1} \preceq \frac{1}{\mu}I より ∥d∥2=(H−1/2g)⊤H−1(H−1/2g)≤1μλ2\lVert d \rVert^2 = (H^{-1/2}g)^{\top}H^{-1}(H^{-1/2}g) \leq \frac{1}{\mu}\lambda^2(H−1/2H^{-1/2} は H−1H^{-1} の正の平方根)。ff は凸で ∇2f⪯LI\nabla^2 f \preceq LI なので LL-平滑で(第2章 定理 2.23)、降下補題より

f(x+td)≤f(x)−tλ2+L2t2∥d∥2≤f(x)−tλ2(1−L2μt)f(x + td) \leq f(x) - t\lambda^2 + \frac{L}{2}t^2\lVert d \rVert^2 \leq f(x) - t\lambda^2\Bigl(1 - \frac{L}{2\mu}t\Bigr)

t≤2(1−c)μ/Lt \leq 2(1 - c)\mu/L なら右辺は f(x)−ctλ2f(x) - ct\lambda^2 以下なので、アルミホ条件 f(x+td)≤f(x)+ctg⊤d=f(x)−ctλ2f(x + td) \leq f(x) + ctg^{\top}d = f(x) - ct\lambda^2 が成り立つ。第5章 命題 5.6 の後半と同じ議論で、採られる tt は tmin⁡t_{\min} 以上である。よって f(xk+1)≤f(x)−ctmin⁡λ2≤f(x)−ctmin⁡L∥g∥2f(x_{k+1}) \leq f(x) - ct_{\min}\lambda^2 \leq f(x) - \frac{ct_{\min}}{L}\lVert g \rVert^2。ff は μ\mu-強凸(第2章 定理 2.22)で LL-平滑なので ∥g∥2≥2μ(f(x)−p∗)\lVert g \rVert^2 \geq 2\mu(f(x) - p^{\ast})(第2章 系 2.24 のポリャク–ロヤシェヴィチの不等式)で、代入すると求める不等式を得る。c<1/2c < 1/2, tmin⁡≤1t_{\min} \leq 1, μ≤L\mu \leq L より係数は 00 以上 11 未満である。この評価は線形収束しか与えないが、解の近くでは定理 6.4 の 2 次収束が効く(定理 6.7)。

この章を読み終えたら

「読了」にすると、学習記録と地図に反映されます。

この章の誤りを報告GitHub で見る