
前々回、バナナ関数(Rosenbrock関数)の最適化デモを「ほんと地味」などとディスってしまいました。だって数字しか出力されないのだもの。ディスった祟りかバナナ関数、再びの登場であります。今回は地味と言わさないためにも最適化プロセスを可視化してくれてます。なんだやれば出来るんじゃん。まあ、デモの順番の都合か?
※「手習ひデジタル信号処理」投稿順 Indexはこちら
※Windows11上の Scilab2024.0.0を使用させていただいております。(Scilabについては御本家 Scilab 様へ)
optim_plot.sce
今回「鑑賞」させていただくScilabのデモは、optim_plot.sceです。以下のデモ選択画面から起動できます。
既に前々回にて、バナナ関数(Rosenbrock関数)については勉強したことになってます。ホントか?また、Rosenbrock関数を対象とした最適化を行うのに使うoptim関数については前回も練習してます。
ただ今回のデモは「地味」に終わらせないように
-
- まずRosenbrock関数を等高線描画しておく(contour関数利用)
- その等高線上にoptim関数で関数を「評価」するたびに緑色の点をプロット
という2段構えなんであります。「ミソ」はoptim関数に渡した最適化対象のrosenbrockという御名前の関数内に、評価される度にプロットする仕組みを組み込んであることであります。なあんだ。そういう細工か。rosenbrock関数は最適化用なので、勾配ベクトルも計算するようになってます。こっちゃの方がより本質的だが。
なお、等高線描画用には「素直な」rosenbrockCという御名前の関数を使っているみたいっす。
最適化の結果
デモを実行すると以下のようなプロットが現れます。青点、赤点という注釈はお惚け老人が描き加えたもの。
関数評価の度に緑の点が打たれていくので隠されてしまってますが、青矢印の先には初期値を示す青点があり、赤印の先には最適解を示す赤点があります。実行すると瞬きしている間に終わるような速さで青から赤へ向かって緑の点が並んで最適化完了、ということになります。
まあ、前々回地味だったデモは、多いに振興?分かりやすいし、良かった。