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).

実行時間測定の方法

  1. unix の time コマンドを用いる方法. 上記のプログラムをたとえばファイル bfgs.py に保存して unix shell (terminal, 端末) から この方法は shell から実行できるプログラムの実行時間測定一般に使える. たとえばC言語をコンパイルして作成した a.out の実行時間の測定も同様.
  2. 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 のマニュアル