注意力机制

来自集智百科 - 复杂系统|人工智能|复杂科学|复杂网络|自组织
Word2vec(讨论 | 贡献)2025年6月15日 (日) 11:41的版本
跳到导航 跳到搜索
注意力机制的理解

在认知科学中,由于信息处理的瓶颈,人类会选择性地关注所有信息的一部分,同时忽略其他可见的信息。通过借鉴人类聚焦关键信息的观察与思考模式,在人工智能领域,注意力机制(Attention Mechanism)是深度学习领域的一项重要技术创新。它允许模型在处理信息时动态地关注最相关的部分,而不是平等对待所有输入信息。注意力机制可以增强可解释性:通过可视化注意力权重,帮助理解模型的决策过程。

注意力机制原理

注意力机制的本质是,从关注全部到关注重点。

比如,当我们阅读文章或观看图像时,视觉系统会自动将注意力集中在关键信息上,而非均匀处理所有细节。

注意力机制的计算过程包含三个核心组件:

查询(Query, Q):表示当前需要关注什么;键(Key, K):表示可以被关注的信息;值(Value, V):表示实际的信息内容

注意力机制计算一个权重分布,该分布表示了查询与每个键之间的相关性。然后,将这些权重与对应的值进行加权求和,得到最终的注意力输出。这个输出可以被视为模型在处理当前查询时,从输入序列中“提取”出的最相关信息。

注意力机制的类型

根据不同的分类标准,注意力机制可以分为多种类型。

按注意力范围分类:

自注意力(Self-Attention):序列内部元素之间的注意力,如Transformer中的自注意力。

self-attention

交叉注意力(Cross-Attention):不同序列之间的注意力,如编码器-解码器结构中的注意力。

自注意力机制通过动态权重分配,允许序列中每个元素与其他元素进行交互,从而动态聚合全局上下文信息,精确建模元素间的依赖关系。Transformer模型在诸多自然语言处理任务中展现出的卓越性能源于其全局自注意力机制(1)。

工作流程(2,3):

(1)查询 (Query), 键(Key), 值 (Value) 的生成

将输入序列转化形成的嵌入向量(可以是词向量,也可以是词向量加上位置编码向量)分别与3个不同的可学习权重矩阵W(Q), W(K), W(V)相乘生成Q, K, V向量。其中Q, K向量的维度为d(k),V向量的维度为d(v)。在Transformer中,


(2)注意力分数矩阵

将Q向量与所有K向量点乘(matrix multiplication, MatMul)得到注意力分数矩阵。注意实际应用中,如模型在生成第i个词时,只能依赖目标序列的前 i-1 个词,而不能看到目标词。通过添加 mask,可以将目标序列中当前位置之后的词隐藏起来,防止模型在生成过程中提前获取到未来的信息,从而保证模型在训练过程中的自回归特性,使其能够更好地模拟实际的序列生成过程。

(3)归一化点乘矩阵

由于点乘操作,S值可能过大或过小,在归一化之前通常需要除以一个缩放因子来稳定梯度。之后应用Softmax 函数对注意力分数矩阵进行归一化。

(4)加权输出

使用归一化后的注意力分数对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_kif attn_mask is not None:
11             scores = scores.masked_fill(attn_mask == 0, -1e9)
12         attn = torch.softmax(scores, dim=-1)
13         context = torch.matmul(attn, V)
14         return context, attn

多头注意力是利用多个查询,来平行地计算从输入信息中选取多个信息。每个注意力关注输入信息的不同部分。

多头注意力机制将输入序列的表示拆分成多个子空间(头),然后在每个子空间内独立地计算注意力权重,最后将各个子空间的结果拼接起来。多头注意力机制使得模型可以在不同的表示子空间中捕获到不同的上下文信息,增强对复杂数据内在结构的建模能力(3-5)。

工作流程:

(1)子空间Q, K, V 向量的生成

给定嵌入向量和头 (Head) 的数目h,在每个头(子空间)中都会通过一组不同的权重矩阵

对输入序列进行线性投影变换得到

, 其维度为

(2)多头并行计算

对每个头独立计算缩放点乘注意力:

(3)多头合并输出

将所有头的输出拼接后通过线性层融合作为多头注意力机制的输出:

多头注意力机制

注意力机制的应用

注意力机制在各种人工智能领域都得到了广泛的应用:

  • 自然语言处理:
    • 机器翻译: 注意力机制使得模型在翻译长句子时,能够关注到源语言句子中与目标语言当前词语相关的部分。通过引入注意力机制,我们将源语言中每个位置的信息都保存下来。在解码过程中生成每一个目标语言的单词时,我们都通过注意力机制直接从源语言的信息中选择相关的信息作为辅助。
    • 文本摘要: 模型可以学习关注文档中的关键句子或段落,生成更准确、更简洁的摘要。
    • 问答系统: 注意力机制帮助模型定位问题相关的文档段落,从而给出更准确的答案。
  • 计算机视觉:
    • 图像描述生成: 在生成描述的每一个单词时,注意力机制来选择一些来自于图像的相关信息,关注图像的不同区域。
    • 目标检测: 模型可以使用注意力机制来聚焦于图像中可能存在目标的区域,提高检测的准确性和效率。
    • 图像分类: 注意力机制可以帮助模型关注图像中对分类决策至关重要的区域。


值得一提的是,ChatGPT等大型语言模型都广泛使用了注意力机制作为核心技术。

参考文献