生成模型: GAN

155 阅读2分钟

很久之前了解的GAN和VAE,最近看到一篇文章,有了点新的理解,主要记录思想而非具体的做法。

一. GAN

GAN(generative adversarial nets), 模型有两个模块,一个是generator,一个是discriminator,伪造者和鉴别者,在玩一个min-max的游戏; 比较神奇的是,从一个噪音样本,GAN是如何产生一个正样本的呢?

 这个问题,其实类似于一道数学题目:
 有一个伪随机数产生程序,可以产生【0,1】之间的任意样本,

比较正常的做法是n个程序,每个产生n个随机数,那么这n个随机数的和近似于正态分布; 理论上要解决这个问题,xU[0,1], 需要得到YN(0,1),假设p(x) 是U的概率密度函数,那么可以推导得到 y = f(x),中f是一个及其复杂的函数; 既然如此复杂,是不是可以考虑用一个神经网络来学习这个映射?GAN中的generator就是这个作用;

如何判断概率的相似性,KL?JS?
  • 我们需要比较的是两个分布的接近程度,而不是样本之间的差异 这表示GAN的训练不可能是单个样本,必定是多个样本一起训练; KL的缺点是非对成性,因此用JS loss来替代KL;

  • 里程碑式的突破:距离由神经网络来输出

  • Lipschitz 约束D的输出 防止D的输出是一个很大的负数,以及缓解D对样本差异不应该影响整体分布差异问题

GAN的发展史

  • 原始GAN
  • WGAN 1。去D的sigmoid层,因为那一层可能会导致在软饱和区梯度无法回传问题; 2。G和D的loss不能取log; 3。Lipschitz 约束D的输出 4。更新,采用SGD或者是RMSprop方法。【实验驱动】
  • seqGAN 主要是解决两个问题: 1。 离散变量无法进行梯度回传问题 -》policy gradient 2。 D 只能处理完成序列问题 ---> 蒙特卡洛

开启掘金成长之旅!这是我参与 「掘金日新计划 · 2 月更文挑战」的第 24 天,点击查看活动详情