7  エネルギーで学ぶ ── 連想記憶と確率的なネットワーク

第3章第6節で、我々は「アトラクター」という言葉を使った。系がある状態に引き寄せられ、そこに留まる。それが記憶の候補になる、と。

だが、あれは比喩だった。「谷に転がり落ちる」という描像を使ったが、谷とは何かを定義していない。何がその形を決めるのかも言っていない。

本章でその比喩に、正確な数学を与える。エネルギー関数である。

そして本章は、本書のナラティブの起点でもある。ここで立てるエネルギー関数という道具は、姿を変えながら本書の最後まで生き延びる。

ホップフィールド(J. J. Hopfield)が1982年に提案した連想記憶から始めよう。そこから確率的な拡張(ボルツマンマシン)へ進み、そして壁にぶつかる。その壁を乗り越えるのが第14章の仕事になる。

ヒント本章のガイド

ここから本書の背骨が始まる。第5節の学習則の導出が全体の要なので、ここは一行も飛ばさずに追ってほしい。

第1〜2節がホップフィールド・ネットワーク(決定的)、第3〜5節がボルツマンマシン(確率的)、第6〜8節が実用化の試みである。

第6節で我々は壁にぶつかる。そこで諦めた気持ちを覚えておいてほしい。第14章でその壁を迂回するとき、なぜあれほど手の込んだことをするのかが腑に落ちる。

Hinton の講義「Neural Networks for Machine Learning」の第11〜14回が、ちょうどこの章の内容にあたる。


1. 連想記憶とエネルギー関数

想起という問題

顔写真の一部が隠れていても、誰の顔か分かる。曲の断片を聞けば、続きが思い出せる。部分から全体を復元する—これが連想記憶(associative memory)である。

計算機の記憶とは性質が違う。計算機はアドレスを指定して読み出す。連想記憶は内容そのものを手がかりにする(content-addressable memory)。

ホップフィールド・ネットワーク

N 個のユニットからなるネットワークを考える。各ユニットの状態は s_i \in \{-1, +1\} とする。結合の重み w_{ij} には、次の二つを課す。

w_{ij} = w_{ji} \quad\textsf{(対称)}, \qquad w_{ii} = 0 \quad\textsf{(自己結合なし)}

対称性が決定的である。実際の脳の結合は対称でないので生物学的には不自然だが、これがあるおかげで次のエネルギー関数が定義できる。

E(\mathbf{s}) = -\frac{1}{2}\sum_{i,j} w_{ij} s_i s_j

更新規則は単純だ。ユニットを一つ選び、他のユニットからの入力の符号に合わせる。

s_i \leftarrow \mathrm{sgn}\left( \sum_j w_{ij} s_j \right)

エネルギーは必ず減る

定理。上の更新規則のもとで、E は減少するか、変わらないかのどちらかである。

証明。ユニット i を更新して、状態が s_i から s_i' に変わったとする。他のユニットは動かない。エネルギーの変化を計算する。

E の中で s_i を含む項だけを取り出そう。w_{ii} = 0 かつ w_{ij} = w_{ji} だから、s_i を含む項は -\frac{1}{2}\big(\sum_j w_{ij}s_i s_j + \sum_j w_{ji}s_j s_i\big) = -s_i \sum_j w_{ij}s_j である。したがって

\begin{aligned} \Delta E &= -\big(s_i' - s_i\big) \sum_j w_{ij}s_j &&\textsf{(} s_i \textsf{ を含む項の差)}\\ &= -\Delta s_i \cdot h_i, \qquad h_i \equiv \sum_j w_{ij}s_j &&\textsf{(局所場 } h_i \textsf{ と置いた)} \end{aligned}

ここで更新規則を使う。s_i' = \mathrm{sgn}(h_i) だから、s_i'h_i は必ず同符号である。h_i = 0 のときは状態を変えない、と約束しておく(この約束がないと、エネルギーが変わらないまま状態が動き続けうる)。

  • 状態が変わらなければ \Delta s_i = 0\Delta E = 0
  • 状態が変われば、\Delta s_i = s_i' - s_i = 2s_i'\pm 1 が反転するので)。すると \Delta E = -2 s_i' h_i < 0

どちらの場合も E は増えない。証明終わり。

E は有限個の状態しか取らず(2^N 通り)、しかも減り続けるのだから、有限回で止まる。止まった先が局所最小値である。

ここがポイント

対称結合のもとで、ホップフィールド・ネットワークの更新は必ずエネルギーを下げる。だから状態は必ずどこかの谷に落ちて止まる。第3章第6節の「アトラクターに落ちる」という比喩に、証明が与えられた。

記憶を埋め込む

では、覚えたいパターンを谷にするには、どう重みを決めればよいか。

覚えたいパターンを \boldsymbol{\xi}^{(1)}, \dots, \boldsymbol{\xi}^{(P)}(各成分は \pm 1)とする。ホップフィールドの提案は、ヘッブ則である。

w_{ij} = \frac{1}{N}\sum_{\mu=1}^{P} \xi_i^{(\mu)} \xi_j^{(\mu)}

