2018年以前,做一个情感分析要标注1万条数据;GPT说:不用,让模型先“读完”互联网
2018年以前,做一个情感分析要标注1万条数据;GPT说:不用,让模型先“读完”互联网
一句话先睹为快:GPT不是Transformer架构的简单复用,而是一场以“Decoder-Only + 因果语言建模”为核心的生成式AI范式革命——它舍弃了Transformer的编码器-解码器对称结构,仅保留解码器部分,用“预测下一个词”这一极其简洁的训练目标,通过海量无标注文本的预训练+少量有标注数据的微调,回答了深度学习领域一个根本性的问题:如果模型能够通过阅读互联网上的所有文本学会“理解”语言,那我们还需要为每个任务单独标注数据吗?
你有没有想过——
如果你在2018年之前做一个情感分析模型,你需要先收集1万条标注了“正面/负面”的影评,然后训练一个专用于情感分析的模型。如果你想再做一台机器翻译系统,你需要百万级对齐的双语语料,重新训练一个翻译模型。如果你想做一个问答系统,你需要再标注一批问答对,再训练一个问答模型。
每个任务都是独立的,每个任务都需要重新标注数据、重新训练模型。
你有没有想过——
为什么不能让模型先“读懂”语言,再针对具体任务做少量微调?
这正是GPT回答的问题。
2018年,OpenAI发表了论文《Improving Language Understanding by Generative Pre-Training》。论文的核心思想极其简洁:在大规模无标注文本上预训练一个语言模型(预测下一个词),然后在具体任务上用少量有标注数据进行微调。
这个“预训练+微调”的范式,彻底改变了NLP的研究范式。
GPT的原始版本只有1.17亿参数(来源:Radford et al., 2018)——在今天看来微不足道——但它证明了“无标注预训练”的有效性。2019年,GPT-2将参数规模扩大到15亿(来源:Radford et al., 2019),展示了零样本迁移的惊人能力。2020年,GPT-3将规模推至1750亿参数(来源:Brown et al., 2020),展示了少样本学习的能力。2023年,GPT-4据估计达到1.8万亿参数(来源:GPT-4 Technical Report, OpenAI, 2023),采用MoE(混合专家)架构,并具备了多模态能力。
截至2026年8月,GPT系列模型已演进至GPT-5,持续推动着生成式AI的边界。
那么,这个“Decoder-Only + 因果语言建模”的架构到底长什么样?为什么只用“预测下一个词”就能让模型学会理解语言?我们从论文、开源实现和Hugging Face Transformers库出发,一步步拆解。
一、先打个比方:GPT的训练就像让一个学生“先读万卷书,再专攻一个细分领域”
想象你要培养一个顶尖的金融分析师。
传统的有监督学习(2018年之前) 像是把一个完全不懂金融的人直接扔进华尔街——你给他一堆标注好的“买入/卖出/持有”的历史数据(训练集),让他记住这些模式,然后在新的数据上做预测。他可能能完成任务,但他并不真正“理解”金融市场。他只是在做模式匹配,而且换一个任务(比如分析公司财报)就需要重新学一遍。
GPT的“预训练+微调”范式 则是先让这个学生读完人类历史上所有的金融书籍、财报、新闻、研报(无监督预训练)。在这个过程中,他学会了金融术语、理解了市场逻辑、掌握了分析框架。然后,你只需要给他少量标注好的“买入/卖出”案例(微调),他就能立刻成为顶尖的金融分析师——因为他已经“懂”了金融,只需要学会“如何把知识应用到具体任务上”。
预训练 = 读万卷书(理解语言);微调 = 行万里路(适应任务)。
GPT就是这么工作的。
二、核心问题:GPT凭什么比“为每个任务单独训练”更聪明?
传统方法的致命伤:每个任务都是一个“新世界”
在GPT出现之前,你做NLP任务的流程是这样的:
| 任务 | 需要的数据 | 训练方式 |
|---|---|---|
| 情感分析 | 1万条标注影评 | 从头训练一个分类模型 |
| 机器翻译 | 百万级双语语料 | 从头训练一个Seq2Seq模型 |
| 问答系统 | 数千个问答对 | 从头训练一个QA模型 |
| 命名实体识别 | 标注了实体的人名/地名 | 从头训练一个NER模型 |
每个任务都是从零开始。模型不会因为学会了情感分析就自动懂得翻译——因为它们是不同的模型、不同的训练数据、不同的目标函数。这个世界的知识是割裂的。
GPT的杀手锏:先学会“理解语言”,再学会“完成任务”
GPT把问题拆成了两步:
第一步:无监督预训练 —— 学会“理解语言”
训练目标:给定前面的词,预测下一个词。
这个任务极其简单——小学生在语文课上做的“完形填空”。但这个任务也极其强大——为了做好这个任务,模型必须学会:
- 词的共现关系(“麦当劳”常和“汉堡”“薯条”一起出现)
- 语法结构(“我吃苹果”是对的,“我苹果吃”是错的)
- 语义关联(“太阳”和“温暖”有关联)
- 世界知识(“北京是中国的首都”)
模型通过阅读海量无标注文本(维基百科、新闻、书籍、网页)学会这一切。训练目标是最大化下一个词的预测概率:
L1(U)=∑ilogP(ui∣ui−k,...,ui−1)L_1(U) = \sum_i \log P(u_i | u_{i-k}, ..., u_{i-1})L1(U)=i∑logP(ui∣ui−k,...,ui−1)
第二步:有监督微调 —— 学会“应用到具体任务”
在预训练完成后,模型已经是一个“语言理解专家”了。接下来只需要在具体任务的有标注数据上做少量微调——模型参数只做小幅更新,主要调整输出层。
关键洞察:微调所需的有标注数据远少于从头训练——因为模型已经“懂”了语言,只需要学会“如何把这种理解应用到我的任务上”。
三、一张图看懂GPT的架构:Decoder-Only
GPT与原始Transformer最大的区别是:它只用了解码器(Decoder),舍弃了编码器(Encoder)和交叉注意力(Cross-Attention)。
输入文本 → Tokenizer → Token IDs
↓
┌──────────────────────────────────────────────────────────────┐
│ Token Embedding(把词变成向量)+ Positional Embedding(注入位置)│
└──────────────────────────────────────────────────────────────┘
↓
┌──────────────────────────────────────────────────────────────┐
│ Transformer Decoder 层 × N │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ Masked Multi-Head Self-Attention(★因果掩码) │ │
│ │ 每个token只能看到自己和之前的token,不能偷看未来 │ │
│ └────────────────────────────────────────────────────────┘ │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ Feed-Forward Network(前馈网络) │ │
│ └────────────────────────────────────────────────────────┘ │
│ 残差连接 + Layer Normalization(Pre-LN) │
└──────────────────────────────────────────────────────────────┘
↓
LM Head → Softmax → 下一个Token的概率分布
| 维度 | 原始Transformer | GPT(Decoder-Only) |
|---|---|---|
| 架构 | Encoder + Decoder | 仅Decoder |
| 注意力 | 双向自注意力 + 掩码自注意力 | 仅掩码自注意力 |
| 交叉注意力 | 有(Decoder关注Encoder输出) | 无 |
| 训练目标 | Seq2Seq(翻译等) | 因果语言建模(预测下一个词) |
为什么舍弃Encoder? 因为GPT的目标不是“理解输入序列并生成输出序列”(如翻译),而是“根据已有文本预测下一个词”——这是一个纯粹的自回归生成任务,不需要双向编码上下文。
四、核心源码拆解:GPT的“灵魂三件套”
① 因果掩码(Causal Masking)——确保AI“不能偷看未来”
这是GPT与原始Transformer最核心的区别。因果自注意力通过一个上三角掩码矩阵,确保每个Token在计算注意力时只能看到自己和之前的位置。
# 文件路径:mingpt/model.py(minGPT实现,来源:github.com/karpathy/minGPT)
class CausalSelfAttention(nn.Module):
def __init__(self, config):
# ★ 因果掩码(上三角矩阵)
self.register_buffer("bias", torch.tril(torch.ones(config.block_size, config.block_size))
.view(1, 1, config.block_size, config.block_size))
def forward(self, x):
# 1. 计算 Q、K、V
q, k, v = self.c_attn(x).split(self.n_embd, dim=2)
# 2. 计算注意力分数
att = (q @ k.transpose(-2, -1)) * (1.0 / math.sqrt(k.size(-1)))
# 3. ★ 因果掩码:将未来位置的分数设为 -inf
att = att.masked_fill(self.bias[:, :, :T, :T] == 0, float('-inf'))
# 4. Softmax 得到注意力权重
att = F.softmax(att, dim=-1)
# 5. 加权求和
return att @ v
这段代码实现了什么?
假设模型正在处理一个序列 ["我", "爱", "中国"]:
- 处理“我”时,只能看到“我”自己
- 处理“爱”时,只能看到“我”和“爱”
- 处理“中国”时,只能看到“我”、“爱”和“中国”
通过masked_fill将上三角(未来位置)的注意力分数设为-inf,Softmax后这些位置的权重变成0。模型在生成第t个Token时,完全不知道第t+1个Token是什么——和人类写作一样,一个字一个字地想,不能“跳着写”。
② minGPT:300行的GPT教学实现
Andrej Karpathy的minGPT是整个AI教育史上的一个里程碑——用300行代码完整实现了一个GPT语言模型。
mingpt/
├── model.py # ★ Transformer模型定义(~300行)
├── bpe.py # BPE分词器
└── trainer.py # 训练循环(PyTorch模板代码)
# 文件路径:mingpt/model.py(结构示意)
class GPT(nn.Module):
def __init__(self, config):
# Token Embedding + Position Embedding
self.tok_emb = nn.Embedding(config.vocab_size, config.n_embd)
self.pos_emb = nn.Parameter(torch.zeros(1, config.block_size, config.n_embd))
# Transformer Decoder层堆叠
self.blocks = nn.Sequential(*[Block(config) for _ in range(config.n_layer)])
# Layer Norm(Pre-LN)
self.ln_f = nn.LayerNorm(config.n_embd)
# LM Head:将隐藏状态映射回词表
self.lm_head = nn.Linear(config.n_embd, config.vocab_size)
设计意图:minGPT的目标不是性能最优,而是可读性最优。学习者可以在一个下午读完所有代码,真正理解“一个语言模型到底是怎么工作的”。
③ Pre-LN(Layer Norm前置)——让模型能堆到100层
GPT-2相比GPT-1的一个关键架构变化是Layer Norm前置(Pre-LN):
class Block(nn.Module):
def forward(self, x):
# Pre-LN:先归一化,再计算
x = x + self.attn(self.ln1(x)) # 残差连接
x = x + self.mlp(self.ln2(x))
return x
Pre-LN vs Post-LN:原始Transformer采用Post-LN(Layer Norm在子层之后),GPT-2开始采用Pre-LN(Layer Norm在子层之前)。Pre-LN的优势是训练更稳定——梯度可以直接通过残差连接传播,避免了深层网络中梯度消失的问题。这让GPT-2可以堆到48层,GPT-3可以堆到96层。
五、从1.17亿到1.8万亿:规模即能力
GPT系列模型的参数规模经历了指数级增长:
| 模型 | 发布时间 | 参数量 | 层数 | 上下文长度 |
|---|---|---|---|---|
| GPT-1 | 2018年6月 | 1.17亿 | 12 | 512 |
| GPT-2 | 2019年2月 | 15亿 | 48 | 1024 |
| GPT-3 | 2020年5月 | 1750亿 | 96 | 2048 |
| GPT-4 | 2023年3月 | ~1.8万亿 | 120 | 32K+ |
数据来源:OpenAI GPT系列论文及技术报告
GPT-4的MoE架构:GPT-4据估计采用MoE(Mixture of Experts,混合专家)架构,包含16个专家,每个专家约1110亿参数(来源:GPT-4 Technical Report, OpenAI, 2023)。推理时,每个Token只会被路由到部分专家——这大幅降低了推理成本。
关键洞察:GPT的演进历史表明——随着参数、数据和算力的增长,模型不断涌现出新的能力。从GPT-1的“预训练+微调”到GPT-2的“零样本”,再到GPT-3的“少样本学习(In-Context Learning)”,每一次规模跃升都带来了质的飞跃。
六、推理过程:从概率到文本
模型输出的只是概率分布(Logits),如何变成流畅的文本?这是一个“解码”的艺术。
输入 Prompt → Tokenizer → input_ids
↓
model.generate() 循环:
├── 前向传播 → 下一个Token的概率分布
├── 应用解码策略(Greedy / Beam Search / Top-k / Top-p)
├── 选择下一个Token
├── 将Token追加到序列
└── 判断是否停止(达到max_length / 遇到EOS)
↓
输出 Token IDs → Tokenizer.decode() → 文本
常见解码策略:
| 策略 | 原理 | 特点 |
|---|---|---|
| Greedy | 每步选概率最高的Token | 最快,但容易重复 |
| Beam Search | 维护K条候选序列 | 质量更高,计算量大 |
| Top-k Sampling | 从概率最高的k个Token中采样 | 平衡多样性和质量 |
| Top-p (Nucleus) | 从累积概率达p的最小集合中采样 | 动态调整候选集 |
在Hugging Face Transformers中:
outputs = model.generate(
input_ids,
max_length=100,
do_sample=True, # 启用采样
temperature=0.8, # 控制随机性(越低越确定)
top_k=50, # Top-k
top_p=0.95, # Top-p (Nucleus)
repetition_penalty=1.2, # 防止重复
)
七、避坑指南:3个让GPT新手崩溃的陷阱
陷阱1:OOM(显存不足)
现象:加载大模型或处理长序列时显存溢出。
解决:
- 使用更小的模型(
gpt2而不是gpt2-xl) - 减小
max_length或batch_size - 启用梯度检查点
- 使用混合精度(FP16/BF16)
陷阱2:生成文本重复
现象:模型陷入重复循环,不断输出相同内容。
原因:Greedy解码容易导致重复;模型的生成概率分布过于“尖锐”。
解决:
outputs = model.generate(
input_ids,
repetition_penalty=1.2, # 惩罚已生成的Token
do_sample=True, # 开启采样
temperature=0.8, # 增加随机性
)
陷阱3:Tokenizer不匹配
现象:加载预训练模型时报错,或生成的文本乱码。
原因:不同模型使用不同的Tokenizer,词表不匹配。
解决:始终使用与模型配套的Tokenizer:
# ✅ 正确
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("gpt2")
model = AutoModelForCausalLM.from_pretrained("gpt2")
# ❌ 错误:混用不同模型的Tokenizer和Model
# tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
# model = AutoModelForCausalLM.from_pretrained("gpt2")
写在最后
GPT的本质,不是一种“模型架构”,而是一种“学习范式”——用“预测下一个词”这个极其简单的训练目标,让模型从海量文本中自动学习语言的统计规律、语法结构、语义关联,甚至世界知识。
它回答了一个根本性的问题:如果模型能够通过阅读互联网上的所有文本学会“理解”语言,那我们还需要为每个任务单独标注数据吗?
GPT的答案是:不需要。
从2018年1.17亿参数的GPT-1,到2023年1.8万亿参数的GPT-4,这个“预训练+微调”的范式已经彻底改变了AI的发展轨迹。截至2026年8月,GPT系列模型已演进至GPT-5,持续推动着生成式AI的边界。
如果你想知道“大语言模型到底是怎么工作的”,从读懂mingpt/model.py那300行代码开始。
关注我们,获取更多AI技术深度解读和工程实践案例。
如您所在的企业正面临AI技术选型、大模型应用落地或系统架构设计的挑战,欢迎进一步沟通。我们可提供针对贵企业具体场景的定制化方案和现场调研服务。
数据来源:OpenAI GPT系列论文(Radford et al., 2018;Radford et al., 2019;Brown et al., 2020)、GPT-4 Technical Report(OpenAI, 2023)、minGPT与nanoGPT开源实现(github.com/karpathy)、Hugging Face Transformers文档(截至2026年8月)
更多推荐




所有评论(0)