很久之前了解的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 天,点击查看活动详情