「同じパターンで同符号のユニットどうしは、結合を強める」—一緒に発火する細胞は結びつく、というあの規則である。

なぜこれでうまくいくのか、確かめよう。パターン \boldsymbol{\xi}^{(1)} を初期状態にして、ユニット i への局所場を計算する。

\begin{aligned} h_i &= \sum_j w_{ij}\xi_j^{(1)} = \frac{1}{N}\sum_j \sum_\mu \xi_i^{(\mu)}\xi_j^{(\mu)}\xi_j^{(1)} \\ &= \underbrace{\frac{1}{N}\xi_i^{(1)}\sum_j \xi_j^{(1)}\xi_j^{(1)}}_{\mu=1 \textsf{ の項}} + \underbrace{\frac{1}{N}\sum_{\mu\ne1}\xi_i^{(\mu)}\sum_j \xi_j^{(\mu)}\xi_j^{(1)}}_{\textsf{クロストーク項}} \\ &= \xi_i^{(1)} + \textsf{(クロストーク)} &&\textsf{(} \xi_j^{(1)}\xi_j^{(1)}=1 \textsf{ が } N \textsf{ 個)} \end{aligned}

第一項が、覚えさせたパターンそのものである。クロストーク項が小さければ \mathrm{sgn}(h_i) = \xi_i^{(1)} となり、状態は変わらない—つまり \boldsymbol{\xi}^{(1)} は固定点である。

クロストーク項が問題になる。次節でこれを評価する。

この模型の来歴

ここで、名前について一言断っておきたい。

同じ構造は、ホップフィールドより十年ほど早く日本で提案されている。中野馨は1971〜72年にアソシアトロン(associatron)を発表した(Nakano 1972)。相互結合したしきい素子の集団にヘッブ則でパターンを刻み、部分から全体を想起させる—いま見た仕組みそのものである。ほぼ同時に甘利俊一が、しきい素子の自己組織的なネットワークとして同じ模型を定式化した(Amari 1972)。甘利の定式化はパターンの系列まで扱っており、静的なパターンの想起はその特別な場合になっている。

ではホップフィールド (1982) は何をしたのか。三つある。第一に、エネルギー関数を与えて想起を「谷へ落ちること」として捉え直した。第二に、記憶容量という量に着目し、記憶させるパターンをランダム化して容量を見積もった。第三に—これが波及の大きさとしては最大かもしれない—この定式化がスピングラスと同じ形をしていたために、多数の物理学者をこの分野に呼び込んだ。次節で見る 0.138N は、そうして入ってきた物理学者たちの手による結果である。

だから呼び名は一つに定まっていない。島崎 (2025) は甘利–ホップフィールドモデルと書く。英語圏でも先行性を認める議論は続いており、甘利自身が、物理学者アミットから「文献を調べた結果これは甘利–ホップフィールドのモデルと呼ぶべきだった」と詫びられた挿話を書き残している(甘利 2025)。

本書では、普及している「ホップフィールド・ネットワーク」「現代版ホップフィールド・ネットワーク」を使う。名前は検索と参照のための記号であって、功績の配分ではないからである。ただし誰が何をしたのかは、いま述べたとおりである。


2. 記憶容量

クロストークの見積もり

パターンがランダム(各成分が独立に \pm1 を等確率で取る)だとしよう。クロストーク項は

C_i = \frac{1}{N}\sum_{\mu\ne1}\xi_i^{(\mu)}\sum_j \xi_j^{(\mu)}\xi_j^{(1)}

内側の和 \sum_j \xi_j^{(\mu)}\xi_j^{(1)} は、独立な \pm1N 個足したものである。平均 0、分散 N のランダムウォークだ。

外側も同様に足し合わせると、C_i は平均 0、分散が

\mathrm{Var}[C_i] = \frac{1}{N^2}\cdot (P-1)\cdot N \approx \frac{P}{N}

となる。P 個のパターンを覚えるほど、クロストークが大きくなる。

誤りの確率

想起が失敗するのは、クロストークが第一項(大きさ 1)を打ち消すほど大きいときである。つまり C_i \xi_i^{(1)} < -1 のとき。

C_i が正規分布に近いとすれば、その確率は

P_{\text{error}} = \Phi\left(-\frac{1}{\sqrt{P/N}}\right) = \Phi\left(-\sqrt{\frac{N}{P}}\right)

\Phi は標準正規分布の累積分布関数である。

P/N が容量を決める。この比を負荷率 \alpha = P/N と呼ぶ。誤り率を 1% 以下に抑えたければ、標準正規分布の片側 1% 点が約 2.33 だから \sqrt{1/\alpha} \gtrsim 2.33、つまり \alpha \lesssim 0.185 となる。

相転移

より精密な解析(統計力学のレプリカ法による)では、臨界値 \alpha_c \approx 0.138 が知られている(Amit、Gutfreund、Sompolinsky 1985, 1987)。

そしてこの値の前後で、系の振る舞いが質的に変わる。

  • \alpha < \alpha_c — 覚えたパターンの近くに安定な固定点がある。想起できる
  • \alpha > \alpha_c — 固定点が壊れ、想起がまったくできなくなる

