Preferred Networks

オープンソースのブラックボックス最適化ライブラリOptuna v5.0をリリース

Yoshihiko Ozaki

Yoshihiko Ozaki

はじめに

Optunaは2018年の公開以来、多くの機能開発を経て多くのユーザに使われるソフトウェアへと成長してきました。GitHub star数は14,000を超え、月間ダウンロード数1,600万以上、利用プログラム数32,000以上、論文引用数16,000以上など、8年間にわたり数多くのユーザから支持をいただき、ブラックボックス最適化OSSとして最もよく使われるライブラリの1つとなっています。

また、当初は機械学習のハイパーパラメータ最適化フレームワークとして公開されましたが、近年ではより汎用的なブラックボックス最適化フレームワークとして、材料科学構造設計などをはじめとする機械学習の枠を超えた多様な領域においても活用が広まっています。

開発チームは、Optunaを使ってより多くの世の中の問題を解決できるよう、高性能な次期バージョンの開発に尽力してきました。そして本日、我々はOptunaの新たなメジャーバージョンであるOptuna v5およびRust実装の高速なOptuna互換APIを備えたブラックボックス最適化フレームワークであるRustunaをリリースします。

  • Optuna v5: これまでのOptunaの直接の後継バージョンです。Optuna v1.5以来となるデフォルトサンプラの変更、制約最適化のための新しいAPIの導入、デフォルト変数重要度計算アルゴリズムの変更、ガウス過程ベースの最適化アルゴリズムの強化といった、メジャーアップデートに相応しい重要な変更が多数含まれたリリースです。
  • Rustuna: Optunaの設計は、モデル訓練が実行時間を支配する機械学習モデルのハイパーパラメータ最適化を前提としていますが、機械学習の枠を超えた多様なユースケースでは状況が異なり、サンプリングやストレージがボトルネックになり得ます。RustunaはOptunaのパフォーマンス上の課題を解決するための、Rust言語で実装された高速かつ省メモリな互換フレームワークです。

本記事では、Optuna v5の主要なアップデート項目を個別に紹介します。Rustunaについての詳細は、別途Rustunaリリースブログにて紹介します。

Optuna v5の主な変更点

Optunaデフォルト最適化アルゴリズムの大規模アップデート

Optunaのデフォルトサンプラは、単目的ではTree-Structured Parzen Estimator (TPE)、多目的ではNon-dominated Sorting Genetic Algorithm II (NSGA-II)であり、その内部設定も長らく変更されずに維持されてきました。Optuna v5では、ここ数年の研究とベンチマーク結果に基づきデフォルトの最適化アルゴリズムを改善しました(図1)。

  1. 多目的最適化のデフォルトサンプラをTPESamplerに変更:多目的TPEはNSGA-IIを上回る最適化性能が論文[1]で報告されていた一方、導入当初は実行速度がボトルネックとなりデフォルトには採用できていませんでした。長年の高速化によってこの課題が解消されたため、v5では単目的・多目的のいずれもTPESamplerがデフォルトになります。
  2. Multivariate TPEをデフォルトで有効化:Multivariate TPEは、各変数を独立に扱う従来の方式に代えて、変数の同時分布をモデル化することで変数間の相互作用を捉えます。文献[2]ではOptunaのバンド幅選択と組み合わせた際の優位性が報告されており、我々の追試でも同様の傾向を確認できたため、本機能をデフォルトで有効化しました。なお、多目的最適化ではベンチマークにおいて性能向上が確認できなかったため、従来どおり独立TPEを使用します。
  3. Constant Liarをデフォルトで有効化:TPEでは工夫なしに並列最適化を行うと、各ワーカーが同じ完了済みTrialを参照するため、ほとんど同じパラメータを提案してしまう問題が起こります。Constant Liar有効下では評価中のTrialに近い候補点の提案を抑制でき、並列最適化での性能向上が見込まれます。

デフォルトサンプラの変更にあたって実施した追試とベンチマークの詳細については、追って個別ブログで紹介いたします。

図1: Optuna v4.9とv5.0のデフォルトサンプラの性能比較。(左)BBOB(単目的)でのベンチマーク結果。(右)WFG(多目的)でのベンチマーク結果。

