Blog

2024.10.15

Engineering

Research

Optuna Terminatorに新手法追加: Expected Minimum Model Regretに基づく最適化の早期終了

Hiroki Takizawa

はじめに

Optunaには最適化を早期終了するためのTerminatorモジュールが存在しています。v4.0アップデートではTerminatorモジュールの新規アルゴリズムが追加されました。この新しいTerminatorは、クロスバリデーション(CV)を行わないようなケースでも使える強力な選択肢です。この記事ではTerminator全般の紹介と新規Terminatorの使用例についての解説を行います。

Optuna Terminatorとは

Optunaに実装されているTerminatorは、最適化の試行履歴をもとにして改善の余地がどれくらいあるかを理論的に予測するものです。その予測結果をもとに最適化自体を(一定の理論と仮定に基づく)最適なタイミングで早期終了したり、各試行時点での“改善の余地”の予測値を可視化したりといった機能が用意されています。最適化自体の早期終了(early termination)を行えることからTerminatorという名前が付いています。また、最適化の早期終了を行うことで計算コストの節約だけでなく、過適合を軽減できるという報告もあります。

Optunaに初めてTerminatorが導入されたのはOptuna 3.2で、それは2022年に発表された論文をもとにしたものでした。Optuna 4.0においては2023年に発表された別の論文に基づく新たな実装を追加しました。

新しいTerminatorを使ってみる

Optuna 3.2で導入されたTerminator(CrossValidationErrorEvaluatorなど)の元論文の主眼は、クロスバリデーション(CV)の各foldのスコアのばらつきが持つ統計的性質を用いて、最適化の終了判定に用いるというものでした。これは、CVを行っている場合には優れた手法ですが、CVを行う問題設定に主要な使いどころが限定される欠点がありました。一方でOptuna 4.0で新しく導入されたTerminator(EMMREvaluatorなど)は、各試行で最終的に得られる評価値の系列をもとにして改善の余地を推定する手法です。こちらはCVと関係なく幅広い問題設定でTerminatorを適用できます。

新Terminatorの導出ではまず改善の余地を表す Expected Minimum Simple Regret (EMSR) を定義しています。EMSRはそのままでは計算が難しいのですが、計算可能な上界が論文中で導出されており、Optunaの実装でも上界を計算します。上界のほうを我々は Expected Minimum Model Regret (EMMR) と呼んでおり、クラス名の由来にもなっています。この実装にあたっては論文著者のひとりである九州工業大学の石橋英朗先生とコミュニケーションを取り、有益な助言やご教示などをいただき、Expected Minimum Model Regretという名前の提案もしていただきました。

新しいTerminatorによる早期終了を組み込んだプログラムの例として、以下のように書くことができます。

import optuna
from optuna.terminator import EMMREvaluator
from optuna.terminator import MedianErrorEvaluator
from optuna.terminator import Terminator
from optuna.terminator import TerminatorCallback


emmr_improvement_evaluator = EMMREvaluator()

# デフォルトではemmr_improvement_evaluatorの10 step目から30 step目の中央値の1/100
median_error_evaluator = MedianErrorEvaluator(emmr_improvement_evaluator)

# emmr_improvement_evaluatorの値がmedian_error_evaluatorの値を下回ったら早期終了
terminator = Terminator(
    improvement_evaluator=emmr_improvement_evaluator,
    error_evaluator=median_error_evaluator,
)


def objective(trial):
    xs = [trial.suggest_float(f"x{i}", -10.0, 10.0) for i in range(5)]
    return sum(x**2 for x in xs)


sampler = optuna.samplers.TPESampler(seed=0)
study = optuna.create_study(sampler=sampler, direction="minimize")
study.optimize(objective, n_trials=1000, callbacks=[TerminatorCallback(terminator)])

# 可視化
fig = optuna.visualization.plot_terminator_improvement(
    study,
    plot_error=True,
    improvement_evaluator=emmr_improvement_evaluator,
    error_evaluator=median_error_evaluator,
)
fig.write_image("example-figure.png")

上記のコードの可視化結果は以下のようになります。

図: 青はTerminatorのimprovement_evaluatorが出力した指標で、改善の余地の大きさを示す。赤はerror_evaluatorの出力で、最初の10番目~30番目のtrialの青の値の中央値の1/100となっている。青が赤を下回った直後に最適化が停止している。(図示する際にImprovementを再計算しておりその際に疑似乱数が異なる値をとるため、最適化時の実際の値とは若干異なっている)

おわりに

OptunaのTerminator機能は最適化の計算コストを節約したり、最適化の余地がどのくらいあるかを一定の理論的枠組みに基づき可視化したりできる強力なツールです。ぜひお試しください! これらは学術界における研究トピックとしても新しいものであるため、皆さまがお使いいただいた感想などは我々だけでなく研究分野全体にとっても貴重なフィードバックとなるでしょう。Optunaはこれからも新たな研究成果を迅速に導入しユーザの皆さまの助けになりたいと考えています。

謝辞

今回の新規Terminator追加にあたり、九州工業大学の石橋英朗先生に助言および著者実装の提供をいただきました。この場で感謝の意を表したいと思います。

参考文献

Makarova, A., Shen, H., Perrone, V., Klein, A., Faddoul, J.B., Krause, A., Seeger, M. & Archambeau, C.. (2022). Automatic Termination for Hyperparameter Optimization. Proceedings of the First International Conference on Automated Machine Learning, in Proceedings of Machine Learning Research 188:7/1-21 Available from https://proceedings.mlr.press/v188/makarova22a.html.

Ishibashi, H., Karasuyama, M., Takeuchi, I. & Hino, H.. (2023). A stopping criterion for Bayesian optimization by the gap of expected minimum simple regrets. Proceedings of The 26th International Conference on Artificial Intelligence and Statistics, in Proceedings of Machine Learning Research 206:6463-6497 Available from https://proceedings.mlr.press/v206/ishibashi23a.html.

  • Twitter
  • Facebook