今回は1986年に開発された(もう30年前ですね)、RBM、つまり制約ボルツマンマシンを紹介したいと思います。
via pixabay.com
1. Boltzmann Machineとは
RBMは制約つきボルツマンマシンと訳されます。これを理解するにはまず、ボルツマンマシンについて知らなければいけません。
ボルツマンマシンは、統計的な変動をもちいたホップフィールド・ネットワークの一種と見なすことができる。これらはニューラル ネットワークの内部についてを学ぶことができる最初のニューラル ネットワークの 一つで、(十分な時間を与えられれば) 難しい組合せに関する問題を解くことができる。 ただしボルツマン・マシンには後述される事柄を含む数々の問題があり、接続制限をもたないボルツマン・マシンは機械学習や推論のためには実用的であるとは証明されていない。しかしながらボルツマン・マシンは、その局所性とその学習アルゴリズムのヘッブ的性質またその並列処理やその動的力学と単純な物理的プロセスとの類似のため、理論として魅力的である。ボルツマンマシンは確率分布関数自体を計算する。
ボルツマン・マシンは、それらに使用されているサンプリング関数(統計力学においてのボルツマン分布)にちなんで名づけられた。
ボルツマン分布というのは主に統計力学の分野ででてきます。 どういうものかというと、「気体のエネルギー状態による分布の状態を表したもの」です。
$E_{i}$をエネルギー状態、$p_{i}$をそのエネルギーをとる確率、$T$を絶対温度、$g_{i}$をそのときの
状態数とすることにします。すると、
\begin{align}
p_{i} = \frac{N_{i}}{N} = \frac{g_{i}\exp(-\frac{E_{i}}{k_{B}T})}{Z(T)}
\end{align}
\begin{align}
N = \sum_{i} N_{i}
\end{align}
\begin{align}
&Z(T) = \sum_{i}g_{i} \exp(-\frac{E_{i}}{k_{B} T})
\end{align}
と計算されます。ここで大事なのはこれらの式ではなく、
「ある値のexpをとってそれを足し合わせた値をZとして、それで割れば確率が出てくる 」
というイメージです。
----------------------------------------------------------------------------------------------
それではボルツマンマシンについて説明していきましょう。
ボルツマンマシンでは、以下のような無向グラフを考えます。
ボルツマンマシンでは、以下のような無向グラフを考えます。
ここで、$x_{1},x_{2},x_{3},x_{4}$は0か1しかとりません。つまりONとOFFの状態しかない、「スイッチ」のようなものです。
ここで、上で話したような、「エネルギー関数」を考えます。それは下の二つの条件を持っているようにします。
・重みと$x_{i}$の組み合わせによって値が変化するもの
・エネルギー関数が低くなるとその状態をとりやすくなるような$p(x)$をとるもの
これを考慮し、以下のようなエネルギー関数を考えます。
\begin{align}
\phi(x,\theta) = -\sum_{i} b_{i} x_{i} - \sum_{i,j} \omega_{ij} x_{i}x_{j}
\end{align}
$b_{i}$ : $x_{i}$におけるバイアスパラメータ
$w_{ij}$ : $x_{i}$と$x_{j}$の二つの重み
ここで、上で話したような、「エネルギー関数」を考えます。それは下の二つの条件を持っているようにします。
・重みと$x_{i}$の組み合わせによって値が変化するもの
・エネルギー関数が低くなるとその状態をとりやすくなるような$p(x)$をとるもの
これを考慮し、以下のようなエネルギー関数を考えます。
\begin{align}
\phi(x,\theta) = -\sum_{i} b_{i} x_{i} - \sum_{i,j} \omega_{ij} x_{i}x_{j}
\end{align}
$b_{i}$ : $x_{i}$におけるバイアスパラメータ
$w_{ij}$ : $x_{i}$と$x_{j}$の二つの重み
ここから上で行った議論と同じようなことをします。
\begin{align}
p(x|\theta) = \frac{1}{Z(\theta)} \exp(-\phi(x,\theta))
\end{align}
\begin{align}
Z(\theta) = \sum_{x} \exp(-\phi(x,\theta))
\end{align}
ここで、上の$Z$は$x$の全てについて足していきます。個数は$2^N$個になりますね。
この値が小さい方が最も生起確率が高いわけです。
学習の過程ではこれ対数尤度のパラメータ微分を行っていきます。
\begin{align}
lnL(\theta) = \sum_{i} \{ -\phi(x_{i},\theta) - lnZ(\theta) \}
\end{align}
一般にこれは勾配降下法により、パラメータを最適化することができます。
\begin{align}
p(x|\theta) = \frac{1}{Z(\theta)} \exp(-\phi(x,\theta))
\end{align}
\begin{align}
Z(\theta) = \sum_{x} \exp(-\phi(x,\theta))
\end{align}
ここで、上の$Z$は$x$の全てについて足していきます。個数は$2^N$個になりますね。
この値が小さい方が最も生起確率が高いわけです。
学習の過程ではこれ対数尤度のパラメータ微分を行っていきます。
\begin{align}
lnL(\theta) = \sum_{i} \{ -\phi(x_{i},\theta) - lnZ(\theta) \}
\end{align}
一般にこれは勾配降下法により、パラメータを最適化することができます。
2. 隠れBoltzmann Machine
次にBoltzmann Machineを拡張した、隠れBoltzmann Machineを紹介します。
$x_{1}$と$x_{2}$は繋がれているが、矢印などはない。