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

Longformer

Longformer 将滑动窗口注意力与少量全局 token 结合起来,因此其计算成本随序列长度线性增长,并且能够处理 4,096 个 token 的文档。

Longformer 是一种面向长文档的Transformer,它用滑动窗口注意力取代完整的自注意力:每个token周围使用滑动窗口注意力,并对少数由任务选定的 token 使用全局注意力。因此,其计算成本随输入长度线性增长,而不是二次增长。Allen 人工智能研究所的 Iz Beltagy、Matthew Peters 和 Arman Cohan 在 2020 年的论文《Longformer:长文档 Transformer》中介绍了该模型。BERT和 RoBERTa 等编码器最多只能读取 512 个 token,因此更长的文本必须拆成多个片段,而片段间的关联会因此丢失。发布的 Longformer 模型可一次读取 4,096 个 token,上下文窗口长度是原来的八倍。

Longformer 的注意力机制如何工作#

每一层都会在同一个注意力机制中结合局部和全局模式:

  • 滑动窗口注意力:每个 token 都会关注固定窗口内的邻近 token;在发布的模型中,窗口两侧各包含 256 个 token。
  • 扩张滑动窗口:在被关注的位置之间留出间隔,可让注意力头以相同的计算成本看到更远的位置。作者在字符级语言模型的上层中,对少数几个注意力头使用了扩张。
  • 全局注意力:选定的 token 会关注所有位置,所有位置也会关注这些 token;该机制使用独立的查询、键和值投影。具体选择哪些 token 取决于任务:分类任务使用 [CLS] token,问答任务则使用问题中的 token。

堆叠多个层会扩大窗口的覆盖范围,就像堆叠卷积会扩大感受野一样;卷积神经网络(CNN)中有 l 层、窗口大小为 w 时,可覆盖 l × w 个 token。每一层计算的注意力分数约为 n × w 个,而不是 n × n 个。统计 Longformer 掩码中的 token 对,可以直观地看出差别:

import torch

window = 512  # Longformer-base: 256 tokens on each side of every token

for n in (1024, 2048, 4096):
    pos = torch.arange(n)
    # Sliding window: each token attends to neighbors within window / 2 positions
    mask = (pos[:, None] - pos[None, :]).abs() <= window // 2
    # Global attention on token 0 ([CLS]): it sees every token and every token sees it
    mask[0, :] = True
    mask[:, 0] = True
    print(f"{n} tokens: full attention {n * n / 1e6:.1f}M scores, Longformer {mask.sum().item() / 1e6:.1f}M")

它会显示 Longformer 的分数数量为 0.5M、1.0M 和 2.0M,而完整注意力分别为 1.0M、4.2M 和 16.8M:输入长度每增加一倍,Longformer 的注意力计算量就增加一倍,而完整注意力的计算量则增加四倍。实际实现只会计算带状区域中的分数,这正是节省内存的关键。

训练与结果#

Longformer 从 RoBERTa 检查点开始。作者将其 512 个学习到的位置嵌入复制八次,以覆盖 4,096 个位置,并在长文档上继续进行掩码语言模型预训练。经过微调后,它在长文档任务上始终优于 RoBERTa,并在 WikiHop 和 TriviaQA 问答基准上创下当时最先进的结果;字符级语言模型也在 text8 和 enwik8 上取得了新成绩。

Longformer-Encoder-Decoder(LED)添加了解码器,可用于文本摘要和其他文本生成任务;研究人员展示了它对 arXiv 上完整科学论文进行摘要的能力。Hugging Face Transformers 实现了这两种模型,并使用 global_attention_mask 接收全局 token。此后还出现了针对特定领域的版本,例如 Clinical-Longformer,它使用大型临床文本语料库进行预训练,并在包括命名实体识别、问答和文档分类在内的 10 项任务上进行评估。

  • Transformer-XL:逐段读取长文本,并让每一段关注前一段缓存的隐藏状态,通过循环机制扩展上下文,适用于从左到右的生成。
  • BigBird:Google 在同年推出的模型,在窗口注意力和全局注意力之外增加了随机注意力连接,同样可以读取 4,096 个 token。
  • 稀疏注意力:Longformer 所属的固定注意力模式大家族。
  • Flash Attention:在片上内存块中计算精确的完整注意力,因此内存使用量随序列长度线性增长,而注意力分数数量仍呈二次增长。

视觉中的局部与全局注意力#

高分辨率图像也会带来同样的问题,因为视觉 Transformer(ViT)会将图像转换成数千个图像块 token。Swin Transformer通过移动局部窗口来解决这一问题;Meta 的分割一切模型(SAM)已集成到 Ultralytics 软件包中,它会在不同模块中交替使用窗口注意力和全局注意力来执行图像分割:其 ViT-B 图像编码器在 12 个模块中的 8 个模块内,对 64 × 64 图像块网格中的非重叠 14 × 14 窗口进行注意力计算,并在模块 2、5、8 和 11 中,对全部 4,096 个图像块执行全局注意力。

探索解决方案

体育领域的计算机视觉

体育领域的计算机视觉

了解 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 的未来!

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