2026-05-13 进阶 深度学习 NLP 注意力机制

Transformer

一句话定义:Transformer 是一种完全基于注意力机制(Attention)的序列到序列模型架构,摒弃了传统的循环和卷积结构,通过自注意力(Self-Attention)让序列中的每个位置都能直接"看到"所有其他位置,从而实现高效的并行计算和长距离依赖建模。

为什么需要它?

在 Transformer 之前,处理序列数据(如文本、语音)的主流方案是 RNN 及其变体 LSTM/GRU。它们有一个根本性的瓶颈:必须按顺序逐个处理 token。这意味着:

Transformer 用自注意力机制一举解决了这三个问题——序列中的任意两个位置之间只有一条"直连通道",不需要经过中间位置的传递,同时所有位置的计算可以完全并行执行。

核心直觉

想象你在一个会议上,所有人都同时发言,但你能选择性地关注任何一个人的声音。这就是自注意力的本质——每个 token 都能直接"听到"序列中所有其他 token 的声音,并根据相关性分配不同的关注度。

对比 RNN 的类比:RNN 像传话游戏——信息从第一个人传到最后一个人,中间每一步都会丢失一些细节。Transformer 像圆桌会议——每个人都能直接和任何人对话,信息零损耗。

它是怎么工作的?

整体架构

Transformer 采用经典的编码器-解码器结构:

编码器和解码器各由 N 个相同的层堆叠而成(原论文 N=6),每一层内部都包含自注意力子层和前馈网络子层。

架构总览图

graph TD subgraph 输入 T[输入序列 tokens] --> PE[位置编码] end PE --> ENC subgraph ENC[编码器 x N] direction TB E1[多头自注意力] --> E2[Add & LayerNorm] E2 --> E3[前馈网络 FFN] E3 --> E4[Add & LayerNorm] end ENC --> DEC subgraph DEC[解码器 x N] direction TB D1[掩码多头自注意力] --> D2[Add & LayerNorm] D2 --> D3[交叉注意力 - 关注编码器输出] D3 --> D4[Add & LayerNorm] D4 --> D5[前馈网络 FFN] D5 --> D6[Add & LayerNorm] end D6 --> OUT[线性层 + Softmax] OUT --> PRED[输出概率分布]

数据流详解

  1. 输入嵌入:将 token ID 映射为 d_model 维的向量(原论文 d_model=512)
  2. 加位置编码:因为自注意力本身不感知顺序,必须注入位置信息
  3. 编码器处理:经过 N 层自注意力 + FFN,每个位置的表示都融合了全局上下文
  4. 解码器生成:用掩码自注意力防止"偷看未来",用交叉注意力关注编码器输出
  5. 输出:线性层将向量映射到词表大小,Softmax 生成下一个 token 的概率

关键组件 / 核心要素

组件 作用 类比
自注意力 Self-Attention 让每个 token 计算与所有其他 token 的相关性权重,生成上下文感知的表示 圆桌会议上,每个人都能直接和任何人对话
多头注意力 Multi-Head 并行运行多组注意力,每组关注不同类型的关系(语法、语义、位置等) 多个人同时从不同角度分析同一句话
位置编码 Positional Encoding 给每个位置一个独特的信号,弥补自注意力无法感知顺序的缺陷 给每把椅子贴上编号,让人知道谁坐在哪里
前馈网络 FFN 对每个位置独立做非线性变换,增加模型的表达能力 每个代表在对话结束后,各自独立整理笔记
残差连接 + 层归一化 残差防止梯度消失,LayerNorm 稳定训练,二者配合使深层网络可训练 高速公路的匝道(可以跳过堵车路段)+ 限速标志(保持稳定)
掩码 Mask 在解码器中遮挡未来位置,防止模型在训练时"作弊" 考试时只能看到前面的题目,不能翻到后面

自注意力的计算细节

自注意力的核心公式:

Attention(Q, K, V) = softmax(QKT / √dk) · V

