三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

Transformer架构解析:从自注意力到BERT与GPT的AI革命

Transformer架构解析:从自注意力到BERT与GPT的AI革命

1. 从“翻译官”到“通用大脑”:Transformer的颠覆性革命

如果你在2017年之前问我,什么模型是处理序列数据(比如一句话、一段代码、一段音频)的王者,我会毫不犹豫地告诉你:RNN(循环神经网络)或者它的变种LSTM、GRU。它们像一条记忆的河流,按顺序处理每个词,将上文的信息“流”到下文。但今天,这个答案彻底变了。一个名叫Transformer的模型架构,不仅把RNN从自然语言处理(NLP)的王座上掀了下来,更成为了整个AI领域,从文本到图像,再到语音和科学计算的通用“骨架”。

这一切的起点,是谷歌大脑团队那篇著名的论文《Attention Is All You Need》。标题就充满了挑衅和革命性——你只需要“注意力”机制,就够了。它彻底抛弃了RNN的顺序计算结构,转而采用一种完全并行的“自注意力”机制。这好比什么呢?以前理解一句话,你必须从第一个字读到最后一个字,才能明白整句的意思(RNN的串行)。而现在,Transformer允许模型在读到“苹果”这个词的瞬间,就能同时去“看”句子中所有其他词,比如“我”、“吃”、“红色的”,并立刻计算出“苹果”与这些词的关系强度,从而瞬间理解“我吃了一个红色的苹果”这个完整语义。

这种并行性带来的效率提升是惊人的,使得训练超大规模模型成为可能。而Transformer催生的两个最著名的“孩子”——BERT和GPT,则分别走向了不同的道路,开启了预训练语言模型(Pre-trained Language Model, PLM)的黄金时代。理解Transformer,不仅是理解一个模型,更是理解当今大模型浪潮的基石。它从最初为“翻译”任务设计的“翻译官”,进化成了能够理解、生成、推理的“通用大脑”。接下来,我们就拆开这个“大脑”,看看它的精密结构是如何工作的。

2. Transformer架构深度拆解:并行计算的魅力与核心组件

Transformer模型是一个典型的编码器-解码器(Encoder-Decoder)结构,但它的实现方式与传统的基于RNN的编码解码器有本质不同。我们可以把它想象成一个高度协同的现代化工厂:编码器是理解部门,负责深度分析输入原料(比如一句英文);解码器是生产部门,负责根据理解部门的分析报告,组装出目标产品(比如一句中文)。而连接这两个部门的,以及部门内部高效协作的关键,就是“自注意力”这套自动化流水线。

2.1 核心引擎:自注意力机制详解

自注意力(Self-Attention)是Transformer的灵魂。它的目标是为序列中的每一个元素(例如一个词)计算出一组新的表示,这个新表示包含了该元素与序列中所有其他元素的关联信息。

计算过程三步走:

  1. 生成Q、K、V:对于输入序列中的每个词向量,我们通过三个不同的线性变换层,为它生成三个新的向量:查询向量(Query)、键向量(Key)和值向量(Value)。你可以这样理解:

    • Query:当前词发出的“问题”:“我和序列里的谁最相关?”
    • Key:序列中每个词提供的“答案标签”,用来匹配Query。
    • Value:序列中每个词携带的“实际信息内容”。
  2. 计算注意力分数:用当前词的Query去点乘序列中所有词的Key。点乘的结果就是“注意力分数”,分数越高,表示这两个词在当前语境下的关联度越强。例如,“吃”的Query与“苹果”的Key点乘,会得到一个很高的分数。

  3. 加权求和输出:将所有注意力分数通过Softmax函数归一化,得到一组权重(和为1)。然后用这组权重对所有的Value向量进行加权求和。最终得到的向量,就是当前词经过自注意力机制处理后的新表示。它不再是一个孤立的词向量,而是融合了全局上下文信息的“语境化”向量。

为什么是“自”注意力?因为Query, Key, Value都来自同一个输入序列自己,模型是在学习序列内部元素之间的关系。

多头注意力:单一的注意力机制可能只关注一种类型的关系(比如语法位置关系)。Transformer使用了“多头注意力”,即并行地运行多组独立的注意力计算(每一组都有自己的Q、K、V变换矩阵)。这就像派出了多个专家小组,有的小组专门分析“谁对谁做了什么”(主谓宾),有的小组专门分析“形容词修饰了哪个名词”。最后,把所有小组(头)的输出拼接起来,再经过一个线性层融合。这样,模型就能从不同子空间、不同角度同时捕捉丰富的依赖关系。

