今回は簡単なボルツマンマシンについて自分用にまとめます。
Boltzmann machine
ボルツマンマシンは生成モデルの一種として使われています。例えば今、学習データが${\bf{X}}_1, {\bf{X}}_2, ..., {\bf{X}}_n$で与えられ、それぞれのデータは-1か+1という2値の値を持つベクトルであるとします。
この時、データの生成モデルを次のように構成します。
\begin{align*}
q_{\theta}({\bf{X}}) &= \frac{1}{Z_{\theta}}{\rm{exp}}\Big[\sum_{k\neq l}J_{kl}X_{k}X_{l}+\sum_{k=1}^{N}h_{k}X_{k}\Big] \\
Z_{\theta} &= \sum_{{\bf{X}}}{\rm{exp}}\Big[\sum_{k\neq l}J_{kl}X_{k}X_{l}+\sum_{k=1}^{N}h_{k}X_{k}\Big] \\
\theta &= \{J_{kl}, h_{k}\}
\end{align*}
ただし$X_k$という表記は、データ${\bf{X}}$のk番目の値であることに注意してください。このように構築したモデルのことをボルツマンマシンと言います。
次にボルツマンマシンを学習するために、KL情報量を最小化します。
\begin{align*}
min_{\theta} \ D_{KL}(p_0||q_{\theta}) &= min_{\theta}\Big[-\sum_{{\bf{X}}}p_{0}({\bf{X}})\Big(\sum_{k\neq l}J_{kl}X_{k}X_{l}+\sum_{k=1}^{N}h_{k}X_{k}\Big)+{\rm{log}}Z_{\theta}\Big] \\
&= min_{\theta}\Big[-\frac{1}{n}\sum_{i=1}^{n}\Big(\sum_{k\neq l}J_{kl}[X_{k}]_{i}[X_{l}]_{i}+\sum_{k=1}^{N}h_{k}[X_{k}]_{i}\Big)+{\rm{log}}Z_{\theta}\Big]
\end{align*}
$p_0$はデータの経験分布です。最小化するためのそれぞれのパラメータに対する偏微分を行います。まず、$h_k$による微分は、
\begin{align*}
-\frac{1}{n}\sum_{i=1}^{n}[X_{k}]_{i} \ + \frac{\partial}{\partial h_{k}}{\rm{log}}Z_{\theta} &= -\frac{1}{n}\sum_{i=1}^{n}[X_{k}]_{i} \ + \frac{1}{Z_{\theta}}\sum_{{\bf{X}}}X_{k}q_{\theta}({\bf{X}}) \\
\frac{1}{Z_{\theta}}\sum_{{\bf{X}}}X_{k}q_{\theta}({\bf{X}}) \ &= \ <X_{k}>_{\theta} \ とすると \\
\therefore \ <X_{k}>_{\theta} \ &= \ \frac{1}{n}\sum_{i=1}^{n}[X_{k}]_{i}
\end{align*}
一方で$J_{kl}$による微分も、全く同じように計算ができます。
\begin{align*}
<X_{k}X_{l}>_{\theta} \ &= \ \frac{1}{n}\sum_{i=1}^{n}[X_{k}]_{i}[X_{l}]_{i}
\end{align*}
さて、最適化に関する式が導けました。しかしこれは、学習データに対する平均や相関に合うように、パラメータを決めなさいという当たり前の式です。このようにパラメータの決め方に関して計算困難性が生じてまう時、勾配法などの最適化アルゴリズムを使って、パラメータを更新するのが一般的です。勾配法についてはまた今度書くことにします。
[参考動画]
生成モデルの数理情報学!【2022年度・情報基礎科学としての数理情報学・東北大学大学院情報科学研究科】 (大関真之)