专题研究笔记 / 研究与实验

从 Stable Diffusion 到 GPT-3:一次关于生成模型、RNN 与推理模型的技术梳理

本文整理本次 session 中讨论的核心知识点,覆盖 Stable Diffusion 的训练/推理机制、RNN/LSTM/GRU 与 Transformer 的差异、中文 RNN 语言模型训练、GPT 系列演进、GPT-3 的 scaling 与 RLHF 边界,以及 DeepSeek-R1/R1-Zero 与 OpenAI o1 的关系。

本文整理本次 session 中讨论的核心知识点,覆盖 Stable Diffusion 的训练/推理机制、RNN/LSTM/GRU 与 Transformer 的差异、中文 RNN 语言模型训练、GPT 系列演进、GPT-3 的 scaling 与 RLHF 边界,以及 DeepSeek-R1/R1-Zero 与 OpenAI o1 的关系。


1. Stable Diffusion:不是单纯 image-to-image,而是条件扩散

Stable Diffusion 的核心不是直接在像素空间生成图像,而是在 VAE latent space 中做扩散建模。

可以把它拆成三个模块:

VAE:图像 <-> latent 的压缩与还原
Text Encoder:文本 prompt/caption -> text embedding
U-Net:在 latent 上执行条件去噪

1.1 训练阶段的真实流程

训练 Stable Diffusion 时,输入不是只有图像,还有对应的文本描述。

训练样本:
(image x, caption text)

图像分支:
image x
→ VAE Encoder
→ latent z_0
→ 加高斯噪声
→ noisy latent z_t

文本分支:
caption text
→ tokenizer
→ token ids
→ text encoder
→ text embedding c

扩散分支:
z_t + timestep t + text embedding c
→ U-Net
→ 预测噪声 ε_pred
→ 和真实噪声 ε 计算 denoising loss

核心目标可以写成:

ε_pred = U-Net(z_t, t, c)
loss = MSE(ε_pred, ε)

其中:

  • z_0 是真实图像经过 VAE Encoder 得到的干净 latent;
  • z_t 是在 z_0 上加噪后的 latent;
  • c 是 caption 经过 Text Encoder 得到的文本条件;
  • U-Net 学的是“在文本条件下如何把 noisy latent 拉回真实图像 latent 分布”。

所以,Stable Diffusion 的 text-to-image 训练不是普通 image-to-image。

更准确说:

Stable Diffusion 训练 = 图像 latent 去噪任务 + 文本 embedding 条件控制

2. 为什么 latent 要加高斯噪声

给 latent 加高斯噪声的目的,不是简单“破坏图像”,而是构造一个可学习的生成路径。

前向过程:

真实图像 latent 分布
→ 少量噪声
→ 中等噪声
→ 大量噪声
→ 近似标准高斯噪声

反向过程:

随机高斯噪声
→ 去噪一步
→ 去噪一步
→ ...
→ 干净 latent
→ VAE Decoder
→ 图像

2.1 高斯噪声的收益

收益说明
起点简单推理时可以从标准高斯噪声采样
训练目标明确直接监督模型预测加入的噪声
数学性质好高斯分布有闭式加噪公式,便于训练和采样
生成任务被拆解从“一步生成图像”变成“多步去噪”
稳定性强不需要 GAN 式判别器对抗训练
可控性强可控制 noise schedule、采样步数、denoising strength

可以把扩散建模理解为:

人为设计一条从真实数据分布到标准高斯分布的路径;
训练模型学习这条路径的反方向;
生成时从高斯噪声沿反方向走回真实图像分布。

3. Stable Diffusion 训练、文生图推理、图生图推理的区别

3.1 训练流程

image x
→ VAE Encoder
→ latent z_0
→ 加噪得到 z_t

caption
→ Text Encoder
→ text embedding c

z_t + t + c
→ U-Net
→ 预测噪声
→ loss

训练时一般不需要每一步都 VAE Decode 成图像。


3.2 text-to-image 推理

真正加载 pretrained SD 做普通文生图时,没有输入图像。

流程是:

prompt
→ Text Encoder
→ text embedding

random latent noise z_T
→ U-Net 多步去噪
→ latent z_0
→ VAE Decoder
→ image x

所以普通文生图推理不需要:

像素图像 x → VAE Encoder → latent z

它直接从随机 latent noise 开始。


3.3 image-to-image 推理

图生图才会用到输入图像:

