GAN-overview reading note(1)基础概念
GAN万字长文综述原文链接
GAN基本概念
基本概念
GAN(Generative Adversarial Networks)
GAN(Generative Adversarial Networks)从其名字可以看出,是一种生成式的,对抗网络。再具体一点,就是通过对抗的方式,去学习数据分布的生成式模型。所谓的对抗,指的是生成网络和判别网络的互相对抗。生成网络尽可能生成逼真样本,判别网络则尽可能去判别该样本是真实样本,还是生成的假样本。示意图如下:
简单理解就是,在这个对抗模式下,当Generator产生的数据足以欺骗Discriminator的时候,Generator就是我们所期望得到的网络了。
对于判别器D来说,这是一个二分类问题,V(D,G)为二分类问题中常见的交叉熵损失。对于生成器G来说,为了尽可能欺骗D,所以需要最大化生成样本的判别概率D(G(z)),即最小化log(1-D(G(z))),log(D(x))一项与生成器G无关,可以忽略。
这段,简单理解:判别器判别为真即为1,判别为假即为0。其中,对实际数据判别概率判别器希望这个概率越大越好。对生成数据判别概率越小越好。
所以对判别器来说,上式有:
由于有了且有,也就是式子越大,证明判别器D效果越好。
而生成器G则希望这个式子的效果越差越好,也就是越小越好,但是它只能影响式子的后半部分,所以,最上边的公式就能看懂了。
这里有一个生成器和判别器的原理直观介绍。可以作为扩展学习,记录下来,有空再看。
实际训练时,生成器和判别器采取交替训练,即先训练D,然后训练G,不断往复。值得注意的是,对于生成器,其最小化的是maxV(D,G),即最小化D V(D,G)的最大值。为了保证V(D,G)取得最大值,所以我们通常会训练迭代k次判别器,然后再迭代1次生成器(不过在实践当中发现,k通常取1即可)。当生成器G固定时,我们可以对V(D,G)求导,求出最优判别器D*(x):
把最优判别器代入上述目标函数,可以进一步求出在最优判别器下,生成器的目标函数等价于优化pdata(x),po(x)的JS散度(JSD,Jenson Shannon Divergence)。
可以证明,当G,D二者的capacity足够时,模型会收敛,二者将达到纳什均衡。此时,pdata(x)=po(x),判别器不论是对于pdata(x)还是p。(x)中采样的样本,其预测概率均为,即生成样本与真实样本达到了难以区分的地步。
这段我没有理解好,只是直观的了解了生成器G的优化过程,可以等价于优化的JS散度,关于JS散度,我觉得这篇文章写得比较好。当然,为了看懂JS散度,可能还要看这篇文章解释什么是KL散度。知识就是这样,越学会的越少。
总结下来,要训练G,就是让两个分布越接近越好。
目标函数
f-divergence
上边提到了,用JS散度作为评价标准。由于JS散度不够完美,还存在一些问题,比如,当两个分布相关性比较低时,他的评价结果为常数,这对训练没有帮助,因为不知道该朝着那个方向进行改进。所以这里可以使用其他公式来实现两者距离的评价。
通式:
其中只需要保证是凸函数,且即可。
比较有名的就是LSGAN网络。明天介绍吧。