Hopfieldネットワークの記憶容量を実測。理論値141枚のはずが、文字パターンは3枚で崩壊した
約13分で読めます

Hopfieldネットワークの記憶容量を実測。理論値141枚のはずが、文字パターンは3枚で崩壊した


ニューラルネットは何枚の画像まで「記憶」できるのか。1982年にHopfieldが提案した連想記憶ネットワークには、理論的な答えがある。ニューロン数Nに対して約0.138N枚。それを超えて詰め込むと記憶が壊れ始め、しかもただ忘れるのではなく、どの記憶とも違う「偽の記憶」が現れるという。破局的忘却の回では新しい学習が古い記憶を上書きしていたが、今回は詰め込むこと自体が壊す。本当にそんな崖があるのか、偽の記憶とはどんな顔をしているのか。1,024ニューロンのネットワークを組んで実測した。

実験に使ったコードの全文はGitHubに置いています

32×32の画像を記憶するネットワークを組む

Hopfieldネットワークは、全ニューロンが互いに結合した再帰型ネットワークだ。各ニューロンは+1/-1の2値で、32×32=1,024ニューロンをそのまま32×32の白黒画像とみなす。記憶はヘブ則で書き込む。覚えたいパターンξについて、結合重みを W = (1/N) Σ ξξ^T とするだけ。「同時に発火したニューロン同士の結合を強める」という、パーセプトロンの回でも触れたあの有名なルールだ。

想起は、手がかり画像から出発して各ニューロンを s_i = sign(Σ W_ij s_j) でランダム順に更新し続ける。この更新はエネルギー関数を単調に下げるので、状態はどこかの安定点(アトラクタ)に必ず落ちる。焼きなまし法の回では谷に落ちること自体が厄介だったが、連想記憶では谷に落ちることがそのまま「思い出す」に相当する。記憶したパターンがアトラクタになっていれば、ノイズだらけの手がかりからでも坂を転がるように元の画像へ戻る——これが「連想記憶」だ。

記憶させるパターンは2種類用意した。PILでMeiryoフォントのカタカナ・ひらがな・英数字・漢字を32×32に描画して二値化した文字パターン300枚と、各画素を等確率で±1にしたランダムパターン300枚。

記憶させる32×32の白黒パターンの例。「ア」「ウ」「カ」「ザ」「ナ」「マ」「あ」「け」「づ」「ゃ」「3」「X」「男」「雪」「戸」「波」の16文字が、白背景に黒のドット絵として2段に並んでいる

実験のプロトコルはこうだ。P枚を記憶させ、そのうち1枚の画素を10%反転させたものを手がかりとして与え、収束した状態が元のパターンとオーバーラップ(一致度)0.95以上なら想起成功。これをPごとに30試行ずつ、P=1〜300で繰り返す。理論容量は0.138×1024≒141枚。300枚まで詰め込めば、崖は見えるはずだ。

文字パターンは、たった3枚で崩壊した

まず文字パターンから始めた。理論容量141枚のはるか手前、2枚まではノイズ25%からでも30/30で完全に想起できた。そして3枚目を覚えさせた瞬間、成功率は0/30に落ちた。

3枚。141枚ではなく。

何が起きたのか収束先を調べると、どの文字を手がかりにしても、ネットワークはほぼ同じ状態に吸い込まれていた。形が全然違う10文字(ア・ヨ・山・0・ネ・8・キ・ツ・日・ミ)を選び直して記憶させても同じで、5種類の手がかり全部が、ビット単位で完全に一致する1つの状態に収束した。

形の違う10文字を記憶させたヘブ則ネットワークの想起結果。上段はノイズを25%乗せた「ア」「ヨ」「山」「0」「ネ」の5種類の手がかり画像、下段はそれぞれの収束先。5つの収束先はすべて同一の、まばらな黒い断片が散った意味不明のパターンになっている

この収束先は、黒画素がわずか4.9%しかない、まばらな断片の寄せ集めだ。しかも記憶した10文字それぞれとのオーバーラップが0.57〜0.77と、全員にそこそこ似ていて、誰でもない。10人の顔を混ぜた平均顔のような「幽霊」が、たった1つだけ残り、個々の記憶は全部消えていた。

原因は相関だ。文字パターンは互いに独立ではない。どの文字も背景(白)が8割を占め、ストロークは中央に集まる。実測すると文字同士のオーバーラップは平均0.58、最大0.85もあった。ヘブ則の記憶容量0.138Nという理論値は「パターンが無相関ランダム」という仮定の上に立っていて、相関があるとパターン同士のクロストーク(干渉項)が信号を押し潰す。理論の仮定が崩れると、141枚が3枚まで縮む。仮定とはこれほど重いものかと、数字を見て少し笑ってしまった。

ランダムパターンなら、理論通り141枚あたりに崖があった

では理論の土俵であるランダムパターンならどうか。これは見事だった。

