External Memory

プログラミング周辺知識の備忘録メイン

機械学習におけるハイパーパラメータ最適化自動化について

機械学習においてハイパーパラメータをうまく調節するのは
面倒で時間がかかる作業である。
この最適化を自動化して、良い成果を得ている論文を見つけた。(おそらく有名な論文)
https://papers.nips.cc/paper/4522-practical-bayesian-optimization-of-machine-learning-algorithms.pdf


パラメータ最適化に関して、ベイズ統計を利用している。
またベイジアン最適化の勉強に関してはgoogle検索で見つけた以下の論文を利用した。
https://arxiv.org/pdf/1012.2599.pdf


ベイジアン最適化

ベイジアン最適化はサンプリングした値の出力値を知り得る未知の関数の
範囲\mathcal{A}における最大、最小を見つけるための手法です。

事前にサンプリングされた情報、
ここでは目的となる関数の座標の集合 \displaystyle \mathcal{D}_{t} =\{x_t,f(x_t)\}とすると
事前確率分布 P(f)は尤度 \displaystyle P(\mathcal{D}_t|f)と組み合わされ、
事後分布:

 \displaystyle P(f|\mathcal{D}_t) \propto P(\mathcal{D}_t|f)P(f)

ベイズの定理の形として表される。
この式は感覚的には、事前に知りえた関数予測と、
得られたサンプリングデータがその関数予測からどの程度妥当であるかを考慮した結果に
事後分布が依存しているような感じである。

ベイジアン最適化は簡単に言えば
上式を利用したサンプリングの仕方から最大値を探索する。
よってサンプリングアルゴリズムが重要となっており、
いろいろ考えだされているようである。

大まかな流れは以下のようになる。
・サンプリングデータを取る(初回は2点以上任意に取る)。
・そのデータから目的関数の予想確率分布を作成する。
・acquisition functionを使って評価し最大値の点をサンプリングする。
・以上を繰り返し最大値を得る。

また符号を変えれば、最小値も探索可能である。

ハイパーパラメータ最適化自動化の論文では
事前の確率分布の作成にはGaussian Process(GP)を利用している。
GPは関数の事前分布を正規分布として評価する方法である。

正規分布の分散と平均は

平均:
 \displaystyle \mu_{n+1}={\bf k}^T{\bf k}^{-1}{\bf f}_n
分散:
 \displaystyle \sigma_{n+1}=k(x_{n+1},x_{n+1})-{\bf k}^T{\bf k}^{-1}{\bf k}

として表される。

ただし、共分散関数(カーネル)は
 \displaystyle {\bf K}=\left[
    \begin{array}{rrr}
      k(x_1,x_1) & \ldots & k(x_1,x_n) \\
      \vdots & \ddots & \vdots \\
      k(x_n,x_1) & \ldots & k(x_n,x_n) \end{array}\right]

 \displaystyle {\bf k}=\left[\begin{array}{r} k(x_n,x_1) & \ldots & k(x_n,x_{n-1})\end{array}\right]

 \displaystyle k(x,x')=\theta_0(1+\sqrt{5r^2(x,x')}+\frac{5}{3}r^2(x,x'))exp\{-\sqrt{5r^2(x,x')}\}

 \displaystyle r^2(x,x')=\sum_{d=1}^{D}(x_d-x'_d)^2/\theta^2

である。
ここでのカーネルの選択k(x,x')はARD Matern 5/2 kernelと呼ばれるもので
一般的にはsquared exponential kernelがポピュラーらしい。
カーネルの選択がGPの性質をほぼ決定している。

共分散行列については
https://en.wikipedia.org/wiki/Covariance_matrix
に説明がある。


ここで利用するacquisition functionはExpected Improvement(EI)と呼ばれるものである。
他のacquisition functionとして
"Probability of Improvement"と"GP Upper Confidence Bound"が紹介されていた。
挙動やパラメータ数の関係でEIが選ばれている。

acquisition function(EI)は以下のように定義される。

 \displaystyle a_{EI}(x;\{x_n,y_n\},\theta)=\sigma(x;\{x_n,y_n\},\theta)(\gamma(x)\Phi(\gamma(x))+\mathcal{N}(\gamma(x);0,1))

 \displaystyle \gamma(x)=\frac{f(x_{best})-\mu(x)}{\sigma(x)}

 \displaystyle \mathcal{N}(x)は標準正規分布関数、
 \displaystyle \Phi(・)は累積正規分布関数である。

また、ハイパーパラメータ数を減らすためacquisition functionの代わりに
integrated acquisition functionを用い(ハイパーパラメータはθのみになる)、
並列計算のため、評価するデータの保留にモンテカルロ法を用いている。
 \displaystyle \widehat{a}(x)=\int_{\mathbb{R}^J}a(x)P(\{y_j\}_{j=1}^J|\{x_j\}_{j=1}^J,\{x_n,y_n\}_{n=1}^N)dy_1\ldots dy_J


この自動化によってCIFAR-10の3層畳み込みネットワークでの学習で
熟練の人間がハイパーパラメータをチューンしたモデルよりも3%以上よい結果が得られている。
CIFAR-10の3層畳み込みネットワークのコードのURLは以下である。
https://code.google.com/archive/p/cuda-convnet/


またこの自動化プログラムは以下のURLにある。
Home · jaberg/hyperopt Wiki · GitHub



ベイジアン最適化の理解が甘い感じがする。
どこかの段階でまじめに統計を勉強すべきだろうか。