Transformer 是 2017 年 Google 团队在《Attention Is All You Need》中提出的基于自注意力机制的序列建模架构,彻底革新了自然语言处理(NLP)领域,并成为大语言模型(如 GPT、BERT)的核心基础。其设计突破了传统循环神经网络(RNN/LSTM)的序列依赖限制,通过并行计算和全局注意力机制,实现了更高效的训练和更强的长距离语义建模能力。
简单总结一下学习完transformer的流程理解:
输入➡️转为词向量➡️添加位置编码定位每个词向量➡️生成Q、K、V向量(类似于描述词向量,每个词向量都有一组Q、K、V向量)➡️多头注意力拼接向量(类似于多方面学习向量间的关系)➡️前馈网络➡️加残差和归一化使训练稳定➡️输出。
总体感觉就是所谓的编码解码利用多层网络不断学习词向量之间关系的过程,使输出效果更优。
附原文链接:https://arxiv.org/pdf/1706.03762
一、核心痛点:为什么需要 Transformer?
传统序列模型(如 RNN、LSTM)存在两大致命缺陷:
- 并行性差:必须按序列顺序处理输入(如先处理第 1 个词,再处理第 2 个词),无法同时利用多核 GPU 并行计算,训练效率极低。
- 长距离依赖弱:随着序列长度增加,早期信息在传递中逐渐衰减(梯度消失),难以捕捉跨句子 / 段落的语义关联(如 “他说小李会来,[间隔 100 个词] 但他没来” 中 “他” 与 “小李” 的指代关系)。
Transformer 完全抛弃循环结构,仅用注意力机制解决上述问题,成为首个能同时实现 “高效并行” 和 “强长距离依赖建模” 的架构。
二、整体架构:编码器 - 解码器结构
Transformer 采用经典的 “编码器 - 解码器” 框架,适用于 “序列到序列” 任务(如翻译、文本摘要)。
1. 编码器(Encoder):将输入序列转换为上下文向量
编码器的核心功能是:将输入序列(如 “我爱自然语言处理”)转换为包含全局上下文信息的向量表示(每个词的向量都融合了其他所有词的信息)。
- 结构:由 N 个完全相同的 “编码器层” 堆叠而成(论文中 N=6),每个编码器层包含两个子层:
- 子层 1:多头自注意力(Multi-Head Self-Attention)
- 子层 2:前馈神经网络(Feed Forward Network, FFN)
- 每个子层后均有残差连接(
LayerNorm(x + Sublayer(x))
),用于缓解深层网络的梯度消失问题。
(1)多头自注意力:序列内的 “全局关联” 建模
自注意力机制的本质是:让序列中每个位置 “关注” 其他所有位置,并根据关联强度加权融合信息。
-
单头注意力(Scaled Dot-Product Attention): 输入为三个矩阵(维度均为
[seq_len, d_k]
):- Q(Query,查询):当前位置 “想找什么”(如 “爱” 这个词想找它的宾语);
- K(Key,键):其他位置 “提供什么信息”(如 “自然语言处理” 作为候选宾语的特征);
- V(Value,值):其他位置的 “具体信息内容”(如 “自然语言处理” 的语义向量)。
计算步骤(公式 1-4):
- 计算原始注意力分数(Q 与 K 的相似度)
- 缩放(避免维度
d_k
过大导致分数爆炸,softmax 后梯度消失) - 掩码(可选,编码器中无需掩码,解码器中用于屏蔽未来信息);
- 归一化并加权融合 V
-
多头注意力(Multi-Head Attention): 为了捕捉多维度的关联(如语义、语法、位置等),将 Q、K、V 通过线性层映射为 h 组(论文中 h=8),每组独立计算注意力后拼接,再通过线性层输出。
优势:不同 “头” 可关注不同类型的依赖(如一个头关注主谓关系,一个头关注修饰关系),提升模型表达能力。
(2)前馈神经网络:位置独立的非线性变换
自注意力输出的向量需经过 “逐位置” 的非线性变换,强化特征表达
- 结构:两层线性层 + ReLU 激活,输入输出维度均为
d_model=512
,中间层维度为2048
。 - 特点:对每个位置独立处理(无序列依赖),可完全并行计算。
2. 解码器(Decoder):基于上下文生成输出序列
解码器的核心功能是:根据编码器输出的全局上下文向量,以及 “已生成的部分输出序列”,自回归生成下一个元素(如翻译任务中,根据 “我爱” 和编码器的中文上下文,生成 “ I love ”)。
- 结构:由 N 个完全相同的 “解码器层” 堆叠而成(论文中 N=6),每个解码器层包含三个子层:
- 子层 1:带掩码的多头自注意力:防止 “偷看” 未来信息(如生成第 t 个词时,仅允许关注前 t-1 个词);
- 子层 2:编码器 - 解码器注意力:关注编码器输出中与当前生成相关的位置(如翻译 “自然语言处理” 时,关注中文原文中对应的词);
- 子层 3:前馈神经网络:与编码器的 FFN 结构相同;
- 每个子层后同样有残差连接和层归一化。
三、输入处理:词嵌入 + 位置编码
Transformer 无循环结构,无法天然感知序列顺序,因此输入需包含两部分信息:
1. 词嵌入(Token Embedding)
将离散的词(如 “自然语言”)通过可学习的嵌入矩阵转换为连续向量:
- 输入:词的索引(如 “我”→ 123);
- 输出:
d_model=512
维的向量,捕捉词的语义信息; - 特点:嵌入矩阵在训练中学习,与输出层的线性矩阵共享权重(提升参数效率)。
2. 位置编码(Positional Encoding)
为每个位置生成固定编码,注入顺序信息。论文采用正弦余弦函数(非可学习)
-
优势:
- 对任意位置
pos + k
,PE(pos + k)
可表示为PE(pos)
的线性变换,便于模型学习相对位置关系; - 支持长序列扩展(训练时未见过的长序列也能生成合理编码)。
- 对任意位置
-
最终输入:词嵌入与位置编码相加(
Embedding + PE
),维度仍为d_model=512
。
四、输出处理:线性层 + Softmax
解码器输出的向量([seq_len, d_model]
)需转换为词表概率分布:
- 经线性层映射到词表维度(如词表大小为 30000,则输出
[seq_len, 30000]
); - 经 Softmax 归一化,得到每个词的生成概率;
- 实际训练中常用 “教师强制(Teacher Forcing)”:用真实序列而非生成序列作为解码器输入,加速收敛。
五、关键优势与革新
-
并行计算能力: 自注意力和 FFN 均无序列依赖,所有位置可同时处理。在 8 个 P100 GPU 上训练 12 小时即可达到 SOTA 性能,效率远超 RNN(需数天训练)。
-
长距离依赖建模: 注意力机制直接计算任意两个位置的关联,时间复杂度为
O(n^2)
(n 为序列长度),远优于 RNN 的O(n)
(需逐步传递),能轻松捕捉跨段落的语义关系。 -
结构灵活性: 编码器可单独用于 “理解任务”(如分类、问答),解码器可单独用于 “生成任务”(如写作、翻译),为后续模型(BERT、GPT)提供了模块化基础。
六、衍生与影响
Transformer 已成为深度学习的 “基础设施”,衍生出众多里程碑模型:
- 编码器应用:BERT(双向编码,用于文本分类、命名实体识别)、RoBERTa;
- 解码器应用:GPT(自回归生成,用于文本创作、对话)、LLaMA;
- 跨模态扩展:ViT(将图像切分为 “patch” 序列,用 Transformer 做分类)、CLIP(跨文本 - 图像的注意力建模)。