JA EN
体系深層学習の基礎
·★ 会員·論文·17分で読めます

ハイパーパラメータ探索 — 勘・グリッド・ベイズ最適化

学習率やバッチサイズは勾配が教えてくれないので、探すしかありません。なぜグリッドサーチが弱いのか、探索空間を対数で切る理由、ベイズ最適化の獲得関数が何を数えているのか、早期打ち切りが探索アルゴリズムより効く理由を、Optunaのコードと現場の落とし穴まで含めて前提知識ゼロから解説します。

対象textタスクtraining

Random Search for Hyper-Parameter Optimization


比喩: つまみが12個ある古いアンプ

深夜のスタジオに、つまみが12個並んだアンプがあるとします。説明書は失われていて、どれをどう回せばいい音になるのか誰も知りません。しかも1回音を確かめるのに半日かかる。全部のつまみを5段階ずつ試すと 5 の 12 乗、つまり2億通り以上。人生が足りません。

ニューラルネットの学習も、まったく同じ状況に置かれています。重みは勾配降下が自動で決めてくれます。しかしその勾配降下自身の設定——学習率、バッチサイズ、weight decay、層数、dropout率——は誰も教えてくれません。これが「ハイパーパラメータ」で、その良い組み合わせを探す作業がハイパーパラメータ探索です。

パラメータとハイパーパラメータの境目

見分け方は一行で済みます。損失を微分して更新できるものがパラメータ、できないものがハイパーパラメータです。

重みは損失を微分すれば「どちらに動かせば損失が下がるか」が分かるので、勾配降下に任せられます。一方、学習率で損失を微分することはできません。学習率を変えた影響を知るには、学習を最初からやり直すしかないからです。この「1回試すのに丸ごと1回学習が必要」という性質が、ハイパーパラメータ探索を難しくしている本体です。

ハイパーパラメータは大きく4つに分かれます。最適化系(学習率、バッチサイズ、optimizerの種類、weight decay、warmup長)、モデル系(層数、隠れ層の幅、ヘッド数、dropout率)、データ系(データ拡張の強度、サンプリング比、系列長)、損失系(label smoothing、蒸留の温度、補助損失の係数)です。

そして重要な事実がひとつあります。この中で結果を大きく動かすつまみは、ごく少数に偏っているということです。12個あっても、実際に効くのは2〜3個で、残りは範囲内のどこに置いてもほとんど差が出ない、という状況が普通に起きます。この偏り——専門的には「有効次元が低い」と言います——が、これから話す探索手法すべての土台になります。

まず「勘」から始めるのは、恥ではない

手で1つずつ回すマニュアル探索は、いまでも十分に強い手法です。理由は単純で、人間は自動探索が見ていない情報を読めるからです。自動探索が受け取るのは「最終的な検証スコア」という数字ひとつですが、人間は損失曲線の形を見て「これは学習率が高すぎて暴れている」「これは正則化が効きすぎて伸びない」と原因まで推定できます。

ただし条件が2つあります。記録を残すことと、一度に1つだけ動かすことです。3つ同時に変えて良くなっても、どれが効いたのか分かりません。

そして最初に回すべきつまみは、ほぼ例外なく学習率です。他のつまみが数パーセントの世界で戦っているのに対し、学習率だけは「学習が成立するかしないか」を決めてしまいます。

FIG 1学習率を少し上げただけで球が谷を飛び越え、発散に転じる。この「桁で挙動が変わる」性質こそが、学習率を最初に、しかも対数スケールで探すべき理由

図で確かめられる通り、学習率は0.01と0.02の違いより、0.01と0.1の違いのほうがずっと大きい。だから探索を始める前に、手で2〜3桁ふって「発散する上限」と「遅すぎて動かない下限」を見つけてください。その間の谷が、自動探索に渡すべき初期範囲になります。学習率を訓練中にどう動かすかという話は学習率スケジュールで扱っています。

グリッドサーチが弱い、本当の理由

グリッドサーチは全組み合わせを格子状に均等に試す方法です。d個のつまみをそれぞれk段階なら k の d 乗回。10個を5段階なら約1000万回で、これだけでも実用外です。

しかし本当の問題は組み合わせ爆発ではありません。解像度の無駄遣いです。

