第7章:生成模型
扩散模型简介
1. 基本概念
扩散模型(Diffusion Models)是一类基于非平衡热力学的生成模型,通过逐步添加噪声(正向过程)和逐步去噪(反向过程)学习数据分布。其核心思想是将数据分布转化为可处理的噪声分布,再通过神经网络学习逆转这一过程。
2. 核心原理
正向过程(扩散过程)
对输入数据 ( x_0 ) 逐步添加高斯噪声,经过 ( T ) 步后得到纯噪声 ( x_T )。每一步的噪声强度由预设的方差调度(如线性或余弦)控制。反向过程(去噪过程)
训练神经网络(通常为U-Net)预测每一步的噪声,通过迭代去噪从 ( x_T ) 重建原始数据分布。目标函数通常为噪声预测的均方误差。数学表达
- 正向过程:( q(x_t|x_{t-1}) = \mathcal{N}(x_t; \sqrt{1-\beta_t}x_{t-1}, \beta_t\mathbf{I}) )
- 反向过程:( p_\theta(x_{t-1}|x_t) = \mathcal{N}(x_{t-1}; \mu_\theta(x_t,t), \Sigma_\theta(x_t,t)) )
3. 关键改进
- DDPM(Denoising Diffusion Probabilistic Models):提出固定方差和简化的训练目标。
- DDIM(Denoising Diffusion Implicit Models):通过非马尔可夫链加速采样。
- Stable Diffusion:结合潜在空间扩散,显著降低计算成本。
4. 优势与挑战
| 优势 | 挑战 |
|---|---|
| 生成质量高(优于GANs) | 采样速度慢(需多步迭代) |
| 训练稳定性强 | 计算资源消耗大 |
| 支持条件生成(如文本到图像) | 复杂噪声调度设计 |
5. 代码示例(PyTorch伪代码)
# 正向过程(添加噪声)
def forward_diffusion(x0, t, beta):
noise = torch.randn_like(x0)
sqrt_alpha = torch.sqrt(1 - beta[t])
return sqrt_alpha * x0 + (1 - sqrt_alpha) * noise
# 反向过程(噪声预测)
model = UNet() # 包含时间嵌入的U-Net
optimizer = Adam(model.parameters())
for x0 in dataloader:
t = torch.randint(0, T, (x0.shape[0],))
noise = torch.randn_like(x0)
noisy_x = forward_diffusion(x0, t, beta)
pred_noise = model(noisy_x, t)
loss = F.mse_loss(pred_noise, noise)
loss.backward()
optimizer.step()
6. 应用场景
- 图像生成:如OpenAI的DALL·E 2、Stable Diffusion。
- 音频合成:音乐与语音生成。
- 数据补全:修复缺失或损坏的数据片段。
7. 扩展阅读
- 原始论文:Ho et al. (2020) Denoising Diffusion Probabilistic Models
- 进阶方向:加速采样方法(如DDIM)、隐空间扩散模型。
注:此内容可根据需要补充具体案例(如Stable Diffusion的文本引导生成细节)或数学推导(如ELBO优化目标)。