各式各样的Attention - -一叶知秋

news/2025/10/30 18:25:40/文章来源:https://www.cnblogs.com/blogyiyezhiqiu/p/19177870

image-20251030135037546

自注意力(Self-Attention)的计算复杂度问题

image-20251030135238038

Local Attention

🌟 一、为什么需要 Local Attention?

先回忆一下普通的 Self-Attention

每个词都要对序列中 所有其他词 计算注意力权重。

如果句子长度是 n,
则计算量是 \(O(n^2)\)

比如句子 2000 个词,那要算 4,000,000 次注意力分数!
—— 这在长序列任务(如文档理解、语音、视频)中太慢太占显存。

于是,就有了 Local Attention(局部注意力)


⚙️ 二、Local Attention 的核心思想

每个词只关注它附近的词(一个窗口范围),而不是整个句子。

换句话说,
模型不再全局计算 \(QK^T\),而是只在一个“局部窗口”内计算。


🧠 举个例子

假设句子有 10 个词,窗口大小(window size)= 3
那么第 5 个词只会关注:

第 4、5、6 个词

也就是说,
注意力矩阵不再是全密集的,而是稀疏的(只保留邻近元素)。


🧮 三、公式区别

标准 Attention:

\(\text{Attention}(Q,K,V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V\)

Local Attention:

\(\text{Attention}(Q,K,V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}} + M_{\text{local}}\right)V\)

其中$ M_{\text{local}}$是一个 mask(掩码矩阵),
用于屏蔽掉超出窗口范围的元素(用 \(-\infty\)表示)。


📊 四、直观图解(文字版)

类型 注意力范围 复杂度 说明
Global (标准) 全部词 O(n²) 每个词都看全局
Local 邻近词(窗口 w) O(n·w) 每个词只看局部
Sparse / Longformer 等 局部 + 选定全局 介于两者之间 更高效又保留上下文

🔍 五、Local Attention 的几种实现形式

类型 描述
Fixed window 每个词看固定窗口(如前后各 32 个词)
Sliding window 使用滑动窗口覆盖整段文本(Longformer 用的)
Dilated window 跳跃式关注(如每隔 k 个词取一个)
Block local 将句子分块,每个块内部自注意力,块之间偶尔通信(如 BigBird)

🚀 六、优缺点总结

优点 缺点
✅ 大幅减少计算量和显存占用 ❌ 无法捕捉长距离依赖
✅ 可以处理更长的序列 ❌ 需要窗口设计得合理
✅ 更容易并行化 ❌ 某些任务(如翻译)全局上下文仍然重要

🧩 七、与其他注意力的对比

类型 描述 代表模型
Full Attention 每个词都看全部 Transformer
Local Attention 每个词只看邻近词 Transformer-XL(部分层)、Longformer
Sparse Attention 只看部分重要词 BigBird, Sparse Transformer
Global Attention 部分“关键词”能看全局 Longformer, BigBird

image-20251030135332727

Stride Attention

Stride Attention(步进注意力) 是一种在 长序列建模高效 Transformer 中常用的注意力机制变体。
它的核心思想是:

不是每个 token 都与所有 token 计算注意力,而是“隔一定步长”地关注部分 token。

这样能降低计算量节省显存,同时保留序列的全局感知能力。


🌟 一、为什么需要 Stride Attention?

在标准 Self-Attention 中:

  • 每个词都要与所有词交互;
  • 计算量是\(O(n^2)\)
  • 对于超长序列(几千、上万 token),几乎不可行。

于是出现了各种“稀疏注意力”机制(Sparse Attention):

  • Local Attention:只看邻居(局部窗口)
  • Stride Attention:隔固定步长采样
  • Block Attention:划块后在块内/块间注意
  • Global Attention:只让部分 token 全局可见(如长文摘要)

⚙️ 二、Stride Attention 的核心思想