输入图像 x
→ VAE Encoder
→ latent z_0
→ 按 denoising strength 加噪得到 z_t
→ U-Net 从 z_t 开始去噪
→ VAE Decoder
→ 输出图像 x'

denoising strength 控制变化幅度:

strength 越低:保留原图越多,变化越小
strength 越高:加噪越重,原图结构保留越少,变化越大

4. SD 的 Text Encoder:Transformer / Attention,不是 RNN/LSTM

Stable Diffusion 的 text encoder 不是 RNN、LSTM、GRU,而是基于 Transformer attention 的文本编码器。

不同版本大致如下:

模型Text Encoder结构
SD 1.x / 1.5CLIP ViT-L/14 text encoderTransformer encoder
SD 2.xOpenCLIP text encoderTransformer encoder
SDXLOpenCLIP-ViT/G + CLIP-ViT/L两个 Transformer text encoders
SD3 / FLUX 类模型CLIP / T5 等组合Transformer encoder

完整文本处理流程:

prompt 文本
→ tokenizer
→ token ids
→ token embedding + position embedding
→ Transformer text encoder
→ text embeddings
→ U-Net cross-attention

注意:

tokenizer 只是字符串到 token id 的映射工具;
text encoder 才是负责语义建模的神经网络。

5. CLIP 的文本处理也是 attention

CLIP 是图文对齐模型,通常有两个编码器:

image encoder:ViT 或 ResNet
text encoder:Transformer text encoder

CLIP 的 text encoder 也是 Transformer attention 结构,不是 RNN/LSTM。

CLIP 文本侧流程:

text
→ BPE tokenizer
→ token ids
→ token embedding + position embedding
→ Transformer text encoder
→ text embedding

CLIP 训练目标是图文对比学习:

匹配的 image embedding 和 text embedding 更近
不匹配的 image embedding 和 text embedding 更远

而 Stable Diffusion 训练不是 CLIP 式图文 embedding 对齐。SD 使用 text embedding 作为条件,让 U-Net 在该文本条件下做去噪。


6. RNN、LSTM、GRU 的关系

RNN 是基础序列网络。LSTM 和 GRU 都是 RNN 的门控变体。

结构关系可以写成:

RNN
├── vanilla RNN
├── LSTM
└── GRU

6.1 LSTM 是 RNN 的改进

普通 RNN 的主要问题:

长序列训练时容易梯度消失 / 梯度爆炸

LSTM 引入:

cell state
input gate
forget gate
output gate

目标是更好地保留长期依赖。


6.2 GRU 是 LSTM 的简化替代,而不是严格升级版

GRU 同样是门控 RNN,但结构比 LSTM 简化。

模型状态门控特点
vanilla RNNhidden state无门控简单,但长依赖差
LSTMcell state + hidden stateinput / forget / output表达力强,参数更多
GRUhidden stateupdate / reset更简单,训练更快,效果常接近 LSTM

准确表述:

LSTM 是 RNN 的改进;
GRU 是受 LSTM 启发的简化门控 RNN,不是严格意义上的 LSTM 升级版。

7. RNN 不是 seq2seq,但可以做 seq2seq

RNN 是网络结构,seq2seq 是任务/建模范式。

RNN / LSTM / GRU:序列建模网络结构
seq2seq:输入序列 -> 输出序列的建模方式

RNN 可用于多种任务:

形式输入输出示例
many-to-one序列单个标签情感分类
many-to-many 同步序列等长序列词性标注、NER
seq2seq序列另一个序列翻译、摘要
autoregressive LM前文 token下一个 token文本续写

所以 RNN 可以做类似 GPT 的自回归生成:

prompt
→ RNN 读入 token 序列
→ 得到 hidden state
→ 预测下一个 token
→ 把生成 token 再喂回模型
→ 继续生成

区别在于:

RNN 用 hidden state 递归传递历史;
GPT 用 causal self-attention 直接访问上下文 token。

8. RNN 语言模型训练:next-token prediction

长度为 10 的句子:

token1 token2 token3 ... token10

训练目标是:

token1        → predict token2
token1-2      → predict token3
token1-3      → predict token4
...
token1-9      → predict token10

实现上通常不是拆成 9 条独立样本,而是一次前向计算得到所有位置的预测。

输入和标签右移:

input:
token1 token2 token3 ... token9

target:
token2 token3 token4 ... token10

RNN 前向:

x1 → h1 → pred2
x2 → h2 → pred3
x3 → h3 → pred4
...
x9 → h9 → pred10

总 loss:

loss = CE(pred2, token2) + CE(pred3, token3) + ... + CE(pred10, token10)

