假设你开了一家「灵感文案工作室」,手下有三位性格迥异却各怀绝技的文字助手。老编一拿到材料就埋头通读,逐字逐句做满批注,最后交给你一份深度的理解报告——他从不亲自写新句子,但整间办公室没人比他更懂材料。阿续是连载小说家,一个字一个字往前写,每落一笔都要回头看看自己刚才写下的内容,才能决定下一个字。老翻是资深翻译官,他先完整听完一整段外文,在脑子里把意思彻底消化,再换成另一种语言从头说一遍。这三位助手,正好对应深度学习里三种经典架构:Encoder(编码器)、Decoder(解码器)和 Encoder-Decoder(编码器-解码器,简称 Enc-Dec)。无论你听过的 BERT、GPT 还是 T5,都是这三种架构的代表。读懂它们的分工,你就能在接到任务时一眼看穿:该让谁上场。
掌握三大架构的本质区别与适用边界,是 AI 从业者做模型选型的第一课,它直接决定你能否用最少成本完成分类、生成与翻译任务。
目录
可视化演示
动态演示三大架构对决的核心机制,通过基础/核心/应用/扩展四种模式展示关键概念与交互流程。
本节配有交互动效(进入视口后自动加载,约 3KB)。
三大架构对决:三种Tr 三种Transformer架构 编码器架构BERT与理解类任务 核心机制可视化 三大架构对决整体架构与关键组件
架构总览:三位助手的分工
走进工作室,你会看到三个工位。老编的桌上永远堆满待读材料,他读完一份就交给你一份批注本;阿续的桌上是一张长长的稿纸,纸上的句子正在一个格子一个格子地往右延伸;老翻的工位摆着两台显示器,左边是外文原文,右边是他正在敲出的译文。三个人干的是全然不同的活,而 Transformer 世界的“工位”,就是架构。
在深度学习里,架构决定了信息如何在模型内部流动。Encoder 只读不写:你把“我/爱/AI”三个词依次送进去,他会输出一组同样长度的向量,每个向量都包含着整句话的语义信息,但你永远等不到他“写出”新句子。Decoder 只写不读全:他已经写出的每个词都会变成预测下一个词的依据。Enc-Dec 则是前两位的接力赛:前半段 Encoder 把源文读成浓缩的向量,后半段 Decoder 拿着这些向量逐字生成目标文。
无论是老编、阿续还是老翻,他们查资料时用的都是同一套基本功——注意力机制,这也是三座架构共同的积木:
所以,理解这三种架构,本质上是理解同一套注意力公式在三位助手手里被用出了三种不同的“视野与纪律”。
- Q与K点积把“查询”和“键”相乘,算出两两之间的相关分数。
- 除以缩放因子用 $\sqrt{d_k}$ 缩放,防止分数过大让 Softmax 区域过陡。
- Softmax归一化把分数变成加起来等于 1 的注意力权重。
- 对V加权求和用权重汇总“值”矩阵,得到每个位置的输出表示。
注意力机制:目光能看多远
老编读材料有个特点:他会先把整份文件从头翻到尾,再回过头来写批注。当他批注到第一页时,脑子里已经装着最后一页的信息。阿续则完全相反,他写小说时从不翻前面的稿子以外的任何东西——他只盯着自己刚写出的那句话,然后想下一句。老翻最特别:他听外文时是完整的听,但开口翻译时,眼睛里只有已经译出的部分和刚才听完的那段原文。
在技术世界里,这三人的“目光范围”被称为注意力的可见域。BERT 这类 Encoder 使用的是双向注意力,没有掩码,每个词都能直接“看到”左侧和右侧的所有词。GPT 这类 Decoder 使用的是单向注意力,通过掩码矩阵把右侧的词全部遮住,位置 i 只能看到 1 到 i 之间的词,这就是所谓的自回归。T5 这类 Enc-Dec 则在两个模块之间架了一座新桥——跨注意力,解码器每生成一个词,都用它自己的查询 Q 去检索编码器给出的键 K 与值 V。
掩码注意力的公式是注意力公式的“受限版”:
于是,视野的差异带来了行为的质变:双向的 Encoder 擅长“读透”,单向的 Decoder 擅长“续写”,而 Enc-Dec 则把“读透”与“续写”用跨注意力焊接成一条流水线。
- 查询与键点积与全集注意力相同,先算当前位置 i 与各位置的相关性。
- 掩码裁剪把大于 i 的位置分数设为负无穷,Softmax 后权重自然归零。
- 缩放与归一化除以 $\sqrt{d_k}$ 并做 Softmax,只保留左侧可见词的权重。
- 加权汇总对可见部分的值向量加权求和,得到当前位置的新表示。
预训练目标:上岗前的训练课
三位助手的本领不是天生的,入职前都经过高强度的训练课。老编的训练课是“完形填空”:给他一篇文章,随机挖掉几个词,让他根据上下文把空填上。这门课强迫他学会从左右两边收集证据,于是他的理解力越来越强。阿续的训练课是“接龙续写”:给他一句开头,让他一个词一个词地往后接,每接一个词都只能依据前面已有的内容,这门课把他练成了天生的写手。
这两种训练课在学术上分别叫掩码语言建模(MLM,Masked Language Modeling)和自回归语言建模(Autoregressive Language Modeling)。GPT 的自回归目标可以写成条件概率连乘的形式:
老翻的训练课更有意思:随机把原文中的一小段遮住,让模型自己把遮掉的内容重新“想出来”。这门课叫作跨度破坏(Span Corruption),它逼着模型先理解全段语义,再逐字恢复,恰好模拟了“听懂一段话再复述出来”的翻译过程。
- 条件概率链整句概率写成每一步条件概率的连乘。
- 给定前缀每一步只依赖已经写出的历史词,也就是前面的词。
- 逐步生成生成时把新预测出的词送回输入,再预测下一个词。
代表模型:三位明星员工
工作室里最出名的三位员工,各自佩戴着不同的工牌。老编的工牌上写着 BERT:Google 在 2018 年推出的 Encoder 模型,用双向注意力配合 MLM 训练,掀起了一波“预训练+微调”的浪潮。阿续的工牌上写着 GPT:OpenAI 打造的 Decoder 模型,它只做一件事——预测下一个词,却因为这条简单的路走到了通用人工智能的门口。老翻的工牌上写着 T5:Google 的 Enc-Dec 模型,它把所有 NLP 任务都写成“输入一段文本,输出一段文本”的格式,统一打包处理。
BERT 的训练损失函数,正是它“完形填空”考试的成绩单:
三位明星员工的路线图告诉我们:架构是骨架,预训练目标是灵魂,二者共同决定了模型的“人设”。
- 掩码集合随机遮住一部分词,这些被遮词组成集合。
- 预测被遮词根据上下文 $\hat{x}$ 预测被遮词的概率,再取对数。
- 负对数求和对所有被遮词取负号求和,损失越小说明预测越准。
适用任务:什么活该找谁
工作室接单有个铁律:先看活儿是什么,再决定派谁去。如果客户说“帮我把一万条用户评论分成好评和差评”,这是理解任务,老编上。如果客户说“请续写一段产品故事”,这是生成任务,阿续上。如果客户说“把这本手册翻译成英文”,这是转换任务,老翻上。派错人,不是干不了,而是干得又慢又糙。
理解任务包括文本分类、情感分析、命名实体识别、语义相似度计算;生成任务包括续写、对话、代码生成;转换任务包括机器翻译、摘要生成、问答。从数学上看,转换任务统一建模为条件生成概率:
所以拿到任务先分类:这颗“理解还是生成”的指南针,比任何花哨的技巧都来得重要。
- 条件项生成目标词的每一步,都依赖源文 x 和已生成的前缀。
- 连乘展开整个目标句子的概率是各词条件概率的乘积。
- 实现方式Encoder 编码 x,Decoder 逐词输出,跨注意力负责传递信息。
选型指南:如何点兵点将
选型就像派活:老编虽然理解力强,但你让他写小说,他会抓狂;阿续虽然能写,但你让他把一千篇文档做个分类汇总,他不一定比老编利索。一个成熟的团队负责人,会按三步来决策。
第一步看任务需求:需要判别、理解、检索,优先选 Encoder 系(BERT 及其变体);需要开放生成,优先选 Decoder 系(GPT 及其变体);需要严格的输入输出转换,考虑 Enc-Dec 系(T5、BART)。第二步看数据规模:Decoder 系模型对数据量和算力的胃口更大,几百万条数据可能喂不饱一个大号 GPT。第三步看算力成本:Enc-Dec 同时包含编码器和解码器,参数规模比同尺寸的单架构更大。
参数规模可以粗略这样估算:
团队扩张时,预算表上要同时写下三行字:任务、数据、算力。缺一行,这个单子都可能派错人。
- 权重矩阵个数每个 Transformer 层里有注意力与全连接共约 12 个参数矩阵。
- 隐藏维度平方矩阵的行和列规模都由隐藏维度 H 决定,参数随 H 平方增长。
- 层数倍增总参数量约等于层数 L 乘以上两项。
演进趋势:三大流派走向融合
工作室最近在搞技术交流,三位助手发现彼此的绝活可以互相借鉴。老翻的 T5 率先提出“文本到文本”的框架:不管分类还是翻译,统一写成输入文本→输出文本,把 Encoder 的理解力和 Decoder 的生成力整合进一个模型。另一边,XLNet 尝试在 Encoder 里引入排列语言建模,让双向模型也能学到自回归式的生成能力。UniLM 更进一步,让同一个模型在不同任务下切换双向和单向掩码。
这些探索的背后,是一个统一的微调目标函数:
阿续的 GPT 系列用规模告诉我们:即使是“纯写手”路线,只要数据够多、参数够大,也能涌现出惊人的理解力。三条路线,正在向同一个方向汇合。
- 对数似然对每条数据,计算模型预测正确输出的对数概率。
- 参数搜索对所有数据求和后,找到让这个总和最大的参数。
- 统一范式预训练学习通用能力,微调适配具体任务,一鱼两吃。
实战应用:工作室的三单生意
周一早上,工作室接到三个订单。第一单来自电商平台:三万条用户评论,需要自动分拣出“差评”。第二单来自市场部:给新款运动水杯写二十条不同风格的广告文案。第三单来自硬件厂商:把八百页的中文说明书翻译成英文。你扫了一眼订单,分别在三个工位上贴了便利贴。
第一单贴给老编——用 BERT 做情感分类:把评论输入模型,取整句的汇聚向量,接一个分类头,微调几个 epoch 就能上线。第二单贴给阿续——用 GPT 做文案生成:给出产品卖点和语气提示,让模型逐字续写,跑二十次再人工筛选。第三单贴给老翻——用 T5 做端到端翻译:Encoder 读完整段中文,Decoder 生成英文,不需要任何中间对齐规则。
这些任务最终都用同一个损失函数来微调模型,即交叉熵:
傍晚,三单全部交付。你看着三位助手的工作台,忽然明白:没有最强的架构,只有最合适的架构。
- 真实标签用 one-hot 向量标记正确的类别。
- 预测概率模型输出经过 Softmax 后的类别概率,取对数。
- 负号与求和对正确类别取负对数并对所有类别求和,损失越小越好。
AI 应用场景
智能客服意图识别(Encoder/BERT)
阶段:模型微调与部署
解决的问题:传统基于关键词规则引擎的意图识别,需要人工维护成百上千条规则,新业务上线要改规则,长尾说法覆盖不全。用 BERT 对用户问句编码,取整句向量接分类头微调,能自动捕捉“我要退款”和“钱怎么退”这类相似语义。
具体案例:某电商平台将 3 万条客服对话标注为退款、物流、售后等 12 类意图,用 BERT 微调后准确率从规则引擎的 78% 提升到 93%,新意图只需补充几百条标注即可迭代上线。
营销文案生成(Decoder/GPT)
阶段:提示词工程与模型推理
解决的问题:模板化文案千篇一律,外包创作又贵又慢。GPT 类 Decoder 模型只需给定产品卖点和语气提示,就能生成多版文案,供运营 A/B 测试。
具体案例:某消费品团队用 GPT 写大促海报文案,输入“运动水杯+轻便大容量+年轻人群”,模型生成 20 条不同风格广告语,人工筛选 3 条上线,点击率提升约 25%。
多语言产品说明书翻译(Enc-Dec/T5)
阶段:端到端模型微调
解决的问题:传统机器翻译逐句翻译导致术语和上下文不连贯,外包翻译周期又长。T5 把翻译统一看成“文本到文本”的转换,Encoder 读完整源文,Decoder 生成连贯目标文。
具体案例:某硬件厂商用 T5 微调中英说明书翻译,术语召回率达标后,每月 800 页文档翻译从两周缩短到两天,人工只需校对专业词汇。
Python 演示
from transformers import pipeline def show_three_architectures(): # Encoder: BERT for sentiment classification classifier = pipeline("text-classification", model="distilbert-base-uncased") result_cls = classifier("I really love this movie!") print("Encoder(BERT):", result_cls) # Decoder: GPT-2 for text generation generator = pipeline("text-generation", model="distilgpt2") result_gen = generator("Once upon a time", max_length=20)[0]["generated_text"] print("Decoder(GPT):", result_gen) # Enc-Dec: T5 for English to French translation translator = pipeline("translation_en_to_fr", model="t5-small") result_trans = translator("The house is beautiful.")[0]["translation_text"] print("EncDec(T5):", result_trans) if __name__ == "__main__": show_three_architectures()
from transformers import pipeline导入工具库,pipeline 像一个“一键工坊”,自动完成分词、前向计算和后处理。classifier = pipeline("text-classification", model="distilbert-base-uncased")加载 Encoder 系小模型,封装成分类器,对应老编读材料写结论。result_cls = classifier("I really love this movie!")输入一句话,输出情感标签和置信度,对应老编产出理解报告。generator = pipeline("text-generation", model="distilgpt2")加载 Decoder 系小模型,封装成续写器,对应阿续接着往下写。result_gen = generator("Once upon a time", max_length=20)[0]["generated_text"]给一个开头,续写 20 个词并取第一条结果,对应阿续预测下一个词。translator = pipeline("translation_en_to_fr", model="t5-small")加载 Enc-Dec 系小模型,封装成翻译器,对应老翻先听后说。result_trans = translator("The house is beautiful.")[0]["translation_text"]输入英文、输出法文,对应老翻读完原文再生成译文。if __name__ == "__main__":让脚本可独立运行,也可被其他模块安全导入。show_three_architectures()依次运行三位助手的演示,验证架构分工。
常见误区
误区“Decoder 不就是 Encoder 把未来遮住吗?我把 BERT 的注意力改成单向掩码,它不就能变成 GPT 去生成文本了?”
正解阿续和老编根本不是同一个工种。单向掩码只是表面差异,深层区别在于预训练目标(续写 vs 填空)、输出方式(逐词自回归 vs 整体编码)和使用方式(生成完整文本 vs 输出一个表示向量)。即使强行改掩码,训练目标与下游任务不配套,生成质量也远不如原生 Decoder。
为何常见:两种架构共用同一个注意力公式,看起来只是矩阵里多了一个掩码,掩盖了行为上的质变。
误区“GPT 这么强,什么任务都能做,分类、翻译、对话全交给它就行。”
正解Decoder 架构的强项是按前文续写。做分类时,它需要把问题改写成“续写”的提示模板,而且判别类任务上通常不如原生 Encoder 稳定。好比让阿续去写材料分析报告——他能写,但老编的分析更可靠。选型应该看任务本质。
为何常见:ChatGPT 的对话能力太惊艳,让大家忽略了它本质是“下一个词预测”的产物,通用光环掩盖了架构边界。
误区“Enc-Dec 架构就是把 BERT 和 GPT 两个模型拼在一起,没有新东西。”
正解拼接不是简单堆叠。T5 引入了跨注意力,解码器的查询 Q 去检索编码器输出的键 K 和值 V,让生成过程实时翻阅源文本;训练目标也换成跨度破坏,随机遮住一段文本让模型重建。三处设计共同造就了序列转换能力,不是“老编+阿续”的加法。
为何常见:架构图看起来像左半 BERT、右半 GPT,自然产生“拼接”的错觉。
误区“预训练目标不影响下游,反正都要微调,随便选个架构都一样用。”
正解预训练目标决定了模型的“先天擅长”。MLM 训练让 Encoder 学会双向语义理解,自回归训练让 Decoder 学会从前往后生成。让 BERT 硬做长文生成、GPT 硬做句子匹配,都会力不从心。老编的强项是写批注,阿续的强项是写续篇,换岗不是不能干,是干不漂亮。
为何常见:在小型数据集上微调确实能掩盖部分架构劣势,让人误以为架构无关紧要。
面试题
Q1. BERT 属于哪种架构?
- A.Encoder 编码器架构← 正确答案
- B.Decoder 解码器架构
- C.Enc-Dec 组合架构
- D.循环神经架构
答案:A。BERT 是经典的 Encoder 架构,使用双向注意力完成理解任务。Decoder 的代表是 GPT,Enc-Dec 的代表是 T5,循环架构则是更早期的 RNN 路线,与本题无关。
Q2. Decoder 架构最典型的特征是什么?
- A.双向可见全部输入
- B.只能看见左边内容← 正确答案
- C.必须搭配编码器
- D.不需要注意力机制
答案:B。Decoder 使用单向掩码注意力,位置 i 只能看到自己左侧的内容,这正是它能够逐字自回归生成的前提。双向可见是 Encoder 的特征;Decoder 不强制搭配编码器;它同样依赖注意力机制。
Q3. 下面哪个任务最适合 Enc-Dec 架构?
- A.判断邮件是否为垃圾
- B.将中文翻译成英文← 正确答案
- C.抽取新闻中的实体
- D.计算两个文本相似度
答案:B。翻译属于典型的序列转换任务,需要先完整理解源文再生成目标文,这正是 Enc-Dec 的用武之地。垃圾邮件分类、实体抽取和文本相似度都属于理解任务,Encoder 架构更合适。
Q4. MLM(掩码语言建模)是哪种架构的预训练目标?
- A.Encoder 架构的 BERT← 正确答案
- B.Decoder 架构的 GPT
- C.所有架构通用目标
- D.仅用于 T5 模型的
答案:A。MLM 是完形填空式的训练,模型利用左右两侧上下文预测被遮住的词,这与 Encoder 的双向视野天然契合,BERT 因此采用它。GPT 使用自回归目标,T5 使用跨度破坏目标,因此 C、D 不正确。
Q5. 自回归生成公式的核心含义是什么?
- A.用所有词同时预测结果
- B.用右边预测左边内容
- C.用前面的词预测下一个← 正确答案
- D.随机猜测一个词填上
答案:C。自回归把整句概率拆成一步步条件概率连乘,每一步都用已经生成的前缀预测下一个词,像阿续写小说一样落笔无悔。同时预测、反向预测都不符合自回归的因果顺序。
Q6. 关于跨注意力(Cross-Attention),正确说法是?
- A.Q 取自解码器,K/V 取自编码器← 正确答案
- B.Q 取自编码器,K/V 取自解码器
- C.注意力只允许词看自身
- D.它与双向注意力完全等价
答案:A。跨注意力是 Enc-Dec 的桥梁:解码器在生成每个词时,用自己的查询 Q 去检索编码器输出的键 K 和值 V,从而实时获取源文信息。反向设定不符合生成流程,它也与双向注意力有本质区别。
Q7. 掩码自注意力中,位置 i 能关注哪些位置?
- A.左右所有位置都关注
- B.只能关注当前自身位置
- C.只能关注自己和左侧位置← 正确答案
- D.只能关注自己和右侧位置
答案:C。掩码矩阵将未来位置的分数设为负无穷,因此位置 i 只能看到 1 到 i 之间的词。双向注意力关注左右所有位置,只看自身或只看右侧都不符合自回归的因果约束。
Q8. 以下哪些任务适合使用 Encoder 类模型?
- A.新闻文本主题分类← 正确答案
- B.商品评论情感判别← 正确答案
- C.开放域长文续写
- D.命名实体识别抽取← 正确答案
答案:ABD。分类、情感判别和命名实体识别都属于理解任务,Encoder 的双向语义建模能力最强。长文续写是生成任务,更适合 Decoder 的自回归能力。
Q9. 关于 GPT 这类 Decoder 架构,正确说法有哪些?
- A.注意力是单向掩码的← 正确答案
- B.训练目标预测下一个词← 正确答案
- C.擅长自回归文本生成← 正确答案
- D.必须搭配编码器使用
答案:ABC。Decoder 架构使用单向掩码注意力,通过自回归目标从前缀预测下一个词,因此天然擅长文本生成。它可以直接独立使用,不一定需要编码器,GPT 系列就是纯 Decoder 的典型代表。
Q10. 关于 Enc-Dec(T5)架构,正确说法有哪些?
- A.编码器读入完整源文本← 正确答案
- B.解码器自回归生成目标← 正确答案
- C.跨注意力桥接源与目标← 正确答案
- D.参数始终是编码器的两倍
答案:ABC。Enc-Dec 的编码器读取完整源文,解码器自回归生成目标文,跨注意力负责连接两端,三者共同支撑序列转换任务。参数规模取决于具体设计,并非严格等于编码器的两倍,D 过于绝对。