最適化が探すもの
最適化問題には、小さくしたい数である目的関数 f(w) と、自由に変えられる変数 w があります。目的関数は最小二乗の損失でも、ポートフォリオの分散 wTΣw でも、キャリブレーションでのモデル価格と市場価格の差でも構いません。大きくしたい場合は符号を反転させた同じ問題で、f を最大化することは −f を最小化することです。
∇f(w)=(∂w1∂f,…,∂wn∂f),Hij=∂wi∂wj∂2f(1) 勾配は f が最も速く増える向きを指すので、−∇f は最急降下の向きです。最小値では勾配がゼロになり、これが1次の条件です。ただし勾配がゼロであるだけでは足りず、最大値や鞍点でもゼロになります。これらを見分けるのがヘッセ行列 H で、H が正定値(固有値がすべて正)なら局所最小、負定値なら最大、正負両方の固有値があれば鞍点です。
2変数の例f(x,y)=(x−1)2+2(y+2)2 とします。
∇f=(2(x−1),4(y+2)) で、点
(3,0) での勾配は
(4,8) なので、その逆向きに動くと
f は下がります。勾配がゼロになるのは
(1,−2) だけで、そこでは
H=diag(2,4) の固有値が正なので最小値であり、
f=0 です。
- 停留点:∇f=0。最小値の必要条件ですが十分条件ではありません。
- 分類:H が正定値なら局所最小、不定なら鞍点です。
- 1変数の場合:f′(x)=0 かつ f′′(x)>0 なら最小値です。
勾配を数値で確かめる最適化のバグの多くは勾配の誤りです。小さな h(たとえば 10−5)での中心差分 (f(x+h)−f(x−h))/(2h) と自分の式を比べ、数桁まで一致することを確かめます。新しい目的関数ごとに一度これを行ってから、それを使うソルバーを信用してください。 ラボ:採点される内容
- 偏微分15点
- 勾配の長さ15点
- 3次関数の最小値15点
- 停留点の分類15点
- 用語を結び付ける15点
- 手計算で最小値を求める10点
- なぜ勾配と逆向きに動くのか15点