当前位置:首页>python>一天一个Python知识点——Day 167:GPT(生成式预训练模型的崛起)

一天一个Python知识点——Day 167:GPT(生成式预训练模型的崛起)

  • 2026-09-22 14:15:07
一天一个Python知识点——Day 167:GPT(生成式预训练模型的崛起)

一、开篇:如果说BERT是阅读理解高手,那GPT就是写作大师

昨天你学习了BERT——它通过双向注意力理解文本,擅长分类、问答、实体识别等理解型任务。

但如果我们想要AI写出一段文字呢?比如:

  • 写完一篇新闻

  • 续写小说

  • 写一首诗

  • 甚至编一个冷笑话

这就是GPT的舞台。

GPT = Generative Pre-trained Transformer
核心:生成式 + 预训练 + Transformer解码器

GPT系列模型(由OpenAI开发)从GPT-1到GPT-4,一路引领了生成式AI的浪潮,最终催生了ChatGPT这个现象级产品。

二、GPT的核心思想:单向的、自回归的语言模型

2.1 与BERT的本质区别

维度
BERT
GPT
架构
Transformer编码器(双向)
Transformer解码器(单向)
训练任务
掩码语言模型 + 下一句预测
标准语言模型(预测下一个词)
注意力
每个词看所有词
每个词只看左边的词
擅长任务
理解(分类、NER、问答)
生成(文本续写、对话)
典型代表
BERT-base, RoBERTa
GPT-2, GPT-3, ChatGPT

2.2 自回归生成

GPT采用自回归(autoregressive)方式生成文本:

  1. 给定初始提示 x₁, x₂, ..., xₜ

  2. 模型预测下一个词的概率分布 P(xₜ₊₁ | x₁...xₜ)

  3. 采样得到 xₜ₊₁

  4. 将 xₜ₊₁ 加入输入,重复直到达到终止条件

这个过程就像人类写作:一个字一个字地往下写,永远只依赖已经写过的内容。

三、GPT的架构:Transformer解码器

GPT使用的是Transformer的解码器部分,并对注意力层进行了修改——掩码自注意力。

3.1 掩码自注意力

在标准的自注意力中,每个位置可以看见所有位置。但在GPT中,为了让模型在预测下一个词时看不到未来的词,我们引入上三角掩码:

注意力分数矩阵:    词1 词2 词3 词4词1  1   0   0   0词2  1   1   0   0词3  1   1   1   0词4  1   1   1   1

这样,位置 i 只能看到 ≤i 的位置。

3.2 堆叠解码器层

GPT由多个相同的解码器层堆叠而成。每个解码器层包含:

  • 掩码多头自注意力

  • 前馈网络(FFN)

  • 残差连接 + 层归一化

与原始Transformer解码器不同,GPT没有编码器-解码器注意力层(因为没有编码器输入)。

3.3 模型规格(GPT家族)

模型
参数量
层数
隐藏层维度
注意力头数
GPT-1
117M
12
768
12
GPT-2
1.5B
48
1600
25
GPT-3
175B
96
12288
96
GPT-4
未公开
-
-
-

四、GPT的训练:标准语言模型

GPT的训练目标很简单:最大化下一个词的概率。

给定一个文本序列 x₁, x₂, ..., xₙ,模型计算:

L = -∑ log P(xᵢ | x₁...xᵢ₋₁)

也就是传统的语言模型目标。因此GPT的训练完全可以在海量无标注文本上进行。

训练数据:

  • GPT-1:BooksCorpus(约7000本书)

  • GPT-2:WebText(4500万网页)

  • GPT-3:Common Crawl等混合(570GB文本)

五、GPT的生成策略

训练好的GPT是一个概率模型,从它生成文本有多种策略:

5.1 贪心搜索(Greedy Search)

每一步选概率最大的词。结果往往短、重复、不自然。

5.2 束搜索(Beam Search)

保留多个候选序列(束宽),最后选整体概率最高的。常用于机器翻译,但生成文本也易重复。

5.3 随机采样(Random Sampling)

根据概率分布随机采样下一个词。引入随机性,使生成更多样。

import torch# 假设logits是模型输出的原始分数(未经过softmax)probs = torch.softmax(logits, dim=-1)next_token = torch.multinomial(probs, num_samples=1)

5.4 Top-k 采样

只从概率最高的k个词中采样,避免采到极低概率词。

5.5 Top-p(Nucleus)采样

选择累积概率超过p的最小词集,然后重新归一化采样。目前最常用的生成策略。

# 使用HuggingFace时output = model.generate(input_ids, do_sample=True, top_p=0.9, max_length=100)

5.6 温度参数(Temperature)

调整softmax的平滑度:logits = logits / temperature。温度越低(<1),分布越尖锐,生成更保守;温度越高(>1),分布越均匀,生成更随机。

六、实战:用GPT-2生成文本

我们将使用 transformers 库加载GPT-2并生成文本。

6.1 安装与环境

pip install transformers torch

6.2 基础生成

from transformers import GPT2LMHeadModel, GPT2Tokenizer# 加载模型和分词器model_name = "gpt2"  # 或 "gpt2-medium", "gpt2-large", "gpt2-xl"tokenizer = GPT2Tokenizer.from_pretrained(model_name)model = GPT2LMHeadModel.from_pretrained(model_name)# 设置生成参数prompt = "Once upon a time,"inputs = tokenizer(prompt, return_tensors="pt")# 生成outputs = model.generate(    inputs.input_ids,    max_length=50,    num_return_sequences=3,    do_sample=True,    top_p=0.9,    temperature=0.8,    pad_token_id=tokenizer.eos_token_id)# 解码输出for i, output in enumerate(outputs):    text = tokenizer.decode(output, skip_special_tokens=True)    print(f"生成 {i+1}: {text}\n")

6.3 条件生成(给定前缀)

GPT可以基于任何前缀续写。我们可以尝试写一首诗:

prompt = "Roses are red, violets are blue,"inputs = tokenizer(prompt, return_tensors="pt")outputs = model.generate(    inputs.input_ids,    max_length=50,    do_sample=True,    top_k=50,    temperature=0.9)print(tokenizer.decode(outputs[0], skip_special_tokens=True))

6.4 控制生成长度和结束标记

GPT-2默认遇到 <|endoftext|> 才停止。可以设置 eos_token_id 和 pad_token_id。

model.config.pad_token_id = model.config.eos_token_id

七、GPT-3的突破与InstructGPT

7.1 GPT-3:规模的力量

GPT-3拥有1750亿参数,展现出惊人的少样本学习(few-shot learning)能力。只需在提示中给几个例子,GPT-3就能理解任务并完成,无需微调。

示例(情感分类的few-shot提示):

文本:这部电影很棒!情感:正面文本:太无聊了。情感:负面文本:我喜欢它。情感:

GPT-3会自动输出“正面”。

7.2 InstructGPT & ChatGPT

GPT-3虽然强大,但常常生成与人类意图不符的内容。InstructGPT通过人类反馈强化学习(RLHF)进行微调,让模型更符合指令。

ChatGPT则是基于InstructGPT的对话优化版本,引入了多轮对话的训练,成为现象级产品。

总结:生成式AI的新纪元

GPT从1.0到4.0,证明了规模+自回归+Transformer的威力。它让机器不仅能理解语言,还能创造语言。ChatGPT的出现,让通用人工智能的梦想离现实更近了一步。

今天你学会了:

  • GPT的架构(单向Transformer解码器)

  • 自回归生成原理

  • 生成策略(Top-k、Top-p、温度)

  • 用GPT-2实战生成文本

  • GPT-3和InstructGPT的突破

最新文章

随机文章