Stride Attention 让注意力只发生在“每隔 s 个 token”之间,
其中 sss 就是 stride(步长)。

📘 举例:

假设序列是:

[ x₁, x₂, x₃, x₄, x₅, x₆, x₇, x₈ ]

如果 stride = 2
则:

  • x₁ 关注
  • x₂ 关注

换句话说,每个 token 只和某个“分组”内的点计算注意力。


🧮 三、数学表达

对于第 i 个 token,
它的注意力范围是:

\(S_i = \{ j \mid j \equiv i \ (\text{mod } s) \}\)

然后只在这个集合内计算:

\(\text{Attention}(Q_i, K_{S_i}, V_{S_i}) = \text{softmax}\left(\frac{Q_i K_{S_i}^T}{\sqrt{d_k}}\right)V_{S_i}\)


🧠 四、直观理解

类比 说明
👀 Local Attention 每个词只看“身边的邻居”
🪜 Stride Attention 每个词隔一定距离“采样性地看”其他词
🧠 结合效果 既能看局部,又能跨距获取部分全局信息

⚡ 五、优缺点

优点 缺点
🚀 大幅减少计算量 可能丢失部分依赖信息
💾 占用显存少 不能捕获所有细节
🔗 适合长序列任务(语音、视频、文档) 需设计合适的 stride

🧩 六、常见应用

  • Longformer / BigBird:结合 Local + Stride + Global Attention(形成混合稀疏模式)
  • Transformer-XL / Sparse Transformer:通过步进或块稀疏模式加速
  • 视频理解 / 音频信号处理:token 间高度冗余,用 stride 节点采样最关键特征

🧮 七、和 Local Attention 的区别

对比项 Local Attention Stride Attention
关注范围 当前词周围窗口 隔固定步长的词
感知模式 连续局部 离散抽样
捕获信息 细节丰富 稀疏但覆盖更广
常用于 文本、图像 patch 音频、长序列稀疏采样

💬 八、一句话总结

Stride Attention 就是“隔点看世界”的注意力机制。
它通过跳步关注,降低计算复杂度,同时保留跨距离的信息联系。

image-20251030135350045

Global Attention

🌍 一、Global Attention 是什么?

Global Attention(全局注意力) 让一部分 特殊的 token(例如标题、摘要、分类标记)
可以“看到”整个序列中的所有 token,
同时,也允许其他 token 去关注这些全局 token。

简单说:

局部 token 看局部,全局 token 看全局。


⚙️ 二、为什么需要 Global Attention?

标准 Self-Attention 的计算量是:

\(O(n^2)\)

→ 太大,不适合几千上万长度的输入。

\(Local / Stride Attention\) 虽然降了复杂度,但它们只能看到“附近”或“采样点”,
会丢失全局语义,比如:

  • 文档主题;
  • 段落间依赖;
  • 全局情感走向。

于是我们引入 Global Attention
让一小部分 token 充当“信息中心”,帮助信息在全局传播。


🔢 三、工作机制(以 Longformer 为例)

假设序列是:

[CLS]  A  B  C  D  E  F  G  [SEP]

🔹 Local Attention:

  • 每个词(如 B)只看附近窗口(例如 {A,B,C})