然后一次 loss.backward()。


9. RNN 与 GPT 训练并行性的区别

RNN 也可以一次算完整序列 loss 并做一次 BP,但时间步计算有递归依赖:

h_t = f(x_t, h_{t-1})

因此:

算 h5 前必须先算 h4
算 h4 前必须先算 h3
...

RNN 可以并行 batch 维度和矩阵乘法内部,但不能很好并行 sequence length 维度。

GPT / Transformer decoder 则不同:

X = [x1, x2, ..., xn]

Q = XW_Q
K = XW_K
V = XW_V

causal self-attention
→ 同时得到所有位置输出

通过 causal mask 限制每个位置只能看左侧 token:

token1 只能看 token1
token2 可以看 token1-2
token3 可以看 token1-3
...

对比:

项目RNN/LSTM/GRUGPT/Transformer
训练目标next-token predictionnext-token prediction
是否一次算多个位置 loss可以可以
是否一次 backward可以可以
时间步前向是否并行基本不能可以
长距离依赖压缩进 hidden stateattention 直接访问上下文
GPU 利用率较差更好

10. PyTorch 中可直接使用的 RNN/LSTM/GRU

在 PyTorch 生态里,传统 RNN/LSTM/GRU 首选官方 torch.nn:

torch.nn.RNN
torch.nn.LSTM
torch.nn.GRU
torch.nn.RNNCell
torch.nn.LSTMCell
torch.nn.GRUCell

Hugging Face Transformers 主要面向 Transformer / LLM,不是传统 RNN 的主阵地。

scikit-learn 不适合深度 RNN 序列建模,因为它主要面向传统机器学习和 MLP,没有成熟 GPU 深度序列训练能力。

典型 LSTM 语言模型结构:

import torch
import torch.nn as nn

class LSTMLanguageModel(nn.Module):
    def __init__(self, vocab_size: int, embed_dim: int, hidden_size: int, num_layers: int):
        super().__init__()
        self.embedding = nn.Embedding(vocab_size, embed_dim)
        self.lstm = nn.LSTM(
            input_size=embed_dim,
            hidden_size=hidden_size,
            num_layers=num_layers,
            batch_first=True,
        )
        self.lm_head = nn.Linear(hidden_size, vocab_size)

    def forward(self, input_ids):
        x = self.embedding(input_ids)
        output, _ = self.lstm(x)
        logits = self.lm_head(output)
        return logits

11. 中文 RNN 语言模型:tokenizer、vocab、embedding

训练中文 RNN 时,需要区分三件事:

tokenizer:文本 -> token 序列 / token ids
vocab:token <-> id 映射表
embedding:token id -> 向量

完整流程:

中文文本
→ tokenizer
→ token ids
→ embedding layer
→ RNN / LSTM / GRU
→ lm_head
→ 下一个 token 概率

11.1 中文 tokenization 方案

方案 A:按字

我喜欢机器学习
→ 我 / 喜 / 欢 / 机 / 器 / 学 / 习

优点:

  • 简单;
  • 不依赖分词器;
  • OOV 少;
  • 适合小实验和教学。

缺点:

  • 序列较长;
  • 词级语义被拆开。

方案 B:按词

我喜欢机器学习
→ 我 / 喜欢 / 机器学习

优点:

  • 序列短;
  • 词义更明确。

缺点:

  • 依赖中文分词质量;
  • 词表可能很大;
  • 新词/OOV 问题明显。

方案 C:BPE / WordPiece / SentencePiece

类似现代 GPT/BERT/LLM 的子词 tokenizer。

优点:

  • 词表规模可控;
  • 适合中英文混合、数字、符号;
  • OOV 更少;
  • 更接近现代 LLM 处理方式。

结论:

RNN 也可以用 BPE / SentencePiece。
tokenizer 不依赖 Transformer。

11.2 embedding 可以随机初始化

自己从零训练中文 RNN 语言模型时,embedding 可以随机初始化。

embedding = nn.Embedding(num_embeddings=50000, embedding_dim=256)

这会创建一个可训练矩阵:

[50000, 256]

初始化时没有语义,训练过程中通过 loss 反向传播学习。

token id
→ 查 embedding 表
→ 得到向量
→ 输入 RNN
→ 预测下一个 token
→ cross entropy loss
→ 反向传播
→ 更新 embedding + RNN + lm_head

简化结论:

tokenizer 负责 token -> id;
nn.Embedding 随机初始化 id -> vector;
RNN 学序列关系;
loss 反向传播同时更新 embedding 和 RNN。

