ベイズ最適化を用いた
ハイパーパラメータ探索
機械学習秘伝のタレを自動化
今回紹介する内容
● Algorithms for Hyper-Parameter Optimization
○ 著者: James Bergstra, R. Bardenet, Yoshua Bengio, Balazs Kegl
○ 投稿: Neural Information and Processing Systems, 2011
○ 引用: 2571件 (2021/05/28 時点)
● 論文の内容
○ アルゴリズムを用いたハイパーパラメータの探索
○ MLPとDBNを用いてrandom searchとベイズ最適化手法の性能比較
○ 少ない計算量でgird searchやrandom searchと同等またはそれ以上の結果を出す
ハイパーパラメータとは
● モデルのパラメータのうち、人が決めるものモデルの設定のようなもの
● モデルの性能に関わる
● 探索が大変
代表的な探索手法
● 代表的な手法
○ Grid Search (例: sklearn.model_selection.RandomizedSearchCV)
■ 候補点を全て探索
○ Random Search (例: sklearn.model_selection.RandomizedSearchCV)
■ 指定した探索回数でランダムに選択
● データ数が多くない場合は許容できる時間内で十分な結果を出す
● 計算時間は探索パラメータ数の指数オーダーであり、データ数が多いと探索
は困難に
ベイズ最適化を用いた探索
● 2つの手法
○ Gaussian Process Approach (GP)
○ Tree-Structured Parzen Estimator Approach (TPE)
● 探索方法は、SMBO(Sequential Model-Based Optimization) とも
呼ばれる
○ SMBO: 反復的に関数評価と代理モデルの更新をしていく
● 今回は、各手法の細かい内容までは触れない。
ベイズ最適化を用いた探索
● H: 観測点とその評価値の集合
● T: イテレーション数
● x: パラメータベクトル
● M: サロゲート(パラメータの分布を推定)
● S: 獲得関数(Mの元であるxを使用した時のloss
の期待値計算)
● f(x): モデルにパラメータx 使用した際のloss
[アルゴリズム]
1. 各パラメータに対する評価値を入れる集合H を用
意
2. T回イテレーション↓
3. あるパラメータベクトルxと代理関数Mを用いて
loss を最も小さくするパラメータを選択
4. そのパラメータを評価しサンプル(x, f(x))を得る
5. Hを更新
6. 代理関数Mの更新
ベイズ最適化を用いた探索
● ハイパーパラメータに対してモデルのパフォーマンスを表す関数 (目的関数)
● 目的関数を解析的に導き出すことは難しい
● 目的関数の確率モデル (サロゲート) を構築し最適化する (ここがメイン)
● ハイパーパラメーターと真の関数のスコア (図の赤い点) を使ってトレーニン
グされたモデルを作るということ
確率モデル (サロゲート) Gaussian Processのイメージ
真の目的関数は分からない
実験結果
● アルゴリズムはMLPとDBNを使用
● GP, TPE どちらもイテレーションを増やすとlossが下がっていく
● 最終的にはgrid search, random searchよりも良いパラメータを見つ
けている
● 詳しくは論文を参照 (https://hal.inria.fr/hal-00642998/)
実際に使ってみたい人は
● ライブラリなどを使うと数十行で簡単に最適化ができる
● 実行環境によってどれを使うか考えると良い
● 環境
○ 自前のマシンでやるとき便利なライブラリを使う
■ Hyperopt: https://github.com/hyperopt/hyperopt
■ Optuna: https://github.com/optuna/optuna
■ scikit-optimize: https://github.com/scikit-optimize/scikit-optimize
○ Cloud上のツール
■ Amazon Sage Makerなど
まとめ
● 機械学習の精度向上を目指すとき、ハイパーパラメータのチューニングは必
須
● ベイズ最適化ではサロゲートを用いてハイパーパラメータとパフォーマンス
の関係を確率分布で表し最適化を行う
● DBNのハイパーパラメータ探索において、GPとTPEはともにrandom search
よりも良い性能を示した
● Hyperoptなどを利用することで簡単にベイズ最適化を組み込むことができる
チャンネル紹介
● チャンネル名: 【経営xデータサイエンスx開発】西岡 賢一郎のチャンネル
● URL: https://www.youtube.com/channel/UCpiskjqLv1AJg64jFCQIyBg
● チャンネルの内容
○ 経営・データサイエンス・開発に関する情報を発信しています。
○ 例: アジャイル開発、データパイプライン構築、AIで使われるアルゴリズム4種類など
● noteでも情報発信しています → https://note.com/kenichiro
ベイズ最適化を用いた探索
● Gaussian Process Approach (GP)
○ 代理関数にガウス過程回帰
○ 獲得関数に以下を用いる(EI: Expected Improvement)
■ ある閾値y*よりyがどれほど改善するかをみる → 直感的
■ p_M: xを観測した後のyの事後分布
ベイズ最適化を用いた探索
● Tree-Structured Parzen Estimator Approach (TPE)
○ optunaで使われているアルゴリズム
○ GPと異なり、p(x|y), p(y) をモデル化する(ノンパラメトリック)
■ p(y|x) = p(x|y)p(y)/p(x)
○ 獲得関数はGPと同じEIを用いる
性能の比較
● MLPを用いた実験
○ データセット: Boston Housing dataset (506レコード, 13の特徴) → 回帰問題
○ ハイパーパラメータ10個
■ 学習率、正則化の種類、中間層の数、イテレーション数
● 5イテレーションごとに最も低くな
たloss (1σのエラーバー含む)
● 赤: GP
● 青: Random search
● 探索空間に比べデータ数は少ないが、
GPの方が良いパラメータのくみを
見つけている
性能の比較
● DBNを用いた実験
○ データセット: convex, MRBI(MNIST rotated backgroud images) → 分類問題
○ ハイパーパラメータ: 32個
性能の比較
● DBNを用いた実験
● 各ドット: SMBOアルゴリズムによってサンプリングさ
れたパラメータの評価値
● 太線(赤or青): イテレーションごとのベストなバリデー
ションloss
● 実線: grid search & manual search(先行研究)
● 点線: random search(イテレーションごとのlossの
99.5%点: それぞれ457, 361回のイテレーション)
● GP, TPE どちらもイテレーション
を増やすとlossが下がっている
● 最終的にはgrid search, random
searchよりも良いパラメータを見
つけている
● どちらも計算時間は24時間以内
(5つのGPU)

ベイズ最適化によるハイパラーパラメータ探索

Editor's Notes

  • #2 今回はベイズ最適化を用いたハイパーパラメータ探索というテーマでお話しします。 機械学習ではハイパーパラメーターと呼ばれる、機械学習のアルゴリズムの挙動を設定するパラメータがあります。 ハイパーパラメータは職人の技のように経験則で決めていることも少なくなく、属人化しがちなものです。 この属人化をを防ぐための方法として、探索的なアプローチでハイパーパラメータを決める方法があります。 ハイパーパラメーターの探索アプローチでは、網羅的に探索する方法やランダムで探索する方法などもよく使われています。 この動画では、そのような単純な探索の仕方ではなく、発展的な探索方法としてベイズ最適化を用いたハイパーパラーメーターの探索についてお話します。 このチャンネルでは、データサイエンスや開発や経営の話をしていきます。 興味ある方はチャンネル登録をよろしくおねがいします。
  • #3 今回は、2011年に発表されたAlgorithms for hyper parameter optimizationという論文を紹介します。 この論文では、アルゴリズムを用いたハイパーパラメータの探索方法としてベイズ最適化を提案しています。 多重パーセプトロンやディープビリーフネットワークを用いて、ベイズ最適化がrandom searchよりも優位という実験結果が出ています。 ベイズ最適化では、より少ない計算量で、grid searchやrandom searchと同等もしくは、それ以上の結果を出せるという内容ということがこの論文の概要になっています。
  • #4 そもそもハイパーパラメータはなんなのかというと、機械学習に関するいろいろなパラメータのうち、ハイパーパラメータは人間が決めるモデルの設定のようなものを指しています。 ハイパーパラメータの設定を変えることでモデルの精度が変わってくるため、ハイパーパラーメーターの調整が精度向上では重要です。 ハイパーパラメータの探索は試行錯誤が必要で、一般的に探索は工数がかかると言われています。 高精度を目指すとなると、細かなチューニングが必要となります。 そのため、職人技と呼ばれたりすることもあるんですね。
  • #5 ハイパーパラーメータの代表的な探索手法としては、Grid SearchとRandom Searchがあります。 Grid Searchは候補となるハイパーパラメータの組み合わせをすべて探索をします。 一方Random Searchでは、ランダムでハイパーパラメータを探索します。 Grid SearchもRandom Searchもデータ数が多くなければ、許容できる時間内で十分な結果を出すことができます。 しかし、計算時間が探索パラメータ数の指数オーダーとなるため、データ数が多いと探索が困難になります。
  • #6 そこで、よりよい探索の手法として提案されているのが、ベイズ最適化を用いたハイパーパラメータの探索となります。 この論文ではベイズ最適化を用いたハイパーパラメータの最適化としてガウシアンプロセスを用いたものと、木構造パルツェン推定によるものの2種類が提案されています。 これらはSMBOとも呼ばれたりするものです。 この動画では、できるだけ簡単に手法を紹介するために、各手法の細かい部分までは触れません。 ざっくりとどんなことをやろうとしているものかだけ理解していただきたいと思います。
  • #7 では、ベイズ最適化はどのようなものかということ、ここにある擬似コードのような動作をします。 ハイパーパラメータとモデルのパフォーマンスの関係を表すサローゲートを逐次的探索をしながら更新していきます。 2 ~ 6行目のイテレーションが探索しながら、サロゲートを更新していく部分ですね。 このままだと少しわかりにくいので理解していただきたいポイントをピックアップして紹介します。
  • #8 一般にハイパーパラメーターとモデルのパフォーマンスの関係を表す目的関数ががあったとき、この関数を解析的に導き出すことは難しいです。 計算できるのは、与えたハイパーパラメータと、その時のモデルのパフォーマンスになります。 つまり、図にあるような非連続な点が出てくるような形となります。 これだけだと、どのハイパーパラメータを使えば最高のパフォーマンスになるかはわかりません。 そこで、出てくるのが真の目的関数と変わるものであるサロゲートとなります。 サロゲートを確率モデルとして用意して、その中で最適化をしていくことでより早い探索ができるようになるということですね。 例えば、ガウシアンプロセスによるアプローチでは、サロゲートとしてガウス過程回帰を使います。
  • #9 簡単に、この論文の実験結果を紹介します。 この論文では、アルゴリズムとして多重パーセプトロンとDBNを用いています。 そして、ベイズ最適化としてガウシアンプロセスとTPEの2つを使っており、この論文の実験では、ベイズ最適化のイテレーションを増やすことでlossが下がっていく結果が出ています。 また、最終的に、grid searchやrandom searchよりもよりパフォーマンスの良いパラメータの発見ができたとのことです。 非常に面白いないようなので、詳しくは論文の結果を参照してみてください。
  • #10 では、ベイズ最適化を使い人はどうすれ良いかについて少しお話します。 最近は便利なライブラリやサービスがあるので、数十行程後のコードを書くことでベイズ最適化を実装できるようになっています。 有名なライブラリとしては、HyperoptやOputunaやSkit-optimizeなどがあり、Amazon Sage Makerなどのクラウドサービスでも試すことができます。 機械学習を実務で使う人にとっては、ハイパーパラメータの最適化は避けられないものです。 理論を学ぶだけでなく、ぜひ実装までやってみてください。
  • #11 最後にまとめをします。 機械学習の精度向上を目指す時、ハイパーパラメータのチューニングは必須となります。 今回は逐次探索によるハイパーパラメータの探索方法であるベイズ最適化を紹介しました。 この論文では、ガウシアンプロセスやTPEを用いたベイズ最適化が提案されており、よく使われているrandom searchなどによるhyperparameter探索より良い性能を示すという実験結果が出ています。 実際にベイズ最適化を使いたい場合は、Hyperoptなどを始めとしたライブラリを利用することで、簡単に機械学習の実装に組みこむことができます。 ハイパーパラメータの探索なども含めて、モデルの一部として考えるほうが適切かもしれませんね。 以上、ベイズ最適化についてざっくりと紹介いたしました。
  • #12 最後にチャンネルの紹介をさせてください。 このチャンネルでは、経営やデータサイエンスや開発の話をしていきます。 聞きたい話のリクエストも募集中です。 もし、この動画が役に立ったら高評価とチャンネル登録をお願いいたします。
  • #13 損失の期待値を最小にすること =損失の改善度を最大にすること ここでのyはloss (=f(x)) EIは、xとその改善度合いを示す つまり、EIをが最大となる点(パラメータ)が次にモデルで評価する候補点となる
  • #14 lossが基準y*よりも小さかったとき、大きかった時で推定する密度関数を変える → Hから計算可能(ノンパラメトリック) ある条件で密度関数を変えているところがtree-structedぽい γ で密度関数を変えるyの境を決めている
  • #15 論文に書かれている実験結果を紹介します。 まず最初は多重パーセプトロンを用いた実験です。 この実験ではボストンの住宅価格のデータセットを用いています。 有名なデータセットなので使ったことがある人も多いと思うのですが、広さ、部屋数、犯罪率など13の特徴を含むデータセットとなっており、レコード数は506個となっています。 機械学習の問題としては、データ数が小さい部類に含まれます。