最適化方法
数値 最適化 において 、 ブロイデン・フレッチャー・ゴールドファーブ・シャノ ( BFGS ) アルゴリズムは、制約のない 非線形 最適化 問題を解く 反復法 です 。 [1] 関連する デイビッドン・フレッチャー・パウエル法 と同様に、BFGSは曲率情報で勾配を前処理することで降下方向を決定します 。 これ は 、一般化 セカント法 による勾配評価(または近似勾配評価)のみから得られる 損失関数 の ヘッセ行列 の近似値を徐々に改善することで行われます 。 [2]
BFGS曲率行列の更新には逆行列が 必要ないため 、 ニュートン法 と 比較して 計算量は だけです 。また、一般的に使用されているのは L-BFGS です。これはBFGSのメモリ制限バージョンで、非常に多数の変数(たとえば、> 1000)の問題に特に適しています。BFGS-Bバリアントは、単純なボックス制約を処理します。 [3] 。BFGS行列は コンパクトな表現 も許容するため、大規模な制約付き問題に適しています。
お
(
ん
2
)
{\displaystyle {\mathcal {O}}(n^{2})}
お
(
ん
3
)
{\displaystyle {\mathcal {O}}(n^{3})}
このアルゴリズムは、チャールズ・ジョージ・ブロイデン 、 ロジャー・フレッチャー 、 ドナルド・ゴールドファーブ 、 デビッド・シャノ にちなんで名付けられました 。 [4] [5] [6] [7]
根拠
最適化問題は 、 を最小化することです。ここで、 は のベクトルであり 、 は 微分可能なスカラー関数です。 が取ることができる値には制約はありません。
ふ
(
x
)
{\displaystyle f(\mathbf {x} )}
x
{\displaystyle \mathbf {x} }
R
ん
{\displaystyle \mathbb {R} ^{n}}
ふ
{\displaystyle f}
x
{\displaystyle \mathbf {x} }
アルゴリズムは 最適値の初期推定から始まり、各段階でより良い推定値を得るために反復的に進行します。
x
0
{\displaystyle \mathbf {x} _{0}}
ステージ k での検索 方向 p k は 、ニュートン方程式の類似体の解によって与えられます。
B
け
p
け
=
−
∇
ふ
(
x
け
)
、
{\displaystyle B_{k}\mathbf {p} _{k}=-\nabla f(\mathbf {x} _{k}),}
ここで、は 各段階で繰り返し更新される におけるヘッセ行列の近似値であり、は x k で 評価 さ れる 関数の勾配である 。 次に 、 p k 方向の 直線探索 を使用して 、 スカラー
B
け
{\displaystyle B_{k}}
x
け
{\displaystyle \mathbf {x} _{k}}
∇
ふ
(
x
け
)
{\displaystyle \nabla f(\mathbf {x} _{k})}
ふ
(
x
け
+
γ
p
け
)
{\displaystyle f(\mathbf {x} _{k}+\gamma \mathbf {p} _{k})}
γ
>
0.
{\displaystyle \gamma >0.}
の更新に課される準ニュートン条件 は
B
け
{\displaystyle B_{k}}
B
け
+
1
(
x
け
+
1
−
x
け
)
=
∇
ふ
(
x
け
+
1
)
−
∇
ふ
(
x
け
)
。
{\displaystyle B_{k+1}(\mathbf {x} _{k+1}-\mathbf {x} _{k})=\nabla f(\mathbf {x} _{k+1})- \nbla f(\mathbf {x} _{k}).}
と すると 、は次 を満たす
。
ええ
け
=
∇
ふ
(
x
け
+
1
)
−
∇
ふ
(
x
け
)
{\displaystyle \mathbf {y} _{k}=\nabla f(\mathbf {x} _{k+1})-\nabla f(\mathbf {x} _{k})}
s
け
=
x
け
+
1
−
x
け
{\displaystyle \mathbf {s} _{k}=\mathbf {x} _{k+1}-\mathbf {x} _{k}}
B
け
+
1
{\displaystyle B_{k+1}}
B
k
+
1
s
k
=
y
k
{\displaystyle B_{k+1}\mathbf {s} _{k}=\mathbf {y} _{k}}
、
これは正割方程式です。
が正定値となるためには 曲率条件 が満たされている必要があり、これは割線方程式を であらかじめ乗算することで確認できます。関数が 強く凸 でない場合は、直線探索を使用して曲率条件を伴う Wolfe 条件を満たす点 x k +1 を見つけるなどして、条件を明示的に強制する必要が あります。
s
k
⊤
y
k
>
0
{\displaystyle \mathbf {s} _{k}^{\top }\mathbf {y} _{k}>0}
B
k
+
1
{\displaystyle B_{k+1}}
s
k
T
{\displaystyle \mathbf {s} _{k}^{T}}
点における完全なヘッセ行列 を として計算する必要はなく、ステージ k における近似ヘッセ行列は 2 つの行列を追加することで更新されます。
x
k
+
1
{\displaystyle \mathbf {x} _{k+1}}
B
k
+
1
{\displaystyle B_{k+1}}
B
k
+
1
=
B
k
+
U
k
+
V
k
.
{\displaystyle B_{k+1}=B_{k}+U_{k}+V_{k}.}
と は どちらも 対称ランク 1 行列ですが、それらの合計はランク 2 更新行列になります。BFGS と DFP 更新行列はどちらも、ランク 2 行列によってその前身と異なります。もう 1 つのより単純なランク 1 法は 対称ランク 1法として知られており、これは 正定値性 を保証しません 。 の対称性と正定値性を維持するために 、更新形式を として選択できます 。セカント条件 を課します 。 と を選択する と 、次が得られます。 [8]
U
k
{\displaystyle U_{k}}
V
k
{\displaystyle V_{k}}
B
k
+
1
{\displaystyle B_{k+1}}
B
k
+
1
=
B
k
+
α
u
u
⊤
+
β
v
v
⊤
{\displaystyle B_{k+1}=B_{k}+\alpha \mathbf {u} \mathbf {u} ^{\top }+\beta \mathbf {v} \mathbf {v} ^{\top }}
B
k
+
1
s
k
=
y
k
{\displaystyle B_{k+1}\mathbf {s} _{k}=\mathbf {y} _{k}}
u
=
y
k
{\displaystyle \mathbf {u} =\mathbf {y} _{k}}
v
=
B
k
s
k
{\displaystyle \mathbf {v} =B_{k}\mathbf {s} _{k}}
α
=
1
y
k
T
s
k
,
{\displaystyle \alpha ={\frac {1}{\mathbf {y} _{k}^{T}\mathbf {s} _{k}}},}
β
=
−
1
s
k
T
B
k
s
k
.
{\displaystyle \beta =-{\frac {1}{\mathbf {s} _{k}^{T}B_{k}\mathbf {s} _{k}}}.}
最後に、 と をに代入して 、の更新方程式を取得します 。
α
{\displaystyle \alpha }
β
{\displaystyle \beta }
B
k
+
1
=
B
k
+
α
u
u
⊤
+
β
v
v
⊤
{\displaystyle B_{k+1}=B_{k}+\alpha \mathbf {u} \mathbf {u} ^{\top }+\beta \mathbf {v} \mathbf {v} ^{\top }}
B
k
+
1
{\displaystyle B_{k+1}}
B
k
+
1
=
B
k
+
y
k
y
k
T
y
k
T
s
k
−
B
k
s
k
s
k
T
B
k
T
s
k
T
B
k
s
k
.
{\displaystyle B_{k+1}=B_{k}+{\frac {\mathbf {y} _{k}\mathbf {y} _{k}^{\mathrm {T} }}{\mathbf {y} _{k}^{\mathrm {T} }\mathbf {s} _{k}}}-{\frac {B_{k}\mathbf {s} _{k}\mathbf {s} _{k}^{\mathrm {T} }B_{k}^{\mathrm {T} }}{\mathbf {s} _{k}^{\mathrm {T} }B_{k}\mathbf {s} _{k}}}.}
アルゴリズム
非線形目的関数
で ある次の制約のない最適化問題を考えます
。
minimize
x
∈
R
n
f
(
x
)
,
{\displaystyle {\begin{aligned}{\underset {\mathbf {x} \in \mathbb {R} ^{n}}{\text{minimize}}}\quad &f(\mathbf {x} ),\end{aligned}}}
f
:
R
n
→
R
{\displaystyle f:\mathbb {R} ^{n}\to \mathbb {R} }
初期推定値 とヘッセ行列の初期推定値から 、解に収束する
まで次の手順が繰り返されます。
x
0
∈
R
n
{\displaystyle \mathbf {x} _{0}\in \mathbb {R} ^{n}}
B
0
∈
R
n
×
n
{\displaystyle B_{0}\in \mathbb {R} ^{n\times n}}
x
k
{\displaystyle \mathbf {x} _{k}}
を解いて 方向を取得します 。
p
k
{\displaystyle \mathbf {p} _{k}}
B
k
p
k
=
−
∇
f
(
x
k
)
{\displaystyle B_{k}\mathbf {p} _{k}=-\nabla f(\mathbf {x} _{k})}
1 次元の最適化 ( 直線探索 ) を実行して、最初のステップで見つかった方向の 許容可能なステップ サイズを見つけます。正確な直線探索を実行すると、 になります 。実際には、通常は不正確な直線探索で十分であり、許容可能な は Wolfe 条件 を満たします 。
α
k
{\displaystyle \alpha _{k}}
α
k
=
arg
min
f
(
x
k
+
α
p
k
)
{\displaystyle \alpha _{k}=\arg \min f(\mathbf {x} _{k}+\alpha \mathbf {p} _{k})}
α
k
{\displaystyle \alpha _{k}}
設定し て更新します 。
s
k
=
α
k
p
k
{\displaystyle \mathbf {s} _{k}=\alpha _{k}\mathbf {p} _{k}}
x
k
+
1
=
x
k
+
s
k
{\displaystyle \mathbf {x} _{k+1}=\mathbf {x} _{k}+\mathbf {s} _{k}}
y
k
=
∇
f
(
x
k
+
1
)
−
∇
f
(
x
k
)
{\displaystyle \mathbf {y} _{k}={\nabla f(\mathbf {x} _{k+1})-\nabla f(\mathbf {x} _{k})}}
。
B
k
+
1
=
B
k
+
y
k
y
k
T
y
k
T
s
k
−
B
k
s
k
s
k
T
B
k
T
s
k
T
B
k
s
k
{\displaystyle B_{k+1}=B_{k}+{\frac {\mathbf {y} _{k}\mathbf {y} _{k}^{\mathrm {T} }}{\mathbf {y} _{k}^{\mathrm {T} }\mathbf {s} _{k}}}-{\frac {B_{k}\mathbf {s} _{k}\mathbf {s} _{k}^{\mathrm {T} }B_{k}^{\mathrm {T} }}{\mathbf {s} _{k}^{\mathrm {T} }B_{k}\mathbf {s} _{k}}}}
。
収束は勾配のノルムを観察することで判定できます。ある が与えられた場合 、 のときにアルゴリズムを停止できます。 が で初期化された場合 、最初のステップは 勾配降下法 と同等になりますが、それ以降のステップはヘッセ行列の近似値
である によってますます洗練されていきます。
ϵ
>
0
{\displaystyle \epsilon >0}
|
|
∇
f
(
x
k
)
|
|
≤
ϵ
.
{\displaystyle ||\nabla f(\mathbf {x} _{k})||\leq \epsilon .}
B
0
{\displaystyle B_{0}}
B
0
=
I
{\displaystyle B_{0}=I}
B
k
{\displaystyle B_{k}}
アルゴリズムの最初のステップは行列の逆行列を使って実行される。これは 、アルゴリズムのステップ5に
シャーマン・モリソンの公式 を適用することで効率的に得られ、
B
k
{\displaystyle B_{k}}
B
k
+
1
−
1
=
(
I
−
s
k
y
k
T
y
k
T
s
k
)
B
k
−
1
(
I
−
y
k
s
k
T
y
k
T
s
k
)
+
s
k
s
k
T
y
k
T
s
k
.
{\displaystyle B_{k+1}^{-1}=\left(I-{\frac {\mathbf {s} _{k}\mathbf {y} _{k}^{T}}{\mathbf {y} _{k}^{T}\mathbf {s} _{k}}}\right)B_{k}^{-1}\left(I-{\frac {\mathbf {y} _{k}\mathbf {s} _{k}^{T}}{\mathbf {y} _{k}^{T}\mathbf {s} _{k}}}\right)+{\frac {\mathbf {s} _{k}\mathbf {s} _{k}^{T}}{\mathbf {y} _{k}^{T}\mathbf {s} _{k}}}.}
これは、が対称であり、およびが スカラーであることを認識し 、次のような展開を使用して、
一時的な行列を使わずに効率的に計算できます。
B
k
−
1
{\displaystyle B_{k}^{-1}}
y
k
T
B
k
−
1
y
k
{\displaystyle \mathbf {y} _{k}^{\mathrm {T} }B_{k}^{-1}\mathbf {y} _{k}}
s
k
T
y
k
{\displaystyle \mathbf {s} _{k}^{\mathrm {T} }\mathbf {y} _{k}}
B
k
+
1
−
1
=
B
k
−
1
+
(
s
k
T
y
k
+
y
k
T
B
k
−
1
y
k
)
(
s
k
s
k
T
)
(
s
k
T
y
k
)
2
−
B
k
−
1
y
k
s
k
T
+
s
k
y
k
T
B
k
−
1
s
k
T
y
k
.
{\displaystyle B_{k+1}^{-1}=B_{k}^{-1}+{\frac {(\mathbf {s} _{k}^{\mathrm {T} }\mathbf {y} _{k}+\mathbf {y} _{k}^{\mathrm {T} }B_{k}^{-1}\mathbf {y} _{k})(\mathbf {s} _{k}\mathbf {s} _{k}^{\mathrm {T} })}{(\mathbf {s} _{k}^{\mathrm {T} }\mathbf {y} _{k})^{2}}}-{\frac {B_{k}^{-1}\mathbf {y} _{k}\mathbf {s} _{k}^{\mathrm {T} }+\mathbf {s} _{k}\mathbf {y} _{k}^{\mathrm {T} }B_{k}^{-1}}{\mathbf {s} _{k}^{\mathrm {T} }\mathbf {y} _{k}}}.}
したがって、行列の反転を避けるために、 ヘッセ行列そのものではなく、ヘッセ行列の 逆行列を近似することができる。 [9]
H
k
=
def
B
k
−
1
.
{\displaystyle H_{k}{\overset {\operatorname {def} }{=}}B_{k}^{-1}.}
初期推定値 と近似 逆 ヘッセ行列から、 解に収束する
まで次の手順を繰り返します。
x
0
{\displaystyle \mathbf {x} _{0}}
H
0
{\displaystyle H_{0}}
x
k
{\displaystyle \mathbf {x} _{k}}
を解いて 方向を取得します 。
p
k
{\displaystyle \mathbf {p} _{k}}
p
k
=
−
H
k
∇
f
(
x
k
)
{\displaystyle \mathbf {p} _{k}=-H_{k}\nabla f(\mathbf {x} _{k})}
1 次元の最適化 ( 直線探索 ) を実行して、最初のステップで見つかった方向の 許容可能なステップ サイズを見つけます。正確な直線探索を実行すると、 になります 。実際には、通常は不正確な直線探索で十分であり、許容可能な は Wolfe 条件 を満たします 。
α
k
{\displaystyle \alpha _{k}}
α
k
=
arg
min
f
(
x
k
+
α
p
k
)
{\displaystyle \alpha _{k}=\arg \min f(\mathbf {x} _{k}+\alpha \mathbf {p} _{k})}
α
k
{\displaystyle \alpha _{k}}
設定し て更新します 。
s
k
=
α
k
p
k
{\displaystyle \mathbf {s} _{k}=\alpha _{k}\mathbf {p} _{k}}
x
k
+
1
=
x
k
+
s
k
{\displaystyle \mathbf {x} _{k+1}=\mathbf {x} _{k}+\mathbf {s} _{k}}
y
k
=
∇
f
(
x
k
+
1
)
−
∇
f
(
x
k
)
{\displaystyle \mathbf {y} _{k}={\nabla f(\mathbf {x} _{k+1})-\nabla f(\mathbf {x} _{k})}}
。
H
k
+
1
=
H
k
+
(
s
k
T
y
k
+
y
k
T
H
k
y
k
)
(
s
k
s
k
T
)
(
s
k
T
y
k
)
2
−
H
k
y
k
s
k
T
+
s
k
y
k
T
H
k
s
k
T
y
k
{\displaystyle H_{k+1}=H_{k}+{\frac {(\mathbf {s} _{k}^{\mathrm {T} }\mathbf {y} _{k}+\mathbf {y} _{k}^{\mathrm {T} }H_{k}\mathbf {y} _{k})(\mathbf {s} _{k}\mathbf {s} _{k}^{\mathrm {T} })}{(\mathbf {s} _{k}^{\mathrm {T} }\mathbf {y} _{k})^{2}}}-{\frac {H_{k}\mathbf {y} _{k}\mathbf {s} _{k}^{\mathrm {T} }+\mathbf {s} _{k}\mathbf {y} _{k}^{\mathrm {T} }H_{k}}{\mathbf {s} _{k}^{\mathrm {T} }\mathbf {y} _{k}}}}
。
統計的推定問題(最大尤度法 やベイズ推定など )では、 解の 信頼区間 または 信頼区間は、 最終的なヘッセ行列の 逆行列から推定することができます [ 要出典 ] 。しかし、これらの量は技術的には真のヘッセ行列によって定義され、BFGS近似は真のヘッセ行列に収束しない可能性があります。 [10]
さらなる発展
BFGS 更新式は、曲率 が厳密に正で、ゼロから制限されていることに大きく依存しています。この条件は、凸ターゲットに対して Wolfe 条件で直線探索を実行すると満たされます。ただし、実際のアプリケーション (逐次二次計画法など) では、負またはほぼゼロの曲率が定期的に生成されます。これは、非凸ターゲットを最適化するときや、直線探索の代わりに信頼領域アプローチを採用するときに発生することがあります。ターゲットのノイズにより、誤った値が生成される可能性もあります。
s
k
⊤
y
k
{\displaystyle \mathbf {s} _{k}^{\top }\mathbf {y} _{k}}
このような場合には、より堅牢な更新を得るために
、 いわゆる減衰BFGS更新の1つを使用することができる( [11] を参照) 。
s
k
{\displaystyle \mathbf {s} _{k}}
y
k
{\displaystyle \mathbf {y} _{k}}
注目すべき実装
注目すべきオープンソース実装は次のとおりです。
ALGLIBは BFGSとそのメモリ制限バージョンをC++とC#で実装します。
GNU Octave は fsolve、 信頼領域 拡張を備えたBFGS の形式を関数内で使用します 。
GSL は BFGSをgsl_multimin_fdfminimizer_vector_bfgs2として実装している。 [12]
R では 、BFGSアルゴリズム(およびボックス制約を許可するL-BFGS-Bバージョン)は、基本関数optim()のオプションとして実装されています。 [13]
SciPy では 、scipy.optimize.fmin_bfgs関数がBFGSを実装しています。 [14] また、パラメータLを非常に大きな数に設定することで、 L-BFGS アルゴリズムのいずれかを使用してBFGSを実行することも可能です。
Julia では 、Optim.jlパッケージがBFGSとL-BFGSをoptimize()関数のソルバーオプションとして実装しています(他のオプションも含まれています)。 [15]
注目すべき独自の実装には次のものがあります。
参照
参考文献
^ フレッチャー、ロジャー(1987)、 最適化の実践的方法 (第2版)、ニューヨーク: ジョン・ワイリー&サンズ 、 ISBN 978-0-471-91547-8
^ Dennis, JE Jr. ; Schnabel, Robert B. (1983)、「Secant Methods for Unconstrained Minimization」、 Numerical Methods for Unconstrained Optimization and Nonlinear Equations 、Englewood Cliffs、NJ: Prentice-Hall、pp. 194–215、 ISBN 0-13-627216-9
^ Byrd, Richard H.; Lu, Peihuang; Nocedal, Jorge; Zhu, Ciyou (1995)、「境界制約付き最適化のための限定メモリアルゴリズム」、 SIAM Journal on Scientific Computing 、 16 (5): 1190–1208、 CiteSeerX 10.1.1.645.5814 、 doi :10.1137/0916069
^ Broyden, CG (1970)、「ダブルランク最小化アルゴリズムのクラスの収束」、 数学とその応用研究所ジャーナル 、 6 :76–90、 doi :10.1093/imamat/6.1.76
^ Fletcher, R. (1970)、「可変メトリックアルゴリズムへの新しいアプローチ」、 コンピュータジャーナル 、 13 (3): 317–322、 doi : 10.1093/comjnl/13.3.317
^ Goldfarb, D. (1970)、「変分法によって導出される可変メトリック更新のファミリー」、 Mathematics of Computation 、 24 (109): 23–26、 doi : 10.1090/S0025-5718-1970-0258249-6
^ シャノ、デイビッド F. (1970 年 7 月)、「関数最小化のための準ニュートン法の条件付け」、 Mathematics of Computation 、 24 (111): 647–656、 doi : 10.1090/S0025-5718-1970-0274029-X 、 MR 0274029
^ フレッチャー、ロジャー(1987)、 最適化の実践的方法 (第2版)、ニューヨーク: ジョン・ワイリー&サンズ 、 ISBN 978-0-471-91547-8
^ Nocedal, Jorge; Wright, Stephen J. (2006)、 Numerical Optimization (第2版)、ベルリン、ニューヨーク: Springer-Verlag 、 ISBN 978-0-387-30303-1
^ Ge, Ren-pu; Powell, MJD (1983). 「制約なし最適化における可変メトリック行列の収束」. 数理計画 . 27 (2). 123. doi :10.1007/BF02591941. S2CID 8113073.
^ ホルヘ・ノセダル、スティーブン・J・ライト(2006)、 数値最適化
^ 「GNU Scientific Library — GSL 2.6 ドキュメント」 www.gnu.org . 2020年11月22日 閲覧 。
^ 「R: 汎用最適化」. stat.ethz.ch . 2020年11月22日 閲覧 。
^ 「scipy.optimize.fmin_bfgs — SciPy v1.5.4 リファレンスガイド」 。docs.scipy.org 。 2020年11月22日 閲覧 。
^ 「Optim.jl 設定可能なオプション」 julianlsolvers 。
さらに読む
アヴリエル、モーデカイ(2003)、 非線形計画法:分析と方法 、ドーバー出版、 ISBN 978-0-486-43227-4
Bonnans, J. Frédéric; Gilbert, J. Charles; Lemaréchal, Claude ; Sagastizábal, Claudia A. (2006)、「ニュートン法」、 数値最適化: 理論的および実践的側面 (第 2 版)、ベルリン: Springer、pp. 51–66、 ISBN 3-540-35445-X
フレッチャー、ロジャー(1987)、 最適化の実践的方法 (第2版)、ニューヨーク: ジョン・ワイリー&サンズ 、 ISBN 978-0-471-91547-8
Luenberger, David G. ; Ye, Yinyu (2008)、 線形および非線形計画法 、International Series in Operations Research & Management Science、第 116 巻 (第 3 版)、ニューヨーク: Springer、pp. xiv+546、 ISBN 978-0-387-74502-2 、 MR 2423726
ケリー、CT(1999)、 反復法による最適化 、フィラデルフィア:産業応用数学協会、pp. 71-86、 ISBN 0-89871-433-8