想起成功率と記憶枚数の関係。横軸は記憶させた枚数P(0〜300)、縦軸はノイズ10%の手がかりからの想起成功率。青のランダムパターン+ヘブ則は130枚まで成功率1.0を保ち、140枚付近から急落して230枚で0になる。灰色の破線が理論容量0.138N≒141枚の位置に引かれ、ちょうど急落の始まりと重なる。緑の文字パターン+射影ルールは300枚までほぼ1.0を維持。赤の文字パターン+ヘブ則は2枚までは1.0だが3枚で0に落ち、以降ずっと0のまま

  • 130枚まで: 成功率100%(30/30)。 129枚目を覚えても1枚目は完璧に思い出せる
  • 140枚: 83%。 崩壊の始まりが、理論値141枚のほぼ真上に来た
  • 160枚: 43%、180枚: 10%、230枚以降: 0%

劣化は「なだらか」ではなかった。130枚まで一切壊れず、そこから50枚たらずで全滅する。ハードディスクが徐々に遅くなるのではなく、ある日突然全ファイルが読めなくなるイメージに近い。物理学者がこの崩壊を相転移として解析した(0.138という数字はそこから来る)のも納得の崖っぷりだ。

記憶枚数とノイズ量の両方を振ると、この崖の全体像が見える。

記憶枚数×ノイズ量の想起成功率ヒートマップ。横軸は記憶枚数10〜300、縦軸は手がかりのノイズ量0〜40%。左下の広い領域が成功率1.0の濃い青、右上が成功率0の白で、境界は右下がりの斜めの帯として現れる。少ない記憶ならノイズ40%でも想起でき、130枚ではノイズ15%程度が限界になる。赤い破線の理論容量0.138N≒141枚を超えると、ノイズ0%でもほぼ全滅する

覚えている枚数が少ないうちは、画素の40%を反転させた手がかりからでも完全に復元できる。詰め込むほど、思い出すために必要な手がかりの質が上がっていく。そして200枚を超えると、ノイズ0%——記憶したパターンそのものを見せても——戻ってこない。 記憶した本人がもうアトラクタではなくなっているのだ。

崖の下には「どの記憶でもない何か」が待っている

失敗したとき、ネットワークはどこへ行くのか。収束先を「元の記憶(m≥0.95)」「別の記憶(|m|≥0.9)」「どの記憶とも違う偽アトラクタ」に分類すると、崖の下の失敗はほぼ全部が偽アトラクタだった。P=230以上では30試行中30回、どの記憶とも一致しない状態に落ちる。「アを思い出そうとしてイを思い出す」型の失敗はP=145付近で30回中5回出たのが最大で、脇役に過ぎない。

偽アトラクタの中身を覗くと、こうなっている。

収束した状態と200個の各記憶とのオーバーラップを並べた棒グラフ2段。上段は記憶100枚の成功例で、思い出させたかった記憶(赤い棒)だけがオーバーラップほぼ1.0で突出し、他は0.1以下。下段は記憶200枚の失敗例で、赤い棒(狙った記憶)は0.41止まりで、他にも0.2前後の棒が多数の記憶に対して立ち、どれとも決定的に一致しない

容量内(100枚)の成功例では、狙った記憶とのオーバーラップだけが1.0で屹立し、他はノイズレベル。ところが容量超過(200枚)の失敗例では、狙った記憶と0.41、別の記憶と0.24、また別と0.21……と、多数の記憶と中途半端に重なった状態で固まっている。教科書にはよく「3つの記憶の多数決でできた混合状態」が偽アトラクタの代表として載っているが、実測した状態は上位3記憶の多数決との一致率が71%で、綺麗な3混合とも言い切れなかった。もっと多くの記憶の破片が絡み合った、スピングラスと呼ばれる領域の状態に近い。いずれにせよ、容量を超えたネットワークが見せるのは「空白」ではなく、実在の記憶の断片を縫い合わせた偽物だ。

相関に強い学習則なら、文字300枚が入る

文字3枚で崩壊する問題には、古典的な解決策がある。射影ルール(擬似逆行列法)といって、パターン間の相関を打ち消すように重みを作る学習則だ。ヘブ則が「来たパターンをそのまま足し込む」のに対し、射影ルールは「既存の記憶と重なる成分を差し引いてから書き込む」イメージになる。

効果は劇的だった。ノイズ10%の手がかりなら、文字300枚を記憶させても29/30で想起に成功する。ヘブ則で3枚だったのと同じデータでだ。同じ手がかりを2つのネットワークに与えると、対比がはっきり見える。

想起過程のアニメーション。ノイズを25%乗せた同じ「ア」の手がかりを2つのネットワークに与え、ニューロンが64個更新されるごとの状態を並べて表示する。左の射影ルールで100文字を記憶したネットワークは、ノイズがみるみる消えて完全な「ア」(一致度1.00)に収束する。右のヘブ則で10文字を記憶したネットワークは、ノイズが消えると同時に文字の形まで溶けていき、まばらな断片だけの幽霊状態(一致度0.75)に沈む

