AI发展历程解析:从判别式模型到生成式模型的演进与实战

1次阅读
没有评论

共计 1519 个字符,预计需要花费 4 分钟才能阅读完成。

image.webp

技术演进脉络

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)$$

AI 发展历程解析:从判别式模型到生成式模型的演进与实战

实战代码

判别式案例: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[传统模型]

避坑指南

  1. 误区:用判别模型生成数据
  2. 解决方案:明确任务目标,生成任务必须使用生成式架构

  3. 误区:忽视模式坍塌

  4. 解决方案:GAN 训练时加入多样性指标监控

  5. 误区:混淆概率解释

  6. 解决方案:区分 P(y|x) 和 P(x|y) 的应用场景

动手挑战

尝试在 GAN 实现中:
1. 添加谱归一化层
2. 比较 Wasserstein 距离的效果
3. 可视化潜在空间插值

完整代码示例见:Colab 链接

正文完
 0
评论(没有评论)