文章目录
概要
在之前的文章中,我们聊过Transformer的核心机制。但你是否好奇,为什么同样是基于Transformer,有的模型(如GPT)擅长写小说,有的(如BERT)擅长文本分析,而T5却能做翻译?今天我们就来揭开这个谜底——大语言模型的三大经典架构,用最通俗的比喻+动图演示+代码实战,带你彻底搞懂它们的区别与设计哲学!
一、Transformer:所有架构的「母体」
1.1 Transformer的核心设计
Transformer就像一台精密的信息加工流水线,由两个核心车间组成:
Encoder(编码器):阅读理解专家,负责提取文本特征
Decoder(解码器):故事创作大师,负责生成新内容
1.2 架构演化逻辑
科学家们根据任务需求,对这两个车间进行组合,演化出三大架构:
Encoder-only:只保留编码器(如BERT)
Decoder-only:只保留解码器(如GPT)
Encoder-Decoder:双车间协同(如T5)
二、Encoder-only架构:文本理解之王
2.1 设计理念
目标:深度理解文本含义
结构特点:仅使用Encoder堆叠
采用双向注意力(能看到上下文全貌)
2.2 典型代表
BERT:自然语言处理领域的里程碑
RoBERTa:BERT的优化升级版
2.3 预训练方式
掩码语言模型(MLM):随机遮盖部分词,让模型预测
输入:"今天[MASK]气真好"
目标:预测被遮盖的词"天"
2.4 应用场景
文本分类(如情感分析)
实体识别(如提取人名、地名)
三、Decoder-only架构:文本生成霸主
3.1 设计理念
目标:流畅生成文本
结构特点:仅使用Decoder堆叠
采用单向注意力(只能看到左侧内容)
3.2 典型代表
GPT系列(GPT-3、ChatGPT)
LLaMA:Meta开源的轻量级模型
3.3 预训练方式
自回归语言模型:逐词预测下一个词
输入:"人工智能的未"
输出:迭代生成"来"→"是"→"..."(类似手机输入法联想)
3.4 应用场景
故事创作
代码生成
四、Encoder-Decoder架构:多面手专家
4.1 设计理念
目标:处理输入到输出的映射关系
结构特点:
Encoder负责理解输入
Decoder负责生成输出
通过交叉注意力连接
4.2 典型代表
T5(Text-to-Text Transfer Transformer)
BART:擅长文本重构任务
4.3 预训练方式
文本到文本转换:统一所有任务为输入输出格式
输入:"翻译:Hello world → 法语"
输出:"Bonjour le monde"
4.4 应用场景
机器翻译
文本摘要
五、三大架构对比:一张表看懂区别
六、架构演变趋势:向更大更专发展
6.1 Decoder-only的崛起
GPT-3(1750亿参数)证明:超大规模Decoder-only模型具有强大的泛化能力
行业现象:多数百亿级大模型(如PaLM、Claude)采用Decoder-only架构
6.2 混合架构创新
FLAN-T5:在Encoder-Decoder架构上引入指令微调
UniLM:通过注意力掩码实现三种模式切换
6.3 轻量化趋势
LLaMA(70亿参数):证明小规模模型也能有优秀表现
知识蒸馏:将大模型能力迁移到小模型
七、代码实战:用Hugging Face调用三大架构
7.1 Encoder-only示例(BERT)
from transformers import BertModel, BertTokenizer
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertModel.from_pretrained('bert-base-uncased')
inputs = tokenizer("Hello world!", return_tensors="pt")
outputs = model(**inputs) # 获取文本向量表示
7.2 Decoder-only示例(GPT-2)
from transformers import GPT2LMHeadModel, GPT2Tokenizer
tokenizer = GPT2Tokenizer.from_pretrained('gpt2')
model = GPT2LMHeadModel.from_pretrained('gpt2')
inputs = tokenizer("The future of AI", return_tensors="pt")
outputs = model.generate(**inputs) # 生成文本
7.3 Encoder-Decoder示例(T5)
from transformers import T5ForConditionalGeneration, T5Tokenizer
tokenizer = T5Tokenizer.from_pretrained('t5-small')
model = T5ForConditionalGeneration.from_pretrained('t5-small')
inputs = tokenizer("translate English to French: Hello world", return_tensors="pt")
outputs = model.generate(**inputs) # 输出翻译结果