注意:自注意力机制的计算复杂度与序列长度的平方成正比。这意味着处理非常长的文本(如一本书)时,计算开销会急剧增大。这是Transformer模型面临的一个核心挑战,也是后续很多研究(如Longformer、BigBird)试图优化的方向。

2.2 架构的稳定器:位置编码与残差连接

RNN天然地通过顺序处理引入了位置信息(第一个词,第二个词...)。但Transformer的并行计算丢失了这份位置信息。对于语言来说,“猫追老鼠”和“老鼠追猫”是天差地别的。因此,必须显式地告诉模型每个词的位置。

位置编码:Transformer使用了一组固定公式生成的、具有特定模式的向量(正弦和余弦函数),直接加到词嵌入向量上。这种编码方式能让模型不仅知道词的绝对位置(第几个词),还能通过正弦余弦波的特性,轻松地学习到相对位置(例如“距离我3个词远的词”)。现在也有一些模型使用可学习的位置编码,效果类似。

残差连接与层归一化:Transformer的编码器和解码器都由N个相同的层堆叠而成(原论文是6层)。为了避免深层网络中的梯度消失或爆炸,以及让训练更稳定,每一层都包裹在“残差连接”和“层归一化”中。

  • 残差连接:将子层(如自注意力层、前馈网络层)的输入直接加到其输出上。这相当于为信息流动开辟了一条“高速公路”,确保深层网络也能有效训练。
  • 层归一化:对每一层的输出进行归一化处理,使其均值为0,方差为1,有助于稳定训练过程,加快收敛。

前馈网络:在自注意力层之后,每个位置上的向量会独立地通过一个相同的前馈神经网络。这个网络通常由两个线性变换和一个ReLU激活函数组成。它的作用是对自注意力层提取的融合信息进行进一步的非线性变换和加工。

2.3 解码器的特殊设计:掩码与交叉注意力

解码器的结构与编码器类似,但有两个关键区别,以确保它在生成时“只能看到已经生成的部分”,并“充分参考编码器的理解”。

  1. 掩码自注意力:在解码器的自注意力层中,为了防止模型在预测第t个词时“偷看”到未来(第t+1, t+2...个词)的答案,引入了注意力掩码。具体做法是,在计算注意力分数后,将未来位置的分数设置为一个极大的负数(如 -1e9),这样经过Softmax后,未来位置的权重就几乎为0。这保证了生成过程的因果性。

  2. 编码器-解码器注意力:这是解码器独有的层。在这一层,解码器的向量作为Query,编码器最终的输出向量作为Key和Value。这意味着,解码器在生成每一个目标词时,都会主动去“询问”编码器:“根据源语言句子,我现在应该生成什么词最合适?” 这个机制是连接源语言和目标语言的核心桥梁。

3. BERT:双向的语境理解者

有了Transformer这个强大的骨架,谷歌在2018年推出了BERT。它的核心思想是:利用海量无标注文本,让模型学会“完形填空”,从而获得深度的语言理解能力,然后再将这个“通才”模型微调到具体的下游任务(如情感分析、问答)上。

3.1 预训练任务:Masked LM与下一句预测

BERT的创新主要体现在其预训练任务的设计上,这直接决定了它“理解”语言的方式。

掩码语言模型:这是BERT的灵魂。在预训练时,随机遮盖输入句子中15%的词汇(用[MASK]标记),然后让模型根据上下文(被遮盖词左右两边的所有词)来预测被遮盖的词是什么。例如:

  • 输入:我昨天去了[MASK]馆,吃了美味的烤鸭。
  • 模型任务:预测[MASK]是“烤鸭”还是“饭”。

关键在于,模型在预测时,可以同时利用被遮盖词左侧和右侧的全部信息。这就是“双向”的含义。它让BERT能够真正理解一个词在完整上下文中的确切含义。例如,“苹果”在“我吃苹果”和“苹果股价上涨”中,BERT能给出完全不同的向量表示。

下一句预测:为了让模型理解句子间关系(这对问答、自然语言推理任务至关重要),BERT还增加了一个二分类任务:给定两个句子A和B,判断B是否是A的下一句。这个任务帮助模型学习篇章级别的逻辑连贯性。

3.2 模型架构与输入输出

BERT直接使用了Transformer的编码器部分。它堆叠了多个Transformer编码器层(如BERT-base是12层,BERT-large是24层)。