12. GPT 系列演进概览

GPT 系列主线从一开始就是:

decoder-only Transformer
+ causal self-attention
+ next-token prediction

不同阶段的重点不同。

时间模型参数量公开情况核心亮点
2018GPT-1约 117M生成式预训练 + 下游微调
2019GPT-2最大 1.5B更大规模语言模型,zero-shot 生成增强
2020GPT-3最大 175Bfew-shot / in-context learning
2022InstructGPT1.3B / 6B / 175BSFT + reward model + RLHF
2022ChatGPT / GPT-3.5未公开对话式产品,指令遵循和 RLHF 对齐
2023GPT-4未公开多模态,复杂推理、代码、视觉能力提升
2024GPT-4o未公开原生文本/视觉/音频多模态
2024o1未公开推理模型,回答前花更多计算“思考”
2025+GPT-5 系列未公开统一快答/深度推理、工具使用、agentic work

注意:

GPT-4 之后,OpenAI 不再公开模型参数量和完整架构细节。

网上关于 GPT-4 / GPT-5 参数量、MoE 专家数等说法,大多属于外部猜测,不应当当作事实。


13. GPT-3:没有 RLHF

原始 GPT-3 是:

decoder-only Transformer
+ 大规模 next-token prediction 预训练
+ prompt / few-shot / in-context learning 推理

它没有使用 RLHF。

GPT-3 论文中的 few-shot 指的是:

在 prompt 中给任务说明和少量示例;
模型参数不更新;
直接生成答案。

也就是:

不做 gradient update
不做 task-specific fine-tuning
不做 RLHF

14. RLHF 是 InstructGPT / ChatGPT 路线

RLHF 主要出现在 GPT-3 之后的 InstructGPT 和 ChatGPT 路线中。

训练流程大致是:

GPT-3 预训练模型
→ SFT:用人工示范数据做监督微调
→ Reward Model:用人类偏好排序训练奖励模型
→ RLHF / PPO:强化学习优化
→ InstructGPT
→ ChatGPT / GPT-3.5 对话模型

区别:

模型是否 RLHF说明
原始 GPT-3否纯大规模自回归预训练
InstructGPT是SFT + reward model + RLHF
ChatGPT / GPT-3.5是,属于 RLHF 对齐路线对话和指令遵循优化
text-davinci-002/003接近指令模型路线具体细节未完全公开

一句话:

GPT-3 本体没有 RLHF;
RLHF 是在 GPT-3 预训练基座之上发展出的对齐阶段。

15. GPT-3 few-shot / in-context learning 为什么变强

GPT-3 的 few-shot / in-context learning 比 GPT-2 明显增强,最大直接原因是 scaling。

GPT-2 最大 1.5B 参数,GPT-3 最大 175B 参数。架构仍然是 decoder-only Transformer,训练目标仍然是 next-token prediction。

核心变化是:

更大参数量
+ 更多训练数据
+ 更多训练计算量
→ 更强 zero-shot / few-shot / in-context learning

但需要补充:

不是只加参数量;
而是参数量、数据量、训练算力共同扩大。

GPT-3 的 few-shot 并不是训练时临时更新参数,而是:

prompt 中给任务说明和示例
→ 模型识别任务格式
→ 根据上下文继续生成符合格式的答案

可以理解为:

任务识别
+ 格式归纳
+ 模式续写
+ 语义知识调用

而不是 SGD 意义上的“学习”。


16. GPT-3 175B 在哪里训练,什么硬件能训

GPT-3 175B 在 Microsoft Azure 上为 OpenAI 建设的 AI supercomputer / GPU 集群上训练。

公开可确认的信息:

平台:Microsoft Azure
集群:Microsoft 与 OpenAI 合作建设,供 OpenAI 使用
规模:约 10,000 GPUs,285,000+ CPU cores
网络:每个 GPU server 最高 400 Gbps 级连接

GPU 型号在 GPT-3 论文中没有完整公开。常见技术分析认为主要使用 NVIDIA V100,但严格说这不是 GPT-3 论文直接披露的核心事实。

175B 参数如果只按 FP16 权重计算:

175B × 2 bytes ≈ 350 GB

但训练时还需要:

weights
+ gradients
+ optimizer states
+ activations
+ communication buffers

所以训练态显存远高于 350GB。

能训练 GPT-3 的原因不是单卡能力,而是大规模分布式训练:

