共计 1519 个字符,预计需要花费 4 分钟才能阅读完成。
技术演进脉络
AI 模型的发展可以清晰地分为判别式和生成式两条主线。以下是关键时间节点:
- 1960s-1990s 判别式模型奠基期
- 1967 年 逻辑回归提出
- 1992 年 SVM 算法正式发表
-
1998 年 LeNet- 5 卷积网络问世
-
2000s-2010s 生成式模型萌芽期
- 2006 年 深度信念网络 (DBN)
- 2013 年 变分自编码器 (VAE)
-
2014 年 生成对抗网络 (GAN)
-
2015 至今 融合创新期
- 2017 年 Transformer 架构
- 2020 年 Diffusion 模型
原理对比
数学本质差异
判别式模型学习条件概率分布:
$$P(y|x)$$
生成式模型学习联合概率分布:
$$P(x,y) = P(x|y)P(y)$$

实战代码
判别式案例:PyTorch CNN 分类器
import torch
import torchvision
# 数据增强配置
transform = torchvision.transforms.Compose([torchvision.transforms.RandomRotation(10),
torchvision.transforms.ToTensor()])
# 定义网络
class CNN(torch.nn.Module):
def __init__(self):
super().__init__()
self.conv1 = torch.nn.Conv2d(1, 32, 3)
self.fc = torch.nn.Linear(32*26*26, 10)
def forward(self, x):
x = torch.relu(self.conv1(x))
return self.fc(x.view(-1, 32*26*26))
生成式案例:简易 GAN 实现
# 生成器网络
class Generator(torch.nn.Module):
def __init__(self):
super().__init__()
self.fc = torch.nn.Sequential(torch.nn.Linear(100, 256),
torch.nn.LeakyReLU(0.2)
)
def forward(self, z):
return torch.sigmoid(self.fc(z))
# 梯度惩罚实现
def gradient_penalty(D, real, fake):
alpha = torch.rand(real.size(0), 1)
interpolates = alpha * real + (1-alpha) * fake
interpolates.requires_grad_(True)
d_interpolates = D(interpolates)
gradients = torch.autograd.grad(
outputs=d_interpolates,
inputs=interpolates,
grad_outputs=torch.ones_like(d_interpolates),
create_graph=True
)[0]
return ((gradients.norm(2, dim=1) - 1) ** 2).mean()
生产考量
选型决策树
graph TD
A[需要生成新数据?] -->| 是 | B[生成式模型]
A -->| 否 | C[判别式模型]
C --> D{数据量}
D -->| 大 | E[深度学习模型]
D -->| 小 | F[传统模型]
避坑指南
- 误区:用判别模型生成数据
-
解决方案:明确任务目标,生成任务必须使用生成式架构
-
误区:忽视模式坍塌
-
解决方案:GAN 训练时加入多样性指标监控
-
误区:混淆概率解释
- 解决方案:区分 P(y|x) 和 P(x|y) 的应用场景
动手挑战
尝试在 GAN 实现中:
1. 添加谱归一化层
2. 比较 Wasserstein 距离的效果
3. 可视化潜在空间插值
完整代码示例见:Colab 链接
正文完
