1. 引言:从稠密到稀疏的范式转变

经典和现代Hopfield网络都使用softmax激活,产生稠密的注意力分布——所有存储模式都有非零权重。但稠密检索有两大问题:

  1. 虚假态:检索结果是多个模式的混合,可能不是任何存储模式
  2. 缺乏稀疏性:生物神经元(如齿状回)的发放是稀疏的,不是全激活

稀疏与结构化Hopfield(Santos 2024-2025)通过Fenchel-Young损失统一框架解决了这些问题:

  • sparsemax:完全稀疏(top-1模式被选中)
  • -entmax:连续稀疏(介于softmax和sparsemax之间)
  • SparseMAP:结构化检索(top-子集、连续跨度)
  • Fenchel-Young Hopfield:所有上述的数学统一

1.1 内容框架

┌─────────────────────────────────────────────────────────────────────┐
│              稀疏与结构化Hopfield统一框架                              │
├─────────────────────────────────────────────────────────────────────┤
│                                                                     │
│                    Fenchel-Young损失                                 │
│                          │                                          │
│      ┌───────────────────┼───────────────────┐                      │
│      ↓                   ↓                   ↓                      │
│   经典稀疏            连续稀疏              结构化                   │
│   sparsemax           α-entmax            SparseMAP                │
│   (top-1)             (1<α<2)             (top-k/span)             │
│      ↓                   ↓                   ↓                      │
│   精确检索            软检索              结构检索                  │
│   M个模式             介于稠密和稀疏       关联检索                  │
│                                                                     │
│              所有 = Hopfield-Fenchel-Young 特殊情况                 │
└─────────────────────────────────────────────────────────────────────┘

1.2 关联文档


2. Fenchel-Young损失基础

2.1 凸分析回顾

Fenchel对偶:凸函数的对偶为:

Fenchel-Young不等式

等号成立当且仅当

2.2 Fenchel-Young损失

定义(Blondel & Martins 2020):

其中是真实标签,是预测得分。

性质

  • 当且仅当 (完美预测)
  • 连续、可微(几乎处处)

2.3 梯度 = argmax

核心关系

对偶函数的梯度正则化argmax

2.4 重要特例

(正则化)(预测)性质
Shannon negentropysoftmax稠密
sparsemax完全稀疏
Tsallis -entropy-entmax(连续稀疏
-norm-normmax中等稀疏
Indicator of polytopeSparseMAP结构化

3. 稀疏Hopfield网络

3.1 Sparsemax激活

正则化):

性质

  • 稀疏:许多分量恰好为零
  • 欧几里得投影到单纯形的投影

计算:通过阈值法:

def sparsemax(theta):
    """sparsemax激活"""
    # 1. 排序
    sorted_theta, _ = torch.sort(theta, descending=True)
    # 2. 计算阈值
    cumsum = sorted_theta.cumsum(dim=-1)
    k = torch.arange(1, theta.shape[-1] + 1, device=theta.device).float()
    # 找到满足 cumsum - k*threshold > 0 的最大k
    support = cumsum - sorted_theta > 0
    k_star = support.sum(dim=-1, keepdim=True)
    threshold = cumsum.gather(-1, k_star - 1) / k_star
    # 投影
    return torch.clamp(theta - threshold, min=0)

3.2 稀疏Hopfield更新

稀疏Hopfield能量(Santos 2024):

更新规则

特性

  • 只激活top-相关模式(由sparsemax自动决定)
  • 检索结果是单个存储模式的精确恢复(无混合)
  • 精确检索容量 = (所有存储模式)

3.3 -entmax激活

Tsallis -entropy