data parallelism
+ tensor/model parallelism
+ pipeline parallelism
+ optimizer state sharding
+ activation checkpointing
+ 高速 GPU 间通信

简化结论:

单张或少量 V100 不能训练 GPT-3 175B;
能训是因为有万卡级高带宽 GPU 集群和成熟分布式训练工程。

17. DeepSeek-R1 / R1-Zero 与 OpenAI o1

17.1 是否受 o1 启发

可以说:

DeepSeek-R1 / R1-Zero 明显沿着 o1 打开的“推理模型 / 长思考模型”方向做,
并且直接把 OpenAI-o1 作为主要 benchmark 对标对象。

但不能说:

DeepSeek 复现了 o1 的内部训练方法。

因为 OpenAI o1 的完整训练细节、奖励设计、数据构造、架构细节没有公开。


17.2 R1-Zero

R1-Zero 的核心实验是:

base model
→ 不先做 supervised fine-tuning
→ 直接大规模 reinforcement learning
→ reasoning 行为自然出现

它验证的是:

只靠可验证奖励 + RL,
也可能激发长链推理、自我验证、策略调整等行为。

R1-Zero 的问题包括:

可读性较差
语言混杂
输出风格不稳定

17.3 R1

DeepSeek-R1 在 R1-Zero 基础上加入:

cold-start data
+ 多阶段 RL
+ 可读性和语言一致性优化
+ reasoning trace 蒸馏

目标是解决 R1-Zero 的可读性和稳定性问题,同时保持强 reasoning 性能。

对比:

模型训练路线目的
R1-Zerobase model → large-scale RL验证纯 RL 激发 reasoning
R1cold-start data → RL → 多阶段训练提升可读性、稳定性和综合表现
o1OpenAI 未公开完整细节推理前花更多计算,数学/代码/科学更强

准确表述:

R1/R1-Zero 是 o1 之后开源 reasoning model 路线的重要成果;
方向和目标明显对标 o1;
但没有证据表明它复现了 o1 的内部方法。

18. 关键概念速查

18.1 tokenizer、vocab、embedding

tokenizer:文本 -> token
vocab:token <-> id
embedding:id -> dense vector

18.2 next-token prediction

输入:token1 token2 ... tokenN-1
目标:token2 token3 ... tokenN

用于:

RNN language model
GPT
大多数自回归语言模型

18.3 decoder-only Transformer

GPT 系列核心架构:

token embedding
+ positional encoding
+ causal self-attention
+ feed-forward network
+ LM head
→ next token distribution

18.4 in-context learning

不是训练时更新参数,而是:

prompt 中给任务说明和示例
→ 模型在上下文中识别任务
→ 直接生成答案

18.5 RLHF

SFT:人工示范监督微调
Reward Model:学习人类偏好
RLHF/PPO:用奖励模型优化输出偏好

主要用于:

InstructGPT
ChatGPT
GPT-3.5 及后续对话模型路线

原始 GPT-3 不属于 RLHF 模型。


18.6 Stable Diffusion 三类流程

训练:
image + caption
→ VAE Encoder + Text Encoder
→ noisy latent + text condition
→ U-Net 预测噪声

文生图推理:
prompt
→ Text Encoder
random latent noise
→ U-Net 去噪
→ VAE Decoder
→ image

图生图推理:
input image
→ VAE Encoder
→ latent 加噪
→ U-Net 去噪
→ VAE Decoder
→ output image

19. 总结

本次讨论可以串成一条技术主线:

早期序列模型:
RNN / LSTM / GRU
→ 可以做语言模型和 seq2seq
→ 但时间步难并行、长上下文弱

现代语言模型:
Transformer decoder
→ causal self-attention
→ next-token prediction
→ GPT-1/2/3 scaling
→ GPT-3 出现强 in-context learning

对齐与推理:
GPT-3 本体无 RLHF
→ InstructGPT / ChatGPT 引入 SFT + RLHF
→ GPT-4 之后转向多模态、工具、长上下文
→ o1 / R1 类模型强调 test-time reasoning / RL 激发推理

现代图像生成:
扩散模型
→ DDPM 使用 U-Net 去噪
→ Stable Diffusion 把扩散放到 VAE latent space
→ 文本条件通过 Transformer text encoder 和 cross-attention 注入 U-Net

整体来看,生成模型的发展不是单一技术替换,而是多条路线叠加:

规模化 scaling
+ 更适合并行的 Transformer 架构
+ 表征学习与条件控制
+ 人类反馈对齐
+ 推理时计算
+ 工具与多模态系统化