ボルツマンマシンを理解する①~連想記憶モデル~


目次

1.自己紹介
2.はじめに
3.連想記憶モデル
4.最後に

1. 自己紹介

こんにちは、Jumtraです。
2022年4月からデータサイエンティストとして働くことが決まり、勉強記録としてQiitaを活用出来ればと考え、投稿させていただきます。

2. はじめに

以下の流れで記事の投稿を行っていく予定です。
1-連想記憶モデル←今回の記事
2-ホップフィールドネットワーク
3-ボルツマンマシン
4-制限付きボルツマンマシン
5-深層信念ネットワーク
6-深層ボルツマンマシン
7-動的ボルツマンマシン

3. 連想記憶モデル

連想記憶モデルとは?

ニューラルネットワークの1種であり、ネットワーク上に記憶パターンを保持する事で記憶パターンと少し違うパターンが入力されても正しい記憶パターンを出力できるモデルです。


このように、ある物の一部を見ることで全体を思い出す。あるいは、別の何かを思い出すといった想起のシミュレーションとも考えることができます。

連想記憶モデルの仕組み

結合係数の行列表現

連想記憶モデルは、全ての細胞同士が結合している相互結合型ネットワークです。従って、全ての細胞同士の結合係数を考慮する必要があります。ここで、結合係数とは、細胞間の刺激の伝わりやすさを表すもので、$w_{ij}$と表される。

ここで、連想記憶モデルの結合係数の行列は記憶行列(重み行列)と呼ばれます。
また、連想記憶モデルでは自分に対する入力は考慮していないため$w_{11}$のような自分に対する結合係数は0となる。つまり記憶行列の対角成分の値は0になります。

記憶の方法

記憶パターンは、記憶行列に埋め込まれます。
図のような4つの細胞(数字は細胞の番号)に、記憶パターン(白:-1, 黒:1)を埋め込む式を以下に示します。
$$[記憶行列]+[記憶パターン][記憶パターン]^T-単位行列$$

まず、1つ目のパターンを記憶するときを考えます。
この時、記憶行列には何も入っていないので零行列とします。

式に従って記憶行列を計算すると以下のようになります。

\begin{bmatrix}
0&0&0&0\\
0&0&0&0\\
0&0&0&0\\
0&0&0&0\\
\end{bmatrix}
+
\begin{bmatrix}
-1\\
1\\
1\\
-1\\
\end{bmatrix}
\begin{bmatrix}
-1&1&1&-1
\end{bmatrix}
-
\begin{bmatrix}
1&0&0&0\\
0&1&0&0\\
0&0&1&0\\
0&0&0&1\\
\end{bmatrix}\\
=
\begin{bmatrix}
0&-1&-1&1\\
-1&0&1&-1\\
-1&1&0&-1\\
1&-1&-1&0\\
\end{bmatrix}\\

続けて2つ目のパターンを記憶するとき
1つ目のパターンを記憶した記憶行列を用いて2つ目のパターンを記憶します。

1つ目のパターンを反転させたものを覚えます。

式に従って記憶行列を計算すると以下のようになります。

\begin{bmatrix}
0&-1&-1&1\\
-1&0&1&-1\\
-1&1&0&-1\\
1&-1&-1&0\\
\end{bmatrix}
+
\begin{bmatrix}
1\\
-1\\
-1\\
1\\
\end{bmatrix}
\begin{bmatrix}
1&-1&-1&1
\end{bmatrix}
-
\begin{bmatrix}
1&0&0&0\\
0&1&0&0\\
0&0&1&0\\
0&0&0&1\\
\end{bmatrix}\\
=
\begin{bmatrix}
0&-1&-1&1\\
-1&0&1&-1\\
-1&1&0&-1\\
1&-1&-1&0\\
\end{bmatrix}
+
\begin{bmatrix}
0&-1&-1&1\\
-1&0&1&-1\\
-1&1&0&-1\\
1&-1&-1&0\\
\end{bmatrix}
\\
=
\begin{bmatrix}
0&-2&-2&2\\
-2&0&2&-2\\
-2&2&0&-2\\
2&-2&-2&0\\
\end{bmatrix}

連想記憶モデルの出力関数
y=f(x) = \left\{
\begin{array}{ll}
1 & (x \geq 0) \\
-1 & (x \lt 0)
\end{array}
\right.

これを用いて想起を行います。

入力パターンに基づく想起の仕組み


記憶行列

\begin{bmatrix}
0&-1&-1&1\\
-1&0&1&-1\\
-1&1&0&-1\\
1&-1&-1&0\\
\end{bmatrix}
\\

次式で入力パターンと記憶行列の想起を行います。
($w_{ij}$は記憶行列, $x_j$は入力パターン)

f(x) = \sum_{j=1}^{4}w_{ij}x_j

ここで、$f(x)$は記憶行列と入力パターンの積和を表しているので行列で以下のように表すことができます。

\begin{bmatrix}
0&-1&-1&1\\
-1&0&1&-1\\
-1&1&0&-1\\
1&-1&-1&0\\
\end{bmatrix}
\begin{bmatrix}
-1\\
1\\
-1\\
-1\\
\end{bmatrix}
=\begin{bmatrix}
-1\\
1\\
3\\
-1\\
\end{bmatrix}
\\
f(\begin{bmatrix}
-1\\
1\\
3\\
-1\\
\end{bmatrix})
=
\begin{bmatrix}
-1\\
1\\
1\\
-1\\
\end{bmatrix}

となり、覚えたパターンを想起できていることが確認できます。

4. 最後に

今回、連想記憶モデルについて取り扱いました。これは、ネットワーク上の全ノードを同期して状態の更新を行っているため同期型ネットワークと言われています。これに対して、細胞一つ一つに対して状態の更新を行う非同期型ネットワークがあります。この非同期型ネットワークこそが次回扱うホップフィールドネットワークです。
ホップフィールドネットワークは、ボルツマンマシンのもとになったアルゴリズムであるためお楽しみにしてください。

連想記憶モデルとホップフィールドネットワークの性能比較は次回行いたいと思います。