自注意力机制 20 年了,我们终于让它学会"压缩记忆"

一个 8KB 的参数,让 7B 大模型推理速度提升 4 倍,内存压缩 248 倍


问题:Attention 跑不了长序列

Transformer 的自注意力机制有个根本性问题:

r 复制代码
A_ij = exp(q_i^T k_j / √d) / Σ_l exp(q_i^T k_l / √d)

序列长度 n 翻倍 → 计算量翻 4 倍,KV Cache 也翻 4 倍。

一个 7B 模型处理 4K 序列,KV Cache 就要占 168MB;处理 64K 序列,需要 2GB+ ,普通笔记本根本跑不动。

20 年来,大家一直在想办法绕开这个 O(n²):

  • FlashAttention:优化 I/O 路径,不改变复杂度
  • MQA/GQA:多查询/分组查询注意力,共享 K/V
  • 稀疏注意力:预设稀疏模式,灵活度差
  • Mamba/RWKV:线性复杂度,但效果有差距

我们的思路不同:不是近似,而是"聪明地压缩"。


我们的方案:Signal Field Attention

想象你听一个人说话:

  • 刚刚说的(近场),你听得清清楚楚
  • 很久之前说的(远场),你记住了大概意思,不需要一字不差

SFA 就是让 LLM 学会这个机制:

双通道架构

scss 复制代码
                    ┌─────────────────────────┐
输入 Q_t  ───────→ │  SFA 注意力机制          │
                    │                         │
              ┌─────┴─────┐                   │
              │ 近场通道   │──→ softmax(k个token)───→ O_near
              │ 精确计算   │                   │
              └───────────┘                   │
         (最近 k 个 token,精确计算)            │
                                              │
              ┌───────────┐                   │
              │ 远场通道   │──→ EWMA 压缩状态 ──→ α · S_far
              │ 压缩存储   │                   │
              └───────────┘                   │
         (历史所有 token 的加权平均)           │
                                              │
              ┌─────────────────────────┐    │
              │  融合: O = O_near + α·S_far  │
              └─────────────────────────┘    │
                                            ↓
                                          输出

近场通道:对最近的 k 个 token 做标准 softmax 注意力(精确)

远场通道 :用 EWMA(指数加权移动平均) 压缩历史 KV 到固定大小的状态 S

融合:两个通道的输出加权求和

核心公式

ini 复制代码
S_t = γ · S_{t-1} + (1-γ) · mean(K_hist)

O = O_near + α · S_far
  • γ ∈ (0,1):衰变因子,控制"记忆"多远
  • α:可学习混合系数

整个 SFA 只需要约 8KB 的可学习参数。


实验结果(直接上图数据)

推理加速:4.16 倍

在 Qwen2.5-7B-Instruct (4-bit) 上的测试结果:

序列长度 标准注意力 SFA 加速比
128 tokens 45ms 12ms 3.75×
1,024 tokens 720ms 173ms 4.16×
4,096 tokens 11,520ms 2,769ms 4.16×

关键发现:序列越长,加速越稳定。

内存压缩:248 倍

序列长度 标准 KV Cache SFA KV Cache 压缩比
1,024 168 MB 4.2 MB 40×
4,096 672 MB 8.6 MB 78×
8,192 2.1 GB 8.6 MB 248×

到了 64K 序列,标准注意力内存溢出,SFA 正常运行。

困惑度:甚至更好!

在 Qwen2.5-0.5B 上,替换 3 个层做蒸馏训练后:

原始 PPL SFA PPL 变化
第 0 层(浅层) 22.375 23.062 +3.07%
第 11 层(中层) 22.375 22.255 -0.57%
第 23 层(深层) 22.375 20.011 -10.57%

深层反而更好了! 因为我们压缩掉的是冗余的语法细节,保留的是高层语义。

训练成本

指标 数值
额外参数 8.1 KB
训练步数 < 800 步
训练时间 < 2 分钟
显存占用 ~200 MB

