GAN-overview reading note(1)基础概念

文章目录

  • GAN基本概念
    • 基本概念
    • 目标函数
      • f-divergence
  • 2019.4.9 ——子涣

GAN万字长文综述原文链接

GAN基本概念

基本概念

GAN(Generative Adversarial Networks)

GAN(Generative Adversarial Networks)从其名字可以看出,是一种生成式的,对抗网络。再具体一点,就是通过对抗的方式,去学习数据分布的生成式模型。所谓的对抗,指的是生成网络和判别网络的互相对抗。生成网络尽可能生成逼真样本,判别网络则尽可能去判别该样本是真实样本,还是生成的假样本。示意图如下:

GAN-overview reading note(1)基础概念_第1张图片简单理解就是,在这个对抗模式下,当Generator产生的数据足以欺骗Discriminator的时候,Generator就是我们所期望得到的网络了。
在这里插入图片描述

对于判别器D来说,这是一个二分类问题,V(D,G)为二分类问题中常见的交叉熵损失。对于生成器G来说,为了尽可能欺骗D,所以需要最大化生成样本的判别概率D(G(z)),即最小化log(1-D(G(z))),log(D(x))一项与生成器G无关,可以忽略。

这段,简单理解:判别器判别为真即为1,判别为假即为0。其中,对实际数据判别概率 D ( x ) D(x) D(x)判别器希望这个概率越大越好。对生成数据判别概率 D ( G ( x ) ) D(G(x)) D(G(x))越小越好。
所以对判别器来说,上式有:
max ⁡ D V ( D ) = E x [ log ⁡ ( D ( x ) ) ] + E z [ log ⁡ ( 1 − D ( G ( z ) ) ) ] \max_D V(D)=E_x[\log (D(x))]+E_z[\log (1-D(G(z)))] DmaxV(D)=Ex[log(D(x))]+Ez[log(1D(G(z)))]
由于有了 log ⁡ \log log且有 1 − D ( G ( z ) ) 1-D(G(z)) 1D(G(z)),也就是式子越大,证明判别器D效果越好。
而生成器G则希望这个式子的效果越差越好,也就是越小越好,但是它只能影响式子的后半部分,所以,最上边的公式就能看懂了。
这里有一个生成器和判别器的原理直观介绍。可以作为扩展学习,记录下来,有空再看。

实际训练时,生成器和判别器采取交替训练,即先训练D,然后训练G,不断往复。值得注意的是,对于生成器,其最小化的是maxV(D,G),即最小化D V(D,G)的最大值。为了保证V(D,G)取得最大值,所以我们通常会训练迭代k次判别器,然后再迭代1次生成器(不过在实践当中发现,k通常取1即可)。当生成器G固定时,我们可以对V(D,G)求导,求出最优判别器D*(x):

D ∗ ( x ) = p g ( x ) p g ( x ) + p d a t a ( x ) D^*(x)=\frac{p_g(x)}{p_g(x)+p_{data}(x)} D(x)=pg(x)+pdata(x)pg(x)

把最优判别器代入上述目标函数,可以进一步求出在最优判别器下,生成器的目标函数等价于优化pdata(x),po(x)的JS散度(JSD,Jenson Shannon Divergence)。
可以证明,当G,D二者的capacity足够时,模型会收敛,二者将达到纳什均衡。此时,pdata(x)=po(x),判别器不论是对于pdata(x)还是p。(x)中采样的样本,其预测概率均为,即生成样本与真实样本达到了难以区分的地步。

这段我没有理解好,只是直观的了解了生成器G的优化过程,可以等价于优化 p d a t a ( x ) 和 p g ( x ) p_{data}(x)和p_g(x) pdata(x)pg(x)的JS散度,关于JS散度,我觉得这篇文章写得比较好。当然,为了看懂JS散度,可能还要看这篇文章解释什么是KL散度。知识就是这样,越学会的越少。
总结下来,要训练G,就是让两个分布越接近越好。

目标函数

f-divergence

上边提到了,用JS散度作为评价标准。由于JS散度不够完美,还存在一些问题,比如,当两个分布相关性比较低时,他的评价结果为常数,这对训练没有帮助,因为不知道该朝着那个方向进行改进。所以这里可以使用其他公式来实现两者距离的评价。
通式:
D f ( p d a t a ∣ ∣ p g ) = ∫ x p g ( x ) f ( p d a t a ( x ) p g ( x ) ) d x D_f(p_{data}||p_g)=\int_xp_g(x)f(\frac{p_{data}(x)}{p_g(x)})dx Df(pdatapg)=xpg(x)f(pg(x)pdata(x))dx
其中只需要保证 f f f是凸函数,且 f ( 1 ) = 0 f(1)=0 f(1)=0即可。
GAN-overview reading note(1)基础概念_第2张图片

比较有名的就是LSGAN网络。明天介绍吧。

思考: 这里有个想法,如果D不只是告诉G,此次判断的真假(0/1)结果,而是告诉G判断概率,是不是可以有效帮助G提高迭代效率呢?毕竟,如果只是告诉G是1的情况,G不知道这个图是99%像真的,还是51%像真的。这样51%像的结果可能就不会提供比较高的迭代驱动能力了。

2019.4.9 ——子涣

你可能感兴趣的:(deep,learning)