arXiv探訪

興味の赴くままに数学するだけ

動的ボルツマンマシン(Dynamic Boltzmann Machine)

恐神貴行の「ボルツマンマシン」を大体読んだので、その感想も踏まえて動的ボルツマンマシンについて書いてみる。

復習

「はじめに」にも書いてある通り、ボルツマンマシン(BM)は人間の神経細胞網をモデル化した機械学習のモデルだ。各ユニットが神経細胞に対応していて、それぞれバイアス{ b }という量を持ち、またユニット同士の接続強度を重み{ W }という量が表す。ユニットの状態(発火するorしない)は1か0の二値を取り、その状態に対して{ \theta=( b, W ) }をパラメータとしたエネルギー

{ E_{\theta}( x )=-b^{\top}x-x^{\top}Wx }

が決まる。状態{ x }が現れる確率はこのエネルギーから

{ P_{\theta}( x ):\sim\mathrm{exp}\lbrace -E_{\theta}( x ) \rbrace }

と定められる。このようなモデルがBMである。エネルギーの第一項は各ユニット{ j }についてバイアスが大きいほど発火しやすいことを表している。(発火状態{ x_{j}=1 }のエネルギーが小さく、従ってこの状態が現れる確率が大きい。)同様に第二項は結合強度が大きいほど発火しやすいことを表している。この確率分布から学習則と呼ばれるパラメータの更新式を求め、{ x }の訓練データからパラメータを推定するのが、BMを用いた勾配法による機械学習のプロセスだ。

動的ボルツマンマシン

動的ボルツマンマシン(DyBM)は、BMにおける神経細胞のモデル化という側面を強化発展させたモデルである。具体的にはスパイク時間依存可塑性(STDP)という法則を表現したものだ。二つの神経細胞の接続には向きがあり、正順での発火はその接続を強くして(長期増強、LTP)、逆順での発火はその接続を弱くする(長期抑圧、LTD)という法則である。時系列を扱うために、現在の状態{ x^{\lbrack t \rbrack} }は、過去の時系列{ x^{\lbrack \lt t \rbrack} }の条件付きとみなす。

各ユニット{ j }について、条件付きエネルギーを

{ E_{\theta, j}( x^{\lbrack t \rbrack}_{j} | x^{\lbrack \lt t \rbrack} ):=-b_{j}x^{\lbrack t \rbrack}_{j}+E^{\mathrm{LTP}}_{\theta, j}( x^{\lbrack t \rbrack}_{j} | x^{\lbrack \lt t \rbrack} )+E^{\mathrm{LTD}}_{\theta, j}( x^{\lbrack t \rbrack}_{j} | x^{\lbrack \lt t \rbrack} ) }

で定める。バイアスが大きいほど発火しやすいのはBMと同じである。第二項と第三項はそれぞれ{ U=( u_{i, j} ), V=( v_{i, j} ) }をパラメータとして

{ \begin{aligned} E^{\mathrm{LTP}}_{\theta, j} &= -\sum_{i=1}^{N}u_{i, j}\alpha^{\lbrack t-1 \rbrack}_{i}x^{\lbrack t \rbrack}_{j}, \\ E^{\mathrm{LTD}}_{\theta, j} &= \sum_{i=1}^{N}v_{i, j}\beta^{\lbrack t-1 \rbrack}_{i}x^{\lbrack t \rbrack}_{j}+\sum_{k=1}^{N}v_{j, k}\gamma^{\lbrack t-1 \rbrack}_{k}x^{\lbrack t \rbrack}_{j} \end{aligned} }

と表される。{ \alpha, \gamma }帰納的に

{ \begin{aligned} \alpha^{\lbrack t-1 \rbrack}_{i} &= \lambda( \alpha^{\lbrack t-2 \rbrack}_{i}+x^{\lbrack t-d \rbrack}_{i} ) \\ \gamma^{\lbrack t-1 \rbrack}_{k} &= \mu( \gamma^{\lbrack t-2 \rbrack}_{k}+x^{\lbrack t-1 \rbrack}_{k}) \end{aligned} }

と決まる量で、それぞれシナプス適格度トレース(SynapticET)、ニューロン適格度トレース(NeuronET)という。ただし{ \lambda, \mu\in\lbrack 0, 1 ) }は減衰率と呼ばれる定数とする。

各ユニット{ i }について{ i\rightarrow j }という向きの接続を考える。この長期増強を{ \alpha^{\lbrack t \rbrack}_{i} }という時系列が表している。長期増強は常に減少していくが、ユニット{ i }が発火すると{ d-1 }時点後にそのスパイクがユニット{ j }に伝わり接続を強くする。

