#15 Hyperparameter Tuning
2021.4.27 Machine Learning
Design Patterns 読書会
mukai
Problem
◻ ハイパーパラメータ探索
層の数やエポック数などモデルの重み以外のパラメータの調整
◻ 手動探索
時間と労力が掛かる。
最適な組み合わせに到達したのかどうかがわからない。
◻ グリッドサーチ
探索するハイパーパラメータの数が少なければOK
数が増えると、組み合わせ爆発
Solution
◻ ハイパーパラメータ探索もモデルの学習の外側にある最適
化ループと捉えて、最適化手法を適用する。
ハイパーパラメータを入力、Accuracy などの評価指標を出力とした
ブラックボックス関数として最適化の手法を適用
■ 最適化の手法:ベイズ最適化
Why It Works
◻ 非線形最適化
ハイパーパラメータは一般に微分不可能
■ 微分不可能なブラックボックス関数として非線形最適化の手法を適用
最適化の評価指標は任意のものを選択可能
■ 内側のモデル学習ループのLoss関数の評価指標と合わせる必要はない
■ モデルの学習はバイナリ交差関数、ハイパーパラメータ探索はAccuracyで評価など
■ ビジネスの目的に合わせてもよい。収益の期待値の最大化、不正によるロスの最小化など
Why It Works
◻ ベイズ最適化
未知の関数 f(x) の最大値を与える x を効率的に求める手法
■ 1970年代からある手法だが2012年に初めてハイパーパラメータ探索に適用
未知関数 f(x) をガウス過程で回帰(代理関数)
■ 代理関数の値が高くなるところや、まだ不確か(手薄)なところを狙って、ハイパーパ
ラメータの組み合わせをなるべく少ない回数で試していく。
Keras での例
◻ keras-tuner
ベイズ最適化を実装したハイパーパラメータ探索ライブラリ
最適化したい
ハイパーパラメータ
部分を置き換える
Google Cloud AI Platform での例
◻ ハイパーパラメータ調整サービスがある
ベイズ最適化を実装している
◻ GPUやTPUが使える・並列実行ができる
複数のハイパーパラメータの試行を並列に実行できる
■ keras-tunerは並列実行できないため巨大なモデルでは時間が掛かる。
設定ファイルの例
注意:並列実行の数はほどほどにする必要
・並列実行した分、試行の結果を次の試行の最適化に使えなくなるため
並列実行の数を
指定できる
Trade-Offs and Alternatives
◻ 遺伝的アルゴリズム
マイナーだが代替アルゴリズムとして考えられる
■ 手動探索やグリッドサーチよりは賢いやり方だが、
代理関数を使うわけではないので、時間が掛かる。
■ すぐ使える形で提供している機械学習フレームワークは、
現時点ではほとんどない。
まとめ
◻ Problem
ハイパーパラメータの効率的な探索
■ 手動探索やグリッドサーチでは時間が掛かり過ぎてしまう場合
◻ Solution
ベイズ最適化
■ ハイパーパラメータと評価指標の関係をガウス過程で回帰
■ なるべく少ない試行回数でハイパーパラメータの最適値を探索
◻ Tools
keras-tuner (Keras)
hypertune (Google Cloud AI Platform)

20210427 grass roots_ml_design_patterns_hyperparameter_tuning