Ultralytics YOLO27: 加入候补名单。
获取 YOLO 许可
返回 Ultralytics 术语表

Attention Sinks

注意力汇聚 token 通常是序列开头的 token,会吸收多余的注意力权重;缓存这些 token 可让 LLM 在处理超长序列时保持稳定。

注意力汇聚 token 是一种token,它在许多注意力头和层中会获得很大比例的注意力权重,尽管其内容与查询无关;它通常是序列中的第一个 token。MIT、Meta AI 和卡内基梅隆大学的 Guangxuan Xiao 及其同事在发表于 ICLR 2024 的论文《带注意力汇聚的高效流式语言模型》中为这一现象命名。他们展示了当滑动 KV 缓存逐出首批 token 时,Llama 2、MPT、Falcon 和 Pythia 等大型语言模型(LLM)会出现性能崩溃;保留其中四个 token 则能恢复稳定生成。

汇聚 token 为何会形成#

自注意力会通过softmax将每个查询的分数转换为权重,而这些权重的总和始终为 1。当上下文中没有任何与某个注意力头相关的 token 时,权重仍必须分配到某处。在因果语言模型中,每个较晚的 token 都能看到最初的 token,因此训练会让这些初始 token 成为注意力头无须使用权重时的默认去向。在对 Llama 2 进行的 StreamingLLM 分析中,除最底部两层外,每一层的所有注意力头都会将注意力集中在初始 token 上。向 softmax 添加汇聚 logit 后,可以看出这一效果:

import torch

torch.manual_seed(0)
values = torch.randn(6, 4)
# A query that matches none of the 6 tokens: every score is close to zero
scores = torch.tensor([0.1, -0.2, 0.0, 0.2, -0.1, 0.0])

# Softmax must hand out a total weight of 1, so the output mixes all six values
weights = scores.softmax(dim=-1)
print(f"No sink: weight on tokens {weights.sum():.2f}, output norm {(weights @ values).norm():.2f}")

# A sink logit joins the softmax but carries no value, so it absorbs the spare weight
sink = torch.tensor([3.0])
weights = torch.cat([sink, scores]).softmax(dim=-1)[1:]
print(f"With sink: weight on tokens {weights.sum():.2f}, output norm {(weights @ values).norm():.2f}")

没有汇聚项时,该注意力头会将全部权重分配给六个无关值,输出范数为 0.83。汇聚 logit 为 3 时,汇聚项获得 77% 的权重,输出缩小到 0.19,因此该注意力头几乎不对当前查询产生作用。OpenAI 的开放权重 gpt-oss 模型会为每个注意力头加入可学习的汇聚 logit,让每个注意力头都有一个存放多余权重的位置,且这些权重不会影响输出。

使用 StreamingLLM 进行流式生成#

无限生成的模型最终会超出任何上下文窗口,也无法将每个 token 都保留在 KV 缓存中;而普通窗口注意力只保留最近的 token,一旦最初的 token 被逐出,就会失效。StreamingLLM 会永久保留最初四个 token 的键和值,并将它们与近期 token 的滚动窗口并列存放;它按 token 在缓存中的位置而非原始文本中的位置分配位置索引,并在每一步重新应用旋转位置嵌入(RoPE):

这种方法使语言模型在 400 万个及更多 token 的序列上保持稳定,速度最高可达滑动窗口方案的 22.2 倍;后者需要为每个新 token 重新计算缓存。不过,窗口仍然限制着模型能够回忆的内容:从中间位置逐出的 token 将永久消失,因此流式聊天机器人或 AI 智能体只能记住最近几轮对话。作者还在预训练模型时,于每个样本开头添加了一个专用的可学习占位 token;该 token 单独承担了汇聚角色。

  • 滑动窗口注意力: 将每个 token 的注意力限制在近期邻居上。如果在推理时将其应用于经过全注意力训练的模型,那么汇聚 token 离开窗口后,模型就会失效。
  • 上下文退化: 提示不断增长但仍未超出上下文窗口时,准确率随之下降的现象。

视觉模型中的汇聚 token#

视觉 Transformer(ViT)也表现出类似现象。在《视觉 Transformer 需要寄存器》一文中,Meta 和 Inria 的研究人员在监督式和自监督 ViT 中发现,低信息量背景图块上存在范数异常大的 token;这些 token 被重新用于内部计算。向输入添加少量额外的寄存器 token 后,这些 token 就承担了该作用,消除了特征图和注意力图中的伪影,并提升了密集预测性能。

Meta 的 SAM 2 可在 Ultralytics 包中运行;它采用类似的“保留锚点加窗口”方案来分配视频内存:对于每一帧新图像,其内存注意力会读取用户提示帧对应的内存库条目(这些条目会在整个视频期间保留),再加上最近 6 帧的条目。因此,无论视频运行多久,每帧的注意力开销都保持不变。

探索解决方案

体育领域的计算机视觉

体育领域的计算机视觉

了解 Ultralytics YOLO 如何通过球员和球追踪、表现分析、教练洞察及运动员康复,推动体育视觉技术的发展。
了解详情
航空影像计算机视觉

航空影像计算机视觉

使用 Ultralytics YOLO 将无人机和航空影像转化为农业、水产养殖、保护工作和地理空间分析的实时洞察。
了解详情
航空航天中的计算机视觉

航空航天中的计算机视觉

使用 Ultralytics YOLO 将计算机视觉应用于航空航天领域,包括飞机检查、跑道 FOD 检测、机场地面作业和复合材料缺陷检测。
了解详情
安防领域的计算机视觉

安防领域的计算机视觉

使用 Ultralytics YOLO 模型守护每个场所。视觉 AI 可用于周界监控、威胁检测、车牌识别和工作场所安全。
了解详情
机器人领域的计算机视觉

机器人领域的计算机视觉

使用 Ultralytics YOLO 模型提升智能机器的能力。机器人领域的视觉 AI 可用于自主导航、感知、目标跟踪和实时控制。
了解详情
物流中的计算机视觉

物流中的计算机视觉

借助 Ultralytics YOLO 模型优化物流流程。视觉 AI 可用于包裹检查、分拣、车辆跟踪和仓库安全实时监控。
了解详情
零售中的计算机视觉

零售中的计算机视觉

借助 Ultralytics YOLO 模型重新构想零售。视觉 AI 可用于库存跟踪、货架监控、排队管理和更深入的客户洞察。
了解详情
医疗领域的计算机视觉

医疗领域的计算机视觉

借助 Ultralytics YOLO 模型构建医疗解决方案。医疗领域的视觉 AI 可加快医学影像处理、优化诊断并监测患者。
了解详情
制造业中的计算机视觉

制造业中的计算机视觉

利用 Ultralytics YOLO 模型优化制造流程。视觉 AI 可用于质量控制、缺陷检测、个人防护装备合规检查和装配线自动化。
了解详情
汽车领域的计算机视觉

汽车领域的计算机视觉

利用 Ultralytics YOLO 模型在汽车领域应用计算机视觉。视觉 AI 可提升道路安全、驾驶辅助和车辆自动化水平,让道路更智能。
了解详情
农业中的计算机视觉

农业中的计算机视觉

借助 Ultralytics YOLO 模型,将视觉 AI 引入智慧农业。为作物监测、牲畜追踪和精准农业提供支持,从而提高产量并实现更智能的生产。
了解详情

让我们携手构建 AI 的未来!

开启你的旅程,迎接机器学习的未来