一方でユニット{ k }について{ j\rightarrow k }の長期抑圧を{ \gamma^{\lbrack t \rbrack}_{k} }という時系列が表している。長期抑圧も常に減少していくが、ユニット{ k }が発火すると、直ちに({ 1 }時点後に)そのスパイクがユニット{ j }との接続を阻害し弱くする。

SynapticETとNeuronETは

{ \begin{aligned} \alpha^{\lbrack t-1 \rbrack}_{i} &= \sum_{s=-\infty}^{t-d}\lambda^{t-d-s+1}x^{\lbrack s \rbrack}_{i} \\ \gamma^{\lbrack t-1 \rbrack}_{i} &= \sum_{s=-\infty}^{t-1}\mu^{t-s}x^{\lbrack s \rbrack}_{i} \end{aligned} }

より、過去の時系列から直接計算できる。

残りの{ \beta }については

{ \displaystyle \beta^{\lbrack t-1 \rbrack}_{i}:=\sum_{s=t-d+1}^{t-1}\mu^{s-t}x^{\lbrack s \rbrack}_{i} }

で定義される。これは{ i }から{ j }へのスパイクがどれだけ頻繁に伝わるかを表しており、よく伝わるならユニット{ j }の発火が抑えられる。

そして各ユニットの条件付きエネルギーは、過去の状態に関して条件付き独立とする。つまり状態{ x^{\lbrack t \rbrack} }の条件付きエネルギーを

{ \displaystyle E_{\theta}( x^{\lbrack t \rbrack} | x^{\lbrack \lt t \rbrack} ):=\sum_{j=1}^{N}E_{\theta, j}( x^{\lbrack t \rbrack}_{j} | x^{\lbrack \lt t \rbrack} ) }

で定義する。状態{ x^{\lbrack t \rbrack} }は、この条件付きエネルギーに基づいて定められる条件付き確率分布

{ P_{\theta}( x^{\lbrack t \rbrack} | x^{\lbrack \lt t \rbrack} ):\sim\mathrm{exp}\lbrace -E_{\theta}( x^{\lbrack t \rbrack} | x^{\lbrack \lt t \rbrack} ) \rbrace }

に沿って現れる。このモデルをDyBMと呼ぶ。

DyBMの勾配法による学習

エネルギーの式は各パラメータに対して線型なので、本質的に学習則はBMと同様に求めることができる。むしろ{ x^{\lbrack t \rbrack} }に関わる量が一次の項しかないのでBMより簡単と言える。計算すると学習率を{ \eta }として

{ \begin{aligned} b_{j} &\leftarrow b_{j}+\eta( x^{\lbrack t \rbrack}_{j}-\mathbb{E}_{\theta, j}\lbrack X^{\lbrack t \rbrack}_{j} | x^{\lbrack \lt t \rbrack} \rbrack ), \\ u_{i, j} &\leftarrow u_{i, j}+\eta\alpha^{\lbrack t-1 \rbrack}_{i}( x^{\lbrack t \rbrack}_{j}-\mathbb{E}_{\theta, j}\lbrack X^{\lbrack t \rbrack}_{j} | x^{\lbrack \lt t \rbrack} \rbrack ), \\ v_{i, j} &\leftarrow v_{i, j}+\eta\beta^{\lbrack t-1 \rbrack}_{i}( \mathbb{E}_{\theta, j}\lbrack X^{\lbrack t \rbrack}_{j} | x^{\lbrack \lt t \rbrack} \rbrack-x^{\lbrack t \rbrack}_{j} )+\eta\gamma^{\lbrack t-1 \rbrack}_{j}( \mathbb{E}_{\theta, i}\lbrack X^{\lbrack t \rbrack}_{i} | x^{\lbrack \lt t \rbrack} \rbrack-x^{\lbrack t \rbrack}_{i} ) \end{aligned} }

となる。

所感

これは機械学習という分野(特に勾配法を用いたもの)の特徴なのかもしれないが、目的函数を作って色々計算したら学習則が得られました、という感じであまり理論的な面白さがない。となると応用面での面白さを提示してほしくなるが、この本では薄い本(文字通りの意味)という制約があるため、それがない。著者の研究分野ということもあり期待していたが、個人的にはDyBMの有用性や新規性、構造的な面白さを感じ取ることは出来なかった。確かにSTDPをモデルに取り入れたという部分は興味深い結果だと思う。減衰率がモデルの収束性にも寄与しているため、そこは構造的な面白さになっている。しかし長々と本文を読んだ割には得られるものが少なかった。

