TensorFlow で制約ボルツマンマシン (RBM : restricted Boltzmann machines)
制約ボルツマンマシン
ニューラルネットワークの層の教師なし学習・事前学習としては、AutoEncoder 以前に RBM – restricted Boltzmann machines, 制約(制限つき)ボルツマンマシン – があります。RBM は相互結合型で無向グラフィカルモデル(= 確率変数の関係を記述)として定義され確率分布が導入されます。Deep Belief Network のビルディングブロックであり深層学習の重要なパーツです。
RBM は EBM – Energy-based モデル(後述)から導出すべきですが、概要を簡単に説明しておきますと、まず BM – ボルツマンマシンは自己結合がない相互結合型ネットワークで、無向 (undirected) グラフ、つまりユニット間は双方向結合になります。ユニット間の重みは対照とします。各ユニットは二値ユニットですがその出力が確率的に決まる点が特徴です。(決定論的に決まる例はホップフィールド・ネットワーク, Hopfield network があります。)各ユニットは確率変数と見なされ、確率分布としてボルツマン分布が導入されます。
更に隠れユニット(or 非可視ユニット – 入力データを直接には処理しません)を持つモデルに拡張することも可能で、十分な数の隠れユニットがあれば複雑な分布を表現できることが知られています。
そして RBM は隠れユニットを持つ BM に visible-visible と hidden-hidden 結合がないように制限します。結果、RBM は可視層(or 入力層)と隠れ層の2層構造を取り、層内での情報伝達はありません。
(但し、複数の隠れ層を持つモデルも考えられます。)
参考: RBM 入門としては deeplearning4j のチュートリアルが分かりやすいです :
A Beginner’s Tutorial for Restricted Boltzmann Machines本家のペーパーは以下等 :
A Practical Guide to Training Restricted Boltzmann Machines Version 1
Geo rey Hinton, Department of Computer Science, University of Toronto
Energy-based モデルと RBM
少しだけモデル定義についてふれておくと、天下り的ですが、Energy-based モデルの確率分布は一般にエネルギー関数を使って次のように表されます :
\[p(x) = \frac {e^{-E(x)}} {Z}\]
ここで正規化因子(規格化定数、分配関数)は :
\[Z = \sum_x e^{-E(x)}\]
RBM のエネルギー関数は以下 :
\[E(v,h) = – b’v – c’h – h’Wv\]
端的に言えば、この条件下で観測(入力)データ \(x\)が与えられたとして、結合重み \(W\) とバイアス \(b\)、\(c\) を求めたいということです。対数尤度から微分して勾配を求めるわけですが、解析的に解くのは困難なため、実際には次項の Contrastive Divergence 法を用います。
参考: EBM – Energe-based モデルの数学的詳細は以下の 48 ページ “5. Energy-Based Models and Boltzmann Machines” が詳しいです :
Learning Deep Architectures for AI
By Yoshua Bengio
Contrastive Divergence 法
(解析的でない)近似解法として Gibbs sampling、Contrastive Divergence (CD) がありますが、CD 法の実装については以下が比較的親切です。改良版の Persistent CD が使用されています :
Restricted Boltzmann Machines (RBM)
取りあえず Theano の基本サンプルで動作確認してみました。以下は適当な epoch 数後のフィルタ画像、つまり重み行列を画像化したものです :
CD-1
0 epoch | 5 epochs |
![]() | ![]() |
10 epoch | 14 epochs |
![]() | ![]() |
CD-15
10 epoch | 14 epochs |
![]() | ![]() |
そして以下は訓練後に RBM から生成された画像です :
CD-1
CD-15
TensorFlow で RBM
TensorFlow で CD 法を実装後、隠れユニット数による reconstruction(復元)の誤差の違いを比較検証してみました。128, 512, 1024 そして 2048 の隠れユニット数で比較してみましたが、明らかに多い方が良い結果を示します。題材は MNIST です :
ついで、gibbs-sampling のステップ数を違えて比較してみました。1, 3, 5 の順で reconstruction の誤差は悪くなるのですが、これは比較方法が悪いかもしれません。ただ、ステップ数が少なくても、1 ステップでも良いという考え方は間違っていないようです :
以下は、連続値を許容する Gaussian-Bernoulli RBM 実装で Cifar-10 を題材に訓練したグラフです :
以上