【人工智能99问】注意力机制有哪些?(25/99)
类型核心特点输入来源典型场景复杂度Bahdanau注意力加性得分,参数多编码器+解码器早期机器翻译OnmO(nm)Onm缩放点积注意力乘性得分,无额外参数编码器+解码器机器翻译OnmO(nm)Onm自注意力序列内部依赖单一序列(Q=K=V)On2O(n^2)On2多头注意力多子空间特征单一序列(分多头)Transformer核心Ohn2O(hn^2)Ohn2交叉注意力跨序列依赖两个序列(Q≠K/V
文章目录
注意力机制
注意力机制(Attention Mechanism)是模拟人类注意力聚焦特性的机器学习技术,核心是通过计算“权重”分配资源,让模型优先关注关键信息。自2014年在神经机器翻译中提出以来,已成为NLP、CV、多模态等领域的核心组件。以下从分类、原理、计算过程、优缺点、场景等维度详细解析。
一、基础注意力机制(Encoder-Decoder Attention)
基础注意力机制诞生于编码器-解码器(Encoder-Decoder)框架,用于解决传统Seq2Seq模型中“固定长度上下文向量”丢失长序列信息的问题。典型代表为Bahdanau注意力(加性注意力)和Luong注意力(乘性注意力)。
1.1 Bahdanau注意力(加性注意力,Additive Attention)
原理
由Bahdanau等人在2014年提出,核心是通过前馈网络计算编码器隐藏状态与解码器隐藏状态的“相关性得分”,动态生成上下文向量。
- 场景:早期神经机器翻译(如英-法翻译)、文本摘要生成。
- 核心公式:
设编码器隐藏状态为 h 1 , h 2 , . . . , h n h_1, h_2, ..., h_n h1,h2,...,hn( h i ∈ R d h_i \in \mathbb{R}^d hi∈Rd),解码器当前隐藏状态为 s t ∈ R d s_t \in \mathbb{R}^d st∈Rd,则:- 得分函数: s c o r e ( h i , s t ) = v T tanh ( W h h i + W s s t ) score(h_i, s_t) = v^T \tanh(W_h h_i + W_s s_t) score(hi,st)=vTtanh(Whhi+Wsst)
( W h , W s ∈ R d a × d W_h, W_s \in \mathbb{R}^{d_a \times d} Wh,Ws∈Rda×d, v ∈ R d a v \in \mathbb{R}^{d_a} v∈Rda 为可学习参数, d a d_a da 为注意力隐藏维度) - 注意力权重: α t , i = exp ( s c o r e ( h i , s t ) ) ∑ j = 1 n exp ( s c o r e ( h j , s t ) ) \alpha_{t,i} = \frac{\exp(score(h_i, s_t))}{\sum_{j=1}^n \exp(score(h_j, s_t))} αt,i=∑j=1nexp(score(hj,st))exp(score(hi,st))
- 上下文向量: c t = ∑ i = 1 n α t , i h i c_t = \sum_{i=1}^n \alpha_{t,i} h_i ct=∑i=1nαt,ihi
- 得分函数: s c o r e ( h i , s t ) = v T tanh ( W h h i + W s s t ) score(h_i, s_t) = v^T \tanh(W_h h_i + W_s s_t) score(hi,st)=vTtanh(Whhi+Wsst)
计算过程示例
假设编码器隐藏状态 h 1 = [ 1 , 2 ] h_1 = [1, 2] h1=[1,2], h 2 = [ 3 , 4 ] h_2 = [3, 4] h2=[3,4],解码器状态 s t = [ 5 , 6 ] s_t = [5, 6] st=[5,6],参数 W h = [ [ 1 , 0 ] , [ 0 , 1 ] ] W_h = [[1,0],[0,1]] Wh=[[1,0],[0,1]], W s = [ [ 1 , 0 ] , [ 0 , 1 ] ] W_s = [[1,0],[0,1]] Ws=[[1,0],[0,1]], v = [ 1 , 1 ] v = [1, 1] v=[1,1]:
- 计算 W h h 1 = [ 1 , 2 ] W_h h_1 = [1, 2] Whh1=[1,2], W s s t = [ 5 , 6 ] W_s s_t = [5, 6] Wsst=[5,6],求和得 [ 6 , 8 ] [6, 8] [6,8],经tanh后为 [ tanh ( 6 ) , tanh ( 8 ) ] ≈ [ 1 , 1 ] [\tanh(6), \tanh(8)] \approx [1, 1] [tanh(6),tanh(8)]≈[1,1];
- 得分 s c o r e ( h 1 , s t ) = v T [ 1 , 1 ] = 2 score(h_1, s_t) = v^T [1, 1] = 2 score(h1,st)=vT[1,1]=2;
- 同理 s c o r e ( h 2 , s t ) ≈ v T [ tanh ( 3 + 5 ) , tanh ( 4 + 6 ) ] = v T [ 1 , 1 ] = 2 score(h_2, s_t) \approx v^T [\tanh(3+5), \tanh(4+6)] = v^T [1, 1] = 2 score(h2,st)≈vT[tanh(3+5),tanh(4+6)]=vT[1,1]=2;
- 权重 α t , 1 = α t , 2 = 0.5 \alpha_{t,1} = \alpha_{t,2} = 0.5 αt,1=αt,2=0.5,上下文向量 c t = 0.5 × [ 1 , 2 ] + 0.5 × [ 3 , 4 ] = [ 2 , 3 ] c_t = 0.5 \times [1,2] + 0.5 \times [3,4] = [2, 3] ct=0.5×[1,2]+0.5×[3,4]=[2,3]。
优缺点
- 优点:适用于编码器和解码器隐藏维度不同的场景,灵活性高。
- 缺点:需额外参数( W h , W s , v W_h, W_s, v Wh,Ws,v),计算量略大。
1.2 Luong注意力(乘性注意力,Multiplicative Attention)
原理
由Luong等人在2015年提出,直接通过矩阵乘法计算得分,减少参数。分为点积注意力和缩放点积注意力。
- 场景:机器翻译、语音识别。
- 核心公式:
- 点积得分: s c o r e ( h i , s t ) = h i T s t score(h_i, s_t) = h_i^T s_t score(hi,st)=hiTst(要求 h i h_i hi 与 s t s_t st 维度相同)
- 缩放点积得分: s c o r e ( h i , s t ) = h i T s t d k score(h_i, s_t) = \frac{h_i^T s_t}{\sqrt{d_k}} score(hi,st)=dkhiTst( d k d_k dk 为隐藏维度,缓解高维下点积过大导致softmax梯度消失)
权重和上下文向量计算同Bahdanau注意力。
计算过程示例
沿用Bahdanau的 h 1 = [ 1 , 2 ] h_1 = [1,2] h1=[1,2], h 2 = [ 3 , 4 ] h_2 = [3,4] h2=[3,4], s t = [ 5 , 6 ] s_t = [5,6] st=[5,6], d k = 2 d_k = 2 dk=2:
- 点积得分: h 1 T s t = 1 × 5 + 2 × 6 = 17 h_1^T s_t = 1×5 + 2×6 = 17 h1Tst=1×5+2×6=17, h 2 T s t = 3 × 5 + 4 × 6 = 39 h_2^T s_t = 3×5 + 4×6 = 39 h2Tst=3×5+4×6=39;
- 缩放得分: 17 / 2 ≈ 12.02 17/\sqrt{2} ≈ 12.02 17/2≈12.02, 39 / 2 ≈ 27.58 39/\sqrt{2} ≈ 27.58 39/2≈27.58;
- 权重: α t , 1 ≈ exp ( 12.02 ) / ( exp ( 12.02 ) + exp ( 27.58 ) ) ≈ 0 \alpha_{t,1} ≈ \exp(12.02)/(\exp(12.02) + \exp(27.58)) ≈ 0 αt,1≈exp(12.02)/(exp(12.02)+exp(27.58))≈0, α t , 2 ≈ 1 \alpha_{t,2} ≈ 1 αt,2≈1;
- 上下文向量 c t ≈ [ 3 , 4 ] c_t ≈ [3,4] ct≈[3,4](更关注 h 2 h_2 h2)。
优缺点
- 优点:无额外参数,计算效率高于加性注意力。
- 缺点:点积在高维下数值不稳定(缩放点积解决此问题)。
二、自注意力(Self-Attention)
自注意力是序列内部元素间的注意力,输入序列中的每个元素同时作为“查询(Query)”“键(Key)”“值(Value)”,捕捉序列内部的长距离依赖(如句子中词语的指代关系)。
原理
核心是通过线性变换生成Q、K、V,计算每个元素对其他元素的权重。
- 场景:Transformer、BERT、GPT等预训练模型,长文本语义理解。
- 核心公式:
设输入序列 x = [ x 1 , x 2 , . . . , x n ] x = [x_1, x_2, ..., x_n] x=[x1,x2,...,xn],通过线性变换得到:- Q = W q x Q = W_q x Q=Wqx, K = W k x K = W_k x K=Wkx, V = W v x V = W_v x V=Wvx( W q , W k , W v ∈ R d m o d e l × d k W_q, W_k, W_v \in \mathbb{R}^{d_{model} \times d_k} Wq,Wk,Wv∈Rdmodel×dk 为参数)
- 注意力权重: α i , j = exp ( Q i T K j / d k ) ∑ k = 1 n exp ( Q i T K k / d k ) \alpha_{i,j} = \frac{\exp(Q_i^T K_j / \sqrt{d_k})}{\sum_{k=1}^n \exp(Q_i^T K_k / \sqrt{d_k})} αi,j=∑k=1nexp(QiTKk/dk)exp(QiTKj/dk)
- 输出: z i = ∑ j = 1 n α i , j V j z_i = \sum_{j=1}^n \alpha_{i,j} V_j zi=∑j=1nαi,jVj
计算过程示例
输入句子“猫坐在垫子上”,分词后 x = [ x 1 ( 猫 ) , x 2 ( 坐 ) , x 3 ( 在 ) , x 4 ( 垫子 ) , x 5 ( 上 ) ] x = [x_1(猫), x_2(坐), x_3(在), x_4(垫子), x_5(上)] x=[x1(猫),x2(坐),x3(在),x4(垫子),x5(上)],假设 d k = 2 d_k = 2 dk=2,线性变换后:
- Q = [ [ 1 , 2 ] , [ 3 , 4 ] , [ 5 , 6 ] , [ 7 , 8 ] , [ 9 , 10 ] ] Q = [[1,2], [3,4], [5,6], [7,8], [9,10]] Q=[[1,2],[3,4],[5,6],[7,8],[9,10]](每行对应 Q 1 Q_1 Q1 到 Q 5 Q_5 Q5)
- K = [ [ 1 , 1 ] , [ 2 , 2 ] , [ 3 , 3 ] , [ 4 , 4 ] , [ 5 , 5 ] ] K = [[1,1], [2,2], [3,3], [4,4], [5,5]] K=[[1,1],[2,2],[3,3],[4,4],[5,5]]
- V = [ [ 0 , 1 ] , [ 1 , 0 ] , [ 2 , 1 ] , [ 3 , 2 ] , [ 4 , 3 ] ] V = [[0,1], [1,0], [2,1], [3,2], [4,3]] V=[[0,1],[1,0],[2,1],[3,2],[4,3]]
以 i = 1 i=1 i=1(“猫”)为例:
- 计算 Q 1 T K j / 2 Q_1^T K_j / \sqrt{2} Q1TKj/2:
j = 1 j=1 j=1: ( 1 × 1 + 2 × 1 ) / 1.414 ≈ 2.12 (1×1 + 2×1)/1.414 ≈ 2.12 (1×1+2×1)/1.414≈2.12; j = 4 j=4 j=4(“垫子”): ( 1 × 4 + 2 × 4 ) / 1.414 ≈ 8.48 (1×4 + 2×4)/1.414 ≈ 8.48 (1×4+2×4)/1.414≈8.48(假设“猫”与“垫子”相关性高) - 权重 α 1 , j \alpha_{1,j} α1,j 中 α 1 , 4 \alpha_{1,4} α1,4 最大;
- 输出 z 1 z_1 z1 主要由 V 4 V_4 V4 贡献,捕捉“猫”与“垫子”的关系。
优缺点
- 优点:并行计算(无RNN的时序依赖),长距离依赖捕捉能力强。
- 缺点:计算复杂度 O ( n 2 ) O(n^2) O(n2),长序列(如n>1000)效率低。
三、多头注意力(Multi-Head Attention)
多头注意力是自注意力的扩展,通过多个并行的“注意力头” 捕捉不同子空间的特征,提升模型表达能力。
原理
将Q、K、V分割为h个“头”(每个头维度 d k / h d_k/h dk/h),每个头独立计算自注意力,最后拼接结果并线性变换。
- 场景:Transformer的核心组件(编码器、解码器均使用),BERT、GPT等。
- 核心公式:
- 分头: Q h = [ Q 1 , Q 2 , . . . , Q h ] Q^h = [Q_1, Q_2, ..., Q_h] Qh=[Q1,Q2,...,Qh], K h , V h K^h, V^h Kh,Vh 同理(每个 Q i ∈ R n × d k / h Q_i \in \mathbb{R}^{n \times d_k/h} Qi∈Rn×dk/h)
- 多头输出: M u l t i H e a d ( Q , K , V ) = W o [ h e a d 1 ; h e a d 2 ; . . . ; h e a d h ] MultiHead(Q,K,V) = W_o [head_1; head_2; ...; head_h] MultiHead(Q,K,V)=Wo[head1;head2;...;headh]
( h e a d i = A t t e n t i o n ( Q i , K i , V i ) head_i = Attention(Q_i, K_i, V_i) headi=Attention(Qi,Ki,Vi), W o ∈ R d m o d e l × d m o d e l W_o \in \mathbb{R}^{d_{model} \times d_{model}} Wo∈Rdmodel×dmodel 为参数)
计算过程示例
设 h = 2 h=2 h=2, d k = 4 d_k=4 dk=4(每个头维度2),沿用自注意力的Q、K、V:
- 分头: Q 1 = [ [ 1 , 2 ] , [ 3 , 4 ] , . . . ] Q_1 = [[1,2], [3,4], ...] Q1=[[1,2],[3,4],...], Q 2 = [ [ 5 , 6 ] , [ 7 , 8 ] , . . . ] Q_2 = [[5,6], [7,8], ...] Q2=[[5,6],[7,8],...](假设Q原始维度4,拆分后每个头2维);
- 头1计算“猫-动作”关系,头2计算“猫-位置”关系;
- 拼接头1和头2的输出,经 W o W_o Wo 变换得到最终结果。
优缺点
- 优点:捕捉多维度特征(如语义、语法、位置),性能远超单头注意力。
- 缺点:参数和计算量增加(约h倍)。
四、交叉注意力(Cross-Attention)
交叉注意力用于两个不同序列间的注意力,Query来自一个序列,Key和Value来自另一个序列,实现跨序列信息交互。
原理
核心是Query与Key/Value来源不同,计算方式同自注意力,但Q、K、V来自不同输入。
- 场景:编码器-解码器(解码器Q关注编码器K/V)、图像描述(文本Q关注图像K/V)、视觉问答(问题Q关注图像K/V)。
计算过程示例
图像描述任务中,输入图像特征 I = [ v 1 , v 2 , . . . , v m ] I = [v_1, v_2, ..., v_m] I=[v1,v2,...,vm](K/V来源),解码器生成文本时当前状态 s t s_t st(Q来源):
- Q = W q s t Q = W_q s_t Q=Wqst, K = W k I K = W_k I K=WkI, V = W v I V = W_v I V=WvI;
- 注意力权重反映“生成当前词时应关注图像的哪个区域”(如生成“狗”时,权重集中在图像中狗的区域特征)。
优缺点
- 优点:高效实现跨模态/跨序列信息融合。
- 缺点:依赖两个序列的对齐质量(如文本与图像的语义对齐)。
五、注意力变体(优化长序列/效率)
为解决自注意力 O ( n 2 ) O(n^2) O(n2) 复杂度问题,衍生出稀疏注意力、局部注意力等变体。
5.1 稀疏注意力(Sparse Attention)
原理
仅计算部分元素的注意力(而非全连接),常见策略:
- 局部窗口:每个位置只关注附近k个元素(如上下各5个);
- 固定模式:如每间隔k个元素关注一次(如Transformer-XL的“段级循环”);
- 动态选择:通过学习选择关键元素(如Longformer的“全局token”)。
- 场景:长文本(如法律文档)、基因组序列(长度达10^4以上)。
5.2 局部注意力(Local Attention)
原理
每个位置仅关注固定大小的局部窗口,平衡效率与性能。
- 场景:Transformer-XL(处理超长文本)、视频理解(帧序列过长)。
- 优点:复杂度降为 O ( n k ) O(nk) O(nk)(k为窗口大小),适合长序列;
- 缺点:丢失全局依赖(需结合其他机制弥补)。
六、视觉注意力机制
在计算机视觉中,注意力机制用于聚焦图像的关键区域或通道,典型代表为空间注意力和通道注意力。
6.1 空间注意力(Spatial Attention)
原理
通过学习空间权重矩阵,突出图像中重要的空间位置(如目标区域)。
- 场景:目标检测(聚焦目标位置)、图像分割。
- 计算:对特征图 F ∈ R C × H × W F \in \mathbb{R}^{C \times H \times W} F∈RC×H×W,先全局池化得 F a v g ∈ R 1 × H × W F_{avg} \in \mathbb{R}^{1 \times H \times W} Favg∈R1×H×W 和 F m a x ∈ R 1 × H × W F_{max} \in \mathbb{R}^{1 \times H \times W} Fmax∈R1×H×W,拼接后经卷积和sigmoid得到空间权重 M s ∈ R 1 × H × W M_s \in \mathbb{R}^{1 \times H \times W} Ms∈R1×H×W,输出 F ′ = F ⊗ M s F' = F \otimes M_s F′=F⊗Ms( ⊗ \otimes ⊗ 为逐元素乘)。
6.2 通道注意力(Channel Attention)
原理
通过学习通道权重,突出重要特征通道(如目标的边缘、纹理通道)。
- 场景:图像分类(抑制背景通道)、语义分割。
- 计算:对特征图 F F F 全局平均池化得 F a v g ∈ R C F_{avg} \in \mathbb{R}^C Favg∈RC,全局最大池化得 F m a x ∈ R C F_{max} \in \mathbb{R}^C Fmax∈RC,经MLP和sigmoid得到通道权重 M c ∈ R C M_c \in \mathbb{R}^C Mc∈RC,输出 F ′ = F ⊗ M c F' = F \otimes M_c F′=F⊗Mc。
七、各类注意力机制的核心区别总结
类型 | 核心特点 | 输入来源 | 典型场景 | 复杂度 |
---|---|---|---|---|
Bahdanau注意力 | 加性得分,参数多 | 编码器+解码器 | 早期机器翻译 | O ( n m ) O(nm) O(nm) |
缩放点积注意力 | 乘性得分,无额外参数 | 编码器+解码器 | 机器翻译 | O ( n m ) O(nm) O(nm) |
自注意力 | 序列内部依赖 | 单一序列(Q=K=V) | Transformer、BERT | O ( n 2 ) O(n^2) O(n2) |
多头注意力 | 多子空间特征 | 单一序列(分多头) | Transformer核心 | O ( h n 2 ) O(hn^2) O(hn2) |
交叉注意力 | 跨序列依赖 | 两个序列(Q≠K/V) | 图像描述、VQA | O ( n m ) O(nm) O(nm) |
稀疏注意力 | 局部/动态稀疏连接 | 单一序列 | 长文本、基因组序列 | O ( n k ) O(nk) O(nk) |
空间/通道注意力 | 图像空间/通道权重 | 图像特征图 | 目标检测、图像分类 | O ( H W ) O(HW) O(HW) |
八、总结
注意力机制通过动态权重分配实现“聚焦关键信息”,从基础的编码器-解码器注意力到自注意力、多头注意力,再到针对效率优化的稀疏变体和视觉专用注意力,其发展始终围绕“捕捉依赖”和“提升效率”两大核心。选择注意力类型需结合场景:长序列优先稀疏/局部注意力,跨模态任务用交叉注意力,通用语义理解用自注意力/多头注意力。未来,注意力机制将进一步与动态路由、记忆网络等结合,提升复杂任务的建模能力。
更多推荐
所有评论(0)