机器学习算法实战系列:生成模型全解析——从VAE到扩散模型的技术演进
引言
"AI不仅能识别世界,还能创造世界!生成模型正在重塑艺术创作、药物发现和内容生成,你想知道DALL·E和Stable Diffusion背后的核心技术吗?"
生成模型是近年来机器学习领域最具突破性的技术之一,它使AI系统具备了创造逼真图像、音乐、文本等内容的能力。本文将系统讲解生成模型的技术演进路线,从变分自编码器(VAE)到生成对抗网络(GAN),再到最新的扩散模型,通过代码实现和实战案例,带你深入理解AI创造力的技术本质。
第一部分:生成模型基础
1.1 生成模型基本概念
生成模型vs判别模型
- 判别模型:学习P(y|x),直接建模决策边界
- 生成模型:学习P(x)或P(x|y),建模数据分布
核心任务
- 生成:从潜在空间采样生成新样本
- 密度估计:计算数据点的似然
- 无监督表示学习:学习有意义的潜在表示
1.2 评估指标
- IS (Inception Score):生成图像质量和多样性
- FID (Frechet Inception Distance):特征空间距离
- 精确率与召回率:生成分布与真实分布匹配程度
第二部分:变分自编码器(VAE)
2.1 VAE核心思想
变分推断
近似难以计算的后验分布P(z|x):
q_φ(z|x) ≈ P(z|x)
证据下界(ELBO)
log P(x) ≥ 𝔼[log P_θ(x|z)] - KL(q_φ(z|x)||P(z))
2.2 PyTorch实现
import torch
import torch.nn as nn
import torch.nn.functional as F
class VAE(nn.Module):
def __init__(self, input_dim=784, hidden_dim=400, latent_dim=20):
super().__init__()
# 编码器
self.fc1 = nn.Linear(input_dim, hidden_dim)
self.fc21 = nn.Linear(hidden_dim, latent_dim) # 均值
self.fc22 = nn.Linear(hidden_dim, latent_dim) # 对数方差
# 解码器
self.fc3 = nn.Linear(latent_dim, hidden_dim)
self.fc4 = nn.Linear(hidden_dim, input_dim)
def encode(self, x):
h1 = F.relu(self.fc1(x))
return self.fc21(h1), self.fc22(h1)
def reparameterize(self, mu, logvar):
std = torch.exp(0.5*logvar)
eps = torch.randn_like(std)
return mu + eps*std
def decode(self, z):
h3 = F.relu(self.fc3(z))
return torch.sigmoid(self.fc4(h3))
def forward(self, x):
mu, logvar = self.encode(x.view(-1, 784))
z = self.reparameterize(mu, logvar)
return self.decode(z), mu, logvar
# 损失函数
def loss_function(recon_x, x