课程0基础Agent开发课 / LLM基础 / Transformer自注意力机制-直觉理解不需要数学
— 9 min read

Transformer自注意力机制-直觉理解不需要数学

> **本文适合谁**

Transformer 自注意力机制:直觉理解,不需要数学

本文适合谁

想理解"Transformer 为什么能处理长距离依赖"、"Q/K/V 到底是什么意思"的开发者。不需要数学推导,只需要直觉理解。读完这篇,你会明白为什么 context window 有限制,以及为什么多头注意力比单头更强大。


考虑这个英文句子:"The animal didn't cross the street because it was too tired."

"it" 指的是 animal 还是 street?

答案很明确是 animal,因为是动物会累,不是街道会累。这个判断需要理解 "tired" 的语义,同时把 "it" 和句子里的候选词做比较。

对老式的 RNN(Recurrent Neural Network,循环神经网络,一种按顺序逐词处理文本的神经网络,在Transformer出现之前是NLP的主流架构)来说,"it" 出现在句子中段,"animal" 在开头,中间隔了好几个词。信息要从"animal"那个位置一步步传递过来,传到"it"的时候,已经稀释得差不多了。判断经常出错。

Transformer 的自注意力机制从根本上改变了这件事。处理 "it" 的时候,直接和句子里的每一个词同时比较,不需要信息接力传递。


1.1 自注意力的核心思想

1.1.1 "自"字的含义:同一句话内部的词互相关注

理解自注意力之前,先理解"自"这个字为什么重要。

自注意力机制工作原理
图 6.4:自注意力机制热力图——句子中每个词对其他词的关注度分布,颜色越深表示关注度越高

在机器翻译的早期架构中,有一种"注意力机制":翻译目标语言时,注意力帮助解码器关注源语言的不同部分。这是两个不同序列之间的注意力——目标语言的词去关注源语言的词。

"自注意力"(Self-Attention)的"自",指的是同一个序列内部:处理一个句子时,句子里每个词都去关注同一个句子里的其他词。是同一句话内部的相互理解,而不是两个不同序列之间的交互。

这个设计的意义在于:处理每个词时,模型不是孤立地理解这个词,而是在整个句子的上下文中理解它。"银行"在"银行倒闭"和"银行对岸"中应该得到不同的表示——自注意力通过让"银行"关注周围词汇来实现这一点。

自注意力(Self-Attention)的基本思想:处理序列中的某个词时,不只看这个词本身,而是扫一眼整个序列,问:其他每个词对理解当前这个词有多重要?重要的多借鉴一点,不重要的少借鉴一点,最后把所有词的信息按重要性加权融合,得到当前词的新表示。

"自"的意思是:一个句子里的词互相关注,不是和外部句子的词交互。

处理 "it" 时,自注意力会算出:

  • "animal" 对 "it" 的重要性:很高
  • "street" 对 "it" 的重要性:较低
  • "tired" 对 "it" 的重要性:有一定相关

最终 "it" 的新表示里,"animal" 的信息占了大头,指代关系就自然学到了。


1.2 Query、Key、Value:三个角色的直觉

1.2.1 图书馆类比:三个角色各司其职

自注意力的实现里有三个概念:Query(Q)、Key(K)、Value(V)。很多教程直接上矩阵,让人一头雾水。有个直觉类比——图书馆的检索系统。

Query(查询): 当前词在"提问"——我在找什么信息?处理 "it" 时,Query 代表 "我在找我指代的是什么"。

Key(键): 每个词都在"自我介绍"——我有什么信息标签?"animal" 的 Key 带着"生物"、"主语"这类标签,"street" 的 Key 带着"地点"、"无生命"这类标签。

Value(值): 如果匹配成功,提供的实际信息内容。

为什么要区分 Key 和 Value?这是一个精妙的设计。Key 是"索引",用来判断这个词和当前词有多相关;Value 是"内容",是匹配成功后实际提供的信息。把索引和内容分开,让模型有更大的灵活性:同一个词可以用一种方式描述自己"能提供什么信息"(Key),又用另一种方式组织"实际提供的信息"(Value)。

计算过程是:用当前词的 Query 去和每个词的 Key 做点积,得到相似度分数,经过 softmax 变成概率分布(加权系数),再用这个系数去加权所有词的 Value,求和得到输出。

"it" 的 Query 和 "animal" 的 Key 相似度高,"animal" 的 Value 就贡献更多。

输入词序列
The animal ... it ... tired

每个词生成
Q / K / V 三个向量

计算注意力分数
Q · K^T

Softmax 归一化
得到注意力权重

加权求和 V
得到每个词的新表示

输出:融合了上下文信息
的词表示

'it' 的 Query

与所有词的 Key 做点积

animal: 0.72
street: 0.11
tired: 0.34
...

Softmax
animal: 0.48
street: 0.07
tired: 0.23
...

加权 Value 求和
→ 'it' 的新表示
(主要含 animal 信息)


1.3 多头注意力:多个视角同时看

1.3.1 为什么一种关系不够:语言的多维度性

实际的 Transformer 里,不只用一组 Q/K/V,而是用多组,叫多头注意力(Multi-Head Attention)。

