GAN,生成对抗网络,由Goodfellow提出,是一种模拟生成器,可以用来模拟某种数据的分布。GAN是一种非常棒的思想,借鉴了博弈论的内容,生成两个多层感知器G和D。其中,生成器G用来捕获已知数据的分布,判别器D用来判断一个数据是真实的数据还是G生成的数据。
那么,如何训练呢?就是让这两个感知器去玩一个对抗游戏,对于D来说,就是要尽可能的判断正确,而对于G来说,就是要增加D犯错误的可能性(也就是G生成的数据要尽可能的像真的,才能骗过D)。
这实际上是一个最大最小游戏(minmax),而且对于数据空间中的任意的G和D来说,存在着全局最优解(作者在论文中进行了证明)。如果计算能力足够,最终G能够完美模拟真实数据(即: pg 会收敛到 pdata),而D对于任意一个数据的判断结果都为1/2。
理论证明
我们上面说到,GAN实际上是一个two-player minimax game,用公式表示的话,可以表示成如下形式:
上述公式存在全局最优解:pg = pdata。作者对这个结论进行了证明,证明过程分为两个部分,首先看第一部分(最大部分):
1、首先,将V(G,D)展开:
2、对于一个给定的G,当V(G,D)取得最大值:max V(G,D)时,D(X)的取值为:
3、将上述得到的max V(G,D)定义为C(G),即:
接下来看第二部分(即,最小部分):
算法流程
作者在证明了GAN的理论可行性之后,给出了具体的算法流程,如下:
算法流程证明
为了说明上述的算法是可收敛的,作者进行了理论上的证明,具体如下:
另外,作者还在论文中给出了一个GAN的训练示意图,可以清楚的看到整个训练的过程:
论文中有段话说的挺好,虽然感觉有点啰嗦,但是觉得可以帮助理解GAN:
翻译一下:在实际使用过程中,我们通过生成网络G(z;)来生成我们需要的数据分布pg(也即是:模拟的真实数据分布pdata)。那么在生成pg的过程中,我们实际上没有直接去优化pg,而是优化的网络G中的参数(也即是:网络中的权重和偏置)。虽然使用多层感知器G会在参数空间中引入一些critical points。但是,多层感知器在实践中的优异性能表明它们是非常有效的model,即使它们缺乏一些理论上的支持(这个也是深度学习被很多人反对和诟病的地方)。
网友评论