分からんこと多すぎ

何故か就職できたので技術磨く。一人前の多重線形代数使いを目指しつつ、機械学習、データマイニングをやる

ゼロから始めるDeepLearning_その3_ボルツマンマシンとは

はじめに

学部四年生向け。

ゼロから始めるDeepLearning_その1_ニューラルネットとは - 分からんこと多すぎ
→(Auto Encoder)
→(Denoising AutoEncoder)
ゼロから始めるDeepLearning_その2_ホップフィールドネットワークとは
→ボルツマンマシン(この記事)
→Restricted ボルツマンマシン(後日)
→(Gaussian Binary - Restricted Boltzmann Machines)
→(Deep Belief Networks)
→(Deep Neural Networks)
→畳み込みニューラルネット(後日)

太線以外は読み飛ばしてOK

正直、RBMを使いたいだけなら、この記事は読まなくても問題ない。

ボルツマンマシン自体の資料が少なすぎて、この記事全体的に怪しい。

ボルツマンマシン

前回記事(ホップフィールドネットワーク)を読んでいることを全体とする。

ボルツマンマシンはホップフィールドネットワークのy_{i}<0なら、みたいな部分を、
ボルツマン分布による確率的な処理に変えたものである。

(内部状態 y がそこそこだと50%の確率で出力xが1に変わり、
 内部状態 y がすごく大きいと100%の確率で出力xが1に変わるイメージ)

ホップフィールドネットワークでは、初期値依存で記憶させた画像のうちのどれを思い出すのかが決まっていた。

ボルツマンマシンでは、確率的な処理により、初期値の依存性が減った。
(局所解に陥りにくくなった)

ちなみに、ボルツマン分布とは、ボルツマン分布 - Wikipedia曰く
"気体分子がとり得るエネルギー準位による分布の様子を表現した理論式"であり、こういう分布である。
(一応書いたけど見なくていい)

これをホップフィールドネットワークに取り込むと、以下のようになる。


0.初期の結合係数w_{ij}を相関行列などで決定し、
 入力用の素子と出力用の素子を任意に選択する(以後固定)
 (相関行列=データ行列とその転置の行列積を正規化したもの)

1.ランダムにノードiを選ぶ

2.出力xi=0の時のエネルギー準位をE0とする
 出力xi=1の時のエネルギー準位をE1=E0-yiとする

3.ボルツマン分布より、p0=(xi=0となる確率)=\frac{1}{1+ \exp \left( \frac{y_{i}}{ kT} \right)
 ボルツマン分布より、p1=(xi=1となる確率)=\frac{\exp \left( \frac{y_{i}}{kT} \right)}{1+ \exp \left( \frac{y_{i}}{kT} \right)

4.確率にしたがって出力xiが変化する

(結合係数wを学習をする場合は、以下の5,6が加わる。
 今回はこれに関して特に触れないが、学習と反学習と呼ばれる段階のこと)

5.x_{i} = x_{j} = 1ならば、w_{ij}をわずかに増加させる。

6.入力素子に対するランダムな入力を行う。
 この時、x_{i} = x_{j} = 1ならば、w_{ij}をわずかに減少させる。


kTが大きい時はp0とp1は等しいので、状態は容易に変化する。
 \exp \left( \frac{y_{i}}{kT} \right) = \exp ( \frac{y_{i}}{ \infty } ) = 1

kTを徐々に小さくしていくと、p0とp1の差が大きくなり、定常状態に至る。
(確率分布なので、ある1つの状態に落ち着くわけではない。
 各状態の出現頻度がある1つの確率分布に従うようになる)

なお、このように、あるノードの状態がまわりのノードからの影響のみによって、
確率的に変化するという性質を「場のマルコフ性」という。

このような性質を持つ無向グラフを、マルコフ確率場Markov random fieldと呼ぶ。

マルコフ確率場の考えは、画像の分野では頻繁に登場し、画像修復や領域分割に用いられる


ホップフィールドネットワークの時の結合係数wは、ユーザが設定し、以後変更しないものだった。

このような場合、記憶させるイメージの数が増えてくると、
局所解に陥り記憶させたネットワークの状態に至れないことがある。
(偽記憶と呼ばれる平衡状態に陥る)

それに対してボルツマンマシンは温度変化による状態遷移(焼きなまし法)であり、
局所解からの脱出が可能になったところが、ホップフィールドネットワークより優位である。

また、手動での設計が困難な、より良い結合係数wを探索するアルゴリズムでもある。

何より理論解析が色々できるようになったことが楽しい。

ボルツマンマシンとギブスサンプラー

ボルツマンマシンの状態変化は、ギブスサンプラー(Markov Chain Monte Carlo algorithm)であると言うこともできる。

要するに、ある更新前の出力xを、ある確率分布Pに入れると、
更新後の出力のi番目の要素の出力{x_{i}}^{'}が出てくる確率を教えてくれる分布Qを作れるということ。

q(x_{i}^{'} | x) = \frac{P(x_{1}, \cdots , x_{i}^{'}, \cdots , x_{n} )}{ \sum_{{x_{i}^{''}}} P(x_{1}, \cdots , {x_{i}^{''}}, \cdots , x_{n} ) }


これはアルゴリズムの更新に用いている分布と一致する。

つまり、上で紹介したアルゴリズムは、中でギブスサンプラーを回していることになる。


ボルツマンマシンの更新は、一時刻前のネットワークの状態によってのみ定まるので、
一次のマルコフ連鎖とも言える。

そのため、ボルツマンマシンを長時間動作させたあとの状態は、
ネットワークの初期値(最初に見せるイメージ)によらない。
(変化規則の元になった分布関数に近づくという定理があるらしいです)

次回でようやくRestrictedボルツマンマシンの話。