制約最適化のための新しいAPIの導入

Optunaはv2.4から制約付き最適化をサポートしてきましたが、これは一部のサンプラが持つ機能という位置づけでした。Optuna v5では、制約付き最適化をサンプラの機能からOptuna本体のコア機能に格上げし、より自然なAPIで利用可能にしました。今後は、目的関数の中でtrial.set_constraint()を呼ぶだけで制約を設定でき、trial.constraintsで制約値を取得できます。

import optuna
def objective(trial):
   trial.set_constraint(“c0”, c0)
   trial.set_constraint(“c1”, c1)
   …
sampler = optuna.samplers.TPESampler()
study = optuna.create_study(sampler=sampler)
study.optimize(objective)
print(study.best_trial.constraints)

PED-ANOVA による変数重要度計算のデフォルト化

変数重要度は、観測された目的関数の値に対して各変数が与える影響の大きさを定量化したものです。変数重要度は最適化処理の結果を解釈し、設計上の重要な選択方針を特定し、関連性のない変数や冗長な変数を検出し、後続の探索プロセスや手動調整を導く上でとても有用です。

これまでOptunaではデフォルトの変数重要度計算アルゴリズムとしてf-ANOVA [3]を使用していましたが、Optuna v5からはPED-ANOVA [4]をデフォルトとして使用します。これによって、f-ANOVAと比較して圧倒的に高速に変数重要度計算が可能、Optuna標準で必要な依存関係だけで使用可能、さらに今回新たに開発した条件付き探索空間のサポートや多目的最適化のサポートが可能、など様々なメリットがあります。特に、今回開発した条件付き探索空間のサポートは機械学習分野のトップカンファレンスの1つであるKDD 2026に採択されました。詳細については以下の論文[5]をご覧ください:

OptunaではPED-ANOVAを利用した変数重要度は以下のように利用できます:

import optuna
def objective(trial: optuna.Trial) -> float:
   model = trial.suggest_categorical("model", ["nn", "tree"])
   if model == "nn":
       n_layers = trial.suggest_int("n_layers", 1, 5)
       return train_nn(n_layers)
   else:
       min_split_gain = trial.suggest_float("min_split_gain", 0.0, 1.0)
       return train_tree(min_split_gain)
study = optuna.create_study(direction='minimize')
study.optimize(objective, n_trials=100)
importance = optuna.importance.get_param_importances(study)
print(importance)
fig = optuna.visualization.plot_param_importances(study)
fig.show()

さらなる詳細については、追って個別ブログで紹介いたします。是非、新しくなったOptuna v5の変数重要度計算をご利用ください。

GPSampler

GPSamplerは、ガウス過程に基づくベイズ最適化を行うサンプラです。特に連続変数を含む問題で高い最適化性能を発揮し、1回の評価に長い時間や大きなコストを要する最適化問題に適しています。

Optuna v4.7までのGPSamplerでは、評価が完了した試行のみを用いてガウス過程回帰を行っていました。そのため、評価中の試行は回帰モデルに反映されず、バッチ最適化において近い候補点が何度も提案されてしまうという問題がありました。

Optuna v4.8では、この問題を改善するためにConstant Liarが導入されました。Constant Liarでは、評価中の点に仮の目的関数値を割り当て、それらを観測済みの点として扱うことで、後続の候補点が評価中の点と重複することを抑制します。一方で、評価中の点に割り当てる値はヒューリスティックに決定されるという課題がありました。

そこで、Optuna v5では、モンテカルロ法に基づいて評価中の点を考慮する獲得関数を導入しました。この手法では、評価中の点における目的関数値をガウス過程の事後分布から複数回サンプリングします。そして、それぞれのサンプル群での改善量を計算し、最終的にそれらの平均によって獲得関数の値を求めます。これにより、評価中の点に単一のヒューリスティックな値を割り当てることなく、予測の不確実性を考慮した候補点を提案できるようになりました。以下に、5並列での最適化を想定し、候補点を順番に提案した場合の最適化性能を示します(図2)。従来のConstant Liarと比較して、より高い最適化性能を達成していることが確認できます。