つまみが2つあり、片方は重要、もう片方はほとんど無関係だとします。予算は9試行。グリッド 3×3 で回すと、重要なほうのつまみは3種類の値しか試されません。無関係なつまみに、同じ3点ずつを律儀に割り当ててしまうからです。一方ランダムに9点取れば、重要なほうのつまみは9種類の値を試すことになります。同じ予算で解像度が3倍です。Bergstra と Bengio が2012年に指摘したのはこの点で、「効くつまみが少数に偏っている」という先ほどの性質と組み合わさると、ランダム探索がグリッドを上回る理由がそのまま出てきます。

ランダム探索の当たり確率も、簡単な式で見積もれます。

P(少なくとも1回当たる)=1(1p)nP(\text{少なくとも1回当たる}) = 1 - (1-p)^{n}
(1)

pp は「当たり」とみなす範囲の広さ(全設定のうち上位5%を当たりとするなら p=0.05p = 0.05)、nn は試行回数です。式は「1回も当たらない確率 (1p)n(1-p)^n を1から引いたもの」を言っているだけです。p=0.05p=0.05n=60n=60 なら約0.95。つまり上位5%に入る設定を掴むだけなら、60回ランダムに振れば95%の確率で成功する。逆に言えば、そこから先の「上位0.1%を詰める」領域に入って初めて、賢い探索手法の出番になります。

では格子はいつ使うのか。つまみが2〜3個に絞れていて、しかも取りうる値が離散的なとき——optimizerを3種類、バッチサイズを4通り、といった場合——は格子のままで構いません。全マスが埋まるので結果を表として報告でき、後から「あの組み合わせは試したのか」に即答できます。逆に、連続値のつまみが4個以上あるならランダムに切り替えたほうが、同じ計算資源でずっと遠くまで届きます。この判断は探索を始める前に一度下せばよく、迷ったらランダムが安全側です。

探索空間の設計が、結果の大半を決める

どの手法を使うかより、どこを探させるかのほうが効きます。

最重要は対数スケールです。学習率を 1e-5 から 1e-1 の範囲で一様に引くと、サンプルの90%は 1e-2 以上に落ち、1e-4 未満はほとんど引かれません。学習率は「2倍で意味が変わる」量なので、線形一様は各桁を不平等に扱うことになります。対数一様にすれば、1e-5〜1e-4、1e-4〜1e-3、……の各桁が等確率で引かれます。weight decay、正則化係数、温度も同じ扱いです。一方 dropout率やモメンタムのように「0〜1の割合」として意味を持つ量は、線形のままで構いません。

次に範囲の決め方です。探索が終わったら、最良試行の値が範囲の端に張り付いていないか必ず確認してください。端にあるなら、それは「範囲が狭すぎて外に本当の最適がある」という信号です。ここを見落とすと「ちゃんと探索したのに伸びない」という典型的な失敗になります。

そして条件付きの構造です。optimizer が Adam のときだけ beta2 が意味を持ち、SGD のときだけモメンタムが意味を持つ。こうした木構造を平らな空間として扱うと、意味のない次元を延々と探すことになります。Optuna の define-by-run API(`objective` の中で `if` を書ける形式)は、この構造を素直に書くための設計です。

この先にあるもの

§

ここから先は会員限定です

解説記事371本・教科書26章・学生モード48単元・論文精読6本が、月額¥490ですべて読み放題になります。新しい解説は毎日3本ずつ増えます。いつでも解約でき、解約後も期間の終わりまで読めます。

会員の方はログインすると続きが表示されます

参考文献

  1. Random Search for Hyper-Parameter Optimization. JMLR 2012論文ページ
  2. Practical Bayesian Optimization of Machine Learning Algorithms. arXiv:1206.2944論文ページ·PDF
  3. Hyperband: A Novel Bandit-Based Approach to Hyperparameter Optimization. arXiv:1603.06560論文ページ·PDF
  4. BOHB: Robust and Efficient Hyperparameter Optimization at Scale. arXiv:1807.01774論文ページ·PDF
  5. Optuna: A Next-generation Hyperparameter Optimization Framework. arXiv:1907.10902論文ページ·PDF

本記事は上記論文の本文にもとづいて執筆しています。数値・主張は原典を優先してください。

コメント

コメントにはログインが必要です