Q(查询)、K(键)、V(值)都是输入经过不同线性变换得到的矩阵。√dk 是缩放因子,防止点积过大导致 softmax 梯度消失。

直觉理解:Q 是"我在找什么",K 是"我有什么",V 是"我的实际内容"。QKT 计算每对 token 之间的匹配度,softmax 归一化为权重,最后用权重对 V 加权求和。

多头注意力

不是只做一次注意力,而是把 Q、K、V 各自拆成 h 个"头"(原论文 h=8),每个头独立做注意力,最后拼接起来:

MultiHead(Q,K,V) = Concat(head1, ..., headh) · WO

每个头可以学到不同类型的关注模式——有的头关注相邻词(局部语法),有的头关注远距离依赖(指代消解),有的头关注特定句法结构。

与相关概念的关系

vs RNN / LSTM

RNN 需要按顺序处理,无法并行,且长距离信息会衰减(梯度消失/爆炸)。Transformer 用自注意力替代循环,完全并行一步到位连接任意距离。代价是内存开销为 O(n2),对超长序列不友好。

vs CNN

CNN 用固定大小的卷积核提取局部特征,需要堆叠很多层才能看到远距离信息。Transformer 的自注意力天然覆盖全局,但失去了 CNN 的归纳偏置(局部性、平移不变性),需要更多数据才能学好。

依赖于:嵌入 Embedding

Transformer 处理的是向量,不是离散的 token。词嵌入(Word Embedding)是将离散符号映射到连续向量空间的第一步。理解 [[Word2Vec]] 和 [[词嵌入]] 有助于理解 Transformer 的输入层。

催生了:GPT、BERT、LLM

Transformer 是当代所有大语言模型的底层架构。GPT 用解码器做生成,BERT 用编码器做理解,T5 用完整的编码器-解码器。理解 Transformer 是理解 [[GPT]]、[[BERT]]、[[大语言模型]] 的前提。

典型应用场景

机器翻译 — Transformer 的原始设计目标。编码器理解源语言,解码器生成目标语言,交叉注意力对齐两种语言的语义。
文本生成(GPT 系列) — 只用解码器部分,通过自回归方式逐个生成 token。ChatGPT、Claude 等都基于此架构。
文本理解与分类(BERT) — 只用编码器部分,通过双向自注意力理解整句话的语义,用于分类、问答、NER 等任务。
图像理解(Vision Transformer, ViT) — 将图片切成 patch 当作 token 输入 Transformer,证明 Transformer 不仅适用于文本,也可用于视觉任务。
多模态(GPT-4V、Gemini) — 文本、图像、音频共享同一个 Transformer 骨干,实现跨模态理解和生成。

常见误解与陷阱

❌ 误以为:Transformer 可以处理任意长度的序列
✅ 实际上:自注意力的计算和内存复杂度是 O(n2),序列长度翻倍,计算量翻四倍。实际模型都有最大长度限制(如 4K、8K、128K tokens)。长序列需要 [[稀疏注意力]] 或 [[滑动窗口注意力]] 等优化。
❌ 误以为:位置编码让 Transformer 感知"顺序"
✅ 实际上:原始的正弦位置编码只编码绝对位置,不直接编码相对顺序。后来的 [[RoPE]] 和 [[ALiBi]] 才更好地编码了相对位置关系。而且位置编码的效果高度依赖于具体的任务和序列长度。
❌ 误以为:GPT 和 BERT 用的是同一个 Transformer
✅ 实际上:GPT 只用解码器(单向、自回归),BERT 只用编码器(双向、掩码语言模型),T5 用完整的编码器-解码器。架构选择取决于任务类型。
❌ 误以为:注意力权重代表"理解"
✅ 实际上:注意力权重只是模型学到的一种信息路由策略,不等于人类理解的"关注"。高注意力分数不一定意味着语义上的强相关。

Transformer 的局限性

延伸阅读

相关概念