\frac{1}{q(q-1)}\sum_i (y_i - y_i^q) - \frac{1}{q} & q \neq 1 \\ -\sum_i y_i \log y_i & q = 1 \end{cases}$$ **预测**: $$\nabla\Omega_q^*(\theta) = \alpha\text{-entmax}(\theta), \quad \alpha = q + 1$$ **特例**: - $\alpha = 1$($q = 0$):sparsemax($\ell_2$正则化) - $\alpha = 2$($q = 1$):softmax(Shannon) - $1 < \alpha < 2$:介于稀疏和稠密之间 **$\alpha$-entmax Hopfield**: $$\xi^{\text{new}} = X\,\alpha\text{-entmax}(X^\top\xi)$$ **实践**:$\alpha = 1.5$是常用折中。 ### 3.4 $\gamma$-normmax **$\gamma$-范数正则化**: $$\Omega(y) = \frac{1}{2}(\|y\|_\gamma^2 - \|y\|^2)$$ 其中$\|y\|_\gamma = (\sum_i |y_i|^\gamma)^{1/\gamma}$。 **$\gamma$-normmax**: $$\nabla\Omega^*(\theta) = \gamma\text{-normmax}(\theta)$$ **特性**:控制稀疏度($\gamma$越小越稀疏)。 --- ## 4. 结构化Hopfield网络 ### 4.1 SparseMAP激活 **结构化输出空间**:$\mathcal{Y}$是离散结构集合(如子集、序列、树)。 **指示函数正则化**: $$\Omega(y) = \iota_{\mathcal{Y}}(y) = \begin{cases} 0 & y \in \mathcal{Y} \\ +\infty & y \notin \mathcal{Y} \end{cases}$$ **预测**: $$\nabla\Omega^*(\theta) = \arg\max_{y \in \mathcal{Y}} \langle\theta, y\rangle$$ **SparseMAP** = 在$\mathcal{Y}$上的精确argmax。 ### 4.2 重要结构化空间 | 结构 | 输出 | SparseMAP计算 | |------|------|--------------| | **Top-$k$子集** | $\mathcal{Y} = \{y \in \{0,1\}^N : \sum y_i = k\}$ | 选$\theta$中top-$k$ | | **连续跨度** | $\mathcal{Y} = \{y \in \{0,1\}^N : y$是连续块$\}$ | 动态规划 | | **序列** | $\mathcal{Y} = $ 序列空间 | Viterbi | | **树** | $\mathcal{Y} = $ 树空间 | Eisner算法 | ### 4.3 结构化Hopfield更新 **结构化Hopfield能量**: $$E_{\text{struct}}(\xi) = -\xi^\top X\,\text{SparseMAP}(X^\top\xi) + \frac{1}{2}\|\xi\|^2$$ **更新规则**: $$\xi^{\text{new}} = X\,\text{SparseMAP}(X^\top\xi)$$ **特性**: - 检索结果是**结构化关联**(多个模式的组合) - 更符合生物神经稀疏发放 - 可解释性更强(明确知道激活了哪些模式) ### 4.4 神经科学联系 **齿状回(Dentate Gyrus)**: - 海马体输入门 - 神经元发放极度稀疏(约5%的激活率) - 负责**模式分离**:相似输入映射到不同稀疏表示 **稀疏Hopfield与齿状回的对应**: - 稀疏激活 = 齿状回的稀疏发放 - 模式分离 = sparsemax的精确选择 - 关联记忆 = 海马体CA3区的存储 --- ## 5. Hopfield-Fenchel-Young统一框架(JMLR 2025) ### 5.1 统一能量形式 **Santos et al. JMLR 2025**[^1]提出**Hopfield-Fenchel-Young网络**: $$E(y; \theta) = \Omega(y) + \Omega^*(\theta) - \theta^\top y + \Psi(y) + \Psi^*(\phi) - \phi^\top y$$ 其中: - $\Omega$:Hopfield评分的正则化(如softmax、sparsemax) - $\Psi$:后变换的正则化(如LayerNorm、$\ell_2$约束) - $\theta$:原始得分($X^\top \xi$) - $\phi$:变换后的得分 ### 5.2 统一框架的覆盖范围 **特例**: | $\Omega$ | $\Psi$ | 对应模型 | |----------|--------|----------| | Shannon | $\ell_2^2$ | 现代Hopfield(Ramsauer 2020)| | $\ell_2^2$ | $\ell_2^2$ | 稀疏Hopfield(Hu 2023)| | Tsallis | $\ell_2^2$ | $\alpha$-entmax Hopfield | | Indicator | $\ell_2^2$ | 结构化Hopfield | | Shannon | $\ell_2$ | 归一化Hopfield | | Shannon | LayerNorm | Transformer Hopfield | **所有经典、多项式、指数、稀疏、归一化Hopfield**都可以表示为Hopfield-Fenchel-Young网络的特例。 ### 5.3 检索规则的一般形式 **通用Hopfield检索**: $$\xi^{\text{new}} = X\,\nabla\Omega^*(\theta) = X\,y^*$$ 其中$y^* = \nabla\Omega^*(\theta)$是**正则化预测**。 **统一公式**: $$\xi^{\text{new}} = X\,y^* = X\,\arg\max_{y \in \text{dom}(\Omega)} \theta^\top y - \Omega(y)$$ 这涵盖: - $\Omega = $ Shannon → $\xi^{\text{new}} = X\,\text{softmax}(\theta)$ - $\Omega = \ell_2^2$ → $\xi^{\text{new}} = X\,\text{sparsemax}(\theta)$ - $\Omega = $ Tsallis → $\xi^{\text{new}} = X\,\alpha\text{-entmax}(\theta)$ ### 5.4 精确检索定理 **Santos 2024主定理**: 设模式$\{\xi^\mu\}$两两正交,$\Omega$严格凸、强制(coercive),则: - **存在性**:每个$\xi^\mu$都是单模式不动点 - **唯一性**:$\xi^\mu$是**唯一**检索该模式的不动点 - **精确性**:$\nabla\Omega^*(X^\top \xi^\mu) = e_\mu$(one-hot指向$\mu$) **推论**:稀疏Hopfield有**精确检索保证**,无虚假态。 ### 5.5 容量与误差界 **稀疏Hopfield的检索误差**(Santos 2024): $$\|\xi^{\text{new}} - \xi^\mu\| \leq \|\delta\| \cdot C_\Omega(d, \Delta_\mu)$$ 其中$C_\Omega$依赖于正则化$\Omega$和模式分离度$\Delta_\mu$。 **对比**: - 稠密(softmax):$C_\Omega = \exp(-\beta\Delta_\mu)$(指数小) - 稀疏(sparsemax):$C_\Omega = O(1/\Delta_\mu)$(更鲁棒但非指数小) --- ## 6. 实验与实现 ### 6.1 PyTorch实现:稀疏Hopfield ```python import torch import torch.nn as nn import torch.nn.functional as F def sparsemax(theta: torch.Tensor, dim: int = -1) -> torch.Tensor: """sparsemax激活""" # 排序 sorted_theta, _ = torch.sort(theta, dim=dim, descending=True) cumsum = sorted_theta.cumsum(dim=dim) # 计算阈值 shape = list(theta.shape) shape[dim] = 1 k = torch.arange(1, theta.shape[dim] + 1, device=theta.device).float() k = k.view(*([1] * (theta.dim() - 1)), -1) support = cumsum - sorted_theta > 0 k_star = support.sum(dim=dim, keepdim=True).float() threshold = cumsum.gather(dim, (k_star - 1).long()) / k_star # 投影 return torch.clamp(theta - threshold, min=0) def alpha_entmax(theta: torch.Tensor, alpha: float = 1.5, dim: int = -1) -> torch.Tensor: """α-entmax激活(连续稀疏)""" if alpha == 1.0: return F.softmax(theta, dim=dim) elif alpha == 2.0: return sparsemax(theta, dim=dim) else: # 迭代计算 # α-entmax(θ) = ((α-1) * θ - λ * 1)^(1/(α-1))_+ 归一化 # 通过不动点迭代求解 pass # 简化处理 class SparseHopfieldLayer(nn.Module): """稀疏Hopfield层(Santos 2024)""" def __init__( self, pattern_dim: int, num_patterns: int, alpha: float = 2.0, # alpha=2: sparsemax; alpha=1: softmax ): super().__init__() self.pattern_dim = pattern_dim self.num_patterns = num_patterns self.alpha = alpha self.patterns = nn.Parameter(torch.randn(num_patterns, pattern_dim)) def forward(self, query: torch.Tensor) -> torch.Tensor: """稀疏Hopfield检索""" # 模式归一化 patterns_norm = F.normalize(self.patterns, dim=-1) * (self.pattern_dim ** 0.5) # 相似度 scores = torch.einsum('bd,nd->bn', query, patterns_norm) # (B, N) # 激活 if self.alpha == 2.0: attn = sparsemax(scores, dim=-1) elif self.alpha == 1.0: attn = F.softmax(scores, dim=-1) else: attn = alpha_entmax(scores, alpha=self.alpha, dim=-1) # 加权求和 out = torch.einsum('bn,nd->bd', attn, patterns_norm) return out # 测试 def test_sparse_hopfield(): torch.manual_seed(42) d = 64 N = 100 # 测试不同alpha值 for alpha in [1.0, 1.5, 2.0]: layer = SparseHopfieldLayer(d, N, alpha=alpha) # 强制模式正交 patterns, _ = torch.linalg.qr(torch.randn(d, d)) layer.patterns.data = patterns.T[:, :N] * (d ** 0.5) # 检索测试 query = layer.patterns.data[0] + 0.3 * torch.randn(d) retrieved = layer(query.unsqueeze(0)).squeeze(0) # 激活稀疏度 scores = torch.einsum('d,nd->n', query, layer.patterns.data) if alpha == 2.0: attn = sparsemax(scores) elif alpha == 1.0: attn = F.softmax(scores) n_nonzero = (attn > 1e-6).sum().item() sparsity = 1.0 - n_nonzero / N # 检索误差 error = (retrieved - layer.patterns.data[0]).norm().item() / layer.patterns.data[0].norm().item() print(f"α={alpha}: 稀疏度={sparsity:.2%}, 检索误差={error:.4f}") if __name__ == "__main__": test_sparse_hopfield() ``` ### 6.2 结构化Hopfield(Top-$k$) ```python class StructuredHopfieldTopK(nn.Module): """结构化Hopfield:返回top-k模式的加权和""" def __init__( self, pattern_dim: int, num_patterns: int, k: int = 5, ): super().__init__() self.pattern_dim = pattern_dim self.num_patterns = num_patterns self.k = k self.patterns = nn.Parameter(torch.randn(num_patterns, pattern_dim)) def forward(self, query: torch.Tensor) -> torch.Tensor: """检索top-k模式的加权和""" patterns_norm = F.normalize(self.patterns, dim=-1) * (self.pattern_dim ** 0.5) scores = torch.einsum('bd,nd->bn', query, patterns_norm) # Top-k选择 topk_scores, topk_indices = torch.topk(scores, self.k, dim=-1) attn = F.softmax(topk_scores, dim=-1) # 加权求和 topk_patterns = patterns_norm[topk_indices] # (B, k, d) out = torch.einsum('bk,bkd->bd', attn, topk_patterns) return out ``` ### 6.3 稀疏注意力作为Transformer模块 ```python class SparseHopfieldAttention(nn.Module): """稀疏Hopfield注意力(替代Transformer attention)""" def __init__( self, d_model: int, n_heads: int = 8, alpha: float = 1.5, dropout: float = 0.1, ): super().__init__() self.d_model = d_model self.n_heads = n_heads self.head_dim = d_model // n_heads self.alpha = alpha self.W_qkv = nn.Linear(d_model, 3 * d_model, bias=False) self.W_o = nn.Linear(d_model, d_model, bias=False) self.dropout = nn.Dropout(dropout) def forward(self, x: torch.Tensor, mask: torch.Tensor = None) -> torch.Tensor: B, L, _ = x.shape qkv = self.W_qkv(x).reshape(B, L, 3, self.n_heads, self.head_dim) q, k, v = qkv.permute(2, 0, 3, 1, 4) # 稀疏注意力 scale = 1.0 / (self.head_dim ** 0.5) attn = torch.einsum('bhld,bhkd->bhlk', q, k) * scale if mask is not None: attn = attn.masked_fill(mask == 0, float('-inf')) if self.alpha == 2.0: attn_weights = sparsemax(attn, dim=-1) elif self.alpha == 1.0: attn_weights = F.softmax(attn, dim=-1) else: attn_weights = alpha_entmax(attn, alpha=self.alpha, dim=-1) attn_weights = self.dropout(attn_weights) out = torch.einsum('bhlk,bhkd->bhld', attn_weights, v) out = out.transpose(1, 2).reshape(B, L, self.d_model) return self.W_o(out) ``` --- ## 7. 稀疏Hopfield的实践优势 ### 7.1 计算效率 **sparsemax**的输出稀疏,**后续计算可剪枝**: - 注意力权重稀疏 → 跳过零权重位置 - 内存节省(特别是KV Cache) - 推理速度提升 **Top-$k$模式**($k \ll N$): - 计算量从$O(N)$降到$O(k)$ - 大幅提升长序列效率 ### 7.2 训练稳定性 **稠密softmax的问题**: - 所有位置都有非零梯度 - 训练时容易发散 - 注意力权重爆炸 **稀疏注意力的优势**: - 明确分配注意力到少数位置 - 训练更稳定 - 避免注意力弥散 ### 7.3 可解释性 **稀疏注意力**明确指出哪些模式被检索,可视化更容易。 **应用**: - 模型调试:哪些token影响预测? - 偏差检测:是否存在不当依赖? - 因果分析:推理路径追踪 ### 7.4 与长上下文的兼容性 **稀疏检索**对长序列特别有效: - $N = 10000$个模式,只需激活top-5 - 内存:$O(k)$而非$O(N)$ - 注意力模式更清晰 --- ## 8. 与Transformer稀疏注意力的关系 ### 8.1 现有稀疏注意力方法 | 方法 | 机制 | 稀疏度 | |------|------|--------| | **Sparse Transformer** | 固定模式(局部+全局) | 固定 | | **Longformer** | 滑动窗口+全局token | 固定 | | **BigBird** | 随机+窗口+全局 | 固定 | | **Routing Transformer** | 聚类+簇内注意力 | 动态 | | **Reformer** | LSH相似桶 | 近似 | | **sparsemax attention** | 完全稀疏 | 动态 | | **α-entmax** | 连续稀疏 | 动态 | ### 8.2 稀疏Hopfield的优势 相比固定稀疏模式(如Longformer),稀疏Hopfield提供: - **自适应稀疏度**:根据输入动态调整 - **统一理论**:Fenchel-Young框架 - **精确检索**:保证无虚假态 ### 8.3 与α-entmax的实践对比 **α-entmax vs Softmax**(Peters & Martins 2024): - **可解释性**:α-entmax的注意力更易解释 - **性能**:在NLP任务上接近或超过softmax - **效率**:稀疏计算带来2-5倍加速 ### 8.4 在大模型中的应用 **GPT-4、Claude等**:未明确使用稀疏注意力(仍用softmax),但有内部路由机制(如MoE)。 **研究方向**: - 将稀疏Hopfield应用于LLM - 与Flash Attention等优化结合 - 长上下文场景($L > 100K$) --- ## 9. 理论推广 ### 9.1 混合稀疏-稠密 **实践**:大多数层用softmax,少量层用sparsemax。 **理论**:Fenchel-Young框架下,$\Omega$可以是混合正则化。 ### 9.2 自适应$\alpha$ **学习$\alpha$**:让模型自动选择稀疏度。 ```python class AdaptiveAlphaEntmax(nn.Module): def __init__(self, init_alpha=1.5): super().__init__() self.alpha = nn.Parameter(torch.tensor(init_alpha)) def forward(self, x): return alpha_entmax(x, alpha=self.alpha) ``` ### 9.3 概率稀疏 **Probabilistic Sparse Attention**:注意力权重是稀疏分布的采样。 **Hopfield视角**:随机Hopfield检索,每次激活的模式是随机选择的(Gibbs采样)。 --- ## 10. 应用 ### 10.1 BiSHop(ICML 2024) **Bi-directional Sparse Hopfield**用于表格数据: - **双向检索**:行↔列双向稀疏Hopfield - **非旋转不变性**:表格数据特征无自然顺序 - **特征稀疏**:自适应选择相关特征 **应用**:替代XGBoost在中小型表格数据集上。 ### 10.2 STanHop-Net(ICLR 2024) **Sparse Tandem Hopfield**用于时序预测: - **两个稀疏Hopfield块**:第一个处理时序内,第二个处理跨变量 - **外部记忆**:插件式记忆用于罕见事件 - **广义稀疏现代Hopfield(GSHM)**:理论保证 **应用**:金融预测、气象预报、传感器数据。 ### 10.3 CLOOB(NeurIPS 2022) **Modern Hopfield Networks with InfoLOOB**: - 用现代Hopfield层进行图像和文本编码 - InfoLOOB目标替代InfoNCE - 比CLIP更好的零样本迁移 ### 10.4 OOD检测 **稀疏Hopfield + OOD**: - ID数据:稀疏激活少数模式 - OOD数据:激活弥散或不一致 可用作**分布外检测**的信号。 --- ## 11. 局限与开放问题 ### 11.1 当前局限 1. **计算开销**:sparsemax的排序操作比softmax慢(实际) 2. **训练复杂度**:需要额外优化(Fenchel-Young的特殊结构) 3. **兼容性**:与Flash Attention等优化集成需要重新设计 ### 11.2 开放问题 1. **最优$\alpha$**:给定任务如何选择? 2. **稀疏度理论**:稀疏度与泛化的关系 3. **结构化设计**:如何选择合适的输出空间$\mathcal{Y}$? --- ## 12. 总结 ### 核心要点 1. **Fenchel-Young统一框架**:所有稀疏/结构化Hopfield都是其特例 2. **sparsemax**:完全稀疏,精确检索容量=$M$ 3. **$\alpha$-entmax**:连续稀疏,可调 4. **SparseMAP**:结构化检索(top-$k$、跨度等) 5. **精确检索**:稀疏Hopfield提供理论保证,无虚假态 6. **实践应用**:BiSHop、STanHop-Net、CLOOB等 ### 进一步阅读 - [[hopfield-2024-2026-advances|Hopfield最新进展]] — OutEffHop、非参数等 - [[hopfield-applications-survey|Hopfield应用综述]] — 应用细节 - [[modern-hopfield-networks-foundations|现代Hopfield网络基础]] - Santos et al. JMLR 2025. Hopfield-Fenchel-Young Networks. --- ## 脚注 [^1]: Santos, S., Niculae, V., McNamee, D., & Martins, A. F. T. (2025). Hopfield-Fenchel-Young Networks: A Unified Framework for Associative Memory Retrieval. *JMLR* 26:1–51. arXiv:2411.08590. [^2]: Santos, S., Niculae, V., McNamee, D., & Martins, A. F. T. (2024). Sparse and Structured Hopfield Networks. *ICML 2024*. arXiv:2402.13725. [^3]: Blondel, M. & Martins, A. F. T. (2020). Sparse and Constrained Attention for Neural Machine Translation. *ICML 2020*. [^4]: Martins, A. F. T. & Astudillo, R. F. (2016). From Softmax to Sparsemax: A Sparse Model of Attention and Multi-Label Classification. *ICML 2016*. [^5]: Peters, B., Niculae, V., & Martins, A. F. T. (2019). Sparse Sequence-to-Sequence Models. *ACL 2019*. [^6]: Wu, D., Hu, J. Y.-C., Li, W., Chen, B.-Y., & Liu, H. (2024). STanHop: Sparse Tandem Hopfield Model for Memory-Enhanced Time Series Prediction. *ICLR 2024*. arXiv:2312.17346.