Hyperparameter Tuning
ハイパーパラメーター調整では、検証性能を最大化する学習設定を見つけます。グリッド検索、ランダム検索、ベイズ最適化、進化的探索を比較します。
ハイパーパラメーター調整とは、機械学習モデルが未使用データで最高の性能を発揮するトレーニング設定を探すことです。ハイパーパラメーターはトレーニング開始前に固定されますが、モデルの重みはトレーニング中にデータから学習されます。候補となる各設定は、モデルをトレーニングし、検証データで評価してスコアを付ける必要があります。そのため、調整はモデル構築において特に計算負荷の高い工程の1つであり、適切な探索戦略を選ぶことは、探索する値を選ぶことと同じくらい重要です。
一般的なハイパーパラメーター#
ディープラーニングを使ったビジョン分野では、頻繁に調整が必要となる設定はいくつかのグループに分けられます。
- 最適化: 学習率とそのスケジュール、モーメンタム、重み減衰、SGDやAdamオプティマイザーなどのオプティマイザーの選択です。通常、学習率が最も大きな影響を与えるため、対数スケールで探索します。
- トレーニング期間とバッチ処理: エポック数、ウォームアップ期間、バッチサイズです。
- データ拡張: 反転、スケーリング、色調変更、モザイクなど、各変換の適用確率と強度です。
- 損失の重み: 検出器におけるボックス損失や分類損失など、複合的な損失関数の各項のバランスを取る係数です。
探索手法#
実務者は、いくつかの戦略を使って可能な設定の空間を探索します。
- グリッドサーチ: 固定した値のリストから、すべての組み合わせをトレーニングします。単純で網羅的ですが、ハイパーパラメーターを追加するたびにコストが増大します。
- ランダムサーチ: 許容範囲から設定をランダムにサンプリングします。BergstraとBengioは、計算量を大幅に抑えながら、グリッドサーチと同等またはそれ以上のモデルを見つけられることを示しました。これは、特定の問題で大きく影響するハイパーパラメーターは一部に限られ、ランダムサンプリングなら各ハイパーパラメーターについてより多様な値を試せるためです。
- ベイズ最適化: ハイパーパラメーターとスコアの関係を表す代理モデルを学習し、改善が最も期待できる領域を次の試行として選びます。Optunaなどのライブラリでは、この手法がデフォルトで使用されます。
- 早期終了手法: Hyperbandや逐次ハーフィングでは、多数の設定を少ない計算予算で開始し、有望な設定にだけ追加のエポックを割り当てます。
- 進化的アルゴリズム: 各設定をゲノムとして扱い、選択と突然変異を通じて集団を改善します。
進化的探索#
進化的探索は、探索空間のモデルを必要とせず、各試行の適応度スコアだけを用いるため、多数のハイパーパラメーターが相互作用するトレーニングに適しています。各ラウンドでは、これまでに見つかった有望な設定の1つを選び、いくつかの値を突然変異させ、その結果でトレーニングします。スコアが良ければ、新しい設定を候補群に残します。
Ultralyticsチューナーは、YOLOのトレーニングでこのループを実行します。各反復では、適応度上位9件から親を選び、学習率、損失係数、データ拡張を含む最大26個のハイパーパラメーターのうち、およそ半数に突然変異を加えます。検出タスクでは、適応度をmAP50-95として評価します。公式YOLO26チェックポイントのCOCOステージのハイパーパラメーターは、この進化的探索で見つけられました。
from ultralytics import YOLO
# 事前学習済みYOLO26nモデルを読み込みます
model = YOLO("yolo26n.pt")
# 探索空間: 調整する各ハイパーパラメーターの範囲(最小値、最大値)
search_space = {"lr0": (1e-5, 1e-2), "degrees": (0.0, 45.0)}
# 30回の各反復では、新たに突然変異させた値で10エポックのトレーニングを行います
model.tune(data="coco8.yaml", epochs=10, iterations=30, space=search_space, plots=False, save=False, val=False)実行結果として、best_hyperparameters.yaml、反復ごとの適応度プロット、および最良の反復の重みがtuneディレクトリに書き込まれます。オプティマイザーが指定されていない場合、model.tune()はAdamWでトレーニングします。デフォルトのoptimizer="auto"では、調整対象のlr0が上書きされるためです。
ハイパーパラメーター調整と関連用語の比較#
- モデルのトレーニング: トレーニングでは、固定されたハイパーパラメーター設定のもとで、誤差逆伝播を通じて重みを学習します。調整は、トレーニングを何度も実行し、その結果を比較する外側のループです。
- ファインチューニング: 名前は似ていますが、ファインチューニングは事前学習済みモデルの重みを新しいデータで継続してトレーニングすることです。ファインチューニングにも、低い学習率や凍結するレイヤー数など、調整対象となる独自のハイパーパラメーターがあります。
- ニューラルアーキテクチャ探索(NAS): トレーニング設定ではなく、レイヤーの種類や幅など、ネットワークの構造を探索します。
- 自動機械学習(AutoML): モデル選択やデータ前処理などを含む、より広範なパイプラインを自動化します。ハイパーパラメーター調整は、その構成要素の1つです。
- 検証セットへの過学習: 同じ検証データ分割で何百回も調整試行のスコアを評価すると、偶然その分割に適した設定が選ばれる可能性があります。そのため、最終結果は、調整では一度も使用していない別のテストセットで評価する必要があります。










