个人总结:Generative Adversarial Nets GAN原始公式的得来与推导

训练判别器,是在度量生成器分布和真实数据分布的JS距离。

第一种解释 2018.10.15

第一种解释略累赘,但容易理解,可选择跳过看第二种解释。

根据文章所述,x_{i} 为原始数据,z_{i} 使用的噪声数据,i\in [1, m],  m 为batch_size的大小。

而 G(z_{i}) 为通过生成器生成的数据,也就是说x_{i} 与G(z_{i})是能够互相对立的竞争对手。生成器生成了G(z_{i})妄图模拟到x_{i}的效果达到“欺骗”判别器的目的。


x_{i}\rightleftharpoons G(z_{i})   ............................(1)

对于判别器来说,其中D(x_{i})是判别器认定为真假的概率,在0到1之间,这个地方大家很容易理所当然,一定要记住记住记住,因为对于后续公式的理解很重要。它认为越“真”的数据,给出的概率就越接近1,所以对(1)式左边,它有两个目的 \max_D D(x_{i}) 以及 \min_DD(G(z_{i})),这很容易理解,判别器希望认定“真”的概率越大,接近1;“假”的概率越小,接近0。

对于(1)式右边,生成器的目的和判别器相悖,它希望\max_G D(G(z_{i})),也就是希望自己生成的数据越接近真实数据。


所以我们现在可以写成

D: 1.\max_D D(x_{i}) .....2.\min_D D(G(z_{i}))     .........................(2) //中间的点为空格,1和2为序号

G: \max_GD(G(z_{i}))      ...............................(3)

可以很明显地看到(2)的2与(3)相矛盾,对啊,这就是博弈的过程,minmax。


接下来,我们可以对(2)式的2,以及(3)进行等价调整,我们将min通过将1进行减法就得到等价变换

D: 1.\max_D D(x_{i}) .....2.\max_D 1 - D(G(z_{i}))     .........................(4)

G: \min_G 1 - D(G(z_{i}))      ...............................(5)

这样变换的原因原始论文中的表述是能够得到更加稳健的梯度。


接下来,我们将公式再进行升级,由于我们前面得到的所有都是概率,为方便后续求梯度,我们在所有公式前面加上Log

D: 1.\max_D log(D(x_{i})) .....2.\max_D log(1 - D(G(z_{i}))) .......................(6)

G: \min_G log(1 - D(G(z_{i})))...................(7)


好的,接下来我们可以将(6)式进行合并了,得到

D:\max_D log(D(x_{i}))+log(1 - D(G(z_{i})))   ........................(8)


公式推导到这里就差不多了,接下来就是交替训练的过程,论文中提示的是训练k次判别器,然后训练一次生成器。

我们将(7)(8)进行结合,就得到了更加接近论文原始公式的东西

\min_G\max_D log(D(x_{i}))+log(1 - D(G(z_{i})))..........................(9)

这里可能需要仔细看一下,因为已经变成了一个minmax公式了。公式的前半部分和后半部分是判别器用到的部分,而生成器只用到了后半部分。


好勒,现在还记得我之前提到的i\in [1, m],  m 为batch_size的大小吗。

我们将minibatch里面所有的数据相加,再对其取均值。这里我们使用(9)。

\min_G\max_D \frac{1}{m}\sum_{i=1}^{m} log(D(x_{i}))+log(1 - D(G(z_{i}))).....................(10)

咦,是不是有点眼熟呢?对啊,这样我们就求取了一个Minibatch的期望!


此时我们已经可以将(10)等价写成

\min_G\max_D E_{x\sim p_{data}} log(D(x))+E_{z\sim p_z(z))}log(1 - D(G(z)))........................(11)

是的,这就是论文中的原始公式了,要注意 x_{i} 和 z_{i} 已经变成了 {\color{Magenta} }x 和 z 哦,代表的是一个minibatch。


好的,接下来,我们使用(10)中只涉及到判别器的部分,也就是

