基于本文回答
0
评论

Transformer自注意力机制(Self-Attention)的工作原理

知识点图片

Transformer 的自注意力机制(Self-Attention)是现代自然语言处理(NLP)和大模型(如 GPT、BERT)的核心组件。它的主要作用是让模型在处理一个序列(比如一句话)时,能够关注序列中不同位置之间的关联,从而更好地理解上下文。

为了让你直观地理解,我们可以通过一个直观的例子核心概念(Q、K、V)以及具体的计算步骤这三个层次来解析。


1. 直观理解:为什么要用自注意力?

想象一下这句话:

"The animal didn't cross the street because it was too tired."
(这就动物没有过马路,因为它太累了。)

当人类读到 "it"(它) 这个词时,我们很容易知道这里的 "it" 指的是 "animal"(动物) 而不是 "street"(马路)。

但在自注意力机制出现之前(例如早期的 RNN),机器很难处理这种长距离的指代关系。Self-Attention 的目的就是让机器在处理 "it" 这个词时,能够通过计算,发现 "animal" 对 "it" 的重要性最高,从而把这两个词关联起来。


2. 核心概念:Q、K、V 三剑客

Self-Attention 的核心在于将输入向量变成了三个不同的向量:Query(查询)Key(键)Value(值)

这三个概念源自于信息检索(数据库查询)系统:

  • Query (QQ):你手里拿着的词(比如 "it"),它去询问其他词:“你们跟我有关系吗?”
  • Key (KK):其他词手里的标签(比如 "animal" 的标签),用来和 Query 进行匹配。
  • Value (VV):词原本包含的实际内容/信息。

比喻:
你去图书馆找书。

  • Query 是你的搜索意图(比如“量子力学”)。
  • Key 是书脊上的分类编号或书名(用来匹配你的意图)。
  • Value 是书里的具体内容。
  • 当 Query 和 Key 匹配度很高时,你就把那本书的 Value 取出来阅读。

3. 工作原理:六个步骤

假设我们现在的输入是一句话中的两个单词 x1x_1x2x_2

第一步:准备输入

将单词转换为词向量(Embedding)。

第二步:生成 Q、K、V

对于每个单词向量 xx,分别乘以三个可学习的权重矩阵 WQ,WK,WVW^Q, W^K, W^V,得到三个新向量:q,k,vq, k, v

  • q1=x1×WQq_1 = x_1 \times W^Q
  • k1=x1×WKk_1 = x_1 \times W^K
  • v1=x1×WVv_1 = x_1 \times W^V

第三步:计算注意力分数(Dot Product)

我们要计算单词 1 对单词 2 的关注度。
拿单词 1 的查询向量 q1q_1 去点积(Dot Product)单词 2 的键向量 k2k_2
Score=q1k2\text{Score} = q_1 \cdot k_2

  • 点积结果越大,表示两个词的相关性越高(越相似)。

第四步:缩放(Scaling)

将分数除以 dk\sqrt{d_k}dkd_k 是 Key 向量的维度)。

  • 原因:防止点积结果过大,导致后续的 Softmax 梯度极小(梯度消失),利于训练稳定。

第五步:归一化(Softmax)

将得分通过 Softmax 函数处理,变成概率分布(所有分数加起来等于 1)。

  • 这得出的就是注意力权重(Attention Weights)。比如处理 "it" 时,"animal" 的权重可能是 0.8,"street" 是 0.1,其他是 0.1。

第六步:加权求和(Weighted Sum)

将计算出的权重乘以对应的 Value 向量 (vv),然后求和。
z1=Weight1v1+Weight2v2+z_1 = \text{Weight}_1 \cdot v_1 + \text{Weight}_2 \cdot v_2 + \dots

结果 z1z_1 就是单词 1 经过 Self-Attention 处理后的新表示。 这个新向量不仅仅包含单词 1 自己的含义,还融合了上下文中与它相关的其他单词的信息。


4. 数学公式汇总

如果用矩阵形式(一次性处理所有单词)表示,这就是那条著名的公式:

Attention(Q,K,V)=softmax(QKTdk)V\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V

  1. QKTQK^T:计算所有词两两之间的相似度分数。
  2. /dk/\sqrt{d_k}:缩放分数。
  3. Softmax:归一化为概率。
  4. ×V\times V:根据概率提取信息。

5. 进阶:多头注意力(Multi-Head Attention)

Transformer 不仅仅做一个 Self-Attention,而是做多组

  • 原理:使用多组不同的 WQ,WK,WVW^Q, W^K, W^V 矩阵。
  • 目的:让模型从不同的“视角”去理解句子。
    • Head 1 可能关注语法结构(主谓宾关系)。
    • Head 2 可能关注指代关系(it -> animal)。
    • Head 3 可能关注时态或语气
      最后将所有 Head 的结果拼接起来,通过一个线性层输出。

总结

Self-Attention 的本质是:
它允许序列中的每个元素都“看一眼”序列中的其他所有元素,计算彼此的相关性,并根据相关性的大小,聚合上下文信息来更新自己的表示。

它的优势:

  1. 并行计算:不像 RNN 需要按顺序一个词一个词读,Self-Attention 可以一次性计算所有词的关系,速度快。
  2. 长距离依赖:无论两个词在句子中距离多远,它们之间的计算距离都是 1(直接点积),解决了长文本记不住开头的问题。
右滑查看面试常问