CodeRoadMap
路线图学习路径文章题库资源社区

浏览

首页路线图学习路径知识库题库文章资源社区我的学习
CodeRoadMap

中文编程学习导航:路线图、讲义与题库,进度可同步。

路线图学习路径文章题库社区

© 2026 CodeRoadMap

津ICP备2026012044号-1|coderoadmap@126.com
首页/AI 人工智能入门 · 微软 12 周课/生成对抗网络

课程目录

  1. 01人工智能简介
  2. 02知识表示与专家系统
  3. 03神经网络简介
  4. 04神经网络入门:感知机
  5. 05使用感知器进行多类别分类
  6. 06神经网络简介:多层感知机
  7. 07使用我们自己的框架进行MNIST分类
  8. 08神经网络框架
  9. 09使用 PyTorch/TensorFlow 进行分类
  10. 10计算机视觉
  11. 11计算机视觉简介
  12. 12使用光流检测运动
  13. 13卷积神经网络
  14. 14宠物面部分类
  15. 15预训练网络与迁移学习
  16. 16使用迁移学习对牛津宠物进行分类
  17. 17自动编码器
  18. 18生成对抗网络
  19. 19目标检测
  20. 20使用好莱坞头部数据集进行头部检测
  21. 21分割
  22. 22人体分割
  23. 23自然语言处理
  24. 24将文本表示为张量
  25. 25嵌入
  26. 26语言建模
  27. 27训练 Skip-Gram 模型
  28. 28循环神经网络
  29. 29生成网络
  30. 30使用 RNN 进行词级文本生成
  31. 31注意机制与Transformer
  32. 32命名实体识别
  33. 33命名实体识别 (NER)
  34. 34预训练大型语言模型
  35. 35遗传算法
  36. 36深度强化学习
  37. 37other-deeprl-lab
  38. 38多智能体系统
  39. 39伦理与负责任的人工智能
  40. 40多模态网络
第 18 课1 小时

生成对抗网络

在上一节中,我们学习了生成模型:可以生成与训练数据集中的图像相似的新图像的模型。VAE是生成模型的一个很好的例子。

课程内容

生成对抗网络

在上一节中,我们学习了生成模型:可以生成与训练数据集中的图像相似的新图像的模型。VAE是生成模型的一个很好的例子。

课前测验

然而,如果我们尝试生成一些真正有意义的内容,比如一幅分辨率合理的画作,使用VAE时会发现训练效果并不理想。针对这种情况,我们需要学习另一种专门用于生成模型的架构——生成对抗网络,简称GAN。

GAN的核心思想是使用两个神经网络相互对抗进行训练:

图片来源:Dmitry Soshnikov

✅ 一些术语:

  • 生成器是一个网络,它接收一个随机向量,并生成图像作为输出。
  • 判别器是一个网络,它接收一张图像,并判断该图像是来自训练数据集的真实图像,还是由生成器生成的虚假图像。它本质上是一个图像分类器。

判别器

判别器的架构与普通的图像分类网络没有区别。最简单的情况下,它可以是一个全连接分类器,但更常见的是一个卷积网络。

✅ 基于卷积网络的GAN被称为DCGAN

一个CNN判别器由以下层组成:几个卷积+池化层(空间尺寸逐渐减小),以及一个或多个全连接层以获得“特征向量”,最后是一个二分类器。

✅ “池化”是一种减少图像尺寸的技术。“池化层通过将一个层中神经元簇的输出合并为下一层中的单个神经元来减少数据的维度。” - 来源

生成器

生成器稍微复杂一些。可以将其视为一个反向的判别器。从一个潜在向量(代替特征向量)开始,它通过一个全连接层将其转换为所需的尺寸/形状,然后进行反卷积+上采样。这类似于自动编码器的解码器部分。

✅ 由于卷积层是通过线性滤波器遍历图像实现的,反卷积本质上与卷积类似,可以使用相同的层逻辑实现。

图片来源:Dmitry Soshnikov

GAN的训练

GAN被称为对抗性网络,因为生成器和判别器之间存在持续的竞争。在这种竞争中,生成器和判别器都会不断改进,从而使网络能够生成越来越好的图像。

训练分为两个阶段:

  • 训练判别器。这个任务相对简单:我们通过生成器生成一批图像,将其标记为0(代表虚假图像),然后从输入数据集中取一批图像(标记为1,真实图像)。我们计算出判别器的损失,并进行反向传播。
  • 训练生成器。这稍微复杂一些,因为我们无法直接知道生成器的期望输出。我们将整个GAN网络(由生成器和判别器组成)输入一些随机向量,并期望输出为1(对应真实图像)。然后我们冻结判别器的参数(此步骤不对判别器进行训练),并进行反向传播。

在这个过程中,生成器和判别器的损失不会显著下降。在理想情况下,它们应该呈现振荡状态,表明两个网络都在不断提高性能。

✍️ 练习:GANs

  • TensorFlow/Keras中的GAN笔记本
  • PyTorch中的GAN笔记本

GAN训练中的问题

GAN训练尤其困难,以下是一些常见问题:

  • 模式崩溃。指生成器学会生成一种成功欺骗判别器的图像,而不是生成多样化的图像。
  • 对超参数的敏感性。经常会发现GAN完全无法收敛,但突然降低学习率后可能会收敛。
  • 保持生成器和判别器之间的平衡。在许多情况下,判别器的损失可能会迅速降到零,导致生成器无法继续训练。为了解决这个问题,可以尝试为生成器和判别器设置不同的学习率,或者在判别器损失已经很低时跳过判别器的训练。
  • 高分辨率训练。与自动编码器类似的问题,重建卷积网络的过多层会导致伪影。通常通过所谓的渐进式增长来解决这一问题,先用低分辨率图像训练几层,然后逐步“解锁”或添加层。另一种解决方案是增加层之间的额外连接,同时训练多个分辨率——详情请参阅这篇多尺度梯度GAN论文。

风格迁移

GAN是生成艺术图像的绝佳工具。另一种有趣的技术是所谓的风格迁移,它将一个内容图像重新绘制为另一种风格,应用来自风格图像的滤镜。

其工作原理如下:

  • 我们从一个随机噪声图像开始(或者从内容图像开始,但为了便于理解,通常从随机噪声开始)。
  • 我们的目标是生成一个图像,使其同时接近内容图像和风格图像。这通过两个损失函数来确定:
    • 内容损失基于CNN在某些层从当前图像和内容图像中提取的特征计算。
    • 风格损失通过一种巧妙的方法使用Gram矩阵在当前图像和风格图像之间计算(更多细节请参阅示例笔记本)。
  • 为了使图像更平滑并去除噪声,我们还引入了变化损失,它计算相邻像素之间的平均距离。
  • 主要的优化循环通过梯度下降(或其他优化算法)调整当前图像,以最小化总损失,总损失是所有三种损失的加权和。

✍️ 示例:风格迁移

课后测验

总结

在本课中,您学习了GAN及其训练方法。您还了解了这种类型的神经网络可能面临的特殊挑战,以及一些解决这些问题的策略。

? 挑战

运行风格迁移笔记本,使用您自己的图像进行实验。

复习与自学

参考以下资源,了解更多关于GAN的信息:

  • Marco Pasini,我在训练GAN一年中学到的10个教训
  • StyleGAN,一个值得关注的GAN架构
  • 在Azure ML上使用GAN创建生成艺术

作业

重新访问本课相关的两个笔记本之一,并使用您自己的图像重新训练GAN。您能创造出什么?


← 上一课自动编码器下一课 →目标检测