为什么深层效果更好?

这其实有一个理论直觉:

  • 浅层编码语法、词法细节 → 这些需要精确信息 → 压缩损失大
  • 深层编码语义、抽象概念 → 这些信息天然可压缩 → 压缩后反而更鲁棒

这和其他论文的观察一致:Transformer 的深层表示更"语义化"、更"抽象"。


和 LoRA 的对比

LoRA SFA
目的 微调 推理加速
额外参数 0.1-1% 模型大小 ~8KB
推理加速 4.16×
内存节省 248×
训练数据 需要任务数据 从基础模型蒸馏

两者不冲突,甚至可以组合使用。


局限性(说实话)

  1. 蒸馏训练能获得最优效果(虽然训练超快)
  2. 浅层有 ~3% 的 PPL 退化
  3. 目前只在自回归语言建模上测试过
  4. 最佳压缩窗口 k 可能因模型而异

我们做了什么

完整的技术栈

bash 复制代码
qn1-experiments/
├── 01-signal-field/     # SFA 核心算法(纯 Python)
├── 02-huayue/           # 混合架构探索
├── 03-guiyuan/          # 增量推理:预填/解码分离
├── 04-lingya/           # 正交基微调
├── 05-ring-buffer/      # 环形缓冲区 KV Cache
├── 06-rca/              # 频域注意力
├── 07-metal-kernel/     # Metal 加速内核
├── 08-ultra/            # 极致部署优化
├── src/                 # MLX 完整模型实现
│   ├── taicu_sf_v2.py           # SFA 完整替换
│   ├── taicu_0.5b_distill.py    # 0.5B 蒸馏
│   ├── taicu_7b_benchmark.py    # 7B 基准测试
│   └── ...
├── LICENSE              # MIT
└── TECHNICAL_REPORT.md  # 论文

特性

  • 纯 Python 实验01-08- 目录):零依赖,任何平台可跑
  • MLX 完整实现src/ 目录):Apple Silicon 原生加速
  • MIT 开源:可以商用
  • 论文:完整技术报告 + 参考文献

一键运行

bash 复制代码
cd 01-signal-field
python test_signal_field.py  # 验证 SFA 原理

cd src
python taicu_sf_v2.py        # 7B 模型完整推理

python ../run_all.py         # 运行所有实验

给 SFA 点个赞

代码全开源,MIT 协议:

github.com/CN-QN1-dali...

如果你也在做高效 LLM 推理、长序列处理、或者 Attention 的优化------这个方案值得一试。

8KB 的改动,4 倍的速度,248 倍的内存压缩。

这或许就是"让 AI 学会压缩记忆"的第一步。


本文代码和论文同步开源。欢迎 fork、PR、讨论。

相关推荐
程序员柒叔2 小时前
Hermes Agent 一周动态-2026-W24
人工智能·github·agent·openclaw·hermes
专注VB编程开发20年5 小时前
通义比GITHUB Copilot差了10倍
github·copilot
驯龙高手_追风5 小时前
Gitlab本地服务器搭建及配置-详细教程
git·github
逛逛GitHub5 小时前
在你微信里用爽 Claude Code,我的开源 Skill 又更新了。
github
qq_白羊座5 小时前
Linux 压缩 / 解压(tar)命令 + 参数详解
linux·运维·github
LeoZY_6 小时前
CH347应用 USB转JTAG功能之:probe-rs搭配CH347下载MCU命令全指南
单片机·嵌入式硬件·mcu·开源·github
赛博三把手7 小时前
「2026 最新推荐」AI 大模型 API 中转站 | 国内直连 ChatGPT/Claude/Gemini 稳定优质的 API 接口服务
人工智能·github·ai编程
zzzzzz3107 小时前
shadcn/improve:让最强模型当架构师,便宜模型当码农
机器学习·程序员·github
小雨青年7 小时前
GitHub Copilot CLI 命令行工具深度使用指南
github·copilot