この本では題名通りBMを中心とした様々なモデルが紹介され、それぞれ本文中で参考文献が挙げられ、長いリストに纏められている。従ってBMについて、あるいは機械学習についてでも良いが、気になることがあれば、まずコンパクトに纏まっているこの本を見て、それから論文を当たるという使い方が良いのかもしれない。であるならば、DyBMについても著者の原論文を当たるのが最も正統な手段なのだろう。

数学サイト「ますだら」を作ってみた

マストドンではちらっと書いたのですが、こんなの作り始めました↓

https://mathdala.netlify.com/Galois/GaloisIntro

名前はmathdala。由来は数学+曼荼羅です。まだ何もないですが、ゆくゆくは過去の記事をまとめた文章や解説などを載せようかなと思います。PDF形式より軽いし、ローカルに保存すればブラウザで見れるので便利かなと思います。とりあえず書きかけのガロア理論のノートを置いておきます。

ホントKaTeX様様って感じで、謎技術により数式が高速に描画されます。以前GitBookで作ったように、今回もローカルでVSCodeを使ってmarkdown文章を作りGitHubで管理しています。そしてGitBookの代わりに静的サイトの構築にはGatsbyを使っています。ReactというJavaScriptの中でHTMLを書く謎技術が謎で面白いです。しかも今回はNetlifyというサービスを使っているので、謎技術でわざわざローカルでビルドする必要なくGitHubにコミットするだけで全部やってくれます。つまり謎技術の結晶がこのサイトです。そろそろwebで数学サイトを公開する環境が整いつつあると思います。あとはKaTeXが可換図式に対応してくれるのを待つのみでしょう。

恐神貴行、ボルツマンマシン、感想(前半)

www.coronasha.co.jp

タイトル通り、ボルツマンマシンのフルコースを味わえる一冊である。機械学習系の書籍を読むのはこれで2冊目になるが、この分野に関する理解が大きく進んだと思う。というのも、ボルツマンマシンは構造が単純であるにも関わらずその問題意識がはっきりとしていて、実用に耐える統計モデルでもあり、従ってトイモデルとして優秀だからである。数学的概念を理解する上で、より実感に沿う具体例の存在は大切だと私は思うので、こういった内容を扱う本をよく出してくれたと拍手したい。

この本の流れを簡単に紹介しよう。まずボルツマンマシンがどのような場面で用いられているかを紹介し、個々の問題に応じてボルツマンマシンの学習則を導く。機械学習の基本はパラメータの最適化であり、学習則とはそのパラメータを逐次更新していく式である。学習則の多くは計算量という問題を抱えているので、実用上はこれらを近似するギブスサンプリングなどの手法が必要となる。残念ながら本書では近似アルゴリズムの理論的保証は記載されていない。深層学習についても触れられているが、メインは5章以降に展開される時系列モデルの学習だろう。特に6章は恐神氏の研究分野である動的ボルツマンマシンの解説なので、この本が最も力を入れている所だと思うが、まだ読めてない。

個人的にこの本の一番の魅力は参考文献の充実したリストだと思う。比較的新しいものまで記載されており、特に著者の論文は出版直前のものまで挙げられている。文章中でも適宜参照されているので、必要に応じて文献を当たれるのは強みだと思う。(市井の民がその全てにアクセスできるかは別として。)誤植はそこそこ存在するが、概ね変数の置き換え程度で致命的なものは少ない。重み行列の扱いが雑なので実装する際は注意が必要なくらいだろうか。あとこの本はベイズの本ではないので、もしベイズ学習に応用させたいと思ったら自前でベイズ化しないといけない。

せっかくなので、読んだところまで簡単にボルツマンマシンの解説を書いてみよう。

ボルツマンマシンの勾配法による最適化

ボルツマンマシンはエネルギーベースの統計モデルの一種である。エネルギーベースというのは、状態{ x }のエネルギーが{ E_{\theta}( x ) }であるとき、その状態が現れる確率を

{ \displaystyle P_{\theta}( x )=\frac{1}{Z}\mathrm{exp}\lbrace -E_{\theta}( x ) \rbrace }

としたものである。ここで{ Z }は正規化定数であり、状態についての総和(積分)を取れば{ 1 }となるような{ x }に依らない量である。つまり{ \tilde{x} }は全ての二値パターンについて動くとして

{ \displaystyle Z=\sum_{\tilde{x}}\mathrm{exp}\lbrace -E_{\theta}( \tilde{x} ) \rbrace }

