機械学習とかコンピュータビジョンとか

CVやMLに関する勉強のメモ書き。

ボルツマンマシンについて勉強した その4

はじめに

今回は制限付きボルツマンマシン(Restricted Boltzmann Machine, RBM)について.教科書はいつもの.

制限付きボルツマンマシン(RBM)

ボルツマンマシンの問題点として期待値計算が難しいという点があげられた.隠れ変数を導入するとモデルに対する期待値だけでなくデータに関する期待値の項も計算量が爆発してしまう. そこで隠れ変数を導入しつつ効率化をはかるために制限を設けたものが制限付きボルツマンマシン. 制限付きボルツマンマシン隠れ変数同士,可視変数同士に結合を持たないようにグラフ構造に制限を入れたもの.

隠れ変数同士,可視変数同士に結合を持たないので隠れ変数と可視変数を陽に書き表したエネルギー関数は以下のようになる.

 \displaystyle
\Phi(v,h,\theta) = -\mathbf{b}'\mathbf{v}-\mathbf{c}'\mathbf{h}-\mathbf{v}'\mathbf{W}\mathbf{h}

通常の隠れ変数を持つボルツマンマシンに比べて隠れ変数同士,可視変数同士のエッジに関する重みの項が減ってエネルギー関数が簡潔になった.ちなみにかなり強い制約を与えたが,隠れ変数の数次第で任意の分布を任意の精度で近似できるらしい.

ここでRBMの独立性をもう少し見るために,隠れ変数が与えられた時の可視変数の分布を考える.同時分布を周辺分布で割れば良いので,

\displaystyle
P(\mathbf{v}|\mathbf{h},\theta) \\ \displaystyle
=\frac{P(\mathbf{v},\mathbf{h}|\theta)}{\sum_\mathbf{v}P(\mathbf{v},\mathbf{h}|\theta)} \\ \displaystyle
=\frac{\exp(\mathbf{b}'\mathbf{v}+\mathbf{c}'\mathbf{h}+\mathbf{v}'W\mathbf{h})}{\sum_\mathbf{v}\exp(\mathbf{b}'\mathbf{v}+\mathbf{c}'\mathbf{h}+\mathbf{v}'W\mathbf{h})} \\ \displaystyle
=\prod_i\frac{\exp(b_iv_i+\mathbf{c}'\mathbf{h}+\sum_jv_iW_{ij}h_j)}{\sum_{v_i=0,1}\exp(b_iv_i+\mathbf{c}'\mathbf{h}+\sum_jv_iW_{ij}h_j)} \\ \displaystyle
=\prod_i\frac{\exp(\mathbf{c}'\mathbf{h})\exp(b_iv_i+\sum_jv_iW_{ij}h_j)}{\exp(\mathbf{c}'\mathbf{h})\sum_{v_i=0,1}\exp(b_iv_i+\sum_jv_iW_{ij}h_j)} \\ \displaystyle
=\prod_i\frac{\exp(b_iv_i+\sum_jv_iW_{ij}h_j)}{1+\exp(b_i+\sum_jW_{ij}h_j)}

と計算ができ,積の形で表されていることから隠れ変数が固定されれば可視変数は条件付き独立になっていることがわかる.隠れ変数についても同様の計算から条件付き独立性を見ることができる.独立になることで計算が飛躍的に簡単になり,そこには近似も入らないため,非常に嬉しいというのがRBM.おかげでギブスサンプリングの実装もシンプルになる.

学習方法

通常のボルツマンマシンと同様,対数尤度の各変数に関する微分を求める.基本的にはバイアスの項が一つ増えただけと考えられる.

可視変数にかかるバイアスb_iに関する微分は隠れ変数を周辺化した対数尤度をL(\theta)とし,途中までの式の導出は前の記事に譲ると

\displaystyle
\frac{1}{N}\frac{\partial L(\theta)}{\partial b_i} \\ \displaystyle
=\frac{1}{N}\sum_nv_i^{(n)}\sum_\mathbf{h}P(\mathbf{h}|\mathbf{v},\theta)-\langle v_i\rangle_{model} \\ \displaystyle
=\frac{1}{N}\sum_nv_i^{(n)}-\langle v_i\rangle_{model}

と計算できる.ただし,最後の行は\sum P(\mathbf{h}|\mathbf{v},\theta)=1であることと,q(\mathbf{v})が経験分布であることを利用した.隠れ変数にかかるバイアスc_jに関しても途中の導出まで前の記事に計算を譲って計算をすると,

\displaystyle
\frac{1}{N}\frac{\partial L(\theta)}{\partial c_j} \\ \displaystyle
=\frac{1}{N}\sum_n\sum_\mathbf{h}h_jP(\mathbf{h}|\mathbf{v},\theta)-\langle v_i\rangle_{model} \\ \displaystyle
=\frac{1}{N}\sum_n\sum_\mathbf{h_j}h_j\prod_jP(\mathbf{h_j}|\mathbf{v},\theta)-\langle v_i\rangle_{model} \\ \displaystyle
=\frac{1}{N}\sum_n\sum_{h_j}h_jP(h_j|\mathbf{v}^{(n)},\theta)\prod_{j'\neq j}\sum_{h_{j'}}P(h_{j'}|\mathbf{v}^{(n)},\theta)-\langle v_i\rangle_{model} \\ \displaystyle
=\frac{1}{N}\sum_nP(h_j=1|\mathbf{v}^{(n)},\theta)-\langle v_i\rangle_{model}

となる.ただし,RBMの条件付き独立性と\sum_{h_{j'}}P(h_{j'}|\mathbf{v}^{(n)},\theta)=1を使った.最後に重みに関する計算に関しては,バイアスb_iに関する微分における各項の係数が変わるだけなので,

\displaystyle
\frac{1}{N}\frac{\partial L(\theta)}{\partial w_{ij}} \\ \displaystyle
=\frac{1}{N}\sum_nv_i^{(n)}\sum_\mathbf{h}h_jP(\mathbf{h}|\mathbf{v},\theta)-\langle v_ih_j\rangle_{model} \\ \displaystyle
=\frac{1}{N}\sum_nv_i^{(n)}P(h_j=1|\mathbf{v}^{(n)},\theta)-\langle v_ih_j\rangle_{model}

となる.ただし,最後の行は先ほどと同様に条件付き独立の性質を使った.

以上からRBMの学習方程式は

\displaystyle
\frac{1}{N}\sum_nv_i^{(n)}=\langle v_i\rangle_{model} \\ \displaystyle
\frac{1}{N}\sum_nP(h_j=1|\mathbf{v}^{(n)},\theta)=\langle h_j\rangle_{model} \\ \displaystyle
\frac{1}{N}\sum_nv_i^{(n)}P(h_j=1|\mathbf{v}^{(n)},\theta)=\langle v_ih_j\rangle_{model}

となる.隠れ変数を持つ通常のボルツマンマシンと比較するとRBMの学習方程式の左辺はサンプルに関する和を計算するだけになっておりとても簡略化されていることがわかる.

まとめ

RBMの学習方程式の導出まで.あとは学習方程式の右辺を効率よく計算する方法に関してのみ.それが終わったらもともと読みたかった論文を読む予定.まさかこんなかかるとは思わなかった.