なだらかに劣化するのではなく、急激に壊れる。これは物理学でいう相転移である。

N = 1000 なら約138個。ユニット数に対して、覚えられるパターン数は思ったより少ない。一つのパターンが N ビットの情報を持つので、蓄えられるパターンの生のビット数は 0.138 N^2 程度—重みの数(N^2/2)と同じオーダーである。これは情報理論的な意味での厳密な容量ではなく、粗い見積もりである。

偽記憶

もう一つ厄介な問題がある。覚えさせていないパターンが、勝手に安定になる。

たとえば三つのパターンの「多数決」\mathrm{sgn}(\xi^{(1)} + \xi^{(2)} + \xi^{(3)}) は、しばしば安定な固定点になる。これを偽記憶(spurious memory)と呼ぶ。

エネルギー地形の言葉で言えば、覚えさせた谷の他に、意図しない谷ができてしまう。想起がそこに落ちると、見たことのないパターンが「思い出される」ことになる。

この問題は、次節以降の確率的な拡張への動機の一つになる。確率的に状態を更新すれば、浅い谷(偽記憶)からは抜け出せる可能性がある。


3. 必要な数学:ギブス分布と分配関数

決定的から確率的へ

ホップフィールド・ネットワークの更新は決定的だった。\mathrm{sgn}(h_i) で決まる。

これを確率的にする。局所場が正なら +1 になりやすいが、必ずそうなるとは限らない—という規則にする。

P(s_i = +1) = \sigma\left(\frac{2h_i}{T}\right) = \frac{1}{1 + e^{-2h_i/T}}

T温度である。T \to 0 で決定的な規則に戻り、T \to \infty で完全にランダムになる。

なぜシグモイド関数なのか。天下りに見えるが、次に示すとおり、この形を選ぶと定常分布が美しい形になる。

ギブス分布

上の規則で長時間更新を続けると、状態の分布はどこへ落ち着くか。答えはギブス分布(ボルツマン分布)である。

p(\mathbf{s}) = \frac{1}{Z} e^{-E(\mathbf{s})/T}, \qquad Z = \sum_{\mathbf{s}'} e^{-E(\mathbf{s}')/T}

(以下、T = 1 と固定する。温度は E のスケールに吸収できる。)

確かめてみよう。詳細釣り合い(detailed balance)を示せばよい。状態 \mathbf{s} とそこからユニット i だけ反転した \mathbf{s}' の間で、

\frac{p(\mathbf{s}')}{p(\mathbf{s})} = e^{-(E(\mathbf{s}')-E(\mathbf{s}))} = e^{\Delta s_i \cdot h_i}

(第1節で \Delta E = -\Delta s_i h_i を示した。)一方、上の更新規則から遷移確率の比を計算すると、これと一致する。だからギブス分布が定常分布である。

読み方

p \propto e^{-E} という形を、言葉にしておこう。

エネルギーが低い状態ほど、出やすい。指数関数なので、エネルギーの差がわずかでも確率の比は大きく変わる。

そして逆に読むこともできる。分布が与えられたら、E = -\log p + \text{const} でエネルギーが定義できる。つまり「エネルギー関数を決めること」と「確率分布を決めること」は同じである。

この読み替えは、本書で三度使う。

  • 本章 — ボルツマンマシンの定義
  • 第15章第7節 — スコア \nabla_x\log p = -\nabla_x E。分配関数が微分で消える
  • 第16章第2節 — 自由エネルギー F = \mathbb{E}_q[E] - H[q]

分配関数という厄介者

Z = \sum_{\mathbf{s}} e^{-E(\mathbf{s})}分配関数と呼ぶ。確率の総和を 1 にするための規格化定数である。

そして、これが本章で我々を苦しめることになる。

N 個の二値ユニットなら、状態は 2^N 通りある。いまは「厄介そうだ」とだけ思っておいてほしい。

いまは「厄介そうだ」と思っておいてほしい。第6節で、これが具体的にどう学習を妨げるかを見る。


4. ボルツマンマシン

いま何をしようとしているかを、前節までとの関係で押さえておこう。第1〜2節のネットワークは決定的だった—更新規則に従って谷へ落ちる。第3節で温度を入れて確率的にした。ボルツマンマシンは、その確率版を「学習する生成モデル」として立て直したものである。島崎 (2025) の言い方を借りれば、ボルツマンマシンは連想記憶モデル(甘利–ホップフィールドモデル)を確率分布へ拡張したものにあたる。同じ結合行列 w_{ij} が、こんどは分布のパラメータとして働く。

表記をひとつ切り替える。第1〜2節では状態を s_i \in \{-1,+1\} と書いてきたが、本節以降のボルツマンマシンでは s_i \in \{0,1\} を使う。両者は s^{\pm} = 2s^{01}-1 で移り合うので中身は変わらないが、確率の式が簡潔になる。

隠れユニット

ホップフィールド・ネットワークでは、すべてのユニットが観測対象だった。ボルツマンマシンは、ここに隠れユニットを導入する。

\mathbf{s} = (\mathbf{v}, \mathbf{h})