と表される。エネルギーベースを標語的に言えば、エネルギーが高ければその状態が現れにくいという物理のアナロジーによって定義された確率分布である。

標準的なボルツマンマシンでは状態{ x=( x_{1}, \dotsc, x_{N} )^{\top} }の各成分は{ 0 }{ 1 }かの二値を取り、そのエネルギーは{ b=( b_{1}, \dotsc, b_{N} )^{\top}, W=( w_{i, j} ) }をパラメータ(ただし{ W }は狭義上三角行列)として

{ E_{\theta}( x )=-b^{\top}x-x^{\top}Wx }

という二次形式で表される。これは{ N }個のユニットを頂点とした無向グラフで模式的に表すことが出来て、各ユニット{ i }が値{ x_{i} }とバイアス{ b_{i} }を持ち、ユニット{ i, j }を結ぶ辺に重み{ w_{i, j} }を与えたものとなる。与えられた{ x }のサンプル(訓練データ)を元に、パラメータ{ \theta=( b, W ) }を推定していくのが機械学習の基本的な考え方である。

訓練データは{ P_{\mathrm{target}} }に従うものと仮定する。つまり背後にある何らかの確率分布がデータを生成しているのだと考える。もちろん我々はこの分布を知ることはできないので、よく近似しているような{ P_{\theta} }を実現する{ \theta }を求める問題を考える。色々な手法が考えられるが、カルバック・ライブラー情報量(Kullback-Leibler divergence, KL)の勾配を用いる方法を紹介する。自分もまだ勉強中なので、なぜKLなのかという疑問に答えることはできない。聴いた話では距離のような性質があるので便利というだけではなく、Sanovの定理等の大偏差原理との関わりからKLを特徴付けることができるそうだ。確率分布のある種の漸近挙動を記述する言語としてKLの正統性を主張できるのかもしれない。

{ P_{\theta} }から{ P_{\mathrm{target}} }へのKLは

{ \displaystyle KL( P_{\mathrm{target}} : P_{\theta} ) := \sum_{\tilde{x}}P_{\mathrm{target}}( \tilde{x} )\mathrm{log}\frac{P_{\mathrm{target}}( \tilde{x} )}{P_{\theta}( \tilde{x} )} }

で定義される。これは「距離」のようなものなので、上記を最小化する{ \theta }を逐次的に求めたい。{ \theta }に関する勾配{ \nabla }(ざっくり言えば微分)を作用させると、

{ \displaystyle \nabla KL = -\nabla\sum_{\tilde{x}}P_{\mathrm{target}}( \tilde{x} )\mathrm{log}P_{\theta}( \tilde{x} ) = -\mathbb{E}_{\mathrm{target}}\lbrack \nabla\mathrm{log}P_{\theta}( X ) \rbrack }

となる。ただし{ \mathbb{E}_{\mathrm{target}} }{ P_{\mathrm{target}} }に関する期待値である。ここで

{ \displaystyle \begin{aligned} \nabla\mathrm{log}P_{\theta}( x ) &= -\nabla E_{\theta}( x )-\frac{1}{Z}\nabla\sum_{\tilde{x}}\mathrm{exp}\lbrace -E_{\theta}( \tilde{x} ) \rbrace \\ &= -\nabla E_{\theta}( x )+\sum_{\tilde{x}}P_{\theta}( \tilde{x} )\nabla E_{\theta}( \tilde{x} ) \\ &= -\nabla E_{\theta}( x )+\mathbb{E}_{\theta}\lbrack \nabla E_{\theta}( \overline{X} ) \rbrack \end{aligned} }

だから、

{ \displaystyle \nabla KL = \mathbb{E}_{\mathrm{target}}\lbrack \nabla E_{\theta}( X )-\mathbb{E}_{\theta}\lbrack \nabla E_{\theta}( \overline{X} ) \rbrack \rbrack }

となる。{ \overline{X} }{ X }と関係ないことを強調するために用いた。

勾配法による最適化は更新則

{ \theta\leftarrow\theta-\eta\nabla KL }

によって求めることが出来る。気持ちを述べると、KLが極小となる付近では二次関数の最小点みたいになっていて、微分の正負とは反対方向に少しだけ動かせば、KLがより小さい値を取る。ここで{ \eta\gt 0 }は学習率と呼ばれる十分小さな定数である。より詳しく計算すると

{ \displaystyle \begin{alignedat}{2} \frac{\partial}{\partial b_{i}}E_{\theta}( x )&=-x_{i}, &\quad \frac{\partial}{\partial w_{ij}}E_{\theta}( x )&=-x_{i}x_{j} \end{alignedat} }

