【機械学習】Optuna1.3.0以上での探索空間定義の種類
Preferred Networks社が開発しているオープンソースのハイパーパラメータ自動最適化フレームワークOptunaについての記事となります。
Optunaとは
ハイパーパラメータの値に関する試行錯誤を自動化し、優れた性能を発揮するハイパーパラメータの値を自動的に発見します。オープンソースの深層学習フレームワークChainerをはじめ、様々な機械学習ソフトウェアと一緒に使用することが可能です。
との触れ込みの便利ツールです。
2018年12月にβ版がリリースされ、2020年1月には正式版が公開されています。
ネット上からも周りの人からも、使いやすく性能もいいとかなり評判の良いライブラリです。
探索空間の定義について
Optunaでは公式のチュートリアルによると以下のような形で探索空間の定義を行います。
def objective(trial):
# Categorical parameter
optimizer = trial.suggest_categorical('optimizer', ['MomentumSGD', 'Adam'])
# Int parameter
num_layers = trial.suggest_int('num_layers', 1, 3)
# Uniform parameter
dropout_rate = trial.suggest_uniform('dropout_rate', 0.0, 1.0)
# Loguniform parameter
learning_rate = trial.suggest_loguniform('learning_rate', 1e-5, 1e-2)
# Discrete-uniform parameter
drop_path_rate = trial.suggest_discrete_uniform('drop_path_rate', 0.0, 1.0, 0.1)
ただ、この説明は少し古く、実際は以下の3つを使えば大丈夫です。。
- いくつかの選択肢から選ぶ → trial.suggest_categorical(name, choices)
- 整数値で最適化 → trial.suggest_int(name, low, high, step=1, log=False)
- 小数値で最適化 → trial.suggest_float(name, low, high, step = None, log = False)
ドキュメント内のsuggest_floatの部分も見ると、
Suggest a value for the floating point parameter.
Note that this is a wrapper method for
suggest_uniform()
,suggest_loguniform()
andsuggest_discrete_uniform()
.New in version 1.3.0.
という記載があります。
3つあった関数のラッパー関数となっているので、もはや使う関数はこの3つだけでOKなのです。
Optunaを知らない人から見ても、この3種であればソースを見て何となく意味は分かるのではないかと思います。
1.3.0以上でないと対応していないので、出来るだけ最新にしてわかりやすいコードにしたいですね。