情報理論関連をぐだぐだと

情報理論関係を勉強中の筆者がそれっぽいことを書くブログ

ボルツマンマシンとは

本の紹介

基本的には、

深層学習 (機械学習プロフェッショナルシリーズ)

深層学習 (機械学習プロフェッショナルシリーズ)

の最終章をいろいろと端折りながら紹介する。

ボルツマンマシンの状態

すごく大雑把に言えば、ボルツマンマシンとは指数型分布族の一種のこと。 下の絵の様な構造を持っている。

f:id:bottik:20151002181527j:plain

ここで、丸はユニットとよばれ、それぞれ0か1の値をとり、ユニットの全体が確率変数となる。 つまりユニットがn個あった場合、そのボルツマンマシンは\{ 0,1\}^n上の確率分布になっている。 上の絵の場合はユニットが10個あるので、とりうる値としては0000000000から1111111111までの1024個あることになる。

ここで、このとる値のことを状態と呼ぶことにして、xで表すことにする。 つまり絵の場合は、x \in \{ 0,1\}^{10}だ。

また、i番目のユニットがとる値をx_i\in \{ 0,1\}で表すことにする。

エネルギーと確率

ユニットがn個あった場合、そのボルツマンマシンは\{ 0,1\}^n上の確率分布になっている。 と書いたが、その分布は具体的にどう決めるのだろうか?

物理ではよく「エネルギーが低いと安定する」と言われるけれど、その概念を持ち出してくる。 「安定する」というのを、「確率が高い」と読み替える。 とにかく、ボルツマンマシンの確率分布はエネルギーを用いて定義する。

ここで、エネルギー関数E : \{ 0,1\}^n \to \mathbb{R}_+を考える。これは、状態が決まればエネルギーの大きさが決まる関数のこと。 今は物理をやっているわけではないのでエネルギーの単位は考えない。大きさだけ分かればいい。

このエネルギーに応じて、ある状態xにある確率p(x)

{ \displaystyle
p(x) \propto {\rm exp}(-E(x))
}

であるとする。つまり、

{ \displaystyle
p(x) = \frac{{\rm exp}(-E(x))}{\sum_{x'}{\rm exp}(-E(x'))}
}

であるとする。この確率分布はBoltzmann分布と呼ばれて*1統計力学でよく目にする。

見てのとおり、エネルギーが大きいと確率が低いと言うのが分かる。

エネルギー関数と指数型分布族

上で書いたとおり、ある状態がボルツマン分布に従うならば、エネルギー関数を決めれば確率が求まると言うことが分かる。

ところで、指数型分布族は、

{ \displaystyle
\log p(x|\theta) = C(x) + \sum_{i = 1}^k \theta^i F_i(x) - \psi(\theta)
}

と言う形をしていた。もしエネルギー関数がパラメータ\thetaに対して、

{ \displaystyle
-E(x|\theta) = C(x) + \sum_{i = 1}^k \theta^i F_i(x)
}

と言う形をしているならば、ボルツマン分布は指数型分布族(の元)になっている。

ボルツマンマシンの確率分布

ここで、各ユニットiとユニット間(i,j)に対して実数パラメータb_iw_{i,j}を導入しよう。 これらを使ってエネルギー関数が、

{ \displaystyle
-E(x|b,w) = \sum_{i = 1}^n b_i x_i + \sum_{i > j} w_{i,j}x_ix_j
}

とかけている場合、これは実数パラメータb_iw_{i,j}に関する指数型分布族になっている。

ボルツマンマシンは、この確率分布に従う。

基本的なボルツマンマシンの使用方法は、次のとおり。

  1. 学習データからラベルに対応した実数パラメータb_iw_{i,j}を学習する。
  2. サンプルがどのラベルに対応しているかを検定する。(=サンプルにラベル付けを行う。)

検定の方法については、ちょっと前に書いた

bocchi-talks-information.hatenablog.com

の方法を少し工夫するとできるのだけれども、 学習データからラベルに対応した実数パラメータb_iw_{i,j}を学習するのは、結構骨が折れる。 次回はこのボルツマンマシンの学習について書きたいと思う。

*1:Gibbs分布とも、Gibbs=Boltzmann分布とも呼ばれる。