ハイパーパラメータチューニング はいぱーぱらめーたちゅーにんぐ
ハイパーパラメータチューニング自動機械学習AutoMLベイズ最適化Optunaモデル最適化
ハイパーパラメータチューニングについて教えて
ハイパーパラメータチューニングとは
ハイパーパラメータチューニング(Hyperparameter Tuning) は、機械学習モデルの性能を最大化するためにハイパーパラメータの最適な組み合わせを探す作業です。「ハイパーパラメータ最適化(HPO: Hyperparameter Optimization)」とも呼ばれます。
チューニングが重要な理由は、同じモデル・同じデータでもハイパーパラメータ次第で精度が大きく変わるからです。例えば学習率が1桁違うだけで精度が5〜10%変わることも珍しくありません。ビジネス上での精度向上は直接的にシステムの価値向上につながるため、適切なチューニングが商用展開の成否を左右することもあります。
一方でチューニングには計算コスト(試行回数 × 学習時間) がかかるため、効率的な探索手法の選択が重要です。
主なチューニング手法
| 手法 | 仕組み | 向いている場面 |
|---|---|---|
| グリッドサーチ | 指定した候補値の全組み合わせを試す | パラメータ数が少ない場合 |
| ランダムサーチ | ランダムに組み合わせをサンプリング | グリッドより効率的。まず試すべき手法 |
| ベイズ最適化 | 過去の結果から次の有望な点を予測 | 試行回数を抑えたい場合 |
| ハイパーバンド / ASHA | 有望でない試行を早期終了 | 大規模な探索空間 |
| Population Based Training | 進化的手法で並列最適化 | 大規模モデルの学習 |
# Optunaを使ったチューニング例
import optuna
def objective(trial):
# ハイパーパラメータの探索範囲を定義
lr = trial.suggest_float("lr", 1e-5, 1e-2, log=True)
batch_size = trial.suggest_categorical("batch_size", [16, 32, 64])
n_layers = trial.suggest_int("n_layers", 2, 8)
model = build_model(n_layers)
val_accuracy = train_and_evaluate(model, lr, batch_size)
return val_accuracy # 最大化する指標を返す
study = optuna.create_study(direction="maximize")
study.optimize(objective, n_trials=100) # 100回試行
print("最良パラメータ:", study.best_params)
歴史と背景
- 〜2010年代初頭:手動でのグリッドサーチが主流。試行回数が少なくて済むパラメータ数が前提
- 2012年:Bergstraらがランダムサーチの方がグリッドサーチより効率的と証明
- 2015年以降:ベイズ最適化(GPやTPE)を使ったチューニングツールが普及
- 2019年:Preferred Networksが日本発のOptunaを公開。使いやすさと性能で世界的に普及
チューニングのベストプラクティス
| ポイント | 内容 |
|---|---|
| まず学習率を調整 | モデルの成否に最も影響する |
| ランダムサーチから始める | コストパフォーマンスが高い |
| 重要パラメータに絞る | 全部チューニングしなくてよい |
| バリデーションセットを使う | テストセットでチューニングすると過学習 |
| Cross-Validationを活用 | 少ないデータでも安定した評価 |