【MLP 深層学習】第8章 ボルツマンマシン

深層学習、通称青イルカ本の学習メモ。

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

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

知らなかったことや重要だと思ったところをQ&A形式にして自分が復習しやすい形にしてある。 (途中だが、一旦公開)

ボルツマンマシンとは何か?

  • 対称的に接続された無向グラフ
  • ユニットは0か1のうちどちらかの状態{x_i}をとる
  • 各ユニットがとる状態{x_i}を確率変数とみなしたとき、グラフにM個あるユニットすべての状態 {x = (x_1 \cdots x_M)}が次の確率分布によって与えられるようなもの。 {} $$ p(x|\theta) = \frac{1}{Z(\theta)} exp{(-\Phi(x,\theta))} $$

ここで{\Phi(x,\theta)}をエネルギー関数と呼ぶ。 {} $$ \Phi(x, \theta) = -\sum_{i=1}^M b_i x_i - \sum w_{ij} x_i x_j $$

この式の中の{Z(\theta)}は、モデル分布が確率分布の条件(和が1)を満たすための規格化定数。 {} $$ Z(\theta) = \sum exp{(-\Phi(x, \theta))} $$

で分配関数(partition function)と呼ぶ。

(中略)

ボルツマン分布のパラメータ推定で最尤推定を行う。
各パラメータ{\theta}に対する対数尤度関数の勾配が0となる点を求める。
その際、表記を簡単にするために経験分布(empirical distribution)を導入する。
{} $$ q(\boldsymbol{x}) \equiv \frac{1}{N} \sum_{n=1}^{N} \delta(\boldsymbol{x}, \boldsymbol{x_{n}}) $$