理解多头注意力,需要先理解一个头为什么不够。

同一个词在句子里可以同时存在多种不同类型的关系。"The cat sat on the mat because it was comfortable"——这句话里"it"这个词:

  • 语法角度:它是代词,在句子里充当主语,应该对应前面出现的名词主语
  • 语义角度:combined 修饰它的形容词"comfortable",这个词通常描述有触感的物体,更符合"mat"而不是"cat"——但经过综合推断,"cat"坐在"mat"上时感到comfortable,"it"指"cat"更合理
  • 位置角度:proximity bias——距离近的词往往有更强的关联

每个头独立学习,关注不同类型的关系。

举个具体的例子。同一个句子 "The cat sat on the mat because it was comfortable":

  • 某个头可能专注于语法关系,学到 "it" 在句子里充当主语,倾向于和之前出现的名词主语关联。
  • 另一个头可能专注于语义关系,学到 "comfortable" 这个词更适合描述 "cat"(柔软的猫)而不是 "mat",通过多个线索综合判断。
  • 还有的头可能关注位置关系,距离近的词权重高一些。

这些头并行计算,最后把所有头的输出拼在一起,再经过一个线性变换。相当于从多个视角同时理解这个词,比单一视角更丰富。

GPT-4 据传有 128 个注意力头。每个头学到的不同模式叠加在一起,是 LLM 强大理解能力的来源之一。


1.4 为什么比 RNN 好

1.4.1 两个关键优势:距离和并行

对比一下,区别很明显。

RNN 处理长句子的方式是信息接力。处理第 20 个词时,第 1 个词的信息要经过 19 次"传递"才能到达,每次传递都有损耗,到了基本稀释殆尽。训练时梯度也要反向传播 19 步,梯度消失问题严重。

自注意力处理第 20 个词时,第 1 个词和第 20 个词是直接交互的,一步到位,没有中间损耗。无论序列多长,任意两个词之间的"距离"都是 1。

这不只是速度问题,更是质量问题。RNN 的远程依赖是通过一系列有损的变换传递的,中间每个时间步都可能引入噪声或遗忘。自注意力的直接交互确保了"银行"可以直接从"倒闭"或"河岸"获取信息,不经过任何中间节点。

还有一个优势:并行计算。RNN 必须按顺序处理,处理第 t 个词之前必须处理完前 t-1 个词,没法并行。自注意力对序列里所有词的计算可以同时进行,利用现代 GPU 的并行能力,训练速度大幅提升。这是 Transformer 时代能训练规模更大的模型的工程基础之一。


1.5 Context Window 的限制从哪里来

1.5.1 O(n²) 是不可回避的代价

常见参数"128k context window"的限制,本质来自自注意力的计算复杂度。

自注意力要计算序列里每对词的相似度。序列长度为 n,就有 n² 对组合。计算量是 O(n²)。

序列长度翻倍,计算量变成四倍。序列长度增加 10 倍,计算量变成 100 倍。这是物理限制,不是工程偷懒。

为什么不能简单地"绕过"这个限制?因为自注意力的强大正是来自于"所有词对都计算"——这才能捕捉任意位置之间的依赖关系。如果只计算部分词对,就等于限制了模型能看到的关系范围。

所以扩展上下文窗口是一个主动的研究方向,有很多方法在尝试降低这个复杂度:稀疏注意力(不是所有词对都算,只算一部分)、线性注意力近似、滑动窗口注意力等。Claude 的 200k 上下文、Gemini 的 1M 上下文,都是在这个方向上推进工程边界的结果。稀疏注意力(Sparse Attention)是其中一类方法,指不计算所有词对之间的注意力,只计算"可能相关"的词对,大幅减少计算量。

但原理上,O(n²) 的限制依然存在,只是通过各种近似手段绕开了一部分。


1.6 直觉够用了

不需要记住 softmax 的公式,也不需要手算矩阵乘法。自注意力的核心直觉只有这几点:

处理每个词时,同时看所有词,计算关联度,加权融合。Query 在问,Key 在介绍,Value 在给答案。多头注意力同时从多个角度看,每个头独立学习一种类型的关系。任意两词直接交互,不靠接力传递。复杂度 O(n²),这是 context window 有限的根本原因。

理解这些,就理解了为什么 LLM 能在一篇长文档里找到跨段落的逻辑关联,能理解句子里复杂的指代关系,能感知整个对话的上下文。

这些能力在 RNN 时代只能部分实现,在 Transformer 时代才真正打开。

下一篇讲分词器(Tokenizer),Token 才是 LLM 的基本单位,这直接影响 API 费用计算和上下文长度的理解。


1.7 小结

概念 核心直觉 对开发者的意义
自注意力 每个词直接看所有其他词,加权融合 解释为什么 LLM 能理解长距离指代关系
Query/Key/Value Q 在问"我需要什么",K 在说"我有什么",V 是实际内容 理解注意力计算的三个角色
多头注意力 同时从多个角度看(指代/语法/语义) 解释为什么 LLM 能同时捕捉多维关系
O(n²) 复杂度 序列长度翻倍,计算量翻四倍 Context window 有限的根本原因
本页目录