はじめに
データを使って仮説の生成と検証を行なうための方法であるベイズ最適化を学ぶために,今村秀明・松井孝太 著「ベイズ最適化 ー適応的実験計画の基礎と実践ー」を読むことにした。
本記事は,「第4章 Optunaによるベイズ最適化の実装方法」における,多目的最適化に関する読書メモである。
- 本書の紹介ページ
4.6 Optunaの発展的な使い方
本節では,Optunaの発展的な使い方,すなわち高度な分析や状況に合わせた最適化,発展的な問題設定を扱う方法について説明している。
4.6.5 多目的最適化
多目的最適化は,最小化(または最大化)したい目的関数が複数存在する設定のことである。
多目的最適化問題の実装方法は,以下のoptuna_multi_objective.pyにて紹介されている。
github.com
多目的最適化の問題設定
本項で取り上げる目的設定は,以下のような問題設定である。
ランダムにたくさんの点[tex; (x, y)]を選んで,の値を計算し,横軸に
,縦軸に
の値を取ってプロットしたものが下の図となる。

多目的最適解において,すべての目的関数の値(今回の目的設定ではの値と
の値)の両方を改善する点が他に存在しないような解をパレート解とよぶ。
多目的最適化の実装
上記のサンプルコードにおいて,多目的最適化の実装部分は以下のようになる。
sampler = optuna.integration.BoTorchSampler() study = optuna.create_study( directions=["minimize", "minimize"], sampler=sampler, )
Optunaは多目的最適化を非常に重要視しているため,多目的最適化のサンプルコードは,上記のような非常にシンプルな形で書くことができる。
サンプルコードの実行結果は以下の通りである。なお手元の環境では,サンプルコードの実行(100トライアル)に15分ほどかかった。
100回のトライアルのうち,91回がパレート解であった。
- 計算結果
... (中略) Number of finished trials: 100 Pareto front: 91 (以下略) ...
- 描画結果

すべてパレート解からなる集合を,パレートフロントと呼ぶ。
実際の応用では,このようにして得られたパレート解の中から,更に条件を追加して最適化を選ぶことになる。