输入表示:BERT的输入是一个综合了三种信息的向量:

  1. 词嵌入:词的本身含义。
  2. 段嵌入:用于区分句子对中的两个句子(如A和B)。
  3. 位置嵌入:词在序列中的位置。

输出:BERT会输出每个输入位置对应的上下文向量。对于分类任务(如判断句子情感),通常取第一个特殊标记[CLS]对应的输出向量作为整个序列的表示,后接一个分类器。对于序列标注任务(如命名实体识别),则使用每个词对应的输出向量。

3.3 微调:从通才到专家

预训练后的BERT就像一个精通语言规律的“通才”。微调则是让它快速适应某个具体领域的“专家”角色。这个过程非常简单高效:在BERT模型后面接一个与下游任务相关的小型网络(如一个全连接层),然后用该任务的有标签数据,对整个模型(包括BERT的参数)进行端到端的训练。由于BERT已经具备了强大的语言表征能力,通常只需要少量数据就能达到非常好的效果。

实操心得:在使用BERT进行微调时,学习率的设置非常关键。通常,我们会为BERT主体部分设置一个较小的学习率(如2e-5),而为新添加的分类层设置一个较大的学习率(如1e-3)。这种“差分学习率”策略可以避免在微调初期就破坏BERT预训练好的宝贵知识。

4. GPT:自回归的语言生成者

当BERT在理解任务上大放异彩时,OpenAI的GPT系列则坚定地走向了另一条路:自回归语言生成。从GPT-1到如今的GPT-4,其核心思想一脉相承——根据上文,预测下一个词是什么。

4.1 核心范式:单向上下文与下一个词预测

GPT使用的是Transformer的解码器部分(去掉了其中的编码器-解码器注意力层)。关键在于,它的注意力机制是严格单向的。在预训练时,给定一个文本序列,GPT的任务是最大化看到前t个词的情况下,第t+1个词出现的概率。这是一个标准的语言模型任务。

例如,给定上文“今天天气真”,GPT的任务就是计算“好”、“不错”、“糟糕”等词作为下一个词出现的概率,并选择概率最高的那个。在生成时,这个过程会循环进行:将预测出的词拼接到上文后面,作为新的输入,再预测下一个词,如此往复,从而生成连贯的文本。

这种设计让GPT天生就是一个强大的生成模型。它擅长续写、创作、对话等需要持续产生新文本的任务。

4.2 从GPT到GPT-3/4:规模与能力的跃迁

GPT-1和GPT-2已经证明了这条路径的可行性,但真正的质变发生在GPT-3。其核心变化可以概括为:更大规模的数据、更大规模的模型、更简单的提示(Prompt)学习

  • 规模定律:GPT-3的参数达到了1750亿,训练数据涵盖了海量互联网文本。研究发现,模型性能会随着参数规模、数据规模和计算量的增加而平滑、可预测地提升。大模型涌现出了小模型不具备的“推理”和“指令遵循”等能力。
  • 上下文学习:GPT-3展示了强大的“小样本学习”甚至“零样本学习”能力。你不需要微调,只需要在输入中给出几个任务示例(Few-shot)或简单的任务描述(Zero-shot),它就能理解并执行任务。例如,输入“将英文翻译成中文:apple -> 苹果banana -> 香蕉computer ->”,它就能输出“电脑”。
  • 指令微调与对齐:GPT-3.5/GPT-4在此基础上,引入了基于人类反馈的强化学习等技术,对模型进行“对齐”,使其输出更符合人类价值观、更安全、更遵循用户的复杂指令。这解决了早期大模型“能力很强但不好用”的问题。

5. BERT vs. GPT:本质区别与应用场景选择

理解了它们各自的核心,对比就非常清晰了。这不是孰优孰劣的问题,而是设计哲学和应用场景的根本不同。

特性维度BERTGPT
核心架构Transformer编码器Transformer解码器(掩码版)
注意力机制双向(全上下文)单向(仅上文)
预训练任务掩码语言模型(完形填空) + 下一句预测自回归语言模型(下一个词预测)
信息流同时看到整个句子,深度理解语境。只能从左到右,根据历史生成未来。
核心能力语言理解(文本分类、情感分析、问答、实体识别)语言生成(文本创作、对话、续写、代码生成)
典型应用作为特征提取器或微调后用于:垃圾邮件过滤、智能客服意图识别、搜索引擎语义匹配。直接用于:智能写作助手、聊天机器人、代码补全、故事创作。
交互方式通常需要针对特定任务进行微调擅长零样本/小样本的提示学习,也可进行指令微调。

