12.4 ハイパーパラメータの探索方法
このように正則化パラメータをはじめハイパーパラメータの値は何が適切なのか学習前にわかることはまれなので, 交差検証などで推定された汎化誤差をもとに決める必要があります.
理論パートをここまで読んだ方ならば「汎化誤差を目的関数として最小化するアルゴリズムがあればハイパーパラメータも簡単に最適化できるのではないか」ということに気づくかもしれません. しかし実際には次のような問題があります.
- 汎化誤差の正確な推定の難しさ (CVにせよ, 情報量規準にせよ, 検証データが異なれば最適な値が変わってしまいます. さらに, 訓練データが異なっても学習結果が変わってしまうことにも注意してください)
- ハイパーパラメータと汎化誤差の関係の複雑さ
よって, 実用的な精度と計算効率で最適化できるアルゴリズムを開発するのは難しいというのが実情です. 少なくともニュートン法のように「2乗のオーダーで最適なハイパーパラメータを見つけられる」というようなアルゴリズムは存在しません. そのため, ここまでで紹介したアルゴリズムよりはいくらか非効率に感じる方法を取らざるを得ません.
最も単純なアイディアとして, ハイパーパラメータを総当たり的に見るグリッドサーチと呼ばれる方法があります. しかし, 「総当たり」であるため, 正則化パラメータのような連続量は予め設定した値の候補でしか探索できませんし, 値の候補をどう設定するかで結果が変わってしまうという問題があります. この点では, 値の候補を乱数で生成して探索する乱択サーチ/ランダムサーチ (randomized search) がより優れています. ここでいう「優れている」というのは何度も実験した場合の平均的な結果, 期待値であることに注意してください. つまり個々の事例で比較すると, 必ずしもグリッドサーチより良い結果が出るわけではありません. これは不確実な要素を扱わなければならない機械学習ではよくあることです.
しかし, ランダムサーチは文字通りランダムにパラメータの候補をいくつか選んで評価するだけです. すでに最適化アルゴリズムについてのセクションを読んだ方なら,
- ランダムサーチは最適な値に収束するのか
- ランダムサーチは最適な値を現実的な試行回数で見つけられるのか
といった疑問が生じるかもしれません. 結論から言うと, 最適な値に収束する保証はなく, 試行回数も非効率です. これはランダムサーチが毎回ランダムに選んでいるからです. これまでに紹介した反復的な最適化アルゴリズムのように, 過去の値を参考にして少しづつ修正をおこなうようなアルゴリズムならもっと効率的にできるかもしれない, と考えるかもしれません.
ランダムサーチのような方法を取らざるを得ないのは, 汎化誤差をうまく近似できる関数を定式化するのが難しいためです. そこで考案されたのがベイズ最適化 (BO) と呼ばれる一連の探索方法です. これは制約の少ない柔軟なモデルでハイパーパラメータと汎化誤差の関係を近似するというアイディアです. 柔軟なモデルは多くは次元が増えると計算量が膨大になります. そこで, 計算量の増加が比較的少ないガウス過程 (Gaussian Process; GP) 回帰でハイパーパラメータに当てはめる方法が考えられています54.
さらに, ハイパーパラメータは互いに完全に独立したものではなく, 階層的に選ぶものがあります. そのような状況を想定して効率よく探索するアルゴリズムが Tree-structured Parzen Estimator (TPE) (Bergstra et al. 2011) です. TPE をはじめ様々な最適化のオプションを柔軟に実装できるオープンソースライブラリとして Optuna が知られています. 他のオープンソースの機械学習フレームワークとの併用のしやすさを重視しているのが特徴で, TPE と剪定を組み合わせることでランダムサーチよりも誤差の小さいハイパーパラメータを発見した事例が挙げられています(Akiba et al. 2019).
近年ベイズ最適化の方法は様々なバリエーションが提案されていますが, ここで再びハイパーパラメータ探索にまつわる原理を挙げます.
- 汎化誤差は推定値でしか得られず, 実際の値と多少の誤差がある
- 一般に汎化誤差をハイパーパラメータの関数で表現しようとすると複雑になる
これらの理由から, 厳密な意味でハイパーパラメータを最適化する方法も, あらゆる場面で (ランダムサーチより) 効率よくハイパーパラメータを探索できる方法も存在しないということに注意してください55. 新しい手法は万能でありません. 適切な使用 (論文に実験時の条件や理論分析の結果が書いてあるはずです) によって真価を発揮するでしょう. 例えば, ガウス過程回帰は一見万能のように見えますが, こういったノンパラメトリックモデルは一般に, 探索していない範囲外の予測誤差のばらつきが大きくなりがちです.
あるいは, ベイズ最適化などのアルゴリズムに従って絞り込むのではなく, まずグリッドサーチやランダムサーチで広範囲を探索し, 全体の傾向を見てから「職人技」で当たりをつける, というアプローチもときには有効です56.
いずれにせよ, 調整すべきハイパーパラメータの種類とその候補が多いと, 探索の計算量はどんどん増加していきます57. 機械学習の各種アルゴリズムの実装には, ここで紹介したもの以外にもいろいろなハイパーパラメータを設定可能です. そのすべてに対して機械的に最適な値の探索をするのは大変です. 例えば SGD の学習率は収束の効率に影響するため, 適切な前処理をすれば 0.01-0.3程度の値であればうまくいくという「相場」があり, あとは十分な反復回数を指定すれば, 学習率は結果にあまり影響しなくなります (よって, 「反復回数の最適な数を探索する」ということもあまり意味がないことがわかります). あるいは XGBoost や LightGBM などのブースティング用のライブラリはさらに多くのハイパーパラメータが設定できますが, 公式ドキュメントにはどのハイパーパラメータが重要であるかのヒントが豊富に書かれています. さらに交差検証の乱用は「テストデータに対する過学習」をもたらします. 闇雲に目先のスコアを改善するよりも, データの背後にあるメカニズムを意識し, 学習アルゴリズムによる最適化や特徴量の前処理の工夫など, 使用条件と効果のはっきりした手法を優先して利用することをこころがけると良いでしょう. ハイパーパラメータの探索はそれだけでは出来ない少しのマージナルな部分の改善, という認識でいることが重要です.
参考文献一覧
ベイズ最適化を俯瞰した解説としては Brochu, Cora, and de Freitas (2010) が詳しいですが, 日本語で書かれたガウス過程回帰とベイズ最適化の簡潔な解説として 赤穂 (2018) によるものがわかりやすいです.↩︎
詳しくは, ハイパーパラメータの最適化について広く議論した Bergstra et al. (2011) および Bergstra and Bengio (2012) を参照してください↩︎
職人技という表現を嫌がる人もいるかもしれませんが, 例えば
optuna
にもいろいろなオプションがあります. それらのなかで適切なものを選ぶのは紛れもなくあなたの判断であり, これもまた「職人技」と言えます↩︎もちろん, 高性能なクラウド計算機を用意し, 計算リソースに物を言わせて, という解決策も可能ですが, 今回は時間も資源も限られたインターンであるという点に注意してください.↩︎