このとき、{\delta}は次のように定義される。 {} $$ \delta(\boldsymbol{x},\boldsymbol{y}) = \left\{ \begin{array}{} 0 & ( \boldsymbol{x} \neq \boldsymbol{x}) \\ 1 & ( \boldsymbol{x} = \boldsymbol{y}) \end{array} \right. $$

つまり経験分布{q(x)}は、{\boldsymbol{x_n}}の中に{\boldsymbol{x}}がいくつあるか数えて、その確率を求めていると言える。 この経験分布{q(x)}を使うと、標本平均はこの分布に関する期待値として表せる。 {} $$ \frac{1}{N} \sum_{n=1}^{N} x_{ni} x_{nj} = \sum_{\boldsymbol{x}} x_{i} x_{j} q(\boldsymbol{x}) $$

上の式の(左辺)は、n=1~Nのサンプルの {x_{ni} x_{nj}}の平均。
上の式の(右辺)では、{\sum_{\boldsymbol{x}}}は全てのx_i(x_0~x_M)の組み合わせであり、各組み合わせの発生確率{q(x)}に対して、その組み合わせの際の{x_{i} x_{j}}を掛けているので、結果的に期待値が算出されている。

ギブスサンプリングとは?

あるパラメータ{\theta}が与えられたとき、モデル分布{p(x|\theta)}から{x}をサンプルすることを考える。
これができれば、サンプルを自由に作り出すことができるようになる。

ボルツマンマシンでは、局所マルコフ性からギブスサンプリングを使える。
ユニット{i}以外の全ユニットの出力を並べたベクトルを{x_{-i}}とし、 条件付き分布{p(x_{i} | x_{-i}, \theta)}、すなわち{x_{-i}}の値を指定したときの変数{x_{i}}の分布を考える。条件付き分布の定義により、 {} $$ \begin{align} p(x_{i} | x_{-i}, \theta) &= \frac{p(x|\theta)}{\sum_{x_i = 0,1} p(x|\theta)} \\ \end{align} $$ となる。分母の{x_i}は0、1どちらかの値を取る。 {} $$ \begin{align} p(x_{i} | x_{-i}, \theta) &= \frac{p(x|\theta)}{\sum_{x_i = 0,1} p(x|\theta)} \\ &= \frac{ \frac{1}{Z(\theta)} exp(-\Phi(x, \theta) ) }{ \frac{1}{Z(\theta)} exp(-\Phi(x_1, \cdots x_i(=0), \cdots x_M, \theta) ) + \frac{1}{Z(\theta)} exp(-\Phi(x_1, \cdots x_i(=1), \cdots x_M, \theta) ) } \\ &= \frac{ exp(-\Phi(x, \theta) ) }{ exp(-\Phi(x_1, \cdots x_i(=0), \cdots x_M, \theta) ) + exp(-\Phi(x_1, \cdots x_i(=1), \cdots x_M, \theta) ) } \\ \end{align} $$ と変形できる。ここで、{\Phi(x, \theta)}を見ると、{x_i}に関係ない項が沢山でてくることがわかる。
これらはexpの外に出すことができるので、分子・分母両方に現れるものを全て約分できる。
すると、 {} $$ \begin{align} p(x_{i} | x_{-i}, \theta) &= \frac{ exp(-\Phi(x, \theta) ) }{ exp(-\Phi(x_1, \cdots x_i(=0), \cdots x_M, \theta) ) + exp(-\Phi(x_1, \cdots x_i(=1), \cdots x_M, \theta) ) } \\ &= \frac{ exp( (b_{i} + \sum_{j} w_{ij} x_{j}) x_{i} ) }{ exp( (b_{i} + \sum_{j} w_{ij} x_{j}) \times 0 ) + exp( (b_{i} + \sum_{j} w_{ij} x_{j}) \times 1 } \\ &= \frac{ exp( (b_{i} + \sum_{j} w_{ij} x_{j}) x_{i} ) }{ 1 + exp( (b_{i} + \sum_{j} w_{ij} x_{j}) } \\ \end{align} $$ となり、本の式が導出できる。 このように、ユニットi以外の全ユニットの状態{x_i}を指定した条件付き分布{p(x_i|x_{-i}, \theta)}は、ユニットiと結合を持つユニットのみの状態を指定した条件付き分布で与えられる。

よって、ユニットi以外のユニットの状態が与えられれば、{x_i}をサンプルすることができる。
具体的には、上式を使って{p(x_{i}=1 | x_{-i}, \theta)}を計算し、次に区間[0,1]の一様乱数を生成し、この確率を下回ったものは {x_i = 1}、そうでなければ {x_i = 0}とする。
こうして得た{x_i}は上式の条件付き分布に従う。

ギブスサンプリング:やってることのイメージ - nykergoto’s blog ↑で丁寧に説明がされている。

隠れ変数を持つボルツマンマシン

ここまで、グラフのユニットの全状態が外から見えるデータの全成分と対応する場合を考えてきた。
ここで新たに、グラフが直接にはデータと関係しないユニットを保つ場合を考える。
このようなユニットを隠れ変数(hidden variable)と呼ぶ。
一方、外部から見えるユニットを可視変数(visible variable)と呼ぶ。

隠れ変数を持たないものと比べ、隠れ変数を持つボルツマンマシンは一般により高い自由度を持ち得る。
隠れ変数がない場合、モデル分布の自由度は可視変数といつも同じ。
隠れ変数があれば、より複雑なデータの生成分布をより高い精度で近似できる可能性がある。

隠れ変数を持つボルツマンマシンの勾配計算については下記ブログを参考に。
ボルツマンマシン(隠れ変数あり)の導出 - 人工知能に関する断創録

制約ボルツマンマシン(RBM)

制約ボルツマンマシンは、隠れ変数を含むボルツマンマシンの一種で、ユニット間結合に特別な制約があるものをいう。
可視変数同士、隠れ変数同士はそれぞれ結合を持たない。
単層の順伝播ネットワークと同様の構造であるが、ボルツマンマシンなので結合は双方向。

yusuke-ujitoko.hatenablog.com