如何选择?

  • 如果你的任务是“理解”:比如判断一段评论是正面还是负面,从一段文本中提取公司名、人名,或者判断两个句子是否语义相似。BERT及其变体(如RoBERTa, ALBERT)通常是更好的起点。它的双向语境编码能为这些任务提供更丰富的语义信息。
  • 如果你的任务是“生成”:比如写一封邮件、生成一段产品描述、进行多轮对话、或者根据注释补全代码。那么GPT系列或其开源平替(如LLaMA, ChatGLM)是更自然的选择。它的自回归特性天生为生成而生。
  • 界限正在模糊:随着大模型的发展,特别是通过指令微调,GPT类模型在理解任务上表现也非常出色(通过让模型以生成的形式输出分类结果)。而一些新模型(如T5、BART)采用了“编码器-解码器”完整架构,统一了理解和生成任务,将它们都转化为“文本到文本”的格式。

6. 超越文本:Transformer的星辰大海

Transformer的影响力早已超越了NLP的范畴,成为了AI领域的“通用建模工具”。这得益于其强大的全局关系建模能力。

  • 计算机视觉:Vision Transformer将图像切割成一个个图像块(Patch),视为一个序列,然后直接用Transformer编码器进行处理,在图像分类等任务上取得了媲美甚至超越CNN的效果。Swin Transformer则引入了层级结构和滑动窗口,更高效地处理高分辨率图像。
  • 语音处理:语音信号也可以被表示为频谱图序列,Transformer被用于语音识别、语音合成等任务,替代了传统的RNN。
  • 多模态:CLIP、DALL-E等模型将文本和图像映射到同一语义空间,其核心架构也离不开Transformer。它能够对齐不同模态的信息。
  • 科学计算:在生物信息学中,Transformer被用于预测蛋白质结构(如AlphaFold2的部分组件);在化学中,用于分子性质预测。

Transformer的成功,本质上是“注意力机制”的成功。它提供了一种灵活、并行、强大的方式,让模型能够动态地、有选择地关注输入中任何相关的部分,无论它们之间的距离有多远。这种建模长距离依赖关系的能力,正是解决复杂问题的关键。

7. 实战中的思考:模型选型与落地要点

了解了原理和区别,在实际项目中该如何决策呢?这里分享几点从实践中得来的经验。

首先,明确任务本质是理解还是生成。这是最根本的决策点。如果公司要做一个智能客服系统,核心是准确理解用户问题并检索答案,那么一个微调好的BERT模型作为意图分类和语义匹配的引擎,可能比一个大语言模型更高效、成本更低。如果是要做一个辅助创作的文案工具,那么接入GPT的API或部署一个开源生成模型则是更直接的选择。

其次,考虑数据、算力和时间成本。BERT类模型虽然也需要大量预训练,但社区提供了丰富的预训练权重(如Hugging Face的transformers库)。对于大多数下游任务,你只需要几千条标注数据进行微调,在单张GPU上几小时就能得到一个不错的模型。而GPT类大模型,动辄需要数百GB的显存进行推理,更别提训练了。对于绝大多数团队,直接使用API或量化后的开源小模型(如7B、13B参数的模型)是更现实的选择。

再者,警惕“杀鸡用牛刀”和“锤子找钉子”。不是所有NLP任务都需要BERT/GPT。对于简单的关键词匹配、正则表达式能解决的问题,或者对实时性要求极高的场景(如搜索引擎中的拼写纠错),传统的轻量级方法可能仍然是最佳选择。引入深度学习模型必然会带来计算开销和延迟。

最后,关注模型的可解释性与可控性。BERT的注意力权重有时可以可视化,帮助我们理解模型做出决策的依据(例如分类时关注了哪些关键词)。而GPT的生成过程则像一个黑盒,其输出具有一定随机性和不可预测性,在严肃的商业场景(如法律文书、医疗建议生成)中需要格外谨慎,必须加入严格的人工审核或后处理规则。

我个人在项目中的体会是,Transformer生态的繁荣给了我们前所未有的工具箱。但比选择工具更重要的,是清晰地定义我们要解决的问题。从问题出发,结合数据现状、基础设施条件和业务风险容忍度,才能做出最合适的技术选型。今天,我们不再争论Transformer、BERT、GPT谁更好,而是思考如何将它们组合起来,或者等待下一个同样具有颠覆性的新架构,去解决那些尚未被解决的难题。

← 返回列表