Optuna: ハイパーパラメータ最適化フレームワーク
Optuna は機械学習向けに設計された自動ハイパーパラメータ最適化ソフトウェアフレームワークです。 命令型の define-by-run スタイルのユーザーAPIを備えており、 define-by-run APIにより、Optunaで記述されたコードは高いモジュール性を持ち、 ユーザーはハイパーパラメータの探索空間を動的に構築できます。
Note
本資料は、 Optuna公式ドキュメント を PLaMo翻訳 を活用して日本語に翻訳、一部手作業による修正を加えたものです。 翻訳対象のリビジョンは optuna/optuna@219726d65 です。 現時点では試作・検証段階であり、長期的な運用フローが確立していないため、今後のOptunaアップデートに継続的に対応することは保証できません。 あらかじめご注意ください。
主な特徴
Optunaには以下のような最新の機能があります:
-
要件が少なくシンプルなインストールで様々なタスクに対応
-
条件分岐やループを含むPythonの馴染み深い構文で探索空間を定義可能
-
ハイパーパラメータのサンプリングと見込みのない試行の効率的な剪定に最新のアルゴリズムを採用
-
コードの変更を最小限に抑えつつ数十~数百のワーカーにスケール可能
-
様々なプロット関数で最適化履歴を可視化
基本概念
以下の用語を以下のように定義します:
study: 目的関数に基づく最適化
trial: 目的関数の単一実行
以下のサンプルコードを参照してください。 study の目的は、
複数の trial (例:n_trials=100
)を通じて最適なハイパーパラメータ値
(例:classifier
と svm_c
)を見つけることです。Optunaは最適化
の自動化と高速化を目的としたフレームワークです。
import ...
# 最小化する目的関数を定義
def objective(trial):
# Trialオブジェクトのsuggestメソッドを呼び出してハイパーパラメータを生成
regressor_name = trial.suggest_categorical('classifier', ['SVR', 'RandomForest'])
if regressor_name == 'SVR':
svr_c = trial.suggest_float('svr_c', 1e-10, 1e10, log=True)
regressor_obj = sklearn.svm.SVR(C=svr_c)
else:
rf_max_depth = trial.suggest_int('rf_max_depth', 2, 32)
regressor_obj = sklearn.ensemble.RandomForestRegressor(max_depth=rf_max_depth)
X, y = sklearn.datasets.fetch_california_housing(return_X_y=True)
X_train, X_val, y_train, y_val = sklearn.model_selection.train_test_split(X, y, random_state=0)
regressor_obj.fit(X_train, y_train)
y_pred = regressor_obj.predict(X_val)
error = sklearn.metrics.mean_squared_error(y_val, y_pred)
return error # Trialオブジェクトに紐づく目的値
study = optuna.create_study() # 新しいstudyを作成
study.optimize(objective, n_trials=100) # 目的関数の最適化を実行
Webダッシュボード
Optuna Dashboard はOptunaのリアルタイムWebダッシュボードです。 最適化履歴やハイパーパラメータの重要度などをグラフや表で確認できます。 Optunaの可視化 機能を呼び出すために Pythonスクリプトを作成する必要はありません。機能要望やバグ報告を歓迎します!

optuna-dashboard
はpipでインストール可能です:
$ pip install optuna-dashboard
Tip
Optuna Dashboardの公式ドキュメントの Getting Started セクションをご覧ください。
コミュニケーション
GitHub Issues でバグ報告や機能要望
貢献
Optunaへの貢献を歓迎します!プルリクエストを送る際は、 貢献ガイド に従ってください。
ライセンス
MITライセンス(LICENSE 参照)
OptunaはSciPyとfdlibmプロジェクトのコードを使用しています( Third-party License 参照)。
参考文献
Takuya Akiba, Shotaro Sano, Toshihiko Yanase, Takeru Ohta, and Masanori Koyama. 2019. Optuna: A Next-generation Hyperparameter Optimization Framework. In KDD (arXiv).
目次:
- インストール
- チュートリアル
- API リファレンス
- よくある質問
- Optuna は X と組み合わせて使えますか?(X はお好みの機械学習ライブラリ)
- 独自の引数を持つ目的関数の定義方法
- リモート RDB サーバーなしで Optuna を使用できますか?
- スタディを保存して再開する方法
- Optuna のログメッセージを非表示にする方法
- 目的関数で学習した機械学習モデルを保存する方法
- 再現性のある最適化結果を得る方法
- トライアルで発生した例外はどのように処理されますか?
- トライアルが NaN を返した場合の処理方法は?
- 探索空間を動的に変更した場合の動作は?
- 2つのトライアルを同時に評価するために2つのGPUを使用するには?
- 目的関数のテスト方法は?
- スタディの最適化時にメモリ不足(OOM)を回避する方法は?
- 最適な値が更新された時だけログを出力する方法は?
- ディリクレ分布に従う割合変数を提案するには?
- 制約付きモデルの最適化方法は?
- 最適化を並列化する方法は?
- SQLite3 で並列最適化を実行する際に発生するエラーを解決するには?
- 予期せず終了したトライアルを監視し、自動的に失敗させることは可能ですか?
- パラメータとして順列を扱うにはどうすればよいですか?
- 重複したサンプルを無視するにはどうすればよいですか?
- スタディにアップロードされたすべてのアーティファクトを削除するにはどうすればよいですか?