\max_D \frac{1}{m}\sum_{i=1}^{m} log(D(x_{i}))+log(1 - D(G(z_{i}))).......................(12)

我们想使判别器得到“满足”,也就是\max_D,通过这样来更新判别器的参数,我们就需要求(12)的梯度。

\bigtriangledown_{\theta_d} \frac{1}{m}\sum_{i=1}^{m} log(D(x_{i}))+log(1 - D(G(z_{i}))).........................(13)

对啦,这就是论文中的那个求判别器梯度的公式了。


同理,我们使用(10)中只涉及到生成器的部分,也就是

\min_G \frac{1}{m}\sum_{i=1}^{m} log(1 - D(G(z_{i})))............................(14)

然后也是同样的

\bigtriangledown_{\theta_g} \frac{1}{m}\sum_{i=1}^{m}log(1 - D(G(z_{i}))).................................(15)

这样就得到论文中求生成器的梯度的公式啦。

我们将得到的生成器和判别器的梯度用于随机梯度下降法(当然也有其他种优化方法),我们就可以更新它们的参数,使我们的矛更加锋利,我们的盾更加坚固,以己之矛,攻己之盾,在不断的交替更新下,我们的生成器和判别器得到了不断的改良和优化。最终,我们能得到“近似”真实数据分布的“假数据”。这就是GAN的思想啦。

PS:如果有说的不对的地方,欢迎各路大神指正。感谢观看!


第二种解释 2019.6.19

这一种解释基于交叉熵。对于二分类来说,交叉熵的公式是

L = -[ylogP(y)) + (1-y)log(1-P(y))], y\in \left \{ 0,1 \right \}

对于判别器来说,输入的真实图像x,判定为真实图像的概率D(x),对应的y为1,这时的判别器对于x的交叉熵为

L = -logD(x)

è¿éåå¾çæè¿°

判别器希望概率越大越好,于是损失越小:\underset{D}{min}\, -logD(x).

对于所有真实图像的损失期望为\underset{D}{min}\, E_{x\sim p_{data}} -log(D(x))

输入生成器生成的图像G(z),判别器对于G(z)的交叉熵损失为

L = -[0*logD(G(z)))) + (1-0)log(1-D(G(z))] = -log(1-D(G(z))

è¿éåå¾çæè¿°

判别器希望认为是真实图像的概率越小越好,于是损失越小:\underset{D}{min}\, -log(1 - D(G(z)))

对于所有噪声的损失期望为\underset{D}{min}\, E_{z\sim p_{z}(z)} -log(1 - D(G(z)))

将两个式子整合到一起就是\underset{D}{max}\, E_{x\sim p_{data}}log(D(x))+E_{z\sim p_{z}(z)}log(1 - D(G(z)))

这就是关于判别器的损失。

对于生成器,它希望D(G(z))能越大越好,于是通过判别器对于G(z)的交叉熵

L = -[0*logD(G(z)))) + (1-0)log(1-D(G(z))] = -log(1-D(G(z))

可以由上图得知该损失越大,于是便是

\underset{G}{max}\, E_{z\sim p_{z}(z)} -log(1 - D(G(z)))\underset{G}{min}\, E_{z\sim p_{z}(z)} log(1 - D(G(z)))

与生成器与之前判别器的损失整合一下:

\underset{G}{min}\underset{D}{max}\, E_{x\sim p_{data}}log(D(x))+E_{z\sim p_{z}(z)}log(1 - D(G(z)))

就得到了GAN的损失函数。

实际训练

在实际训练中,早期阶段生成器G很差,生成的模拟样本容易被判别器D识别,使得D回传给G的梯度极其小,达不到训练目的。解决方案是将\underset{G}{min}\, E_{z\sim p_{z}(z)} log(1 - D(G(z)))换为\underset{G}{max}\, E_{z\sim p_{z}(z)} log(D(G(z))),这样使得即使D(G(z))趋于0,\bigtriangledown D(G(z))也不会消失,仍然能够给生成器提供有效的梯度。

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值