Attention 机制到底在算什么?
Attention 机制到底在算什么?
一句话核心:这个知识点是深度学习中模仿人类选择性注意的加权求和机制,用于从大量输入中动态聚焦于最相关的信息,解决长序列依赖和全局特征建模问题。面试高频考察对原理、计算细节和实际价值的理解。
核心概念(术语表)
- 注意力机制 (Attention Mechanism):一种神经网络技术,通过为输入的不同部分分配不同权重(重要性),来突出关键信息并抑制无关信息。
- 自注意力 (Self-Attention):注意力机制的一种,其中查询(Query)、键(Key)、值(Value)均来源于同一输入序列,用于计算序列内部元素间的相关性。
- 查询 (Query, Q):表示当前需要关注位置的“问题”或“需求”,用于与其他元素(键)计算相似度。
- 键 (Key, K):表示输入元素的“标识”或“索引”,用于被查询匹配,计算与查询的相关性。
- 值 (Value, V):表示输入元素的“实际内容”或“信息”,根据注意力权重被加权求和,形成输出。
- 注意力权重 (Attention Weight):通过Q与K的点积计算出的相似度,经Softmax归一化后的概率分布,决定了每个Value的贡献程度。
- 缩放点积 (Scaled Dot-Product):Self-Attention的标准计算公式:
Attention(Q, K, V) = softmax(QK^T / √d_k) V,其中√d_k用于稳定梯度。 - Patch Embedding:在视觉Transformer中,将图像分割成小块(Patch),并通过线性投影映射成向量序列的过程,是注意力计算的输入来源。
历史背景 / 来源
- 起源与提出:注意力机制最早于2014年在机器翻译的Seq2Seq模型中由Bahdanau等人提出,用于解决长序列信息丢失问题。2017年,Vaswani等人在《Attention Is All You Need》论文中提出Transformer架构,完全基于自注意力机制,并首次提出缩放点积注意力公式,奠定了现代NLP的基础。
- 发扬光大:虽然起源于NLP,但2020年的Vision Transformer (VIT) 将其成功应用于计算机视觉,证明了其通用性。核心思想是打破CNN的局部感受野限制,建立任意两个输入元素(如图像Patch或文本Token)之间的直接全局关联。
工作原理 / 核心机制(详细讲解)
整体思路:Attention机制通过计算“查询”与所有“键”的相似度,形成注意力分布,再用该分布对“值”进行加权求和,得到融合了全局上下文信息的输出。
输入与输出:输入通常是一个形状为 (batch_size, seq_len, d_model) 的张量X。在自注意力中,X同时是Q、K、V的来源。输出是一个形状相同 (batch_size, seq_len, d_model) 的新张量Z,其中每个位置的向量都融合了整个序列的上下文信息。
核心步骤详解:
- 第一步:线性变换,生成Q、K、V。将输入
X分别乘以三个可学习的权重矩阵W_q, W_k, W_v(形状均为(d_model, d_k)),得到查询矩阵Q=XW_q、键矩阵K=XW_k、值矩阵V=XW_v。例如,在VIT中,输入X是[196, 768](196个图像Patch,每个768维),经过变换后得到同维度的Q、K、V。 - 第二步:计算注意力分数矩阵。计算
Q与K的转置的点积,得到原始分数矩阵S = Q @ K^T。在VIT示例中,Q的每行(如q1,代表第一个Patch的查询向量)与K的每列(如k1, k2...,代表所有Patch的键向量)做内积,得到一个[196, 196]的矩阵。核心洞察:点积(内积)的值反映了两个向量的夹角和模长,夹角越小(即方向越一致),点积越大,表示两个Patch(或Token)的相关性/相似度越高。例如,图像中同一只猫身上的几个Patch,其768维的通道值非常接近,因此它们之间的Q·K点积值(注意力分数)会很高。 - 第三步:缩放与Softmax归一化。将分数矩阵
S除以√d_k(d_k是Key向量的维度,如768)进行缩放,防止点积值过大导致Softmax梯度消失。然后对缩放后的每一行应用Softmax函数,将分数转换成和为1的概率分布,得到注意力权重矩阵A = softmax(S / √d_k)。A中的a_ij表示第i个位置对第j个位置的注意力权重。 - 第四步:加权求和,生成输出。将注意力权重矩阵
A与值矩阵V相乘,得到最终的输出Z = A @ V。这步操作的含义是:对于输出矩阵Z的第i行(即第i个位置的输出向量),它是所有Value向量(v1, v2, ...)的加权和,权重就是A的第i行(即第i个位置对所有位置的注意力分布)。例如,Z的第一行是a11*v1 + a12*v2 + ... + a196*v196,这相当于根据第一个Patch与其他Patch的相似度,动态地聚合了整个图像的全局信息来更新第一个Patch的表示。
关键知识点(10-15 条 bullet,每条都要具体)
- 知识点 1:Attention的本质是“从关注全部到关注重点”,模仿了人类视觉的选择性聚焦。
- 知识点 2:Q、K、V是输入X经过不同线性变换得到的三个投影,可直接视为X本身的三种“视角”。
- 知识点 3:Q·K^T的计算本质是向量内积,值越大代表两个元素的夹角越小、线性相关性越强、相似度越高。
- 知识点 4:
√d_k缩放因子是防止点积值过大导致Softmax饱和的关键设计,d_k通常为64或128。 - 知识点 5:注意力权重矩阵是一个
[seq_len, seq_len]的方阵,显式地建模了序列中任意两个位置间的关联。 - 知识点 6:Self-Attention的计算复杂度是O(n²),其中n是序列长度,这是其性能瓶颈。
- 知识点 7:与RNN相比,Attention不依赖顺序计算,可以完全并行,训练速度快,能建模长距离依赖。
- 知识点 8:与CNN相比,Attention的感受野是全局的,而CNN通过层叠逐渐扩大,单层只能捕获局部特征。
- 知识点 9:在VIT中,一张224x224的图片通过16x16的Patch_size被分割为14x14=196个Patch,这是自注意力计算的输入序列长度。
- 知识点 10:每个图像Patch通过卷积被展平为768维向量,这768维是其所有通道值的堆叠,是计算相似度的基础特征。
- 知识点 11:Attention机制可被视为一个极其复杂且动态的全连接层,其权重
softmax(QK^T/√d_k)是输入依赖的。 - 知识点 12:多头注意力(Multi-Head Attention)将Q、K、V分别进行h次不同的线性投影,再并行计算注意力,最后拼接,旨在从不同子空间捕捉特征。
- 知识点 13:Attention机制参数量相对较少(主要是三个投影矩阵),速度快(可并行),效果好(能抓住长程依赖),是Transformer成功的关键。
- 知识点 14:计算出的注意力权重可以进行可视化,例如显示某个图像Patch最关注哪些其他区域,提供了模型的可解释性窗口。
- 知识点 15:考试类比:Query是你当前要解决的问题(如“数学第一章重点”),Key是所有知识点的标签(如“代数”、“几何”),Value是知识点的具体内容。注意力机制就是帮你快速找到最相关的知识点深入学习。
应用场景(3-5 个真实例子,每例都给“公司/项目 + 数据 + 解决了什么问题”)
- 场景 1:谷歌机器翻译 (Transformer)。谷歌在2017年的Transformer模型中,用Self-Attention完全替代了RNN,解决了Seq2Seq模型在翻译长句子时的信息丢失问题。这直接提升了翻译质量,尤其对于超过20个单词的句子,BLEU分数有显著提升,并成为后续所有大语言模型的基石。
- 场景 2:OpenAI GPT系列与BERT。GPT和BERT模型的核心架构是Transformer。GPT使用自注意力进行单向文本建模,用于生成任务;BERT使用双向自注意力进行预训练,在多项NLP基准测试(如GLUE)上刷新纪录,证明了注意力机制在理解文本上下文方面的强大能力。
- 场景 3:谷歌视觉Transformer (VIT)。谷歌将Transformer应用于图像分类,将图像切成16x16的Patch序列进行自注意力计算。在ImageNet数据集上,VIT在相同计算成本下达到了与顶级CNN(如ResNet)相当甚至更高的准确率,证明了注意力机制在视觉领域的通用性和潜力。
- 场景 4:特斯拉自动驾驶感知系统。特斯拉在其FSD系统的规划模块中采用了Transformer架构,利用注意力机制来融合来自摄像头、雷达等多个传感器的数据流(序列),并动态地关注对当前驾驶决策最重要的目标和路缘信息,提升决策的鲁棒性。
常见误区 / 踩坑(4-6 条,每条给“错在哪 + 为什么错 + 正确的是什么”)
- ❌ 误区 1:很多人以为Q、K、V有明确的语义区别(如Q是“问题”,K是“答案”)。
✅ 正解:实际上,Q、K、V都是输入X经过不同线性变换的结果,本质上是X的三种不同表示,用于计算相似度和聚合信息。在自注意力中,它们来源相同,无需过度解读其语义。 - ❌ 误区 2:认为Attention计算出的权重直接就是“重要性”。
✅ 正解:计算出的权重是“相关性”或“相似度”,经过Softmax后是概率分布。它是动态的,取决于当前查询(Query)的位置和所有键(Key)的关系,而非固定的重要程度。 - ❌ 误区 3:认为Self-Attention和RNN一样是顺序计算的。
✅ 正解:Self-Attention的所有计算(点积、加权和)都是矩阵运算,可以完全并行化,这是其比RNN训练速度快的核心原因。 - ❌ 误区 4:忽略缩放因子
√d_k,导致实现时Softmax输出极端(接近one-hot),梯度消失,模型无法训练。
✅ 正解:必须在点积后、Softmax前除以√d_k,这是原始论文的数学推导要求,用于保持数值稳定性。 - ❌ 误区 5:认为Attention机制可以完全替代卷积或循环层。
✅ 正解:Attention擅长建模全局和长程依赖,但缺乏CNN固有的局部和平移不变性归纳偏置。实践中常与其他结构(如FFN层、残差连接)结合使用,各取所长。
性能 / 复杂度(数据驱动)
- 时间复杂度:O(n² · d),其中n是序列长度,d是特征维度。主要开销在于QK^T矩阵乘法。
- 空间复杂度:O(n² + n · d)。需要存储n²大小的注意力权重矩阵和n·d大小的QKV矩阵。
- 与替代方案对比:
- 方案 A(RNN/LSTM):时间复杂度 O(n · d²),空间复杂度 O(n · d)。优势:处理超长序列时内存占用线性增长。劣势:无法并行,训练慢,长距离依赖学习困难。
- 方案 B(Self-Attention):时间复杂度 O(n² · d),空间复杂度 O(n²)。优势:可并行,训练快,直接建立任意距离依赖。劣势:n很大时(如n>1000)计算和内存成本激增。
- 临界点:当序列长度n较短(
<100)时,Self-Attention的并行优势明显,更快。当n非常长(如>4096)时,其O(n²)复杂度成为瓶颈,而RNN的O(n)复杂度反而更具可扩展性(尽管训练慢)。因此催生了各种高效注意力变体(如稀疏注意力、线性注意力)。 - 性能数字:在GPU上,一个标准的Transformer Encoder层处理长度为512的序列,前向传播时间约在毫秒级别。VIT-B/16模型在ImageNet上训练,使用128块TPUv3,约需2500个Epoch达到约81%的Top-1准确率。
与相关概念的区别(至少 3 对,每对给“维度 + 各自优势 + 一句话总结怎么选”)
- vs CNN(卷积神经网络):
- 维度1(感受野):CNN是局部感受野,通过层叠扩大;Attention是全局感受野,一层即到。
- 维度2(归纳偏置):CNN具有平移不变性、局部性归纳偏置;Attention归纳偏置较弱,更依赖数据和规模。
- 维度3(适用):CNN擅长处理网格结构数据(如图像)的局部特征;Attention擅长处理序列数据的长程依赖和全局关系。
- 怎么选:处理图像等强局部相关数据时,CNN更高效;需要建模任意距离关系时,Attention更强大。现代视觉模型常结合两者。
- vs RNN(循环神经网络):
- 维度1(并行性):RNN必须顺序计算,无法并行;Attention可完全并行,训练速度数量级提升。
- 维度2(长程依赖):RNN梯度易消失,难以学习长程依赖;Attention通过直接连接,轻松捕获任意距离依赖。
- 维度3(效率):RNN在推理超长序列时内存稳定;Attention的内存占用随序列长度平方增长。
- 怎么选:追求训练速度和长程依赖建模时,选Attention;处理流式、超长序列且内存受限的推理任务时,可考虑RNN或其变体。
- vs 传统全连接层:
- 维度1(权重性质):全连接层权重是静态的、全局共享的;Attention权重是动态的、输入依赖的。
- 维度2(参数数量):全连接层连接数为 n_in * n_out;Attention连接数为 n²,但通过共享QKV投影矩阵大幅减少参数。
- 维度3(功能):全连接层进行固定的非线性变换;Attention进行动态的、基于内容的信息聚合。
- 怎么选:需要静态特征变换时用全连接;需要动态上下文聚合时用Attention。常将两者结合(如Transformer中的FFN层)。
进阶 / 面试加分项(2-3 条,超出基础的高阶理解)
- 最新进展:为解决O(n²)复杂度,出现了FlashAttention等IO感知的精确注意力算法,通过优化GPU内存访问模式,在不改变数学结果的情况下将速度提升2-4倍、内存减少5-20倍。同时,线性注意力和稀疏注意力(如Longformer、BigBird)是降低复杂度的活跃研究方向。
- 业界争议:对于视觉任务,是否必须用计算成本高昂的全局自注意力存在争议。许多研究(如Swin Transformer)采用移位窗口注意力,在局部窗口内计算注意力,平衡了性能与效率,成为当前视觉Transformer的主流设计。
- 一句话送给候选人:理解Attention,关键不是记住QKV的公式,而是深刻理解它作为一种“动态特征聚合器”的本质——它让每个神经元都能根据当前任务,动态地决定“从谁那里获取多少信息”。
面试如何回答
🟢 请用最通俗的语言解释一下,注意力机制(Attention Mechanism)到底是什么?它解决什么问题?
回答要点:
注意力机制本质上是模仿人类视觉选择性关注的一种技术。它让模型在处理大量输入信息时,能够动态地、有选择性地聚焦于对当前任务最关键的部分,同时忽略不那么相关的信息,从而实现‘关注重点’。
它主要解决了三个核心问题:第一,长程依赖:在传统的RNN模型中,随着序列变长,早期信息容易被稀释或遗忘。注意力机制通过在任意两个位置间建立直接连接,轻松捕获长距离关系。第二,信息瓶颈:Seq2Seq模型中编码器将整个序列压缩成固定长度的向量,成为瓶颈。注意力机制允许解码器直接‘回顾’编码器的所有状态,提供更丰富的上下文。第三,并行化:与RNN的顺序计算不同,注意力基于矩阵运算,可以完全并行,极大提升了训练速度。
举个真实例子,在机器翻译中,当翻译一个长句子的某个词时,注意力机制会动态地高亮原句子中最相关的几个词,而不是依赖压缩后的单个向量,这就像你做阅读理解时,会回文中定位关键句子一样。所以,一句话总结:Attention是一种让模型学会‘哪里重要看哪里’的通用信息聚合器。
🟡 在Self-Attention中,Q、K、V这三个矩阵分别代表什么?为什么要进行Q·K^T的计算,而不是直接用V?
回答要点:
在自注意力机制中,Q、K、V是输入序列X经过三个不同的线性变换(乘以权重矩阵W_q, W_k, W_v)得到的三个矩阵。简单来说,它们都是原始输入X的三种不同视角的表示。Q(查询) 代表当前需要被关注的位置或元素;K(键) 代表可以被查询匹配的标识;V(值) 则代表这些标识所承载的实际信息内容。
进行Q·K^T计算的核心目的是计算相似度/相关性。它并不是直接使用V,因为我们需要一个机制来动态决定每个V的重要性。具体来说,Q矩阵的每一行(如q1)与K矩阵的每一列(如k1, k2,...)做点积,得到的标量值反映了q1与每个k的相似程度。这个计算基于向量内积的几何意义:夹角越小,点积越大,相关性越强。例如,在图像中,同一只猫身上的不同Patch,它们的Q和K向量方向会更接近,点积值就大。
得到这个相似度矩阵后,经过Softmax归一化得到注意力权重,再用这些权重对V进行加权求和。这个过程可以形象理解为:首先用Q向所有K‘询问’谁和我最相关,然后根据相关度从V中‘提取’信息。所以,Q·K^T是建立内容相关性的桥梁,V是信息源,二者缺一不可。直接使用V等于忽略了内容间的动态关联,退化成了静态的全连接操作。
🟡 在公式Attention(Q, K, V) = softmax(QK^T / √d_k) V中,为什么要除以√d_k?如果不做这个缩放,可能会导致什么问题?
回答要点:
除以√d_k(即Key向量维度的平方根)是一个关键的缩放操作,其主要目的是稳定梯度,防止训练初期出现数值问题。
当Key向量的维度d_k很大时,Q和K的点积结果的方差也会变得很大。具体来说,如果Q和K的每个元素都是均值为0、方差为1的独立随机变量,那么点积结果的均值为0,方差就等于d_k。这意味着点积结果的数值可能非常大(正或负)。
如果直接将这个大数值输入Softmax函数,会导致Softmax的输出趋近于一个one-hot向量(即某个位置的概率接近1,其他位置接近0)。这会带来两个严重问题:第一,梯度消失:在反向传播时,Softmax输出接近0或1的位置梯度极小,导致模型参数几乎无法更新,训练停滞。第二,注意力分布过于尖锐:模型过早地、过度地只关注极少数元素,失去了从多个位置综合信息的能力,模型表达能力受损。
除以√d_k后,将点积结果的方差重新缩放回1左右,使Softmax的输入值处于一个合适的范围,其输出能保持为一个更平滑的概率分布,梯度也能正常流动,从而保证模型能够稳定、有效地训练。这是Vaswani等人在原始论文中通过数学推导得出的重要实践技巧。
🔴 有人说‘自注意力机制本质上是一个复杂的、动态的全连接层’,你如何理解这句话?请与传统全连接层进行对比。
回答要点:
这个比喻非常精准地揭示了自注意力与全连接层在数学形式和功能上的联系与本质区别。
从数学形式上看相似性:全连接层的计算是 Y = X * W,其中W是一个静态的权重矩阵。在自注意力中,最终的输出 Z = softmax(QK^T / √d_k) V。如果我们将 softmax(QK^T / √d_k) 视为一个矩阵A,那么公式就变成了 Z = A * V。由于V是输入X的线性变换,这可以看作 Z = A * (X * W_v)。所以,自注意力可以理解为输入X先经过一个线性变换,再乘以一个动态的权重矩阵A。这个矩阵A不再是静态的,而是由输入X通过Q、K计算出来的,是输入依赖的。
核心区别在于“动态”二字。传统全连接层的权重W是全局共享、固定不变的,无论输入是什么,连接模式都相同。而注意力权重矩阵A是针对每个输入样本、甚至同一个样本内的不同位置都不同的。它根据内容(Q和K的匹配度)实时计算出输入元素间应该如何连接、权重多大。例如,对于“猫”这个Patch,A矩阵会让它更关注其他属于猫的Patch,而不是背景的Patch。这种动态性使得自注意力能实现内容感知的灵活信息聚合,而全连接层只能进行固定的、非上下文敏感的变换。
因此,自注意力是一个参数更少(因投影矩阵共享)、更高效、且具有动态路由能力的“高级全连接层”。在Transformer中,两者通常结合使用:自注意力层负责聚合全局上下文,随后的全连接层(FFN)则负责对聚合后的特征进行非线性变换,各司其职。
🟡 以Vision Transformer (VIT) 处理一张224x224的图片为例,详细说明从输入到自注意力计算完成的完整数据流,包括关键的形状变化。
回答要点:
在VIT中处理一张224x224的RGB图片,自注意力的数据流如下:
Patch Embedding(输入准备):图片被分割成大小为16x16的Patch。因为
224 / 16 = 14,所以水平和垂直方向各有14个Patch,总共14 * 14 = 196个Patch。每个Patch是16*16*3 = 768维的像素向量。通过一个卷积核大小和步长均为16的卷积层,相当于将每个Patch映射为一个768维的向量。最终,图片从[3, 224, 224]变为一个序列:[196, 768]。这196个768维向量就是自注意力的输入序列X。生成Q, K, V(线性变换):输入序列X
[196, 768]分别与三个权重矩阵W_q, W_k, W_v(形状均为[768, d_k],d_k常为768或更小如64)相乘,得到Q、K、V矩阵。形状不变,仍是[196, d_k]。例如,Q矩阵的第1行q1就是第一个Patch的查询向量。计算注意力分数:计算
Q @ K^T。Q是[196, d_k],K^T是[d_k, 196],相乘得到注意力分数矩阵S,形状为[196, 196]。S的元素s_ij表示第i个Patch的查询向量qi与第j个Patch的键向量kj的相似度(点积)。缩放与归一化:将S除以
√d_k,然后对每一行(即对每个Patch)独立进行Softmax操作。得到注意力权重矩阵A,形状仍为[196, 196],每一行的和为1。例如,A的第一行[a11, a12, ..., a196]代表第一个Patch对所有196个Patch的注意力分布。加权求和得到输出:将权重矩阵A
[196, 196]与V矩阵[196, d_k]相乘,得到输出矩阵Z,形状恢复为[196, d_k]。Z的第i行zi是所有V向量(v1, v2, ..., v196)的加权和,权重就是A的第i行。至此,一个自注意力头计算完成,每个Patch的向量都融合了全局上下文信息。这个Z会接续后续的FFN层等处理。
关键数字:输入序列长度n=196,特征维度d=768。这是理解VIT计算成本和内存占用的基础。
🟢 注意力机制有哪三大优点,使其在深度学习中成为革命性的技术?请分别解释并举例说明。
回答要点:
注意力机制的三大核心优点是:参数少、速度快、效果好。
参数少:与CNN、RNN相比,注意力机制(特别是标准的缩放点积注意力)的参数主要来源于生成Q、K、V的三个线性投影矩阵,其参数量与输入维度
d_model的平方成正比,但与序列长度n无关。而一个完整的LSTM层参数量也是O(d²),但一个自注意力层就能建立全局依赖,而LSTM需要堆叠多层才能获得类似的感受野。这意味着在处理长序列时,达到相似效果所需的注意力层参数可能更少。速度快:这是其相对于RNN最显著的优势。RNN必须按时间步顺序计算,无法并行。而自注意力的所有核心操作(矩阵乘法)都是高度可并行的,可以充分利用GPU的并行计算能力。例如,在训练一个语言模型时,使用Transformer架构通常比使用同等规模的LSTM快数倍甚至一个数量级,极大地缩短了研发周期。这使得训练超大规模模型(如GPT-3)成为可能。
效果好:注意力机制能直接建模序列中任意两个元素之间的长程依赖关系,无论它们相距多远。例如,在机器翻译中,翻译句末的单词可能需要参考句首的信息,注意力机制可以为它们建立直接的强连接,避免了RNN中信息经过多步传递后的衰减。此外,其动态加权的特性使其能够根据上下文聚焦于最相关的信息,提高了模型的判别能力和泛化性能。
综上所述,这三大优点共同作用,使得基于注意力机制的Transformer模型成为了当今NLP、CV、语音等领域的主流骨干网络。
🔴 在实际部署或优化一个大型Transformer模型时,注意力机制的O(n²)复杂度是一个主要瓶颈。你有哪些策略或技术来缓解这个问题?
回答要点:
缓解自注意力O(n²)复杂度瓶颈是当前工业界和学术界的热点,主要策略有以下几类:
稀疏注意力:不再计算所有n²个注意力对,而是根据特定模式(如局部窗口、全局标记、固定步长)只计算其中的O(n)或O(n log n)个。例如,Longformer使用滑动窗口注意力处理局部上下文,同时为一些特定位置(如[CLS] token)设置全局注意力。BigBird则结合了随机、窗口和全局注意力。这类方法在保持建模长距离能力的同时大幅降低了计算量,适用于超长文档处理。
线性注意力:通过改变注意力计算的核函数形式,避免显式计算巨大的n×n矩阵。例如,将Softmax替换为其他可核化的函数,使得计算复杂度从O(n²d)降至O(nd²)。Performer使用随机正交特征来近似Softmax注意力,是典型代表。这类方法理论复杂度更优,但实际速度提升可能受常数项影响,且需要重新验证模型精度。
内存优化实现:不改变数学算法,而是优化硬件内存访问模式。FlashAttention是革命性工作,它通过分块计算、减少HBM读写次数,将标准注意力的运行时间加速2-4倍,内存占用减少5-20倍,但计算结果完全相同。这已成为当前大模型训练的事实标准。
层次化/下采样:在注意力计算前,先对序列进行压缩或聚类。例如,在视觉领域,Swin Transformer采用移位窗口注意力,在局部窗口内计算,不同窗口间通过移位进行交互。或使用池化层减少token数量,再进行注意力计算。
模型架构探索:状态空间模型(如Mamba)借鉴了控制理论,用线性递归替代注意力,在某些任务上实现了线性复杂度和高质量的长序列建模,是注意力机制的有力竞争者。
选择策略时需权衡:稀疏/线性注意力可能损失精度;FlashAttention不改变精度但需要定制CUDA内核;层次化方法可能引入额外归纳偏置。实际项目中,FlashAttention因其无损加速特性常作为首选,而对于超长上下文(>32K),会结合稀疏注意力进行处理。
