Hopfield Networks
Hopfieldネットワークは、ノイズを含む手掛かりから保存されたパターンを復元する再帰型連想メモリであり、エネルギーベースの検索と現代の注意機構を結び付けます。
Hopfieldネットワークは、パターンを保存し、不完全または破損した入力から復元する再帰型ニューラルネットワークです。連想メモリとして機能し、パターンの一部を手掛かりに全体を検索します。保存されたメモリはエネルギー地形の谷のように振る舞い、ネットワークの状態は変化しながら近くの谷へと収束します。
John J. Hopfieldは、1982年にニューラルネットワークにおける集団計算に関する研究を通じて、このモデルを提唱しました。「Hopfield network」、「Hopfield net」、「Hopfield model」は一般的な同義語です。このアーキテクチャは、フィードバック接続によって内部状態が繰り返し更新されるため、再帰型ニューラルネットワークの一種です。
Hopfieldネットワークによるパターンの保存と検索#
古典的なHopfieldネットワークは、状態が通常−1または+1で表される、相互接続されたニューロンで構成されます。モデルの重みは対称であり、ニューロンAからニューロンBへの接続の重みは、ニューロンBからニューロンAへの接続の重みと等しくなります。標準的な構成では、自己接続をゼロに設定します。Hebb学習では、保存された例全体で状態が一致するニューロン間の接続を強化することで、パターンを保存します。計算上は、各パターンの外積(ペアごとの積を並べた行列)を重み行列に加算します。
検索時には、各ニューロンが重み付き入力を合計し、しきい値活性化関数を適用します。非同期更新では、一度に1つのニューロンの状態を変更します。重みが対称で、自己接続がゼロであり、しきい値が正確に同じ場合に状態を変えなければ、状態の変化のたびにエネルギー関数が減少し、ネットワークは安定した構成に到達します。この構成はアトラクターと呼ばれ、そこに収束する初期状態の集合は吸引域と呼ばれます。すべてのニューロンを同時に更新すると、構成間で振動することがあります。
保存と検索は別々の処理です。保存では接続を変更し、検索では接続を固定したままニューロンの状態を変更します。そのため、検索は別の誤差逆伝播ではなく、状態の最適化の一種です。
Pythonでのパターン復元#
次のPyTorchの例では、Hebb則を使って1つのバイナリパターンを保存し、2つの要素を反転させた後、非同期更新によってメモリを検索します。
import torch
memory = torch.tensor([1.0, -1.0, 1.0, -1.0, 1.0, -1.0, 1.0, -1.0])
weights = torch.outer(memory, memory) / memory.numel()
weights.fill_diagonal_(0)
state = memory.clone()
state[[1, 6]] *= -1
initial_errors = int((state != memory).sum())
while True:
previous = state.clone()
for i in range(state.numel()):
field = weights[i] @ state
# Preserve the current state when the weighted input is zero.
if field != 0:
state[i] = field.sign()
if torch.equal(state, previous):
break
print(f"Bit errors: {initial_errors} -> {int((state != memory).sum())}")出力はBit errors: 2 -> 0です。再帰的な更新によって、標準的な連想メモリのダイナミクスを用い、破損した手掛かりから保存されたパターンを再構成します。
連続型ネットワーク、注意機構、応用#
連続型Hopfieldネットワークは、シグモイド関数などの段階的なニューロン出力を用い、平衡状態へと推移します。Hopfieldは1984年にこの定式化を確立しました。現代のHopfieldネットワークは、異なるエネルギー関数と高い記憶容量によって連想メモリを拡張したものです。連続状態のバリアントは、実数値ベクトルを扱います。
Hubert Ramsauerらは2020年に、現代のHopfield検索と注意機構を関連付けました。クエリを保存されたベクトルと比較し、softmaxで類似度スコアを重みに変換して、重み付き和から関連情報を検索します。これにより、トランスフォーマーで用いられる注意操作を、連想メモリとして解釈できます。
画像表現では、Ultralytics YOLO26がmodel.embed()を通じて特徴抽出を提供し、画像の埋め込みを返します。これらのベクトルは、現代の連想メモリ層で用いられる実数値表現を提供します。
確立された応用には、保存された視覚パターンの復元、大規模な特徴群のプーリング、制約付き最適化などがあります。HopfieldとDavid Tankは1985年に、経路の品質と制約をエネルギー地形に符号化し、巡回セールスマン問題にアナログネットワークを適用しました。現代のHopfieldプーリングは、マルチインスタンス学習を通じて数十万件の生物学的配列から情報を集約し、免疫レパートリーの分類にも対応します。
関連する概念と記憶容量の限界#
オートエンコーダーは、入力を再構成するエンコーダー・デコーダーのマッピングを学習します。一方、古典的なHopfieldネットワークは、アトラクターに収束することでパターンを再構成します。メモリバンクは後でアクセスするための表現を保存しますが、Hopfieldのダイナミクスは手掛かりから関連する状態を検索する方法を定めます。
古典的なネットワークでは、メモリ同士が干渉すると検索エラーが発生します。相関のあるパターンはクロストークを引き起こし、スプリアスアトラクターによって保存されたメモリが混ざった状態で返されることがあります。ランダムで相互にほぼ無相関なバイナリパターンを保存する大規模な古典的Hebbネットワークでは、少数の検索エラーを許容する場合、よく知られた容量の推定値はニューロン数の約0.14倍です。つまり、ニューロンが1,000個の場合、約140個のパターンを保存できます。










