Tailwind CSSTailwind CSS
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
  • 第7章:生成模型

第7章:生成模型

7.1 生成对抗网络(GAN)

1. 基本概念

生成对抗网络(Generative Adversarial Network, GAN)是由Ian Goodfellow等人于2014年提出的一种生成模型框架。其核心思想是通过两个神经网络——**生成器(Generator)和判别器(Discriminator)**的对抗训练,实现数据生成。

  • 生成器:从随机噪声中生成逼真数据(如图像、文本)。
  • 判别器:区分生成数据与真实数据,输出概率值(0到1)。

2. 数学原理

GAN的优化目标是一个极小极大博弈(Minimax Game):

min⁡Gmax⁡DV(D,G)=Ex∼pdata[log⁡D(x)]+Ez∼pz[log⁡(1−D(G(z)))]\min_G \max_D V(D, G) = \mathbb{E}_{x \sim p_{\text{data}}}[\log D(x)] + \mathbb{E}_{z \sim p_z}[\log(1 - D(G(z)))] Gmin​Dmax​V(D,G)=Ex∼pdata​​[logD(x)]+Ez∼pz​​[log(1−D(G(z)))]

其中:

  • pdatap_{\text{data}}pdata​:真实数据分布
  • pzp_zpz​:噪声分布(如高斯分布)
  • D(x)D(x)D(x):判别器对真实数据的输出
  • G(z)G(z)G(z):生成器生成的假数据

3. 训练过程

  1. 固定生成器,训练判别器:最大化区分真实与生成数据的能力。
  2. 固定判别器,训练生成器:最小化判别器对生成数据的识别准确率。
  3. 交替迭代直至纳什均衡。

4. 经典变体

模型核心改进应用场景
DCGAN使用卷积层和批量归一化图像生成
WGAN用Wasserstein距离替代JS散度稳定训练
CycleGAN引入循环一致性损失图像风格迁移

5. 代码示例(PyTorch)

# 生成器定义
class Generator(nn.Module):
    def __init__(self):
        super().__init__()
        self.main = nn.Sequential(
            nn.Linear(100, 256),
            nn.ReLU(),
            nn.Linear(256, 784),
            nn.Tanh()  # 输出归一化到[-1,1]
        )
    def forward(self, z):
        return self.main(z)

6. 挑战与解决方案

  • 模式崩溃(Mode Collapse):生成器仅产生单一类型样本。
    解决方案:使用Mini-batch判别或Unrolled GAN。
  • 训练不稳定:判别器过强导致梯度消失。
    解决方案:采用WGAN-GP的梯度惩罚。

7. 应用案例

  • 艺术创作:生成虚构人脸(如ThisPersonDoesNotExist.com)
  • 数据增强:医疗图像合成以解决小样本问题
  • 超分辨率:ESRGAN提升图像分辨率

扩展阅读:

  • 原始论文:Generative Adversarial Networks (2014)
  • 可视化工具:GAN Lab

此内容包含理论推导、实现细节和实用资源,符合技术书籍的专业性要求。如需增加具体案例的代码或数学证明细节,可进一步扩展。
Last Updated:: 5/20/25, 7:33 PM