注意力机制
在认知科学中,由于信息处理的瓶颈,人类会选择性地关注所有信息的一部分,同时忽略其他可见的信息。在人工智能领域,注意力机制(Attention Mechanism)是深度学习领域的一项重要技术创新,借鉴了人类聚焦关键信息的观察与思考模式。它允许模型在处理信息时动态地关注最相关的部分,而不是平等对待所有输入信息。注意力机制可以增强可解释性,通过可视化注意力权重,帮助理解模型的决策过程。
注意力机制原理
注意力机制的基本原理可以类比为人类的视觉注意过程。当我们观察一个场景时,会自动将注意力集中在最重要或最相关的区域上。比如,当我们阅读文章或观看图像时,视觉系统会自动将注意力集中在关键信息上,而非均匀处理所有细节。注意力机制的核心思想是让模型在处理输入序列时,能够有选择性地关注输入序列中与当前任务相关的部分,并分配不同的权重。权重越高,表示模型对该部分输入的信息给予了更多的关注。
注意力机制的计算过程包含三个核心组件:查询(Query, Q):表示当前需要关注什么;键(Key, K):表示可以被关注的信息;值(Value, V):表示实际的信息内容。注意力机制计算一个权重分布,该分布表示了查询与每个键之间的相关性。然后,将这些权重与对应的值进行加权求和,得到最终的注意力输出。这个输出可以被视为模型在处理当前查询时,从输入序列中“提取”出的最相关信息。
注意力机制的类型
根据不同的分类标准,注意力机制可以分为多种类型。如果按注意力范围分类,可以分为自注意力(Self-Attention):序列内部元素之间的注意力,如Transformer编码器中的自注意力。交叉注意力(Cross-Attention):不同序列之间的注意力,如Transformer编码器-解码器结构中的注意力。
自注意力机制
自注意力机制通过动态权重分配,允许序列中每个元素与其他元素进行交互,从而动态聚合全局上下文信息,精确建模元素间的依赖关系。Transformer模型在诸多自然语言处理任务中展现出的卓越性能源于其全局自注意力机制[3]。 具体的实现步骤为[2][4]:
查询 (Query), 键(Key), 值 (Value) 的生成
将输入序列转化形成的嵌入向量(可以是词向量,也可以是词向量加上位置编码向量),分别与3个不同的可学习权重矩阵W(Q), W(K), W(V)相乘生成Q, K, V向量。
注意力分数矩阵
将Q向量与所有K向量点乘(matrix multiplication, MatMul)得到注意力分数矩阵。注意实际应用中,如模型在生成第i个词时,只能依赖目标序列的前 i-1 个词,而不能看到目标词。通过添加 mask,可以将目标序列中当前位置之后的词隐藏起来,防止模型在生成过程中提前获取到未来的信息,从而保证模型在训练过程中的自回归特性,使其能够更好地模拟实际的序列生成过程。
归一化点乘矩阵
由于点乘操作,Q*KT值可能过大或过小,在归一化之前通常需要除以一个缩放因子来稳定梯度。之后应用Softmax 函数对注意力分数矩阵进行归一化。
加权输出
使用归一化后的注意力分数对V向量进行加权求和,作为自注意力机制的输出。
整体流程可以概括为缩放点乘注意力 (Scaled dot-product attention),用公式表示为:
具体的代码实现可参考:
1 import torch
2 from torch import nn
3
4 class ScaledDotProductAttention(nn.Module):
5 def __init__(self, d_k):
6 super().init()
7 self.sqrt_d_k = torch.sqrt(torch.tensor(d_k, dtype=torch.float32))
8
9 def forward(self, Q, K, V, attn_mask=None):
10 scores = torch.matmul(Q, K.transpose(-1, -2)) / self.sqrt_d_k
11 if attn_mask is not None:
12 scores = scores.masked_fill(attn_mask == 0, -1e9)
13 attn = torch.softmax(scores, dim=-1)
14 context = torch.matmul(attn, V)
15 return context, attn
多头注意力机制
多头注意力是利用多个查询,来平行地计算从输入信息中选取多个信息。每个注意力关注输入信息的不同部分。它将输入序列的表示拆分成多个子空间(头),然后在每个子空间内独立地计算注意力权重,最后将各个子空间的结果拼接起来。多头注意力机制使得模型可以在不同的表示子空间中捕获到不同的上下文信息,增强对复杂数据内在结构的建模能力[2][5][6]。具体流程如下:
子空间Q, K, V 向量的生成
给定嵌入向量和头 (Head) 的数目h,在每个头(子空间)中都会通过一组不同的权重矩阵得到QKV向量。
多头并行计算
对每个头独立计算缩放点乘注意力:
多头合并输出
将所有头的输出拼接后通过线性层融合作为多头注意力机制的输出:
注意力机制的应用
注意力机制在各种人工智能领域都得到了广泛的应用。值得一提的是,ChatGPT等大语言模型都广泛使用了注意力机制作为核心技术。
自然语言处理
机器翻译:注意力机制使得模型在翻译长句子时,能够关注到源语言句子中与目标语言当前词语相关的部分。通过引入注意力机制,我们将源语言中每个位置的信息都保存下来。在解码过程中生成每一个目标语言的单词时,我们都通过注意力机制直接从源语言的信息中选择相关的信息作为辅助。
文本摘要:模型可以学习关注文档中的关键句子或段落,生成更准确、更简洁的摘要。
问答系统:注意力机制帮助模型定位问题相关的文档段落,从而给出更准确的答案。
计算机视觉
图像描述生成:在生成描述的每一个单词时,注意力机制来选择一些来自于图像的相关信息,关注图像的不同区域。
目标检测:模型可以使用注意力机制来聚焦于图像中可能存在目标的区域,提高检测的准确性和效率。
图像分类:注意力机制可以帮助模型关注图像中对分类决策至关重要的区域。
参考文献
- ↑ Singh R, Chandra S, Dhusia K, et al. Capacitating surveillance and situational awareness with measure of visual engagement using eyetracker[C]//2016 International Conference on Computing, Communication and Automation (ICCCA). IEEE, 2016: 1161-1165.
- ↑ 2.0 2.1 2.2 2.3 Vaswani, A. et al. Attention Is All You Need. ADVANCES IN NEURAL INFORMATION PROCESSING SYSTEMS 30 (NIPS 2017) Vol. 30 (2017).
- ↑ Feng, Z. & Li, Y. A window attention based Transformer for Automatic Speech Recognition. 2024 5th International Conference on Computer Engineering and Application (ICCEA). 449-454, doi: 10.1109/ICCEA62105.2024.10603610 (2024).
- ↑ Han, K. et al. A Survey on Vision Transformer. IEEE Transactions on Pattern Analysis and Machine Intelligence 45, 87-110, doi:10.1109/TPAMI.2022.3152247 (2023).
- ↑ Zhang, Y. et al. Attention is all you need: utilizing attention in AI-enabled drug discovery. Briefings in Bioinformatics 25, bbad467, doi:10.1093/bib/bbad467 (2024).
- ↑ Voita, E. et al. Analyzing Multi-Head Self-Attention: Specialized Heads Do the Heavy Lifting, the Rest Can Be Pruned. 57TH ANNUAL MEETING OF THE ASSOCIATION FOR COMPUTATIONAL LINGUISTICS (ACL 2019) 5797-5808 (2019).
- ↑ Andrea, G. et al. Attention in Natural Language Processing. IEEE Transactions on Neural Networks and Learning Systems 32, 4291-4308, doi: 10.1109/tnnls.2020.3019893 (2021).
- ↑ Kelvin, Xu. et al. Show, Attend and Tell: Neural Image Caption Generation with Visual Attention. arXiv:1502.03044v3 (2016).