\mathbf{v} が可視ユニット(データが入る)、\mathbf{h} が隠れユニット(自由に動く)である。

なぜ隠れユニットが要るのか。可視ユニットだけのモデルでは、エネルギー関数に二次の項(w_{ij}v_iv_j)しか置けないからである。誤解しやすいので補っておくと、これは「三次以上の相関がゼロになる」という意味ではない—二次の相互作用だけからでも高次のモーメントは生じる。制限されるのは分布の族のほうで、狙った高次の依存関係を柔軟に作ることができない。

隠れユニットを介せば、可視ユニット間に高次の相関を作れる。「h_1 が 1 のときは v_1, v_2, v_3 が揃う」というような構造が表現できる。

これは深層学習の「特徴」の原型である。隠れユニットは、データの背後にある要因を表す—第14章の潜在変数モデルへ、まっすぐつながる考え方だ。

モデルの定義

エネルギーはホップフィールドと同じ形で、状態を (\mathbf{v},\mathbf{h}) に広げる。

E(\mathbf{v},\mathbf{h}) = -\frac{1}{2}\sum_{i,j}w_{ij}s_i s_j - \sum_i b_i s_i

(バイアス項 b_i を加えた。)そして同時分布が

p(\mathbf{v},\mathbf{h}) = \frac{1}{Z}e^{-E(\mathbf{v},\mathbf{h})}

我々が興味あるのは可視ユニットの分布だから、隠れユニットを周辺化する。

p(\mathbf{v}) = \sum_{\mathbf{h}} p(\mathbf{v},\mathbf{h}) = \frac{1}{Z}\sum_{\mathbf{h}} e^{-E(\mathbf{v},\mathbf{h})}

第5章第1節で述べた「周辺化」がここに現れた。そして第14章では、この周辺化が計算できないことが変分推論の出発点になる。同じ困難が、形を変えて何度も現れる。

何を目指すのか

ボルツマンマシンの目標を、はっきりさせておこう。

データ \mathbf{v} が出やすくなるように、重み w_{ij} を調整する。つまり \log p(\mathbf{v}) を最大化する。

第5章第4節で見たとおり、これはモデル分布をデータ分布に KL の意味で近づけることと同じである。

\max_w \sum_{\mathbf{v}\in\text{data}} \log p_w(\mathbf{v}) \quad\Longleftrightarrow\quad \min_w\; \mathrm{KL}\big(p_{\text{data}} \,\|\, p_w\big)

どう調整するか。それが次節の主題である。


5. 学習則の導出 ── 正相と負相

さて、ボルツマンマシンという道具立てはできた。エネルギー E(s) を決めれば、状態 s の出る確率が p(s) = e^{-E(s)}/Z で決まる。だが肝心なことがまだできていない。重み w_{ij} をどう決めるのか。

やりたいことははっきりしている。手元にデータがある。そのデータが出やすくなるように重みを調整したい。つまり、データの対数尤度

\log p(s^{\text{data}}) = -E(s^{\text{data}}) - \log Z

を大きくする方向へ w_{ij} を動かせばよい。方針が立ったら、あとは微分するだけである。\partial/\partial w_{ij} を計算しよう。

右辺は2つの項に分かれている。第1項は易しく、第2項が厄介だ。順に片づける。

第1項。エネルギーは E(s) = -\frac{1}{2}\sum_{kl} w_{kl}s_k s_l だったから、w_{ij} で微分すれば s_i s_j が残るだけである。

-\frac{\partial E(s^{\text{data}})}{\partial w_{ij}} = s_i^{\text{data}} s_j^{\text{data}}

これは「データを見せたとき、ユニット ij が同時に1になっているか」を表す量だ。頭の片隅に置いておいてほしい。後でここに戻ってくる。

第2項。Z = \sum_{s} e^{-E(s)} はすべての状態にわたる和だから、w_{ij} で微分すると全状態からの寄与が出てくる。慎重に追う。

\begin{aligned} -\frac{\partial \log Z}{\partial w_{ij}} &= -\frac{1}{Z}\frac{\partial Z}{\partial w_{ij}} &&\textsf{(}\log\textsf{ の微分)}\\ &= -\frac{1}{Z}\sum_{s} \frac{\partial}{\partial w_{ij}} e^{-E(s)} &&\textsf{(和と微分を入れ替え)}\\ &= -\frac{1}{Z}\sum_{s} e^{-E(s)}\left(-\frac{\partial E(s)}{\partial w_{ij}}\right) &&\textsf{(指数関数の微分)}\\ &= -\sum_{s} \underbrace{\frac{e^{-E(s)}}{Z}}_{=\,p(s)} \, s_i s_j &&\textsf{(第1項と同じ計算。そして }e^{-E(s)}/Z\textsf{ が現れた)}\\ &= -\big\langle s_i s_j \big\rangle_{\text{model}} &&\textsf{(}p(s)\textsf{ による期待値、と読める)} \end{aligned}

4行目で何が起きたかに注目してほしい。e^{-E(s)}/Z という組み合わせが、計算の途中でひとりでに現れた。これはまさにモデルが定める確率 p(s) である。だから最後の行は「s_i s_j をモデル自身の分布で平均したもの」と読める。\langle\cdot\rangle_{\text{model}} はその平均を表す記号だ。

