AE、VAE与GAN简明指南:三大生成模型对比
AE、VAE与GAN简明指南:三大生成模型对比
1. 核心概念一句话总结
模型 | 核心思想 | 一句话理解 |
---|---|---|
AE | 压缩-还原 | 把图片压成向量,再还原,像zip压缩 |
VAE | 压缩+随机性 | AE加噪声,让向量有概率意义 |
GAN | 造假-识别 | 两个网络打架,越打越真 |
2. 模型结构对比
2.1 AE结构(最简单)
输入图片 → [编码器] → 隐向量z → [解码器] → 还原图片
特点:
- 隐向量是确定的(无随机性)
- 训练目标:输入输出尽可能像
- 隐空间可能不连续
2.2 VAE结构(AE升级版)
输入图片 → [编码器] → μ+σ → [采样] → 隐向量z → [解码器] → 生成图片
特点:
- 隐向量是概率分布(有随机性)
- 训练目标:输入输出像 + 隐向量接近正态分布
- 隐空间连续,可插值
2.3 GAN结构(完全不同)
噪声z → [生成器] → 假图片 → [判别器] → 真/假
真实图片 → [判别器] → 真/假
特点:
- 无编码器,直接从噪声生成
- 对抗训练,生成器vs判别器
- 生成质量最高,但训练不稳定
3. 训练与推理流程
3.1 AE训练流程
训练:
- 输入图片x
- 编码器得到隐向量z
- 解码器得到重构图片x̂
- 计算MSE损失:||x - x̂||²
- 反向传播
推理:
# 只能还原训练过的图片
reconstructed = ae(original_image)# 无法生成新图片(隐空间不连续)
3.2 VAE训练流程
训练:
- 输入图片x
- 编码器输出μ和σ
- 从N(μ,σ)采样得到z
- 解码器得到生成图片x̂
- 计算损失:重构误差 + KL散度
推理:
# 生成新图片(采样隐向量)
z = torch.randn(1, 100)
new_image = vae.decode(z)# 插值生成(隐空间连续)
z1 = vae.encode(image1)
z2 = vae.encode(image2)
interp_image = vae.decode(0.5*z1 + 0.5*z2)
3.3 GAN训练流程
训练:
- 训练判别器:
- 真实图片 → 输出1
- 生成假图片 → 输出0
- 训练生成器:
- 生成假图片 → 让判别器输出1
- 交替训练
推理:
# 直接生成新图片
noise = torch.randn(1, 100)
new_image = generator(noise)
4. 损失函数对比
模型 | 损失函数 | 优化目标 |
---|---|---|
AE | MSE损失 | 输入输出尽可能像 |
VAE | MSE + KL散度 | 输入输出像 + 隐向量正态分布 |
GAN | 对抗损失 | 生成器骗过判别器 |
5. 实际应用对比
5.1 AE应用场景
应用 | 实现方式 | 局限性 |
---|---|---|
图像压缩 | 隐向量就是压缩码 | 压缩率有限 |
特征提取 | 用隐向量做下游任务 | 特征可能不够好 |
去噪 | 训练有噪声→无噪声 | 只能去训练过的噪声 |
5.2 VAE应用场景
应用 | 实现方式 | 优势 |
---|---|---|
人脸生成 | 在隐空间插值 | 平滑过渡 |
数据增强 | 采样生成新样本 | 多样性高 |
异常检测 | 重构误差大的为异常 | 无需异常样本 |
5.3 GAN应用场景
应用 | 实现方式 | 优势 |
---|---|---|
艺术创作 | StyleGAN等 | 质量最高 |
图像修复 | 条件GAN | 逼真细节 |
风格迁移 | CycleGAN | 无需配对数据 |
6. 选择建议
6.1 按需求选择
需求 | 推荐模型 | 理由 |
---|---|---|
快速原型 | AE | 最简单,易实现 |
稳定生成 | VAE | 训练稳定,可解释 |
最高质量 | GAN | 生成效果最佳 |
特征提取 | AE/VAE | 有编码器 |
数据增强 | VAE | 隐空间连续 |
6.2 按经验选择
- 新手:先AE,再VAE,最后GAN
- 研究:VAE理论清晰,GAN效果好
- 工业:GAN质量优先,VAE稳定性优先
7. 一句话总结
- AE:最简单的压缩还原,像zip文件
- VAE:AE加随机性,可以生成新图片
- GAN:对抗训练,质量最高但最难调
参考:
1、Autoencoders
2、Generative Adversarial Networks