恐神貴行、ボルツマンマシン、感想(前半)
タイトル通り、ボルツマンマシンのフルコースを味わえる一冊である。機械学習系の書籍を読むのはこれで2冊目になるが、この分野に関する理解が大きく進んだと思う。というのも、ボルツマンマシンは構造が単純であるにも関わらずその問題意識がはっきりとしていて、実用に耐える統計モデルでもあり、従ってトイモデルとして優秀だからである。数学的概念を理解する上で、より実感に沿う具体例の存在は大切だと私は思うので、こういった内容を扱う本をよく出してくれたと拍手したい。
この本の流れを簡単に紹介しよう。まずボルツマンマシンがどのような場面で用いられているかを紹介し、個々の問題に応じてボルツマンマシンの学習則を導く。機械学習の基本はパラメータの最適化であり、学習則とはそのパラメータを逐次更新していく式である。学習則の多くは計算量という問題を抱えているので、実用上はこれらを近似するギブスサンプリングなどの手法が必要となる。残念ながら本書では近似アルゴリズムの理論的保証は記載されていない。深層学習についても触れられているが、メインは5章以降に展開される時系列モデルの学習だろう。特に6章は恐神氏の研究分野である動的ボルツマンマシンの解説なので、この本が最も力を入れている所だと思うが、まだ読めてない。
個人的にこの本の一番の魅力は参考文献の充実したリストだと思う。比較的新しいものまで記載されており、特に著者の論文は出版直前のものまで挙げられている。文章中でも適宜参照されているので、必要に応じて文献を当たれるのは強みだと思う。(市井の民がその全てにアクセスできるかは別として。)誤植はそこそこ存在するが、概ね変数の置き換え程度で致命的なものは少ない。重み行列の扱いが雑なので実装する際は注意が必要なくらいだろうか。あとこの本はベイズの本ではないので、もしベイズ学習に応用させたいと思ったら自前でベイズ化しないといけない。
せっかくなので、読んだところまで簡単にボルツマンマシンの解説を書いてみよう。
ボルツマンマシンの勾配法による最適化
ボルツマンマシンはエネルギーベースの統計モデルの一種である。エネルギーベースというのは、状態のエネルギーがであるとき、その状態が現れる確率を
としたものである。ここでは正規化定数であり、状態についての総和(積分)を取ればとなるようなに依らない量である。つまりは全ての二値パターンについて動くとして
と表される。エネルギーベースを標語的に言えば、エネルギーが高ければその状態が現れにくいという物理のアナロジーによって定義された確率分布である。
標準的なボルツマンマシンでは状態の各成分はかかの二値を取り、そのエネルギーはをパラメータ(ただしは狭義上三角行列)として
という二次形式で表される。これは個のユニットを頂点とした無向グラフで模式的に表すことが出来て、各ユニットが値とバイアスを持ち、ユニットを結ぶ辺に重みを与えたものとなる。与えられたのサンプル(訓練データ)を元に、パラメータを推定していくのが機械学習の基本的な考え方である。
訓練データはに従うものと仮定する。つまり背後にある何らかの確率分布がデータを生成しているのだと考える。もちろん我々はこの分布を知ることはできないので、よく近似しているようなを実現するを求める問題を考える。色々な手法が考えられるが、カルバック・ライブラー情報量(Kullback-Leibler divergence, KL)の勾配を用いる方法を紹介する。自分もまだ勉強中なので、なぜKLなのかという疑問に答えることはできない。聴いた話では距離のような性質があるので便利というだけではなく、Sanovの定理等の大偏差原理との関わりからKLを特徴付けることができるそうだ。確率分布のある種の漸近挙動を記述する言語としてKLの正統性を主張できるのかもしれない。
からへのKLは
で定義される。これは「距離」のようなものなので、上記を最小化するを逐次的に求めたい。に関する勾配(ざっくり言えば微分)を作用させると、
となる。ただしはに関する期待値である。ここで
だから、
となる。はと関係ないことを強調するために用いた。
勾配法による最適化は更新則
によって求めることが出来る。気持ちを述べると、KLが極小となる付近では二次関数の最小点みたいになっていて、微分の正負とは反対方向に少しだけ動かせば、KLがより小さい値を取る。ここでは学習率と呼ばれる十分小さな定数である。より詳しく計算すると
なので、
が更新則となる。さて
はに関する期待値の形だから、訓練データが与えられたときには、
でを更新していけば、求める値に収束していくことが期待できるだろう。実際に何らかの条件を課せば、確率1で収束することが言える。
最後に問題となるのは、やの計算量である。これらは全ての状態のパターンについての総和であるから、ユニット数に対して指数的な計算コストを要する。従って近似計算をするのだが、例えばマルコフ連鎖モンテカルロ(Markov Chain Monte Carlo, MCMC)の一種であるギブスサンプリングという手法がある。MCMCのアルゴリズムは次のようなものだ。が与えられたとき、各ユニットについて帰納的にをサンプリングする。ただしは、についてを所与としたときの条件付き確率分布に従う。この条件付き確率分布は
であり、これはがかかの2パターンしかないので直ちに得られる。計算量的には多項式オーダーになる。実用上は、こうして得られるのうち、最初の方を無視し、また十分大きな間隔で抜き取ったものを用いるそうだ。これらの分布はに近いものになるので、期待値を近似的に計算することができる。
おわりに
こうしてみると、上記の勾配法はかなり楽観的な要素が大きいと言わざるを得ない。収束に関する理論もあるにはあるが、応用上満たされるかどうかは分からない。訓練データから学習するにしても、ちゃんと収束してくれるかは運である。訓練データの量が十分でなかったり、モデルが複雑であれば、そもそも最小点を捉えてくれるかもわからない。そしてMCMCの計算量も、データ量が増えれば簡単に計算できるとも限らない。それでもできることを探そうという心意気が見てとれる。そんな分野なのかもしれない。もっとも収束に関しては示された論文に当たっているわけではないので、どれくらいの仮定で収束してどれくらいの速度なのかとかは知らない。
・・・と、ここでこの本のシリーズ配本予定を見ると、第8回(ボルツマンマシンは第2回)にあるではないか! 岡村寛之「マルコフ連鎖と計算アルゴリズム」と。これは期待。
あるいはベイズ化してしまうというのもある。こちらはパラメータの推定ではなく確率分布(の超パラメータ)の推定なので、モデルが訓練データに合わせ過ぎてしまう現象(過剰適合)が原理的に起きず、また予測の不確かさを定量的に扱える利点がある(らしい)。ただし計算はもっと大変になるだろう。
ともかくこの分野は新しいものから古いものまで色んな手法があって、どれが正解というものでもなく、問題に合わせて色々と組み合わせていける柔軟性が面白いと思った。
実際にコンピュータを使って何か試してみたいという気持ちはあるが、果たして・・・。