2つを合わせると、学習則はこうなる。

\frac{\partial \log p(s^{\text{data}})}{\partial w_{ij}} = \underbrace{\big\langle s_i s_j \big\rangle_{\text{data}}}_{\textsf{正相}} - \underbrace{\big\langle s_i s_j \big\rangle_{\text{model}}}_{\textsf{負相}}

(データが複数あるときは、第1項をデータ全体で平均して \langle\cdot\rangle_{\text{data}} と書いた。)

ここがポイント

学習は「データを見せたときの相関」から「モデルが勝手に生み出す相関」を引いた差で進む。差がゼロになったら学習は止まる。つまりボルツマンマシンのゴールは、自分が生み出す世界の相関構造を、見せられた世界の相関構造に一致させることである。

この式の形を、しばらく眺めてほしい。第1項はヘッブ則そのものである。「一緒に発火する細胞は結合が強まる」—神経科学が経験的に見出した規則が、対数尤度を上げるという純粋に統計的な要求から出てきた。これは偶然ではない。第14章で自由エネルギーの話をするとき、同じ構造がもう一度現れる。

では第2項は何なのだろうか。データを見せずに、モデルを勝手に走らせたときの相関である。放っておくと勝手に強くなってしまう結合を引き算して抑える、いわば忘却の項だ。そしてこれが、次節で我々を苦しめることになる。

この学習則には、もう一つの読み方がある。ボルツマンマシンの確率分布は、s_i s_j を統計量とする指数型分布族である—第3節のギブス分布が、まさにその形をしていた。すると学習は「データが定める部分空間へ、モデルを射影する」操作として書ける。この見方を整えたのが Amari, Kurata & Nagaoka (1992) の情報幾何による定式化で、正相と負相は二種類の射影に対応する。本書では第11章で計量を、第16章で自由エネルギーを扱うが、そのどちらもここに根を持っている。いま導いた一本の式は、幾何の言葉に翻訳できる形をしていた、ということである。

ヒント手を動かす

ユニットが3個(s_1,s_2,s_3 \in \{0,1\})の小さなボルツマンマシンを考えよう。状態は 2^3 = 8 通りしかないので、Z を全部足せる。紙の上でもできるが、コードは コード/07_boltzmann.py にある。

w_{13}=w_{23}=0、バイアスもゼロにして、w_{12} だけを動かす。

import itertools

def moments(w12, w13=0.0, w23=0.0, b=(0.0, 0.0, 0.0)):
    states = list(itertools.product([0, 1], repeat=3))
    E = np.array([-(w12*s[0]*s[1] + w13*s[0]*s[2]
                    + w23*s[1]*s[2] + b[0]*s[0]
                    + b[1]*s[1] + b[2]*s[2])
                  for s in states])
    p = np.exp(-E)
    Z = p.sum()               # 8項を全部足すだけ
    p = p/Z
    s1s2 = sum(pi*s[0]*s[1]
               for pi, s in zip(p, states))
    return Z, s1s2

近似が一つも入っていないことに注目してほしい。状態が8通りしかないので、Z を定義どおり足せる。ユニットが100個あればこれが 2^{100} 項になり、第6節のサンプリングが要る。

w_{12} -2 -1 0 1 2 3 5
Z 6.27 6.74 8.00 11.44 20.78 46.17 302.83
\langle s_1 s_2\rangle_{\text{model}} 0.043 0.109 0.250 0.475 0.711 0.870 0.980

w_{12}=0 のとき Z=82^3)で \langle s_1 s_2\rangle = 1/4独立な公平コイン2枚である。当然の答えが出ることを、まず確かめてほしい。

そしてw_{12} を上げると \langle s_1 s_2\rangle は単調に増える。これが「学習が収束する」ことの保証になる理由を考えてほしい。学習則は \Delta w_{12} \propto \langle s_1 s_2\rangle_{\text{data}} - \langle s_1 s_2\rangle_{\text{model}} だった。目標より小さければ w が上がり、w が上がれば \langle s_1 s_2\rangle も上がる—負のフィードバックである。


6. なぜ難しいのか ── 分配関数という壁

前節で導いた学習則は美しかった。だが、計算できるだろうか。

正相は易しい

\langle s_i s_j\rangle_{\text{data}} は、データを見せたときの相関である。可視ユニットの値はデータで決まっているのだから、これは数えるだけで求まる。

隠れユニットがある場合は少し手間が増える。\langle s_i s_j\rangle_{\text{data}} は「可視ユニットをデータに固定したときの、隠れユニットの条件付き分布での期待値」になる。それでも可視ユニットが固定されているぶん、扱いやすい。

負相が計算できない

問題は \langle s_i s_j\rangle_{\text{model}} である。定義を書き下すと、

\big\langle s_i s_j \big\rangle_{\text{model}} = \sum_{\mathbf{s}} p(\mathbf{s})\, s_i s_j = \frac{1}{Z}\sum_{\mathbf{s}} e^{-E(\mathbf{s})} s_i s_j

