1. Transformer简介:背景、优势、应用领域与经典论文回顾

为什么我们需要Transformer?

2017年之前,NLP领域的扛把子是RNN和LSTM。我刚开始做NLP时,用的就是LSTM做文本分类,效果还行,但训练起来那叫一个慢。你想想看,RNN天生是串行的——当前时刻的隐藏状态依赖于上一时刻,GPU再强也没法并行。这就好比一条流水线上只有一个工人,活再多也得一个一个干。

更麻烦的是长距离依赖问题。句子一长,前面单词的信息传到后面就衰减得差不多了。我记得当时做机器翻译,一个20个词的句子,前5个词的信息经常被“忘掉”。搞出Attention机制来补救,也只是治标不治本。

直到2017年,Google那篇“Attention Is All You Need”横空出世。它告诉行业:我们不需要RNN那套循环结构了,全靠Attention就能把序列建模做到极致。说白了,Transformer就是一种“注意力全开”的架构。

Transformer的核心优势

我习惯从三个维度来理解Transformer的优势:计算效率、建模能力、可扩展性。

维度 RNN/LSTM Transformer
并行计算 无法并行,串行计算 可并行,训练速度提升几十倍
长距离依赖 信息衰减,理论上限有限 全连接注意力,任意位置直接通信
全局上下文 通过隐状态传递,间接获取 直接计算所有位置的依赖关系
可扩展性 增加层数效果递减明显 深层效果好,可堆叠至上百层

一个关键洞察:Transformer把序列建模问题从“时序递推”转变为“全连接关系建模”,这个思路的转变直接催生了后来的GPT系列和BERT。

应用领域:远不止NLP

Transformer最初是为机器翻译设计的,但后来证明它是一种极其通用的架构。我在项目中用它做过的东西包括但不限于:

  • 自然语言处理:文本分类、命名实体识别、机器翻译、摘要生成、问答系统。BERT和GPT系列几乎统治了所有NLP榜单。
  • 计算机视觉:ViT(Vision Transformer)用纯Transformer结构做图像分类,效果超过了许多CNN模型。我印象很深的一个项目是把ViT用在医学影像上,训练效率比ResNet高了不少。
  • 多模态学习:CLIP把文本和图像映射到同一个向量空间,ViT-GPT系列把语言模型和图像理解结合。Transformer的注意力机制天然适合处理不同类型的数据。
  • 科学计算:蛋白质结构预测(AlphaFold2)、分子性质预测、时间序列预测。Transformer对序列数据的建模能力在科学领域同样适用。

经典论文回顾

要理解Transformer,这几篇论文是绕不过去的。我按时间线和影响力列一下。

  1. Attention Is All You Need (2017)——开山之作。首次提出纯注意力机制的序列到序列模型,架构包含编码器-解码器、多头自注意力、位置编码。这篇论文我反复读了五遍才完全吃透。

  2. BERT: Pre-training of Deep Bidirectional Transformers (2018)——把Transformer的编码器部分做到极致,用Masked Language Model预训练,然后在下游任务微调。我曾经用BERT做中文文本分类,只训练了100条标注数据就达到了传统方法需要1000条的效果。

  3. GPT-2 / GPT-3 (2019-2020)——Transformer解码器的王者。GPT系列证明了“大力出奇迹”的可行性:模型规模越大,涌现的能力越强。GPT-3在零样本和小样本任务上的表现令人震惊。

  4. ViT: An Image is Worth 16x16 Words (2020)——把Transformer用在视觉领域的里程碑。把图像切成固定大小的patch,当作词序列输入Transformer,效果超越了当时最先进的CNN。

个人阅读建议:先精读第一篇《Attention Is All You Need》。把里面的公式推导、注意力机制、位置编码彻底搞懂。后面BERT和GPT的论文你看起来就会轻松很多。我当初就是这么啃下来的,虽然痛苦但很值。

Transformer架构总览

下面的SVG图展示了Transformer的整体结构。我建议你把这个图保存下来,后续章节我们会反复用到这些概念。

Transformer 架构总览 输入序列 (Input) 位置编码 (Positional Encoding) 多头自注意力 Multi-Head Self-Attention Add & LayerNorm 前馈神经网络 Feed-Forward Network Add & LayerNorm 核心要点 1. 输入 + 位置编码 2. 多头自注意力:捕捉 序列内所有位置关系 3. 残差连接 + 层归一化 4. 前馈网络:非线性变换 5. 重复N层编码器块 实际使用中,编码器和 解码器可以堆叠6、12、 甚至更多层(如GPT-3 有96层) 虚线箭头表示残差连接, 帮助梯度直接流过深 层网络。 输出到下一层或解码器

业内常用配置

不同的Transformer变体在参数配置上有显著差异。我整理了一个常用的表格,方便你做实验时参考。

模型 层数 隐藏维度 注意力头数 参数量
Transformer-Base 6 512 8 65M
Transformer-Big 6 1024 16 213M
BERT-Base 12 768 12 110M
GPT-2 (Medium) 24 1024 16 345M
ViT-Base 12 768 12 86M

我曾经踩过的坑:刚开始用Transformer时,我直接拿论文里的默认配置去训练自己的小数据集,结果过拟合得一塌糊涂。后来我学会了先调小隐藏维度和层数,再逐步增加。记住:不要盲目照搬大模型的配置,要根据你的数据规模和计算资源来调整。

小结

Transformer解决了RNN的两个核心痛点:并行计算和长距离依赖。它的核心思想是“注意力机制替代循环结构”,这个思路被证明在NLP、CV、多模态甚至科学计算领域都具有普适性。

后面的章节,我会带你把每个组件拆开来看。从多头注意力的数学原理,到位置编码的具体实现,再到如何用PyTorch把Transformer从零搭起来。跟着节奏走,一步步吃透它。