目录

一、自注意力机制的目的

1. 传统模型的困境

(1)如何考虑上下文信息?

(2)如何处理变长序列?

2. 自注意力机制的定义

3. 自注意力机制的优势

二、自注意力机制详解

1. 核心计算流程

2. 多头注意力机制

 3. 实际的矩阵乘法实现

4. 位置编码

三、自注意力机制的应用

1. 在自然语言处理中的应用

2. 在其他领域的应用

3. 自注意力与CNN、RNN的对比

总结


一、自注意力机制的目的

1. 传统模型的困境

        在自然语言处理中,我们经常需要处理序列数据。传统方法面临两个核心挑战:

(1)如何考虑上下文信息?

  • 比如"I saw a saw"中的两个"saw"含义不同
  • 传统全连接网络难以有效捕捉这种上下文依赖

(2)如何处理变长序列?

  • 序列长度不确定,传统方法需要固定窗口大小
  • 固定窗口无法捕捉长距离依赖关系

2. 自注意力机制的定义

        自注意力机制的核心目的是获取整个句子的n个向量信息,在保留每个向量本身信息的同时,捕获它和整个句子中其他所有向量的关系,最终输出n个经过上下文信息增强的新向量

        

3. 自注意力机制的优势

全局信息交互

  • 每个位置都能直接访问序列中的所有位置

  • 打破传统方法的距离限制

灵活处理变长序列

  • 不需要固定窗口大小

  • 自动适应不同长度的输入序列

信息完整性

  • 输出向量既包含自身特征

  • 又融入了丰富的上下文关系信息

二、自注意力机制详解

1. 核心计算流程

        自注意力机制通过三个关键步骤来处理序列信息:

步骤一:生成Q、K、V向量
        输入序列的每个词向量首先通过三个不同的线性变换,生成对应的:

  • 查询向量(Query):表示当前词"想要寻找什么"

  • 键向量(Key):表示每个词"能提供什么"

  • 值向量(Value):表示每个词"实际包含的内容"

        Q = aᵢ × W_Q                                  K = aᵢ × W_K                                  V = aᵢ × W_V

                      

        就像在图书馆找书:Query是"你想找什么书",Key是"书的索引标签",Value是"书的实际内容",通过Query和Key的匹配找到相关书籍,然后读取Value内容

步骤二:计算注意力权重

        对于序列中的每个位置,计算其查询向量Q与所有位置的键向量K的相似度:

  • 注意力分数 = Qᵢ · Kⱼ(点积运算)

  • 缩放处理:分数 / √dₖ(dₖ是键向量的维度)

  • Softmax归一化:得到注意力权重α

步骤三:加权求和生成输出

用计算得到的注意力权重对值向量进行加权求和:

  • 输出向量bᵢ = Σ(αᵢⱼ × Vⱼ)

        学习参数只有 W_k , W_q , W_v (多头注意力机制还会有参数W_o)

2. 多头注意力机制

        多头注意力通过多个"注意力头"来捕捉不同类型的信息关系,将标准的单组权重矩阵(W_k , W_q , W_v)复制多份,每一份对应一个注意力头,从而允许模型同时关注来自不同表示子空间的信息。

工作原理

        对于第 i 个注意力头:

  • 查询权重矩阵:W_Q_i

  • 键权重矩阵:W_K_i

  • 值权重矩阵:W_V_i

        每个头独立地计算注意力:

  • Q_i = X × W_Q_i

  • K_i = X × W_K_i

  • V_i = X × W_V_i

        然后计算该头的输出:head_i = Attention(Q_i, K_i, V_i)

        每个向量结果的所有头的输出被拼接成一个大的矩阵(图中是bi向量的两个头拼接的结果),然后通过一个可学习的权重矩阵 W_O 进行线性变换,来决定哪个头所保留的信息重要,以融合不同头的信息:

  • 多头输出 = Concat(head_1, head_2, ..., head_h) × W_O

        其中,h 是头的数量,W_O 的维度是 (h × d_v) × d,d 是输出维度。

多头机制的优势

  • 头1:可能关注语法结构关系

  • 头2:可能捕捉语义相似性

  • 头3:可能学习指代关系

  • 头n:捕获其他特定模式的关系

 3. 实际的矩阵乘法实现

        在实际计算中,自注意力机制通过矩阵运算高效处理整个序列:

步骤一的矩阵形式

        Q = X × W_Q  [n×d] × [d×d_k] = [n×d_k]
        其中X是输入序列矩阵,n是序列长度,d是输入维度(词向量个数),d_k和d_v是投影维度。

步骤二的矩阵运算

        每一列代表一个词向量的softmax结果(a11,a12,a13,a14代表着a1向量的结果)

步骤三的矩阵运算

4. 位置编码

        由于自注意力机制本身不包含位置信息,需要通过位置编码注入序列顺序:

        输入向量 = 词嵌入向量 + 位置编码向量

位置编码方法

  • 正弦余弦编码(Transformer原版)

  • 可学习的位置编码(BERT使用)

  • 相对位置编码

三、自注意力机制的应用

1. 在自然语言处理中的应用

序列标注任务(判别一句话中每个词的词性)

  • 词性标注:每个词输出一个标签

  • 命名实体识别:识别文本中的实体

序列分类任务(判别一句话是积极还是消极)

  • 情感分析:整个序列输出一个情感标签

  • 文本分类:判断文本类别

序列生成任务(把一句话从中文翻译成英文)

  • 机器翻译:序列到序列的转换

  • 文本摘要:生成文本摘要

2. 在其他领域的应用

语音处理

  • 挑战:语音序列极长(每10ms一个向量)

  • 解决方案:Truncated Self-Attention,只关注局部上下文

图像处理

  • 将图像划分为patch,每个patch作为一个向量

  • 组成vector set进行自注意力计算

图神经网络

  • 在图上只计算相连节点之间的attention

  • 形成图注意力网络(GAT)

3. 自注意力与CNN、RNN的对比

自注意力 vs CNN

  • CNN是简化版的Self-Attention,只在小范围内计算注意力

  • Self-Attention具有全局感受野,CNN的感受野受限

  • CNN更适合局部模式,Self-Attention更适合长距离依赖

自注意力 vs RNN

特性RNNSelf-Attention
并行性顺序处理,难以并行完全并行计算
长距离依赖容易梯度消失/爆炸直接连接,无距离衰减
计算复杂度O(n)O(n²)
上下文理解单向或双向有限完全双向全局


总结

        自注意力机制是一种突破性的序列建模方法,有效解决了传统模型在上下文理解和变长序列处理上的局限。其核心是通过查询(Q)、键(K)、值(V)三组向量计算注意力权重,实现全局信息交互。多头注意力机制进一步扩展了模型捕捉不同关系模式的能力。相比CNN和RNN,自注意力具有并行计算、全局感受野等优势,已成功应用于NLP、语音、图像等领域,成为Transformer等现代深度学习架构的基础组件。

Logo

脑启社区是一个专注类脑智能领域的开发者社区。欢迎加入社区,共建类脑智能生态。社区为开发者提供了丰富的开源类脑工具软件、类脑算法模型及数据集、类脑知识库、类脑技术培训课程以及类脑应用案例等资源。

更多推荐