すべての状態にわたる和である。N 個の二値ユニットなら 2^N 項。

数字を入れてみよう。N = 100 なら 2^{100} \approx 1.3\times 10^{30} 項。仮に1兆項を1秒で足せる計算機があっても、4\times10^{10} 年—宇宙の年齢より長い。

これが分配関数の壁である。

MCMC で近似する

厳密に足せないなら、サンプリングで近似すればよい。p(\mathbf{s}) から M 個サンプルして平均を取る。

\big\langle s_i s_j\big\rangle_{\text{model}} \approx \frac{1}{M}\sum_{m=1}^{M} s_i^{(m)} s_j^{(m)}

では p(\mathbf{s}) からどうやってサンプルするのか。Z が計算できないのに。

ここでマルコフ連鎖モンテカルロ法(MCMC)が使える。比が計算できれば十分だからである。第3節で見たとおり、

\frac{p(\mathbf{s}')}{p(\mathbf{s})} = e^{-(E(\mathbf{s}')-E(\mathbf{s}))}

Z が約分されて消えた。だから遷移確率を決めるのに Z は要らない。

ギブスサンプリングを使おう。ユニットを一つずつ選び、他のユニットの値を固定して条件付き分布からサンプルする。

P(s_i = 1 \mid \mathbf{s}_{-i}) = \sigma\!\left(\sum_j w_{ij}s_j + b_i\right)

これは第3節の確率的更新規則そのものである。十分長く回せば、ギブス分布からのサンプルが得られる。

それでも遅い

原理的には解決した。だが実用にならない。

問題は「十分長く」の部分である。マルコフ連鎖が定常分布に到達するまでの時間(緩和時間)は、エネルギー地形の形に依存する。

そして深い谷がいくつもある地形では、絶望的に遅くなる。一つの谷に落ちると、そこから抜け出すには高いエネルギー障壁を越えねばならず、その確率は e^{-\Delta E} で指数的に小さい。モードからモードへ移るのに、天文学的な時間がかかりうる。

そして学習の各ステップで、これをやり直さねばならない。重みが変わればエネルギー地形も変わるからだ。

ボルツマンマシンは、理論的には美しく、実用的には遅すぎた。1980年代に提案されながら、長く実用にならなかった理由がこれである。

ここがポイント

分配関数 Z は、比を取れば消える(MCMC が使える)。だが MCMC の収束が遅い。これがボルツマンマシンの実用化を阻んだ壁である。

この壁を覚えておいてほしい。第14章では、まったく違う方法—変分法による迂回—でこの困難に立ち向かうことになる。


7. 制限ボルツマンマシンと contrastive divergence

構造を制限する

Smolensky と Hinton らの解決策は、ネットワークの構造を制限することだった。

制限ボルツマンマシン(restricted Boltzmann machine, RBM)では、可視層内・隠れ層内の結合を禁止する。可視と隠れの間だけを結ぶ—二部グラフである。

E(\mathbf{v},\mathbf{h}) = -\sum_{i,j} v_i w_{ij} h_j - \sum_i a_i v_i - \sum_j b_j h_j

何が嬉しいのか

条件付き独立性が成り立つ。

可視ユニットを固定すると、隠れユニットどうしは直接つながっていないので、互いに独立になる。

p(\mathbf{h}\mid\mathbf{v}) = \prod_j p(h_j \mid \mathbf{v}), \qquad p(h_j = 1\mid \mathbf{v}) = \sigma\!\left(\sum_i v_i w_{ij} + b_j\right)

逆も同様である。

p(v_i = 1 \mid \mathbf{h}) = \sigma\!\left(\sum_j w_{ij}h_j + a_i\right)

これは大きい。一般のボルツマンマシンでは、ユニットを一つずつ更新するしかなかった。RBM なら層ごとに一斉に更新できる。ギブスサンプリングが劇的に速くなる。

\mathbf{v} \to \mathbf{h} \to \mathbf{v}' \to \mathbf{h}' \to \cdots

これを交互ギブスサンプリングと呼ぶ。

Contrastive Divergence

それでも、定常分布に到達するには何度も往復せねばならない。Hinton の提案は、大胆な近似だった。

1回だけ往復して、そこで打ち切る。

これが contrastive divergence(CD-1)である。

  1. データ \mathbf{v}^{(0)} から \mathbf{h}^{(0)} \sim p(\mathbf{h}\mid\mathbf{v}^{(0)}) をサンプル
  2. \mathbf{v}^{(1)} \sim p(\mathbf{v}\mid\mathbf{h}^{(0)}) をサンプル
  3. \mathbf{h}^{(1)} \sim p(\mathbf{h}\mid\mathbf{v}^{(1)}) をサンプル
  4. 更新: \Delta w_{ij} \propto \langle v_i h_j\rangle^{(0)} - \langle v_i h_j\rangle^{(1)}

正相は 0 ステップ目、負相は 1 ステップ目から取る。

なぜこれで動くのか

厳密には、これは対数尤度の勾配ではない。定常分布に達していないのだから、\langle\cdot\rangle^{(1)} \ne \langle\cdot\rangle_{\text{model}} である。

