Tsubatoの発信記録

主に機械学習やデータサイエンス関連で学んだことを書いています。

読書記録 Optunaによるブラックボックス最適化

記事の概要

  • 機械学習モデルのハイパーパラメータサーチによく用いられるOptunaに関する本を読みましたので、学んだことをまとめます。

本から学んだこと

ブラックボックス最適化

  • 最適化の対象である目的関数をブラックボックスと見なし、その評価値を最大にするようなパラメータの組み合わせを探す手法。 目的関数の数学的構造がわかっており、既存の最適化アルゴリズムが適用可能であればそっちの方が効率的。
  • SMBO(sequential model-based optimization) : ブラックボックス最適化の一種でグリッドサーチやランダムサーチと異なり、それまでの試行を元により有望な候補のパラメータを優先して探索する。
  • ベイズ最適化: SMBOの一種で有望なパラメータの推定に確率モデルを仮定する。

Optunaの概要

  • 目的関数の1回の評価をtrial、一連の最適化プロセスをstudyと呼ぶ。Studyオブジェクトは全てのtrial情報を持っているので最良の試行以外の結果も取り出せる。
  • Optunaは複数の指標を持つ多目的最適化問題にも対応している。パレートフロントによる可視化に対応。多目的最適化は「複数の目的のトレードオフを探索し、最後のパラメータの選択は人間が行う」という状況で活躍する。
  • 探索空間を絞るには条件付き最適化や枝刈り(pruning)がある。また、ドメイン知識がない場合はRandomSamplerで探索を行い、ハイパーパラメータの重要度の可視化によって手動で探索空間を絞っていくのも有効。
  • 探索点を手動で指定できる(study.enqueue_trial)。事前に有望なパラメータがわかっていたりする場合は有効。CmaEsSamplerはWarm Startに対応しており、以前の探索結果を再利用できる。

最適化の仕組み

  • Optunaのsamplerは独立サンプリングと同時サンプリングの組み合わせで柔軟なインターフェースを実現している。Trialオブジェクト作成時に過去の試行を元に同時サンプリングを行い、次に目的関数呼び出し時にサジェストAPIでパラメータを取得する。この時同時サンプリングされていないパラメータがあれば独立サンプリングが行われる。
    • TPESamplerはデフォルトで独立サンプリングのみを行うため、同時サンプリングをしたい場合は引数で指定する必要あり。
  • 探索点の選択は探索と活用のトレードオフで、各samplerはそれぞれ独自の方法でこれに取り組む。それぞれのsamplerの特徴はこちらのドキュメントにまとめられています。optuna.samplers — Optuna 3.1.0 documentation
    • 基本はデフォルトのTPESamplerで良いと思いますが、1000を超えるような多くのtrialを実行する場合は進化計算によるCmaEsSamplerの方が適している。

感想

  • タイトルからして小難しい内容を予想していましたが、アルゴリズムの詳細に踏み込む最終章以外はとても読みやすい本でした。今まで最低限の機能しか知りませんでしたが、他の機能を知ることで最適化にかかる時間を短縮できそうです。
    • 今回はスキップしましたがアルゴリズムの詳細もいずれ理解したい…この記事とか参考になりそう。qiita.com
  • 特にハイパーパラメータの重要度の可視化で探索空間を絞っていく方法と、データが増えた時に最適化をやり直すのではなく、以前の最適値を手動で与えてやるといったテクニックは実務でも使えそうです。
  • 参考: 本書のサンプルコードのgithub github.com