🔹 Global Attention:

  • 特定 token(如 [CLS][SEP]
    可以:
    • 看见所有 token;
    • 被所有 token 看见。

换句话说:

  • [CLS] ↔ 全部单词都能互相注意;
  • 普通词之间仍然是局部窗口。

🧮 四、数学表达

若将所有 token 分为两组:

  • 普通 token:局部注意力区域 \(L_i\)
  • 全局 token:全局注意力区域 \(G\)

则注意力矩阵变成:

\(A_{ij} = \begin{cases} \text{attention}(i, L_i), & i \notin G \\ \text{attention}(i, \text{all tokens}), & i \in G \end{cases}\)

同时,所有 token 都能看到 G。


💡 五、直观理解(比喻)

类型 比喻 说明
Local Attention 👂 “每个人只听附近几个人说话” 节省计算,但信息传播慢
Stride Attention 🧩 “每隔几个人听一次” 信息稀疏传播
Global Attention 🗣 “有几个人能对全场讲话,大家都能听到” 信息中心 / 汇总节点

⚡ 六、优缺点

优点 缺点
🚀 信息可跨全局传播 仍需为全局 token 计算全连接(略贵)
💬 保留全局语义(文档主题、总结等) 需手动指定哪些 token 是“全局”
💾 与 Local/Stride 结合后效率高 单独使用仍昂贵

🧩 七、典型应用

模型 说明
Longformer (2020) 结合 Local + Global Attention 处理长文档
BigBird (Google) 结合 Block + Global + Random Attention(稀疏近似全局)
Transformer-XL / ETC 使用记忆机制实现跨段全局依赖
BERT (CLS token) [CLS] 实际上就是一种全局注意力机制!

📘 八、总结对比表

注意力类型 范围 典型用途 计算复杂度
Local Attention 附近窗口 局部上下文、细节 \(O(n \cdot w)\)
Stride Attention 隔点采样 稀疏全局信息 \(O(n \cdot s)\)
Global Attention 全序列 主题 / 汇总信息 \(O(n \cdot g)\)(g为全局token数)

🧠 九、一句话总结

Global Attention 就是“全局视野的节点”。
它让少数 token(如 [CLS])能看见并影响整个序列,
解决长序列中信息传递受限的问题。

image-20251030135414006

小孩子才做选择

Longformer 使用了3个

Big Bird 使用了4个

image-20251030135438686

Clustering(分类)

同一类的才计算Attention

image-20251030135514317

image-20251030135533646

Learnable Patterns

这张图展示了基于 Sinkhorn 排序网络的 “可学习注意力模式(Learnable Patterns)”,核心是让模型自主学习 “哪些注意力交互需要计算,哪些可以跳过”,从而优化自注意力的效率。

  1. 左图:可学习的注意力稀疏模式

  • Query 与 Key:传统自注意力中,每个 Query 要与所有 Key 计算相似度(形成(\(N \times N\))的全连接注意力矩阵)。但在这张图中,注意力矩阵是稀疏的(只有深蓝色格子表示需要计算的注意力对,其他格子可跳过)。
  • Sinkhorn 排序网络的作用:通过可微分的排序机制,让模型学习到 “哪些 Query-Key 对是重要的,需要计算注意力;哪些是无关的,可以跳过”。这种稀疏化是数据驱动、可学习的,而非人工预设的固定模式(如局部窗口)。
  1. 右图:输入序列的处理流程

  • Input sequence:原始输入序列(如文本、图像特征序列)。
  • NN(神经网络):输入序列先经过一个神经网络模块,该模块的作用是学习生成注意力的稀疏模式—— 即决定哪些 Query-Key 交互需要保留,哪些可以跳过。
  • 输出的稀疏表示:经过 NN 处理后,序列的注意力交互被转换为稀疏形式(不同深浅的蓝色块表示不同的注意力权重或是否被保留),从而大幅减少不必要的计算。
  1. 核心思想:让模型自主学习稀疏注意力

传统自注意力的(\(O(N^2)\))复杂度是瓶颈,而 Sinkhorn 排序网络的 “可学习模式” 通过以下方式解决:

  • 动态稀疏化:不是人工指定 “哪些位置需要计算注意力”,而是让模型通过训练自主学习最优的稀疏模式(如根据数据的语义相关性,只保留关键的 Query-Key 交互)。
  • 可微分学习:基于 Sinkhorn 算法的可微分特性,这种稀疏模式的学习可以融入端到端的训练流程,梯度可以反向传播以更新模型参数。

4. 优势

  • 效率提升:减少不必要的 Query-Key 计算,将自注意力的复杂度从(\(O(N^2)\))降低到接近(\(O(N)\))或(\(O(N \log N)\))。
  • 适应性强:学习到的稀疏模式与数据本身的特性(如语义、结构)强相关,比人工预设的固定模式(如局部窗口)更灵活、更精准。

image-20251030135607526

Compressed Attention

🌟 一、背景

标准 Self-Attention 计算复杂度为:

\(O(n^2 \cdot d)\)

其中 n 是序列长度,d 是特征维度。

当 n 很大(如长文本、视频帧、基因序列)时:

  • 内存消耗高
  • 计算非常慢

于是出现了 Compressed / Efficient Attention 技术,目标是:

在保留重要上下文信息的同时,降低计算复杂度。


🧩 二、核心思想

Compressed Attention 核心是:

  1. 压缩 Key/Value
    • 将原本长度为 nnn 的 Key/Value 序列压缩为长度 \(m≪n\) 的表示
    • 方法包括:
      • 池化(Pooling)
      • 随机采样(Random Projection)
      • 低秩分解(Low-Rank Approximation)
  2. 计算注意力
    • Query 仍然长度 n
    • Key/Value 长度降低到 m
    • 计算复杂度从$ O(n^2) $降到 \(O(nm)\)

⚙️ 三、数学公式(简化版)

标准注意力:

\(\text{Attention}(Q, K, V) = \text{softmax}\Big(\frac{Q K^\top}{\sqrt{d}}\Big) V\)

压缩注意力:

\(Kc,Vc=Compress(K,V)(长度 m)\text{CompressedAttention}(Q, K, V) = \text{softmax}\Big(\frac{Q K_c^\top}{\sqrt{d}}\Big) V_c\)

通过压缩 K,V 来降低计算量。


🔍 四、直观理解

类比 说明
普通注意力 每个人都和所有人交流 → O(n²)
Compressed Attention 每个人只和“代表性小组”交流 → O(n m)
核心 代表性小组可以用池化、随机采样或聚类得到

💡 五、优缺点

优点 缺点
🚀 计算量低,适合长序列 压缩可能丢失部分信息
💾 内存消耗低 对压缩策略敏感,需要设计好方法
🔄 可结合 Local/Global Attention 压缩矩阵的学习方式影响性能

🧩 六、应用场景

  • Longformer / BigBird:长文档注意力优化
  • 视频 Transformer:帧序列很长
  • 音频信号处理:长音频序列建模
  • 基因/生物序列:处理数千到上万长度序列

一句话总结:

Compressed Attention = 压缩 Key/Value 来降低 Self-Attention 的计算量和内存消耗,同时保留序列中最重要的信息。

image-20251030135647694

synthesizer

把这些都当成要学习的参数

🌟 一、背景

标准 Self-Attention 的计算公式:

\(\text{Attention}(Q,K,V) = \text{softmax}\Big(\frac{QK^\top}{\sqrt{d}}\Big) V\)

  • 每个 token 的注意力权重依赖于自身的 Query 与其他 token 的 Key 的交互
  • 计算量为 \(O(n^2 \cdot d)\),长序列计算成本高

问题

  • Attention 的权重矩阵生成非常依赖输入序列
  • 可不可以“预先生成”或者“用可学习模式生成”注意力矩阵?

这就是 Synthesizer 提出的方向。


🧩 二、核心思想

Synthesizer 用两种方式替代标准 Query-Key Attention:

  1. Learned Synthesizer(可学习权重)
    • 注意力权重矩阵直接作为可训练参数
    • 不依赖输入 Query 和 Key 的相似度
    • 类似 “学习一个固定模式”,训练中优化矩阵,使模型仍能捕获序列依赖
  2. Random Synthesizer(随机权重)
    • 注意力权重矩阵用随机初始化,训练过程中不更新
    • 表明某些任务不一定需要精确 Query-Key 交互,也能学到有用特征

总结:Synthesizer 关注的是“权重模式生成”,而不是每次都通过 Query-Key 计算相似度。


⚙️ 三、公式示例

假设长度为 nnn 的序列:

  1. Learned Synthesizer

\(A \in \mathbb{R}^{n \times n}, \quad A = \text{learned parameters}\)

\(Output=softmax(A)⋅V\)

  1. Random Synthesizer

\(A \sim \text{Random Matrix}, \quad \text{Output} = \text{softmax}(A) \cdot V\)

区别于标准 Attention 的$ A = QK^\top / \sqrt{d}$


🔍 四、直观理解

类比 标准 Self-Attention Synthesizer
谁决定注意力 Query 与 Key 的交互 可学习权重或随机权重
是否依赖输入 否(或部分依赖)
计算量 高,O(n²) 可降低(固定矩阵或低秩矩阵)
灵活性 中,但训练可以适应任务

💡 五、优缺点

优点 缺点
🚀 减少 Query-Key 计算,提升效率 丢失输入依赖的动态注意力
💾 可学习模式,训练中自适应 某些任务表现可能略差于标准 Attention
🔄 适合长序列或嵌入稀疏场景 对任务设计敏感,需要实验调整

🧩 六、应用场景

  • 长序列建模(如文档、视频)
  • 高效 Transformer(减少 Attention 计算)
  • 实验性研究:探索是否完全依赖 Query-Key Attention 是必要的

一句话总结:

Synthesizer = 用可学习或随机模式生成注意力矩阵,而不是每次都通过 Query-Key 相似度计算,从而简化 Self-Attention 并降低计算成本。

image-20251030135734426

image-20251030135750613

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/951061.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

重塑生产力:天翼云全球首发RaaS,开启“机器人即服务”商业时代!

近日,GITEX Global 2025科技盛会在迪拜圆满落幕。中国电信以“连接智能未来,赋能数字生态”为主题,在这场全球科技盛宴中精彩亮相,全方位展示了其在云计算、物联网、视联网与数字安全等领域的尖端解决方案。会上,…

Python自然语言处理(NLP)入门

自然语言处理(Natural Language Processing,简称NLP)是人工智能领域的一个重要分支,它致力于使计算机能够理解和处理人类语言。Python因其简洁的语法和强大的库支持,成为了自然语言处理的首选语言之一。今天,我们…

【计算机视觉】分水岭搭建医学诊断

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

mysql和java获取经纬度的距离的两种方式

mysql和java获取经纬度的距离的两种方式mysql和java获取经纬度的距离的两种方式 T713802819052   取车距离:40333   还车距离:15303 根据订单号vlookup关联一下,单位是 米 1.java与mysql的计算公式是一一对…

SQL索引及调优

SQL索引及调优一:索引的含义及用法 ● 索引index:一种特殊的查找结构,它存储了表中特定列的值,并对这些值进行排序,同时保存了指向原表行数据的物理地址指针。 ● 先查索引,通过索引查表,提高查询效率。 ● 优点…

Sequence2Sequence - -一叶知秋

Sequence2SequenceSequence-to-Sequence(简称 Seq2Seq) 是一种用于序列到序列(Sequence → Sequence)映射任务的深度学习模型结构。 它最早由 Google 在 2014 年提出,用于 机器翻译(Machine Translation),后来…

Python列表 _ 创一个购物清单

Python列表 _ 创一个购物清单shopping_list = []shopping_list.append("键盘")shopping_list.append("键帽")print(shopping_list)print(shopping_list[0])print(len(shopping_list))price = [1,2…

如何在Golang项目中集成Prometheus进行监控?

本文将带大家学习如何在 Golang 项目中集成 Prometheus 进行监控,包括安装客户端库、定义和注册指标、暴露指标端点、更新指标值、配置标签和注册表,以及生产环境的建议配置。 添加 Prometheus 客户端库依赖 在 Go 项…

第177天:信息收集篇自动项目本机导出外部打点域内通讯PillagerBloodHound

工具信息收集 内网中 个人用机的角色 账号密码存储 1,浏览器自动存储 2,自己创建文件记录 3,某些工具自动存储 今天的这些工具就是可以对以上这些进行信息进行提取,如果是web服务器或者数据库服务器,用这些工具收…

如何在Linux中,为Flatpak版本的Edge浏览器导入证书

当使用 Flatpak 版本的 Edge 浏览器时,可能会遇到缺少证书管理功能的问题。本文提供了两种解决方案:1)通过 edge://certificate-manager/localcerts 内部链接图形化导入证书;2)将证书文件复制到系统信任目录 /etc…

2025年防火HPL板厂家权威推荐榜单:耐刮防火板/耐高温防火板 /阻燃高压装饰板源头厂家精选

在建筑装饰与工业应用领域,防火HPL板(热固性树脂浸渍纸高压层积板)作为关键的表面装饰耐火材料,其性能直接关系到工程安全与使用寿命。据行业数据显示,2025年全球防火板市场规模预计将以9.74%的年复合增长率持续扩…

Java 集合 “Map(1)”面试清单(含超通俗生活案例与深度理解) - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025 年铸铁井盖生产厂家最新推荐榜,技术实力与市场口碑深度解析防沉降球墨/防沉降/电力/双层铸铁井盖公司推荐

引言 在城市基础设施建设持续推进的背景下,铸铁井盖的质量与性能对市政安全、道路通行效率至关重要。为助力采购方精准筛选优质供应商,中国市政工程协会联合建筑材料测试中心于 2024 年第四季度开展了铸铁井盖行业专…

smss!SmpStartCsr函数分析之SmpLoadSubSystemsForMuSession3389远程桌面新进程csrss.exe的由来 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

220kv数字化变电站保护解决方案综述[期刊理解]

220kv数字化变电站保护解决方案综述[期刊理解] 本文围绕双母接线型 220kV 数字化变电站,系统阐述了继电保护的实施方案、配置逻辑、故障处理机制及配合关系,核心重点可从以下五大维度梳理:重点内容:核心背景与数字…

2025年10月VI设计公司权威推荐排行榜:排名依据包括项目交付质量、客户满意度、创新能力和市场影响力

摘要 VI设计行业近年来随着品牌竞争加剧而快速发展,企业越来越重视视觉识别系统以提升市场竞争力。2025年,行业趋势聚焦于数字化整合和极简主义设计,帮助企业实现品牌焕新。本文基于权威数据和用户口碑,提供一份VI…

2025年0糖苏打水厂家权威推荐榜单:带帽苏打水/茉莉苏打水 /蜜桃苏打水源头厂家精选

随着健康饮食观念的普及,0糖苏打水市场呈现快速增长态势。行业数据显示,2025年中国无糖饮料市场规模预计突破800亿元,其中0糖苏打水品类年均增长率达25%以上。在这一市场背景下,生产企业的技术实力与品质管控能力成…

Bilidown Setup 1.2.7下载

软件已停更,目前能用,且用且珍惜 Bilidown Setup 1.2.7下载

rpm因依赖安装失败的一次检查记录

rpm安装rpm -i --test XaoS-3.0-1.i386.rpm 出现错误:error: failed dependencies:libslang.so.0 is needed by XaoS-3.0-1libpng.so.0 is needed by XaoS-3.0-1libaa.so.1 is needed by XaoS-3.0-但是,libslang.so.…

0296-Nand-机器语言

环境Time 2023-07-07前言 说明 参考:https://www.nand2tetris.org/ 目标 接上一节,通过模拟的 CPU 实现 mult 和 fill 程序。 mult // r2 = 0 @2 M=0// loop r1 > 0 (LOOP) @1 D=M @END D;JLE// r1 = r1 - 1 D=D-…