図2: Optuna v4.9とv5.0のGPSamplerの性能比較(5並列)。

Rustによる高速なOptuna実装「Rustuna」を同時公開

Optunaはハイパーパラメータ最適化に限らず多種多様な用途に利用されるようになりました。それに伴い新たに見えてきた課題もあります。例えば、結晶構造探索のようなユースケースでは、評価回数が数十万規模となるケースも珍しくありません。このような大規模な最適化においては、Optunaの実行速度や消費メモリが問題となり効率的に探索を進めるのが難しくなります。

近年 RuffPolarsPydantic V2をはじめとする様々なソフトウェアが、Rustによる大幅な高速化を実現していることを踏まえ、Rustによる高速なOptuna実装である「Rustuna」を開発・公開しました。Rustunaの主な特徴は次の通りです。

  1. 高速なSampler実装:Rustunaは単目的TPEや多目的TPE、NSGA-II、CMA-ES、Random Searchをサポートしています。利用するSamplerや評価回数にもよりますが、目的関数の評価時間が短い場合には全体で数倍~数百倍高速に動作します。
  2. 省メモリなStorage実装:評価回数が数十万を超えるような大規模な探索を実行する場合、消費メモリが無視できないほど膨らむケースが存在します。Rustunaでは探索に不要な評価履歴をストレージから破棄する機能を備えることで、評価回数の増加に伴い消費メモリや実行時間が線形に悪化していく問題を回避できます。
  3. Pythonの実行時依存がゼロ:OptunaがNumPyやSQLAlchemyなどの依存関係を持つのに対し、Rustunaのコア機能は追加のPythonパッケージに依存しません。近年急増しているサプライチェーン攻撃のリスク緩和にも役立ちます。

Rustunaに関する詳細は、下記のリリースブログや公式ドキュメントをご確認ください。

おわりに

Optuna v5とRustunaにより、機械学習のハイパーパラメータ最適化から材料科学や構造設計など多様な領域まで、より高速かつ高性能にブラックボックス最適化に取り組んでいただけるようになりました。特にOptuna v5ではv1.5以来となるデフォルトサンプラの変更、制約最適化APIの整備、変数重要度計算の高速化など、多くのユーザにとって体感できる改善が詰まっています。また、大規模な評価回数を要するユースケースには、ぜひRustunaもあわせてお試しください。

開発チームは今後も、Optunaファミリーがより多くの現実世界の課題解決に貢献できるよう、機能拡充とパフォーマンス改善に取り組んでまいります。ぜひ最新版をお試しいただき、GitHubのIssueやDiscussionsを通じてフィードバックをお寄せください。

参考文献

  1. Ozaki, Y., Tanigaki, Y., Watanabe, S., Nomura, M., & Onishi, M. (2022). Multiobjective tree-structured parzen estimator. Journal of Artificial Intelligence Research, 73, 1209-1250.
  2. Watanabe, S. (2023). Tree-Structured Parzen Estimator: Understanding Its Algorithm Components and Their Roles for Better Empirical Performance. arXiv preprint arXiv:2304.11127.
  3. Hutter, F., Hoos, H., & Leyton-Brown, K. (2014, January). An efficient approach for assessing hyperparameter importance. In International Conference on Machine Learning (pp. 754-762). PMLR.
  4. Watanabe, S., Bansal, A., & Hutter, F. (2023). PED-ANOVA: Efficiently quantifying hyperparameter importance in arbitrary subspaces. In Proceedings of the Thirty-Second International Joint Conference on Artificial Intelligence (IJCAI '23) (Article 488, pp. 4389–4396).
  5. Baba, K., Ozaki, Y., & Watanabe, S. (2026, August). Conditional PED-ANOVA: Hyperparameter Importance in Hierarchical & Dynamic Search Spaces. In Proceedings of the 32nd ACM SIGKDD Conference on Knowledge Discovery and Data Mining V. 2 (pp. 57-68).

PFNは新しい仲間を
募集しています

未掲載事例、プロダクト・ソリューション、研究開発についてお気軽にお問い合わせください