Generative Adversarial Nets

/ by GuoWY / 论文来源: https://arxiv.org/pdf/1406.2661v1.pdf

总 结

  • GANs,就是一个最大最小化的零和博弈游戏

      GANs的架构,其实就是一个博弈游戏,论文当中给出了一个比较好的类比:生成网络 G 好比假币制造团伙,专门制造假币,判别网络 D 好比警察,专门检测使用的货币是真币还是假币,G 的目标是想方设法生成和真币一样的货币,使得 D 判别不出来,D 的目标是想方设法检测出来 G 生成的假币。二者在一个对抗网络当中不断训练,得到增强,最终达到纳什均衡。训练完成的生成器可以被当作生成模型单独使用。

      上述的这一架构可以浓缩为一个数学表达式,其实整篇论文想表达的也就是这个数学表达式:

      我们来理解一下这个目标公式,先优化D,再优化G,拆解之后即为如下两步:

      

      第一步:优化D

      优化D,即优化判别网络时,没有生成网络什么事,后面的G(z)就相当于已经得到的假样本。优化D的公式的第一项,使得真样本x输入的时候,得到的结果越大越好,因为真样本的预测结果越接近1越好;对于假样本G(z),需要优化的是其结果越小越好,也就是D(G(z))越小越好,因为它的标签为0。但是第一项越大,第二项越小,就矛盾了,所以把第二项改为1-D(G(z)),这样就是越大越好。

      

      第二步:优化G

      在优化G的时候,这个时候没有真样本什么事,所以把第一项直接去掉,这时候只有假样本,但是这个时候希望假样本的标签是1,所以是D(G(z))越大越好,但是为了统一成1-D(G(z))的形式,那么只能是最小化1-D(G(z)),本质上没有区别,只是为了形式的统一。之后这两个优化模型可以合并起来写,就变成最开始的最大最小目标函数了。

      下面要考虑的是如何把上述表达式放入神经网络中去训练呢?不妨看一下下面这张图:

      这是GANs网络模型的架构图。正向传播的过程非常直观,生成器生成的fake image,与真实图片real image一并传给判别器,让判别器给出判别结果。关键在于反向传播的过程,也就是生成器和判别器的损失函数的定义,其实由上述的数学表达式可以直接得到(求MAX在损失函数中直接取负即可):

      判别器的损失函数:

      生成器的损失函数:

      上述便是生成对抗网络的基本原理介绍。

      事实上GANs模型被应用的范围是非常广泛的,与GANs相关的衍伸模型至少有上百种,感兴趣的读者可以去 https://deephunt.in/the-gan-zoo-79597dc8c347 了解一下。虽然我对于GANs的应用已经有一些了解,譬如模糊还原项目就是用WGANs做的,不过下一步还是打算去收集一些GANs大家族中较经典的模型研究一下,并写一篇比较详细的笔记,这应该会有助于我对GANs模型的更进一步理解。

评 论