左は100文字を記憶した射影ルール。25%のノイズが数スイープで消えて完全な「ア」に戻る。右は10文字しか覚えていないヘブ則で、同じ手がかりから幽霊へ沈んでいく。下半分を完全に塗りつぶした欠損手がかりでも、射影ルール100文字なら20/30で復元できた。

ただし万能ではない。手がかりのノイズを25%に強めると、200枚で21/30、250枚で2/30、300枚で0/30と崩れていく。記憶自体は保持されていても、各記憶を引き込む「盆地」が狭くなり、少し離れた場所から出発すると戻れなくなる。そしてこの限界領域でこそ、一番「偽の記憶」らしいものが見えた。

容量超過気味の射影ルール(300文字記憶)で、ノイズ25%の手がかりから想起に失敗した2つの例。上段は「窓」の手がかりから収束した状態で、「窓」(一致度0.56)に「ぉ」(0.46)と「F」(0.45)の断片が混ざった判読不能のパターン。下段は「り」の手がかりから収束した状態で、「り」(0.68)と「C」(0.62)と「し」(0.62)という曲線の似た3文字が混ざり合っている。各行には収束状態と、それに近い記憶の上位3文字が並べて表示されている

「り」を思い出そうとして、「り」と「C」と「し」——曲線のよく似た3文字——が混ざった状態に落ちる。それぞれとのオーバーラップは0.68、0.62、0.62。どれか1つに決められず、似た記憶同士が溶け合った合成物になっている。「AさんとBさんの顔が混ざった夢」の、これが機械版だ。

正直に書いておくべきこと

  • 成功判定の閾値(m≥0.95)は私が決めたものだ。緩めれば崖の位置は右に、厳しくすれば左に数枚〜十数枚動く。ただし崖が崖であること自体は変わらない。なお全画素の完全一致を要求する理論容量は N/(2 ln N)≒74枚とさらに小さくなる
  • 各条件30試行なので、成功率の細かい数字には±数%の揺らぎがある。崖の位置の議論には影響しない
  • 文字がすぐ壊れるのは「素のヘブ則+相関パターン」の組み合わせの問題で、Hopfield型ネットワーク全体の限界ではない。バイアスを差し引く共分散則も試したが、今回の文字ではほぼ改善しなかった(5枚で1/10)。文字同士の相関は平均画素の偏りだけでは説明できない、ストローク構造由来のものらしい
  • 近年のmodern Hopfield network(Transformerのattentionと等価な連続版)は指数オーダーの容量を持つ。本記事の話は1982年型の古典についてだ

手を動かして意外だったこと

一番の誤算は、崖の位置を確かめるつもりで始めた実験が、「意味のあるデータは3枚で崩壊する」ことを先に突きつけてきたことだ。0.138Nという容量は覚える対象がお互いに似ていないことへの報酬であって、ネットワークの性能そのものではない。「何枚まで記憶できるか」という問いは、実は「データがどれだけ互いに似ているか」という問いとセットでしか意味を持たなかった。

もう1つは幽霊の姿だ。容量オーバーの失敗を「記憶が消える」と想像していたが、実際に起きるのは記憶の融合だった。幽霊はどの記憶ともオーバーラップ0.6前後で重なる。全員に似ているのに誰でもない状態が、個々の記憶より深い谷になってしまい、全部を吸い込む。人間の偽記憶研究でも、実際に見た顔を混ぜた合成顔を「見た」と確信する現象が知られているが、エネルギー地形の上では偽記憶は劣化ではなく、複数の本物から作られた立派な安定状態なのだ。思い出せないときの頭の中には、空白ではなく、もっともらしい合成物が座っている——そう考えると、自分の「確かな記憶」への信頼が少しだけ揺らぐ。

まとめ

  • 1,024ニューロンのHopfieldネットワーク(ヘブ則)で想起成功率を実測: ランダムパターンは130枚まで成功率100%、140枚(理論容量0.138N≒141枚のほぼ真上)から崩れ始め、230枚で0%——なだらかな劣化ではなく崖だった
  • 容量超過時の失敗はほぼすべて、どの記憶とも一致しない偽アトラクタへの収束(230枚以上で30/30)。その中身は多数の記憶の破片が混ざった状態で、200枚を超えると記憶したパターンそのものを見せても戻ってこない
  • 相関のある文字パターンでは、理論値141枚に対してわずか3枚で全記憶が崩壊し、どの手がかりからも同一の「幽霊」(黒画素4.9%、全記憶とオーバーラップ0.57〜0.77)に収束した
  • 相関を打ち消す射影ルールに変えると、同じ文字データで300枚(ノイズ10%)まで想起可能に。ただしノイズ25%では250枚で2/30まで落ち、その失敗状態は「り」+「C」+「し」のような、似た記憶同士が溶け合った偽記憶だった
  • 記憶容量は「何枚」という固定値ではなく、データの相関構造と学習則の掛け算で決まる