为什么要理解Transformer
ChatGPT、Claude、Gemini——当今所有主流大语言模型的底层架构都是Transformer。理解它不需要你推导数学公式,但了解它的核心思想,能帮助你更好地理解"AI为什么这样工作"——为什么长文本有时会出错,为什么上下文窗口有限制,为什么某些Prompt比另一些更有效。
本文用类比的方式,把Transformer的核心概念讲清楚。
Transformer之前:序列模型的困境
在2017年Transformer出现之前,处理文本的主流模型是RNN(循环神经网络)。RNN像一个只能看一眼上一个单词的读者,逐字处理,信息在长序列中很容易"遗忘"。
比如翻译这句话:"The animal didn't cross the street because it was too tired."
对RNN来说,当处理到"it"时,"animal"已经在很远的位置了,模型很难准确判断"it"指代的是animal还是street。
注意力机制:同时看所有词
Transformer的核心突破是Self-Attention(自注意力):处理每个词时,同时看整个句子的所有词,并给每个词分配一个"关注权重"。
类比:想象你在做一道填空题:"The trophy didn't fit in the suitcase because ___ was too big." 你的眼睛会在"trophy"和"suitcase"之间来回扫,权衡哪个更合适。Attention机制做的就是这件事——用数值量化每个词对当前位置的"重要程度"。
Q、K、V:注意力的三个角色
Self-Attention中,每个词会被转换为三个向量:
- Query(Q):我在找什么?(当前词提出的问题)
- Key(K):我能提供什么?(每个词的"标签")
- Value(V):我实际提供的内容
计算流程:
- 用Q和所有K做点积运算,得到"相关性分数"
- 对分数做Softmax归一化,得到注意力权重(所有词的权重之和为1)
- 用权重对所有V做加权求和,得到当前词的"上下文表示"
# 简化的注意力计算(伪代码)
import numpy as np
def attention(Q, K, V, d_k):
# 点积相似度,除以√d_k防止梯度消失
scores = Q @ K.T / np.sqrt(d_k)
# Softmax转为概率分布
weights = softmax(scores)
# 加权聚合Value
output = weights @ V
return output
多头注意力:从多角度理解
Transformer不只有一套Q/K/V,而是同时跑多个注意力头(Multi-Head Attention),每个头从不同角度理解词之间的关系:
- 第1头可能专注于语法关系(主谓宾)
- 第2头可能专注于指代关系(it指代谁)
- 第3头可能专注于语义相似性(同义词关联)
多个头的结果拼接后再做线性变换,得到综合了多维度信息的表示。
前馈网络:深度理解
注意力层负责"收集上下文信息",之后接一个前馈神经网络(FFN),负责对收集到的信息做"深度加工"——类似大脑在整合信息后进行推理和判断。
一个Transformer Block = 注意力层 + FFN,GPT-4据估计有100多个这样的Block叠加。
位置编码:让模型知道词序
Attention本身是"无序的"——它同时看所有词,不知道谁在前谁在后。Transformer通过位置编码(Positional Encoding)向每个词的向量里注入位置信息,让模型能区分"我打你"和"你打我"。
为什么上下文窗口有限
Attention的计算复杂度是O(n²)——序列长度翻倍,计算量增加4倍。这就是为什么早期模型只支持2K Token,而现在GPT-4 Turbo支持128K Token,是因为引入了高效Attention算法(如FlashAttention)和更大的算力投入。
理解这一点,就能理解为什么超长对话有时会"忘事"——超出上下文窗口的早期内容被截断了,不是模型"健忘",是物理限制。
对实际使用的启发
- 重要信息放在开头或结尾:研究表明,Attention对首尾位置的信息权重更高,"消失在中间"的信息容易被忽视。
- 相关上下文越集中越好:把所有相关背景放在一起,而不是分散在对话各处。
- 长对话适时重置:如果对话很长,重新开一个会话并总结之前的关键信息,比让无关历史堆积更有效。
小结
Transformer的核心是Self-Attention:让每个词都能"看到"整个序列,并动态分配注意力权重。多头注意力从多维度理解语言,叠加多层后形成强大的语言理解能力。
不需要成为ML工程师,但理解这个基本工作方式,能帮你更聪明地使用AI工具。