だが実用上はよく機能する。直感的な説明はこうだ—学習の目的は「データの相関」と「モデルの相関」を一致させることだった。ならば、データから1ステップ動かしたときに分布が変わらなければ、それは定常状態に近い。「動かしても変わらない」ことを目指せばよい。

CD が最小化しているのは、対数尤度ではなく別の量(二つの KL の差)だと解析されている。それでも、実務的には十分な近似だった。

ここには教訓がある。理論的に正当化しきれない近似でも、動くなら使う—深層学習の発展には、この種の判断が繰り返し現れる。理論が後から追いつくこともあれば、追いつかないこともある。


8. 深層信念ネットワーク

積み上げる

RBM が学習できるようになると、次の発想が出てくる。積み重ねたらどうか。

第一の RBM を、データ \mathbf{v} で学習する。すると隠れ層 \mathbf{h}^{(1)} が、データの特徴を表すようになる。

その \mathbf{h}^{(1)} を、次の RBM の「データ」として使う。そうして \mathbf{h}^{(2)} を学習する。以下同様。

これが貪欲層別事前学習(greedy layer-wise pretraining)であり、得られるのが深層信念ネットワーク(deep belief network, DBN)である。

なぜこれが重要だったか

2006年当時、深いネットワークを勾配降下法だけで学習することは困難だった。勾配消失の問題があったからである(第8章第6節)。層を深くすると、下層まで勾配が届かない。

DBN の事前学習は、この困難を回避した。

  1. まず教師なしで層ごとに RBM を学習し、重みを良い初期値に持っていく
  2. そのあと教師あり学習で全体を微調整(fine-tuning)する

この二段構えが、深いネットワークを実用的にした。Hinton らの2006年の一連の論文が、深層学習ブームの直接的な引き金になったと言ってよい。

そして役目を終える

ただし、この手法自体は現在ほとんど使われていない。

その後の展開—ReLU の導入、より良い初期化法(Xavier/He)、バッチ正規化、そして何より計算資源とデータ量の増大—によって、事前学習なしで深いネットワークが学習できるようになったからである。

歴史的な役割は大きかったが、技術としては置き換えられた。

何が残ったか

だが、DBN が残したものは二つある。

第一に、教師なし事前学習という発想。大量のラベルなしデータで表現を学び、少量のラベルつきデータで課題に適応させる—この構図は、現代の基盤モデルの事前学習と微調整に、そのまま生き延びている。

第二に、オートエンコーダへの道。RBM を「入力を圧縮して復元する」装置と見れば、それはオートエンコーダである。Hinton と Salakhutdinov (2006) は、積み上げた RBM で次元削減ができることを示した。そしてオートエンコーダは、第14章の VAE へまっすぐつながる。

次章と、その先へ

本章では、エネルギー関数という道具を立て、学習則を導き、そして分配関数の壁にぶつかった。

次章では、この壁を迂回する。エネルギー関数も分配関数も捨て、入力から出力への決定的な写像を作り、連鎖律で勾配を計算する—バックプロパゲーションである。うまくいく。だが捨てたものもある:世界の確率モデルを内に持つという性格である。

そして第14章で、我々はこの壁に正面から挑む。変分法という別の登り方で、確率モデルを保ったまま学習できるようにする。そのとき本章の正相・負相が、Wake 相・Sleep 相として姿を変えて再登場する。

本章の伏線は、そこまで届いている。

ノートコラム:海馬と記憶

本文のホップフィールド・ネットワークは「連想記憶」のモデルだった。脳に対応物はあるだろうか。もっとも有力な候補が海馬である(図 1)。

図 1: 海馬の三シナプス回路(模式)。CA3 の再帰的な結合が、本文のホップフィールド・ネットワークの「全結合」に対応づけられてきた。歯状回のパターン分離は第2節のクロストークを減らす工夫、CA3 のパターン補完は本文の「想起」にあたる。ただし実際のシナプスは一方向であり、本文の証明が要求する対称性 w_{ij}=w_{ji} は成り立たない。

海馬の回路。海馬は側頭葉の内側にある。入力は嗅内皮質から来て、歯状回 → CA3 → CA1 という一方向の流れ(三シナプス回路)を通り、嗅内皮質へ戻る。

CA3 の再帰的結合。この回路で本文と関わるのが CA3 である。CA3 の錐体細胞は、互いに密に結合している—再帰的な結合を持つのだ。この構造は、ホップフィールド・ネットワークの「全結合」に対応づけられてきた。

パターン補完とパターン分離。連想記憶の言葉と、海馬研究の言葉には対応がある。

  • パターン補完(pattern completion)— 部分的な手がかりから全体を復元する。本文の「想起」そのもの。CA3 の再帰結合が担うとされる
  • パターン分離(pattern separation)— 似た入力を、区別しやすい表現に変換する。歯状回が担うとされる。本文の「偽記憶」の問題を緩和する仕組みと読める

歯状回の細胞は数が多く(嗅内皮質の入力の約5倍)、発火がまばらである。多数のユニットにまばらに符号化すれば、パターン間の重なりが減る—これがパターン分離の説明になる。第2節のクロストークを減らす工夫だ、と読める。