なので、

{ \displaystyle \begin{aligned} b_{i}&\leftarrow b_{i}+\eta( x_{i}-\mathbb{E}_{\theta}\lbrack X_{i} \rbrack ) \\ w_{ij}&\leftarrow w_{ij}+\eta( x_{i}x_{j}-\mathbb{E}_{\theta}\lbrack X_{i}X_{j} \rbrack ) \end{aligned} }

が更新則となる。さて

{ \displaystyle \nabla KL = \mathbb{E}_{\mathrm{target}}\lbrack \nabla E_{\theta}( X )-\mathbb{E}_{\theta}\lbrack \nabla E_{\theta}( \overline{X} ) \rbrack \rbrack }

{ P_{\mathrm{target}} }に関する期待値の形だから、訓練データ{ X( \omega ) }が与えられたときには、

{ \displaystyle \begin{aligned} b_{i}&\leftarrow b_{i}+\eta( X_{i}( \omega )-\mathbb{E}_{\theta}\lbrack X_{i} \rbrack ) \\ w_{ij}&\leftarrow w_{ij}+\eta( X_{i}( \omega )X_{j}( \omega )-\mathbb{E}_{\theta}\lbrack X_{i}X_{j} \rbrack ) \end{aligned} }

{ \theta }を更新していけば、求める値に収束していくことが期待できるだろう。実際に何らかの条件を課せば、確率1で収束することが言える。

最後に問題となるのは、{ \mathbb{E}_{\theta}\lbrack X_{i} \rbrack }{ \mathbb{E}_{\theta}\lbrack X_{i}X_{j} \rbrack }の計算量である。これらは全ての状態{ x }のパターンについての総和であるから、ユニット数に対して指数的な計算コストを要する。従って近似計算をするのだが、例えばマルコフ連鎖モンテカルロ(Markov Chain Monte Carlo, MCMC)の一種であるギブスサンプリングという手法がある。MCMCアルゴリズムは次のようなものだ。{ x^{( k-1 )} }が与えられたとき、各ユニット{ i }について帰納的に{ x^{( k )}_{i} }をサンプリングする。ただし{ x^{( k )}_{i} }は、{ j\neq i }について{ x^{( k-1 )}_{j} }を所与としたときの条件付き確率分布に従う。この条件付き確率分布は

{ \displaystyle P_{\theta}( x^{( k )}_{i} | x^{( k-1 )}_{j\neq i} ) = \frac{1}{Z}\mathrm{exp}\lbrace -E_{\theta}( x^{( k )}_{i} | x^{( k-1 )}_{j\neq i} ) \rbrace }

であり、これは{ x^{( k )}_{i} }{ 0 }{ 1 }かの2パターンしかないので直ちに得られる。計算量的には多項式オーダーになる。実用上は、こうして得られる{ x^{( 0 )}, \dotsc, x^{( K )} }のうち、最初の方を無視し、また十分大きな間隔で抜き取ったものを用いるそうだ。これらの分布は{ P_{\theta} }に近いものになるので、期待値を近似的に計算することができる。

おわりに

こうしてみると、上記の勾配法はかなり楽観的な要素が大きいと言わざるを得ない。収束に関する理論もあるにはあるが、応用上満たされるかどうかは分からない。訓練データから学習するにしても、ちゃんと収束してくれるかは運である。訓練データの量が十分でなかったり、モデルが複雑であれば、そもそも最小点を捉えてくれるかもわからない。そしてMCMCの計算量も、データ量が増えれば簡単に計算できるとも限らない。それでもできることを探そうという心意気が見てとれる。そんな分野なのかもしれない。もっとも収束に関しては示された論文に当たっているわけではないので、どれくらいの仮定で収束してどれくらいの速度なのかとかは知らない。

・・・と、ここでこの本のシリーズ配本予定を見ると、第8回(ボルツマンマシンは第2回)にあるではないか! 岡村寛之「マルコフ連鎖と計算アルゴリズム」と。これは期待。

あるいはベイズ化してしまうというのもある。こちらはパラメータの推定ではなく確率分布(の超パラメータ)の推定なので、モデルが訓練データに合わせ過ぎてしまう現象(過剰適合)が原理的に起きず、また予測の不確かさを定量的に扱える利点がある(らしい)。ただし計算はもっと大変になるだろう。

ともかくこの分野は新しいものから古いものまで色んな手法があって、どれが正解というものでもなく、問題に合わせて色々と組み合わせていける柔軟性が面白いと思った。

実際にコンピュータを使って何か試してみたいという気持ちはあるが、果たして・・・。