这里回顾dlsys第十六讲,本讲内容是GAN。

课程主页:

大纲

  • 生成对抗训练;
  • 对抗训练作为深度学习模型中的一个模块;

生成对抗训练

从分类器到生成器

分类器目标:预测的类别接近标签。

生成器目标:使生成样本的分布“接近”目标数据分布。

定义分布的“距离”

  • 与监督分类设置不同,“目标”不太明显;
  • 为了建立有效的训练机制,我们需要在生成的数据集和真实的数据集之间定义一个“距离”,并用它来驱动训练;
  • 我们真正想要的是:确保生成的样本“看起来真实”;

通过oracle判别器学习生成器

假设我们有一个oracle判别,可以区分真实数据和虚假数据。然后我们需要训练生成器来“愚弄”oracle判别器。我们需要最大化判别器损失:

学习判别器

我们没有oracle判别器,但我们可以使用真实数据和生成的假数据来学习它:

GAN

将之前的内容小结,就变成了$D$和$G$之间的“minimax”博弈:

在实际中,我们通常使用下式优化$G$,即最大化判别器预测生成的图像是真实的概率:

GAN训练小结

  • 循环
  • 判别器更新
    • 采样minibatch的$D(G(z))$,得到minibatch的$D(x)$;
    • 更新$D$,用来$\min _D\left\{-E_{x \sim D a t a} \log D(x)-E_{z \sim N o i s e} \log (1-D(G(z))\}\right.$;
  • 生成器更新
    • 采样minibatch的$D(G(z))$;
    • 更新$G$,用来$\min _G\left\{-\mathrm{E}_{z \sim { Noise }} \log (D(G(z))\}\right.$,这可以通过给模型输入标签$1$来实现;

对抗训练作为深度学习模型中的一个模块

使用GAN作为组合模块

GAN并不完全像损失函数,因为它涉及迭代更新方法。但是我们可以用类似损失函数的方式将它与其他神经网络模块组合起来。每当我们希望数据集合“看起来像”另一个集合时,请使用GAN“损失”:

DCGAN: Deep convolutional generative adversarial networks

CycleGAN:图像到图像的翻译

使用未配对的图像进行图像翻译:

结构

CycleGAN的目标是学习两个不成对的数据集合之间的双向翻译器:

现在有两个生成器,分别是$X\to Y$和$Y\to X$:

循环一致性:正向映射和反向映射应该映射回原始图像:

结果