Rosenbrock 関数
$ f(x) = \sum_{i=0}^{n-2} 100 (x_{i+1}-x_i^2)^2 + (1-x_i)^2 $
の最小化.
$n=2$ の時の Rosenbrock 関数
$f(x)=100 (x_1-x_0^2)^2+(1-x_0)^2$.
おおざっぱな形としては放物線 $x_1-x_0^2=0$ が谷を近似.
この谷で $x_0=1$ が最小.
BFGS 法, 2 変数
BFGS 法, n 変数
以下のプログラムの出典は
https://docs.scipy.org/doc/scipy/tutorial/optimize.html
(scipy optimize tutorial).
実行時間測定の方法
- unix の time コマンドを用いる方法. 上記のプログラムをたとえばファイル bfgs.py に保存して unix shell (terminal, 端末) から
この方法は shell から実行できるプログラムの実行時間測定一般に使える.
たとえばC言語をコンパイルして作成した a.out の実行時間の測定も同様.
- python の時間測定関数を用いる方法.
素の gradient descent
停留点を連立代数方程式を解いて求めるためのデータ作成用
rosen_ideal(5) で生成した多項式系の停留点を Numerical Homotopy method ですべて求める.
conjugate gradient method, 2変数
conjugate gradient method, n 変数
以下のプログラムの出典は
https://docs.scipy.org/doc/scipy/tutorial/optimize.html#full-hessian-example
(scipy optimize tutorial).
PyTorch のインストール
https://pytorch.org
を参照.
たとえば unix shell より
うまく動かない場合は gooble colaboratory を利用.
Windows/wsl では OK.
ホームの下の .local フォルダにインストールされる.
PyTorch による bfgs と gradient descent の比較
https://gist.github.com/tuelwer/0b52817e9b6251d940fd8e2921ec5e20
(こちらにプログラムあり)
PyTorch のBFGS のマニュアル