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

根据文章所述,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:如果有说的不对的地方,欢迎各路大神指正。感谢观看!

猜你喜欢

转载自blog.csdn.net/yyhhlancelot/article/details/83058715