実験的な支持。マウスで CA3 の再帰結合を選択的に壊すと、部分的な手がかりからの想起が損なわれる。歯状回の神経新生を操作すると、似た文脈の区別が変化する。回路と機能の対応を支持する結果が、いくつか得られている。

分かっていないこと。ここからが重要である。ホップフィールド・ネットワークと海馬の対応は、思われているよりずっと緩い。

第一に、対称結合の仮定が成り立たない。本文の証明は w_{ij} = w_{ji} に決定的に依存していた。だが実際のシナプスは一方向であり、A\to BB\to A の強度が等しい保証はどこにもない。対称性が崩れると、エネルギー関数が定義できず、「必ず谷に落ちる」という保証が失われる(振動や複雑な軌道が生じうる)。

第二に、記憶容量の見積もりが合わない。0.138N という容量は、\pm1 の対称な符号化を前提としている。実際の海馬はまばらな符号化(活動する細胞の割合が数%)を使っており、その場合の容量はまた別の式になる。どちらが実態に近いかは、細胞の活動率の測定に依存し、決着していない。

第三に、「エネルギーの谷」が測定できていない。理論はエネルギー地形を語るが、実際の海馬活動からエネルギー関数を推定した例は乏しい。アトラクター的な振る舞い(少数の状態への収束)を示唆するデータはあるが、それがホップフィールド型の機構によるのか、別の機構によるのかは区別できていない。

本文の数学が海馬を「説明している」と言うには、まだ距離がある—第1章第2節で述べた問いが、ここでも生きている。

出典 Marr (1971)、Treves & Rolls (1994)、Nakazawa et al. (2002)、カンデル神経科学 第2版。

確認問題

  1. [導出]ホップフィールド・ネットワークで、更新のたびにエネルギーが減少することを証明せよ。証明のどこで対称性 w_{ij}=w_{ji} が使われるか。(第1節)

  2. [導出]ヘッブ則 w_{ij} = \frac{1}{N}\sum_\mu \xi_i^{(\mu)}\xi_j^{(\mu)} のもとで、記憶パターン \boldsymbol{\xi}^{(1)} が近似的に固定点になることを、局所場を計算して示せ。(第1節)

  3. [導出]クロストーク項の分散が P/N 程度になることを見積もれ。(第2節)

  4. [確認]ギブス分布 p \propto e^{-E} から、「エネルギーを決めること」と「確率分布を決めること」が同じである理由を述べよ。(第3節)

  5. [確認]学習則の正相と負相のうち、なぜ負相だけが計算困難なのかを述べよ。(第5節・第6節)

  6. [導出]制限ボルツマンマシンで、隠れユニットが条件付き独立になる理由を、エネルギー関数の形から説明せよ。(第7節)

  7. [考える]Contrastive divergence が対数尤度の厳密な勾配でない理由と、それでも機能する直感的な説明を述べよ。(第7節)

  8. [考える]深層信念ネットワークの貪欲層別事前学習が、2006年当時なぜ重要だったか。またなぜ現在は使われないか。(第8節)


参考文献

  • Hopfield, J. J. (1982) Neural networks and physical systems with emergent collective computational abilities. PNAS — エネルギー関数と記憶容量[1節・2節]
  • Nakano, K. (1972) Associatron—A model of associative memory. IEEE Trans Syst Man Cybern — 同じ連想記憶の、十年早い提案[1節]
  • Amari, S.-I. (1972) Learning patterns and pattern sequences by self-organizing nets of threshold elements. IEEE Trans Comput — 同上。パターンの系列まで扱っている[1節]
  • 甘利俊一 (2025)『脳・心・人工知能〈増補版〉』講談社 — 当事者による経緯[1節]。読み物として面白い
  • 島崎秀昭 (2025) 高次相関をめぐる冒険:甘利俊一先生の京都賞受賞に寄せて.『日本神経回路学会誌』32(4) — 連想記憶からボルツマンマシンへの拡張を情報幾何から見通す[1節・4節]
  • Amit, D. J., Gutfreund, H. & Sompolinsky, H. (1985, 1987) — 記憶容量 0.138N の出典[2節]。統計力学の道具が要る
  • Ackley, D. H., Hinton, G. E. & Sejnowski, T. J. (1985) A learning algorithm for Boltzmann machines. Cogn Sci — 正相・負相の原典[5節]
  • Amari, S.-I., Kurata, K. & Nagaoka, H. (1992) Information geometry of Boltzmann machines. IEEE Trans Neural Netw — 学習則を射影として読み直す[5節]。第11章・第16章への橋
  • Hinton, G. E., Osindero, S. & Teh, Y.-W. (2006) A fast learning algorithm for deep belief nets. Neural Comput — 深層信念ネットワーク[8節]
  • Hinton, G. E. Neural Networks for Machine Learning 講義 11–14 — スライドが分かりやすい
  • Nakazawa, K. et al. (2002) Requirement for hippocampal CA3 NMDA receptors in associative memory recall. Science — パターン補完の実験[コラム C7]