Hopfield Networks讲解
原文:https://ml-jku.github.io/hopfield-layers/
作者:Johannes Brandstetter
贡献者: Viet Tran, Bernhard Schäfl, Hubert Ramsauer, Johannes Lehner, Michael Widrich, Günter Klambauer and Sepp Hochreiter
Feb 16, 2021
Translated by Gemini 3.1 Pro
这篇博客文章解释了论文《Hopfield Networks is All You Need》以及相应的全新 PyTorch Hopfield 层。
主要贡献
- 我们引入了一种新的能量函数及其对应的新更新规则,该规则保证能收敛到能量函数的局部极小值。
- 新的能量函数是 Krotov、Hopfield 和 Demircigil 等人引入的现代 Hopfield 网络(又称密集联想记忆,Dense Associative Memories)的推广(离散状态 ⇒ 连续状态)。具有连续状态的新型现代 Hopfield 网络保留了其离散版本的特性:
- 指数级的存储容量
- 极快的收敛速度
- 由于其连续状态,这种新型现代 Hopfield 网络是可微的,并且可以集成到深度学习架构中。通常模式在一次更新后即可被检索,这与深度网络中激活层的操作兼容。这催生了大量新的深度学习架构。我们提供了三种实用的 Hopfield 层。
- 令人惊讶的是,新的更新规则正是《Attention Is All You Need》中引入的 Transformer 网络的注意力机制。我们在论文中利用这些新见解分析了 Transformer 模型。
这篇博客文章讲了什么
本文分为三个部分:
- 首先,我们通过新的能量函数,展示从传统 Hopfield 网络向现代 Hopfield 网络及其连续状态推广的过渡。
- 其次,展示新能量函数的特性,以及它与 Transformer 网络自注意力机制的联系。
- 最后,我们介绍并解释一种基于我们工作原理构建的全新 PyTorch 层(Hopfield层)。我们展示了几个实际用例,例如用于免疫组库分类的现代 Hopfield 网络与注意力、Hopfield 池化以及两组集合的关联。
从经典 Hopfield 网络到自注意力机制
联想记忆(Associative memories)是20世纪60和70年代最早的人工神经模型之一。其中最著名的是约翰·霍普菲尔德(John Hopfield)在1982年提出的 Hopfield 网络。顾名思义,联想记忆网络的主要目的是将输入与其最相似的模式关联起来,也就是用于存储和检索模式。
Hopfield 网络
最简单的联想记忆只是我们希望存储的 $N$ 个模式 ${x_i}{i=1}^N$ 的外积之和(赫布学习规则)。在经典 Hopfield 网络中,这些模式是极性(二值)的,即 $x_i \in {-1, 1}^d$,其中 $d$ 是模式的长度。对应的权重矩阵 $W$ 为:
$$
$W = \sum{i=1}^N x_i x_i^T$
$$
权重矩阵 $W$ 存储了这些模式,可以通过一个状态模式 $\xi$ 开始检索。
命名法:从现在起,我们将存储的 $N$ 个模式记为 ${x_i}_{i=1}^N$,将任何状态模式或状态记为 $\xi$。
基础的同步更新规则是重复地将状态模式 $\xi$ 与权重矩阵 $W$ 相乘,减去偏置项并取符号函数:
$$
$\xi^{t+1} = \text{sgn}(W\xi^t - b)$
$$
异步版本则最小化以下能量函数 $E$:
$$
$E = -\frac{1}{2}\xi^T W \xi + \xi^T b$
$$
如果仅存储少量的模式,经典Hopfield网络能很好地工作并能够恢复被掩码遮盖的图像。但是如果模式数量增加,模式之间就会发生关联,导致检索出错。这不仅仅是因为存储容量的问题(经典网络的无误差容量约为 $C \cong \frac{d}{2\log(d)}$,带少量误差的容量约为 $C \cong 0.14d$)。真正的痛点在于相关性——我们需要一个能够拉开相近模式距离的模型。
现代 Hopfield 网络 (密集联想记忆)
为了创造更高的存储容量,现代 Hopfield 网络引入了新的能量函数:
Krotov 和 Hopfield 提出了多项式交互函数 $F(z) = z^a$ 的能量函数。
Demircigil 等人将其扩展为指数交互函数 $F(z) = \exp(z)$,能量函数为:
$$
$E = -\sum_{i=1}^N \exp(x_i^T \xi) = -\exp(\text{lse}(1, X^T\xi))$
$$
(其中 lse 是 log-sum-exp 函数)。
这种指数型能量函数使存储容量达到了令人震惊的指数级:$C \cong 2^{d/2}$。通过增加存储容量,现代Hopfield网络允许将相近的模式拉开。我们现在能够区分高度相关的模式,并能够从大量模式中准确检索出特定的模式。
针对连续值模式和状态的新能量函数
我们将上述能量函数推广到连续值模式。我们使用负能量的对数,并加上一个二次项(确保状态范数有限):
$E = -\text{lse}(\beta, X^T\xi) + \frac{1}{2}\xi^T\xi + \beta^{-1}\log N + \frac{1}{2}M^2$
($\beta$ 为逆温度参数,$M$ 是最大模式范数)
通过凹凸过程(CCCP)推导出的新状态更新规则为:
$$
\xi^{\text{new}} = X \text{softmax}(\beta X^T \xi)
$$
这一新能量函数具有以下极重要的性质:
- 全局收敛于局部极小值。
- 指数级的存储容量。
- 只需一次更新步骤即可收敛。
- 学习动态可以通过参数 $\beta$ 控制。低温度(大$\beta$)使得个体模式的吸引盆保持分离;高温度(小$\beta$)则可能形成混合的亚稳态。
新能量函数的更新即是 Transformer 网络的自注意力机制
从上面的更新规则出发,通过以下步骤:
- 将新更新规则推广到一次性处理多个模式。
- 将模式映射到联想空间 (associative space)。
- 对结果进行投影 (projecting)。
假设有 $S$ 个状态模式$\Xi = (\xi_1, \dots, \xi_S)$,更新公式变为 $\Xi^{\text{new}} = X \text{softmax}(\beta X^T \Xi)$。
我们引入投影矩阵 $W_Q, W_K, W_V$,将原始存储模式 $Y$ 映射为键 $K = Y W_K$,将查询状态 $R$ 映射为查询 $Q = R W_Q$。若设 $\beta = \frac{1}{\sqrt{d_k}}$,并转置矩阵相乘,加入值投影矩阵 $W_V$,我们最终得到:
$$
Z = \text{softmax}\left(\frac{1}{\sqrt{d_k}} Q K^T\right) V
$$
瞧!这就是 Transformer 的注意力机制! 如果原始存储模式 $Y$ 和状态模式 $R$ 是相同的输入数据,我们得到的就是 Transformer 的自注意力机制 (Self-Attention)。
深度学习架构中的 Hopfield 层
利用上述机制,我们开发了可微且无需迭代的 PyTorch Hopfield 层。相比标准的 Transformer 自注意力层,它具备以下增强功能:
- 两组集合的关联
- 可改变固定点类型的可变参数 $\beta$
- 为获得精确固定点可进行多次更新
- 调整联想空间维度以控制存储容量
- 支持静态模式查询
- 模式归一化机制
Layer Hopfield (基础 Hopfield 层)
该层可以处理最一般的情况,接受查询模式集合、存储模式集合,并使用 $W_Q, W_K, W_V$ 进行投影。代码实现非常灵活,支持诸如 hopfield((Y, R, Y)) 形式的调用,支持静态和动态投影。
Layer HopfieldLayer
这是一种用于模式检索任务的层变体,此任务下无需可训练权重。可以直接通过 Hopfield 机制进行相似度检索。
通过 HopfieldLayer 进行 Hopfield Lookup (查找)
这是一种输入无关(input independent)的查找机制。网络内部维护着一个或多个可训练的存储模式作为数据库,通过传入的状态查询来从这个学习到的“数据库”中检索信息。
Layer HopfieldPooling (Hopfield 池化层)
如果我们将状态模式(Query)设为单个静态参数,Hopfield 层实际上就变成了一个序列池化层 (Pooling over sequence)。该静态状态被视为原型模式(prototype pattern),对输入序列在Token维度上进行带权重的池化。
DeepRC (实际应用案例)
现代 Hopfield 网络的最前沿应用之一在于计算生物学领域——论文《Modern Hopfield Networks and Attention for Immune Repertoire Classification》。
在这里,现代 Hopfield 网络的高存储容量被用来解决一个极具挑战性的多实例学习(MIL)问题:免疫组库分类。每个人的免疫受体库中有着数以千万计的受体,我们需要在一个含有数十万序列的巨大集合中,准确找到那个能与特定病原体结合的靶序列(哪怕只有一个)。Hopfield 层凭借其指数级的存储容量和注意力机制,极其完美地胜任了从海量数据中大海捞针的任务。