Hopfield Networks
Hopfield 网络是一种循环联想记忆,能够根据噪声线索恢复已存储的模式,将基于能量的检索与现代注意力机制联系起来。
Hopfield 网络是一种循环神经网络,能够存储模式,并根据不完整或受损的输入恢复这些模式。它们充当联想记忆:模式的一部分可作为线索,用于检索完整模式。存储的记忆就像能量景观中的一个谷底,网络状态不断变化,最终会趋向附近的谷底。
John J. Hopfield 于 1982 年通过研究神经网络中的集体计算提出了这一模型。“Hopfield network”“Hopfield net”和“Hopfield model”都是常见的同义词。该架构属于循环神经网络系列,因为反馈连接会反复更新其内部状态。
Hopfield 网络如何存储和检索模式#
经典 Hopfield 网络包含相互连接的神经元,其状态通常表示为 −1 或 +1。其模型权重是对称的:神经元 A 到神经元 B 的连接权重等于神经元 B 到神经元 A 的连接权重。标准配置会将自连接设为零。赫布学习通过增强存储示例中状态一致的神经元之间的连接来存储模式。从计算角度看,这相当于将每个模式的外积(两两相乘构成的矩阵)加到权重矩阵中。
检索时,每个神经元对加权输入求和,并应用阈值激活函数。异步更新每次只改变一个神经元。在权重对称、自连接为零且精确处于阈值时状态保持不变的条件下,每次状态变化都会降低能量函数的值,直到网络达到稳定配置。这个配置称为吸引子;会收敛到该配置的初始状态构成其吸引域。同时更新所有神经元可能导致配置之间振荡。
存储和检索是彼此独立的操作。存储会改变连接,检索则在保持连接固定的同时改变神经元状态。因此,检索属于状态优化,而不是新一轮反向传播。
使用 Python 恢复模式#
下面的 PyTorch 示例使用赫布规则存储一个二值模式,翻转其中两个元素,然后通过异步更新检索该记忆。
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 网络使用具有渐变值的神经元输出,例如 sigmoid,并逐步趋向平衡状态。Hopfield 于 1984 年确立了这一形式。现代 Hopfield 网络通过不同的能量函数和更高的存储容量扩展了联想记忆;其连续状态变体处理实值向量。
Hubert Ramsauer 及其同事于 2020 年将现代 Hopfield 检索与注意力机制联系起来。查询会与存储的向量进行比较,softmax将相似度分数转换为权重,加权组合则用于检索相关信息。这为 Transformer 中使用的注意力操作提供了一种联想记忆视角。
对于图像表示,Ultralytics YOLO26 通过 model.embed() 提供特征提取功能,返回图像嵌入。这些向量提供了现代联想记忆层使用的实值表示。
成熟的应用包括恢复已存储的视觉模式、汇总大型特征集合以及约束优化。1985 年,Hopfield 和 David Tank 将模拟网络应用于旅行商问题,把路线质量和约束编码到能量景观中。现代 Hopfield 池化还支持免疫库分类,通过多实例学习汇总数十万条生物序列中的信息。
相关概念与存储限制#
自编码器学习一个用于重建输入的编码器—解码器映射;经典 Hopfield 网络则通过收敛到吸引子来重建模式。记忆库存储表示以供后续访问,而 Hopfield 动力学则规定线索如何检索相关状态。
当记忆彼此干扰时,经典网络会出现检索错误。相关模式会产生串扰,虚假吸引子则可能返回多个已存储记忆的混合结果。对于存储随机、近似不相关二值模式的大型经典赫布网络,如果允许少量检索错误,常见的容量估计约为神经元数量的 0.14 倍——例如,1,000 个神经元大约可存储 140 个模式。










