7 エネルギーで学ぶ ── 連想記憶と確率的なネットワーク
第3章第6節で、われわれは「アトラクター」という言葉を使った。系がある状態に引き寄せられ、そこに留まる。それが記憶の候補になる、と。だが、あれは比喩だった。「谷に転がり落ちる」という描像を使ったが、谷とは何かを定義していない。何がその形を決めるのかも言っていない。
本章でその比喩に、正確な数学を与える。エネルギー関数である。そして本章は、本書のナラティブの起点でもある。ここで立てるエネルギー関数という道具は、姿を変えながら本書の最後まで生き延びる。
- 第15章第7節 — 拡散モデルのスコア。\log を取って状態について微分すると分配関数が消える
- 第16章第2節 — 変分自由エネルギー。F = \mathbb{E}[E] - H という熱力学と同じ形になる
ホップフィールド(J. J. Hopfield)が1982年に提案した連想記憶から始めよう。そこから確率的な拡張(ボルツマンマシン)へ進み、そして壁にぶつかる。その壁を乗り越えるのが第14章の仕事になる。
ここから本書の背骨が始まる。第5節の学習則の導出が全体の要なので、ここは一行も飛ばさずに追ってほしい。
第1〜2節がホップフィールド・ネットワーク(決定的)、第3〜5節がボルツマンマシン(確率的)、第6節がそこで突き当たる壁、第7〜8節が実用化の試みである。
第6節でわれわれは壁にぶつかる。そこで諦めた気持ちを覚えておいてほしい。第14章でその壁を迂回するとき、なぜあれほど手の込んだことをするのかが腑に落ちる。
Hinton の講義「Neural Networks for Machine Learning」の第11〜14回が、ちょうどこの章の内容にあたる。
1. 連想記憶とエネルギー関数
想起という問題
顔写真の一部が隠れていても、誰の顔か分かる。曲の断片を聞けば、続きが思い出せる。部分から全体を復元する—これが連想記憶(associative memory)である。
計算機の記憶とは性質が違う。計算機はアドレスを指定して読み出す。連想記憶は内容そのものを手がかりにする(content-addressable memory)。
ホップフィールド・ネットワーク
N 個のユニットからなるネットワークを考える。各ユニットの状態は s_i \in \{-1, +1\} とし、それを一列に並べた \mathbf{s} = (s_1, \dots, s_N)^\top がネットワーク全体の状態である。結合の重みを並べた行列 W = (w_{ij}) \in \mathbb{R}^{N \times N} は、行 i が入力を受けるユニット、列 j が入力を送るユニットに対応する。結合の重み 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
更新規則は単純だ。ユニットを一つ選び、他のユニットからの入力の符号に合わせる。下の \mathrm{sgn} は、入力が正なら +1、負なら -1 を返す符号関数である。入力がちょうど 0 のときは、現在の状態を保つことにする。
s_i \leftarrow \mathrm{sgn}\left( \sum_j w_{ij} s_j \right)
エネルギーは必ず減る
定理
上の更新規則のもとで、E は減少するか、変わらないかのどちらかである。
先に小さな例で見ておこう。2ユニットで w_{12} = w_{21} = 1、自己結合はゼロとする。このときエネルギーは E = -s_1 s_2 である。状態が (s_1, s_2) = (+1, -1) なら E = +1 だ。ユニット1には、ユニット2から 1 \times (-1) = -1 の入力が来る。入力の符号に合わせて s_1 を -1 にすると、状態は (-1, -1)、エネルギーは -1 になり、2 だけ下がった。これが一般に成り立つことを、以下で示す。
証明
ユニット 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節の「アトラクターに落ちる」という比喩に、証明が与えられた。
いま証明したことの範囲も押さえておこう。結合の対称性と非同期更新を仮定したこの模型では、活動の更新で E が増えない。だが、脳の結合がこの条件を満たすことも、進化がこの E を最小にする配線を選んだことも、ここでは証明していない。しかも止まるのは一つの谷であって、いちばん深い谷とは限らない。この E は活動状態を整理する量であり、脳が消費する代謝エネルギーそのものでもない。第1章で分けた、模型の数学・生物の仕組み・進化の歴史を、ここで一緒にしてはいけない。
記憶を埋め込む
では、覚えたいパターンを谷にするには、どう重みを決めればよいか。
覚えたいパターンを \boldsymbol{\xi}^{(1)}, \dots, \boldsymbol{\xi}^{(P)}(各成分は \pm 1)とする。P が覚えるパターンの個数、各パターンは N 成分のベクトル \boldsymbol{\xi}^{(\mu)} \in \{-1, +1\}^N である。上付きの (\mu) がパターンの番号、\xi_i^{(\mu)} の下付き i がユニットの番号だ。ホップフィールドの提案は、ヘッブ則である。
w_{ij} = \frac{1}{N}\sum_{\mu=1}^{P} \xi_i^{(\mu)} \xi_j^{(\mu)} \quad (i \ne j), \qquad w_{ii} = 0
自己結合を置かないという本節はじめの約束を守るため、i \ne j に限って定義し、対角は 0 のままにする。「同じパターンで同符号のユニットどうしは、結合を強める」—一緒に発火する細胞は結びつく、というあの規則である。
なぜこれでうまくいくのか、確かめよう。パターン \boldsymbol{\xi}^{(1)} を初期状態にして、ユニット i への局所場を計算する。
\begin{aligned} h_i &= \sum_{j \ne i} w_{ij}\xi_j^{(1)} = \frac{1}{N}\sum_{j \ne i} \sum_\mu \xi_i^{(\mu)}\xi_j^{(\mu)}\xi_j^{(1)} \\ &= \underbrace{\frac{1}{N}\xi_i^{(1)}\sum_{j \ne i} \xi_j^{(1)}\xi_j^{(1)}}_{\mu=1 \textsf{ の項}} + \underbrace{\frac{1}{N}\sum_{\mu\ne1}\xi_i^{(\mu)}\sum_{j \ne i} \xi_j^{(\mu)}\xi_j^{(1)}}_{\textsf{クロストーク項}} \\ &= \frac{N-1}{N}\,\xi_i^{(1)} + \textsf{(クロストーク)} &&\textsf{(} \xi_j^{(1)}\xi_j^{(1)}=1 \textsf{ が } N-1 \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 \ne i} \xi_j^{(\mu)}\xi_j^{(1)}
内側の和 \sum_{j \ne i} \xi_j^{(\mu)}\xi_j^{(1)} は、独立な \pm1 を N-1 個足したものである。平均 0、分散 N-1 のランダムウォークだ。
外側も同様に足し合わせると、C_i は平均 0、分散が
\mathrm{Var}[C_i] = \frac{1}{N^2}\cdot (P-1)\cdot (N-1) \approx \frac{P}{N}
となる。P 個のパターンを覚えるほど、クロストークが大きくなる。
誤りの確率
以下では N が大きい場合を考え、信号項の \frac{N-1}{N} を 1 と近似する。想起が失敗するのは、クロストークが第一項(大きさ 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 となる。これは「記憶パターンそのものから一回更新したとき、一個のユニットが反転する確率」を 1% 以下に抑える、という粗い基準である。
相転移
より精密な解析(統計力学のレプリカ法による)では、臨界値 \alpha_c \approx 0.138 が知られている(Amit、Gutfreund、Sompolinsky 1985, 1987)。二つの数字は同じ量の粗さ違いではない。0.185 は上で見たとおり一回の更新での誤り率の基準、0.138 は記憶パターンと巨視的に重なる安定な状態(想起状態)が存在しなくなる負荷率である。後者は、ランダムで疎でないパターン、N \to \infty、温度ゼロという標準的な設定での値である。そしてこの値の前後で、系の振る舞いが質的に変わる。
- \alpha < \alpha_c — 覚えたパターンの近くに安定な固定点がある。想起できる
- \alpha > \alpha_c — 想起状態が壊れ、覚えたパターンを取り出せなくなる(固定点そのものが無くなるわけではない。次に見る偽記憶やスピングラス的な状態は残る)
なだらかに劣化するのではなく、急激に壊れる。これは物理学でいう相転移である。
N = 1000 なら約138個。ユニット数に対して、覚えられるパターン数は思ったより少ない。一つのパターンが N ビットの情報を持つので、蓄えられるパターンの生のビット数は 0.138 N^2 程度—重みの数(N^2/2)と同じオーダーである。これは情報理論的な意味での厳密な容量ではなく、粗い見積もりである。
偽記憶
もう一つ厄介な問題がある。覚えさせていないパターンが、勝手に安定になる。たとえば三つのパターンの「多数決」\mathrm{sgn}(\boldsymbol{\xi}^{(1)} + \boldsymbol{\xi}^{(2)} + \boldsymbol{\xi}^{(3)})—ユニットごとに三つの値を足して符号を取る、つまり各成分で多数派の符号を選んだ N 成分のパターン—は、しばしば安定な固定点になる。これを偽記憶(spurious memory)と呼ぶ。
エネルギー地形の言葉で言えば、覚えさせた谷の他に、意図しない谷ができてしまう。想起がそこに落ちると、見たことのないパターンが「思い出される」ことになる。この問題は、次節以降の確率的な拡張への動機の一つになる。確率的に状態を更新すれば、浅い谷(偽記憶)からは抜け出せる可能性がある。
3. 必要な数学:ギブス分布と分配関数
決定的から確率的へ
ホップフィールド・ネットワークの更新は決定的だった。\mathrm{sgn}(h_i) で決まる。これを確率的にする。局所場が正なら +1 になりやすいが、必ずそうなるとは限らない—という規則にする。
P(s_i = +1 \mid \mathbf{s}_{-i}) = \sigma\left(\frac{2h_i}{T}\right) = \frac{1}{1 + e^{-2h_i/T}}
\sigma(u) = 1/(1+e^{-u}) は、実数の入力を 0 と 1 のあいだの値に変えるシグモイド関数である。\mathbf{s}_{-i} は「i 以外のユニットの状態」を並べたもので、局所場 h_i はそこから決まる。つまりこれは条件付き確率である。T > 0 は温度で、更新のランダムさを調節する(他の章で時間や総ステップ数に使う T とは別の量である)。T \to \infty で完全にランダムになる。T \to 0 では、h_i \ne 0 なら決定的な規則に戻る(h_i = 0 のときだけは確率 1/2 のままで、第1節の「状態を変えない」規則とは違う)。
なぜシグモイド関数なのか。天下りに見えるが、次に示すとおり、この形を選ぶと定常分布が美しい形になる。
ギブス分布
上の規則で(有限の正の温度で、すべてのユニットを繰り返し)更新を続けると、状態の分布はどこへ落ち着くか。答えはギブス分布(ボルツマン分布)である。
数で確かめておこう。さきほどと同じ2ユニットで、w_{12} = w_{21} = 1、自己結合はゼロ、温度を T = 1 とする。エネルギーは E = -s_1 s_2 なので、同符号の2状態では -1、異符号の2状態では +1 になる。それぞれに e^{-E} という重みを付けると、e^{1} \approx 2.718 が二つ、e^{-1} \approx 0.368 が二つで、合計は約 6.172 である。この合計で割れば確率になる。同符号の各状態が約 0.440、異符号の各状態が約 0.060 で、足せば1になる。エネルギーの低い状態ほど出やすい、というのがこの分布の言っていることである。一般に書くと、
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} にいる確率とそこから \mathbf{s}' へ移る確率の積が、その逆向きの積と等しい。どの状態対でもこれが成り立てば、分布はもう動かない。状態 \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 を示した。)一方、上の更新規則から遷移確率の比を計算すると、これと一致する。\mathbf{s} から \mathbf{s}' へ一回の更新で移る確率を Q(\mathbf{s}' \mid \mathbf{s}) と書けば、
\frac{Q(\mathbf{s}' \mid \mathbf{s})}{Q(\mathbf{s} \mid \mathbf{s}')} = e^{\Delta s_i \cdot h_i} = \frac{p(\mathbf{s}')}{p(\mathbf{s})}
となる。分母を払えば p(\mathbf{s})\,Q(\mathbf{s}' \mid \mathbf{s}) = p(\mathbf{s}')\,Q(\mathbf{s} \mid \mathbf{s}') である。p に従って状態が分布していれば、二つの状態のあいだで行きと帰りの確率の流れが等しいので、更新しても分布は変わらない。だからギブス分布が定常分布である。
読み方
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 で移り合うので中身は変わらないが、確率の式が簡潔になる(s^{\pm} と s^{01} は、同じユニットの状態をそれぞれの表記で書いたものである。同じモデルを表すには、エネルギーの式にこの関係を代入して重みとバイアスも換算する。本節以降の w_{ij} と b_i は \{0,1\} 表記での値を指す)。
隠れユニット
ホップフィールド・ネットワークでは、すべてのユニットが観測対象だった。ボルツマンマシンは、ここに隠れユニットを導入する。
\mathbf{s} = (\mathbf{v}, \mathbf{h})
\mathbf{v} が可視ユニット(データが入る)、\mathbf{h} が隠れユニット(自由に動く)の状態である。可視ユニットを N_v 個、隠れユニットを N_h 個とすれば \mathbf{v} \in \{0,1\}^{N_v}、\mathbf{h} \in \{0,1\}^{N_h} で、両者をつないだ全状態が \mathbf{s} \in \{0,1\}^N(N = N_v + N_h)である。ここからの h_j は隠れユニットの状態を指し、第1〜3節の局所場 h_i とは別の量である。
なぜ隠れユニットが要るのか。可視ユニットだけのモデルでは、エネルギー関数に二次の項(w_{ij}v_iv_j)しか置けないからである。ここで二次とは、二つのユニットの状態を掛けた項という意味である。バイアス項は一つの状態に掛かる一次の項であり、三つ以上の状態の積に直接掛かる重みは、このモデルには置いていない。
誤解しやすいので補っておくと、これは「三次以上の相関がゼロになる」という意味ではない—二次の相互作用だけからでも高次のモーメントは生じる。たとえば三次のモーメント \mathbb{E}[v_1 v_2 v_3] は三つの状態の積の平均で、\{0,1\} の状態では「三つとも1になる確率」に等しい。エネルギーの式に三つの積が無くても、この確率がゼロになるとは限らない。制限されるのは分布の族のほう—重みとバイアスを動かしたときにこのモデルで表せる確率分布の集まりのこと—で、狙った高次の依存関係を柔軟に作ることができない。
隠れユニットを介せば、可視ユニット間に高次の相関を作れる。「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 を加えた。これは他のユニットからの入力とは別に、ユニット i が 1 になりやすいかどうかを調節する量である。b_i が正なら s_i = 1 のエネルギーを下げ、負なら上げる。)そして同時分布が
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} の決め方である。なお本節では、全状態 \mathbf{s} \in \{0,1\}^N を単に s と書き、s_i をその第 i 成分、s^{\text{data}} をデータとして与えられた全状態とする。
順序を決めておこう。まず隠れユニットがない場合—状態のすべてがデータとして観測される場合—で導く。式が短く、正相と負相という骨格がはっきり見えるからだ。隠れユニットがある場合は、そのあとで同じ計算をたどる。
これから導く学習則の働きを、先に数で見ておこう。隠れユニットのない2ユニットのモデルで、重みとバイアスをすべてゼロにすると、\{0,1\}^2 の4通りの状態が等確率になる。両方が1である確率は 1/4 である。いっぽう手元の4個のデータのうち3個で両方が1だったとしよう。データの側の頻度は 3/4 である。これから導く学習則は、この二つの差 3/4 - 1/4 = 1/2 に比例して重みを動かす。差に掛ける歩幅を 0.1 と決めておけば、w_{12} は 0.05 だけ増える。データでよく見る同時活動を、モデルの側でも起こりやすくする向きである。
やりたいことははっきりしている。手元にデータがある。そのデータが出やすくなるように重みを調整したい。つまり、データの対数尤度
\log p(s^{\text{data}}) = -E(s^{\text{data}}) - \log Z
を大きくする方向へ w_{ij} を動かせばよい。方針が立ったら、あとは微分するだけである。\partial/\partial w_{ij} を計算しよう。
右辺は2つの項に分かれている。第1項は易しく、第2項が厄介だ。順に片づける。
第1項
ここでは w_{ij}=w_{ji} を一本の辺の重みとして一つの変数と数える。すると各辺を一度だけ数えて E(s) = -\sum_{k<l} 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}}
これは「データを見せたとき、ユニット i と j が同時に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項と同じ計算)}\\ &= -\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}} と書いた。)では、隠れユニットがある場合はどうなるか。観測できるのは可視ユニット \mathbf{v} だけなので、尤度は隠れユニットを足し上げた形になる。
\log p(\mathbf{v}) = \log \sum_{\mathbf{h}} e^{-E(\mathbf{v}, \mathbf{h})} - \log Z
これを w_{ij} で微分しよう。第2項の -\log Z は上とまったく同じ計算になるので、第1項だけを見る。\log の微分から、各隠れ状態の寄与に e^{-E(\mathbf{v},\mathbf{h})} / \sum_{\mathbf{h}'} e^{-E(\mathbf{v},\mathbf{h}')} という重みが付く(分母の \mathbf{h}' は、可能な隠れ状態をすべて足すための記号である)。この比は、可視ユニットを \mathbf{v} に固定したときの条件付き確率 p(\mathbf{h}\mid\mathbf{v}) そのものである。したがって
\frac{\partial}{\partial w_{ij}} \log \sum_{\mathbf{h}} e^{-E(\mathbf{v},\mathbf{h})} = \sum_{\mathbf{h}} p(\mathbf{h}\mid\mathbf{v})\, s_i s_j = \mathbb{E}_{p(\mathbf{h}\mid\mathbf{v})}\big[s_i s_j\big]
となる。平均を取るあいだ、可視ユニットの値は動かさず、隠れユニットの値だけを動かす。これを尤度の式に戻すと、
\frac{\partial \log p(\mathbf{v})}{\partial w_{ij}} = \underbrace{\mathbb{E}_{p(\mathbf{h}\mid\mathbf{v})}\big[s_i s_j\big]}_{\textsf{正相}} - \underbrace{\mathbb{E}_{p(\mathbf{v},\mathbf{h})}\big[s_i s_j\big]}_{\textsf{負相}}
となる。形は変わらない。違うのは正相のほうで、「データをそのまま数える」から「可視ユニットをデータに固定したときの、隠れユニットの条件付き分布で平均する」に変わった。この条件付きの平均も、一般のボルツマンマシンでは簡単ではない—それを易しくするのが第7節の制限ボルツマンマシンである。
ここがポイント
学習は「データを見せたときの相関」から「モデルが勝手に生み出す相関」を引いた差で進む。差がゼロになったら学習は止まる。つまりボルツマンマシンのゴールは、自分が生み出す世界の相関構造を、見せられた世界の相関構造に一致させることである。
この式の形を、しばらく眺めてほしい。第1項はヘッブ則そのものである。「一緒に発火する細胞は結合が強まる」—神経科学が経験的に見出した規則が、対数尤度を上げるという純粋に統計的な要求から出てきた。これは偶然ではない。第14章で Wake-Sleep の話をするとき、同じ構造がもう一度現れる。
では第2項は何なのだろうか。データを見せずに、モデルを勝手に走らせたときの相関である。放っておくと勝手に強くなってしまう結合を引き算して抑える、いわば忘却の項だ。そしてこれが、次節でわれわれを苦しめることになる。
同時活動の平均を合わせるこの学習は、確率分布を点とみなす幾何の言葉でも捉えられる。Amari, Kurata & Nagaoka (1992) は、その見方を情報幾何として定式化した。詳しい読み替えは発展編B.1に置く。第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} だけを動かす。表の下段 \langle s_1 s_2\rangle はモデルでの平均である。
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 | 0.043 | 0.109 | 0.250 | 0.475 | 0.711 | 0.870 | 0.980 |
w_{12}=0 のとき Z=8(2^3)で \langle s_1 s_2\rangle = 1/4—独立な公平コイン2枚である。当然の答えが出ることを、まず確かめてほしい。
そしてw_{12} を上げると \langle s_1 s_2\rangle は単調に増える。この例では、目標が0より大きく1より小さく、学習率も十分小さければ収束する。その理由を考えてほしい。学習則は \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{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 個サンプルして平均を取る。ここで1個のサンプルとは、ネットワーク全体の状態 \mathbf{s}^{(m)} \in \{0,1\}^N のことである。上付きの (m) はサンプルの番号(m = 1, \dots, M)、s_i^{(m)} はそのサンプルでのユニット i の状態を表す。各サンプルで s_i^{(m)} s_j^{(m)} を計算し、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節の確率的更新規則を \{0,1\} 表記に書き直したものである。十分長く回せば、ギブス分布からのサンプルが得られる。
それでも遅い
原理的には解決した。だが実用にならない。
問題は「十分長く」の部分である。マルコフ連鎖が定常分布に到達するまでの時間(緩和時間)は、エネルギー地形の形に依存する。
そして深い谷がいくつもある地形では、絶望的に遅くなる。一つの谷に落ちると、そこから抜け出すには高いエネルギー障壁を越えねばならず、上りと下りの遷移確率の比が e^{-\Delta E} になるので、障壁が高いほど指数的に抜け出しにくい。確率分布の山(モード)はエネルギー地形の谷に対応する。一つのモードから別のモードへ移るのに、天文学的な時間がかかりうる。そして学習の各ステップで、これをやり直さねばならない。重みが変わればエネルギー地形も変わるからだ。
ボルツマンマシンは、理論的には美しく、実用的には遅すぎた。1980年代に提案されながら、長く実用にならなかった理由がこれである。
ここがポイント
分配関数 Z は、比を取れば消える(MCMC が使える)。だが MCMC の収束が遅い。これがボルツマンマシンの実用化を阻んだ壁である。
この壁を覚えておいてほしい。第14章では、まったく違う方法—変分法による迂回—でこの困難に立ち向かうことになる。
7. 制限ボルツマンマシンと contrastive divergence
構造を制限する
Smolensky と Hinton らの解決策は、ネットワークの構造を制限することだった。
制限ボルツマンマシン(restricted Boltzmann machine, RBM)では、可視層内・隠れ層内の結合を禁止する。可視と隠れの間だけを結ぶ—二部グラフである。本節では、この層間の結合だけを W = (w_{ij}) \in \mathbb{R}^{N_v \times N_h} に並べる(行 i が可視ユニット、列 j が隠れユニット。前節までの全ユニット間の結合行列とは大きさが違う)。\mathbf{a} \in \mathbb{R}^{N_v} と \mathbf{b} \in \mathbb{R}^{N_h} は、それぞれ可視・隠れユニットのバイアスを並べたベクトルである。
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)である。
- データ \mathbf{v}^{(0)} から \mathbf{h}^{(0)} \sim p(\mathbf{h}\mid\mathbf{v}^{(0)}) をサンプル
- \mathbf{v}^{(1)} \sim p(\mathbf{v}\mid\mathbf{h}^{(0)}) をサンプル
- \mathbf{h}^{(1)} \sim p(\mathbf{h}\mid\mathbf{v}^{(1)}) をサンプル
- 更新: \Delta w_{ij} \propto \langle v_i h_j\rangle^{(0)} - \langle v_i h_j\rangle^{(1)}
正相は 0 ステップ目、負相は 1 ステップ目から取る。上付きの (0) と (1) は、データを出発点として可視層へ戻る往復を何回行ったかを表す。\langle v_i h_j \rangle^{(0)} は手順1で得た v_i^{(0)} h_j^{(0)} の平均、\langle v_i h_j \rangle^{(1)} は手順3まで進めて得た v_i^{(1)} h_j^{(1)} の平均である。
なぜこれで動くのか
厳密には、これは対数尤度の勾配ではない。定常分布に達していないのだから、\langle\cdot\rangle^{(1)} \ne \langle\cdot\rangle_{\text{model}} である。
だが実用上はよく機能する。直感的な説明はこうだ—学習の目的は「データの相関」と「モデルの相関」を一致させることだった。ならば、データから1ステップ動かしたときに分布が変わらなければ、それは定常状態に近い。「動かしても変わらない」ことを目指せばよい。
ここでデータの可視状態の分布を p_0、そこから交互ギブスサンプリングを k 回往復したあとの可視状態の分布を p_k(CD-1 なら k=1)、重みを固定して十分長く更新したときの定常分布を p_\infty(=モデルの可視分布 p(\mathbf{v}))とする。CD は、二つの KL の差 \mathrm{KL}(p_0\|p_\infty) - \mathrm{KL}(p_k\|p_\infty) を減らす手続きとして動機づけられている。ただし正確に言えば、通常の更新式はこの差の厳密な勾配でもない(k ステップ後の分布 p_k 自身がパラメータに依存する分の項を落としている)。対数尤度でも、別の目的関数の厳密な勾配でもない—それでも実務的には十分な近似だった。
ここには教訓がある。理論的に正当化しきれない近似でも、動くなら使う—深層学習の発展には、この種の判断が繰り返し現れる。理論が後から追いつくこともあれば、追いつかないこともある。
8. 深層信念ネットワーク
積み上げる
RBM が学習できるようになると、次の発想が出てくる。積み重ねたらどうか。
第一の RBM を、データ \mathbf{v} で学習する。すると隠れ層 \mathbf{h}^{(1)} が、データの特徴を表すようになる。
その \mathbf{h}^{(1)} を、次の RBM の「データ」として使う。そうして \mathbf{h}^{(2)} を学習する。以下同様。これが貪欲層別事前学習(greedy layer-wise pretraining)であり、こうして得た重みで初期化するのが深層信念ネットワーク(deep belief network, DBN)である。生成モデルとしての DBN は、RBM をそのまま積み上げたものではない—最上層だけが無向の RBM で、下の層へは有向の結合が下向きに繋がる形をしている。
なぜこれが重要だったか
2006年当時、深いネットワークを勾配降下法だけで学習することは困難だった。勾配消失の問題があったからである(第8章第6節)。層を深くすると、下層まで勾配が届かない。
DBN の事前学習は、この困難を回避した。
- まず教師なしで層ごとに RBM を学習し、重みを良い初期値に持っていく
- そのあと教師あり学習で全体を微調整(fine-tuning)する
この二段構えが、深いネットワークを実用的にした。Hinton らの2006年の一連の論文が、深層学習ブームの直接的な引き金になったと言ってよい。
そして役目を終える
ただし、この手法自体は現在ほとんど使われていない。その後の展開—ReLU の導入、より良い初期化法(Xavier/He)、バッチ正規化、そして何より計算資源とデータ量の増大—によって、事前学習なしで深いネットワークが学習できるようになったからである。
歴史的な役割は大きかったが、技術としては置き換えられた。
何が残ったか
だが、DBN が残したものは二つある。第一に、教師なし事前学習という発想。大量のラベルなしデータで表現を学び、少量のラベルつきデータで課題に適応させる—この構図は、現代の基盤モデルの事前学習と微調整に、そのまま生き延びている。
第二に、オートエンコーダへの道。オートエンコーダとは、入力をいったん内部表現に写し、そこから元の入力を復元するように学ぶネットワークである。RBM 自体は確率的な生成モデルで、入力を決まった形に復元する装置ではない。だが積み上げた RBM の重みを、エンコーダとデコーダとして左右に展開し、再構成の誤差で微調整すると、深層オートエンコーダになる。Hinton と Salakhutdinov (2006) はこの手順で次元削減ができることを示した。そしてオートエンコーダは、第14章の VAE へまっすぐつながる。
次章と、その先へ
本章では、エネルギー関数という道具を立て、学習則を導き、そして分配関数の壁にぶつかった。
次章では、この壁を迂回する。確率モデルをいったん離れ、入力から出力への写像を連鎖律で学ぶ—バックプロパゲーションである。そして第14章で、われわれはこの壁に正面から挑む。変分法という別の登り方で、確率モデルを保ったまま学習できるようにする。そのとき本章の正相・負相が、Wake 相・Sleep 相として姿を変えて再登場する。
本章の伏線は、そこまで届いている。
確認問題
[導出]ホップフィールド・ネットワークで、更新のたびにエネルギーが減少することを証明せよ。証明のどこで対称性 w_{ij}=w_{ji} が使われるか。(第1節)
[導出]ヘッブ則 w_{ij} = \frac{1}{N}\sum_\mu \xi_i^{(\mu)}\xi_j^{(\mu)}(i \ne j、w_{ii}=0)のもとで、記憶パターン \boldsymbol{\xi}^{(1)} が近似的に固定点になることを、局所場を計算して示せ。(第1節)
[導出]クロストーク項の分散が P/N 程度になることを見積もれ。(第2節)
[確認]ギブス分布 p \propto e^{-E} から、「エネルギーを決めること」と「確率分布を決めること」が同じである理由を述べよ。(第3節)
[確認]学習則の正相と負相のうち、なぜ負相だけが計算困難なのかを述べよ。(第5節・第6節)
[導出]制限ボルツマンマシンで、隠れユニットが条件付き独立になる理由を、エネルギー関数の形から説明せよ。(第7節)
[考える]Contrastive divergence が対数尤度の厳密な勾配でない理由と、それでも機能する直感的な説明を述べよ。(第7節)
[考える]深層信念ネットワークの貪欲層別事前学習が、2006年当時なぜ重要だったか。またなぜ現在は使われないか。(第8節)
参考文献
- Hopfield, J. J. (1982). Neural networks and physical systems with emergent collective computational abilities. Proceedings of the National Academy of Sciences, 79(8), 2554–2558. https://doi.org/10.1073/pnas.79.8.2554 — エネルギー関数と記憶容量[1節・2節]
- Nakano, K. (1972). Associatron—A model of associative memory. IEEE Transactions on Systems, Man, and Cybernetics, SMC-2(3), 380–388. https://doi.org/10.1109/tsmc.1972.4309133 — 同じ連想記憶の、十年早い提案[1節]
- Amari, S.-I. (1972). Learning patterns and pattern sequences by self-organizing nets of threshold elements. IEEE Transactions on Computers, C-21(11), 1197–1206. https://doi.org/10.1109/t-c.1972.223477 — 同上。パターンの系列まで扱っている[1節]
- 甘利俊一(2025)『脳・心・人工知能:数理で脳を解き明かす』講談社. — 当事者による経緯[1節]。読み物として面白い
- 島崎秀昭(2025)「高次相関をめぐる冒険:甘利俊一先生の京都賞受賞に寄せて」『日本神経回路学会誌』32(4). — 連想記憶からボルツマンマシンへの拡張を情報幾何から見通す[1節・4節]
- Amit, D. J., Gutfreund, H., & Sompolinsky, H. (1985). Storing infinite numbers of patterns in a Spin-Glass model of neural networks. Physical Review Letters, 55(14), 1530–1533. https://doi.org/10.1103/physrevlett.55.1530 / Amit, D. J., Gutfreund, H., & Sompolinsky, H. (1987). Statistical mechanics of neural networks near saturation. Annals of Physics, 173(1), 30–67. https://doi.org/10.1016/0003-4916(87)90092-3 — 記憶容量 0.138N の出典[2節]。統計力学の道具が要る
- Ackley, D. H., Hinton, G. E., & Sejnowski, T. J. (1985). A learning algorithm for Boltzmann machines. Cognitive Science, 9(1), 147–169. https://doi.org/10.1207/s15516709cog0901_7 — 正相・負相の原典[5節]
- Amari, S., Kurata, K., & Nagaoka, H. (1992). Information geometry of Boltzmann machines. IEEE Transactions on Neural Networks, 3(2), 260–271. https://doi.org/10.1109/72.125867 — 学習則を射影として読み直す[5節]。第11章・第16章への橋
- Hinton, G. E., Osindero, S., & Teh, Y. (2006). A fast learning algorithm for deep belief nets. Neural Computation, 18(7), 1527–1554. https://doi.org/10.1162/neco.2006.18.7.1527 — 深層信念ネットワーク[8節]
- Hinton, G. E., & Salakhutdinov, R. R. (2006). Reducing the dimensionality of data with neural networks. Science, 313(5786), 504–507. https://doi.org/10.1126/science.1127647 — 積み上げた RBM から深層オートエンコーダへ[8節]
- Nakazawa, K., et al. (2002). Requirement for hippocampal CA3 NMDA receptors in associative memory recall. Science, 297(5579), 211–218. https://doi.org/10.1126/science.1071795 — パターン補完の実験[コラム C7]