Pythonic な探索空間

ハイパーパラメータのサンプリングにおいて、Optuna は以下の機能を提供します:

オプション引数として steplog を指定することで、整数および浮動小数点数パラメータを離散化または対数変換できます。

import optuna


def objective(trial):
    # カテゴリカルパラメータ
    optimizer = trial.suggest_categorical("optimizer", ["MomentumSGD", "Adam"])

    # 整数パラメータ
    num_layers = trial.suggest_int("num_layers", 1, 3)

    # 整数パラメータ (対数変換)
    num_channels = trial.suggest_int("num_channels", 32, 512, log=True)

    # 整数パラメータ (離散化)
    num_units = trial.suggest_int("num_units", 10, 100, step=5)

    # 浮動小数点数パラメータ
    dropout_rate = trial.suggest_float("dropout_rate", 0.0, 1.0)

    # 浮動小数点数パラメータ (対数変換)
    learning_rate = trial.suggest_float("learning_rate", 1e-5, 1e-2, log=True)

    # 浮動小数点数パラメータ (離散化)
    drop_path_rate = trial.suggest_float("drop_path_rate", 0.0, 1.0, step=0.1)

探索空間の定義

Optuna では、条件分岐やループなどの Python の構文を用いて探索空間を定義できます。

また、パラメータの値に応じて分岐やループを使用できます。

より多様な使い方については、examples を参照してください。

  • 分岐:

import sklearn.ensemble
import sklearn.svm


def objective(trial):
    classifier_name = trial.suggest_categorical("classifier", ["SVC", "RandomForest"])
    if classifier_name == "SVC":
        svc_c = trial.suggest_float("svc_c", 1e-10, 1e10, log=True)
        classifier_obj = sklearn.svm.SVC(C=svc_c)
    else:
        rf_max_depth = trial.suggest_int("rf_max_depth", 2, 32, log=True)
        classifier_obj = sklearn.ensemble.RandomForestClassifier(max_depth=rf_max_depth)
  • ループ:

import torch
import torch.nn as nn


def create_model(trial, in_size):
    n_layers = trial.suggest_int("n_layers", 1, 3)

    layers = []
    for i in range(n_layers):
        n_units = trial.suggest_int("n_units_l{}".format(i), 4, 128, log=True)
        layers.append(nn.Linear(in_size, n_units))
        layers.append(nn.ReLU())
        in_size = n_units
    layers.append(nn.Linear(in_size, 10))

    return nn.Sequential(*layers)

パラメータ数についての注意点

最適化の難易度はパラメータ数に対しておよそ指数的に増加します。つまり、パラメータ数を増やすと必要な試行数が指数的に増加するため、重要でないパラメータは追加しないことが推奨されます。

Total running time of the script: (0 minutes 0.002 seconds)

Gallery generated by Sphinx-Gallery