看了Ian大神的论文,学习一下GAN。
一、基本介绍
生成对抗网络由两部分组成:Generatative model 和 Discriminative model,以下分别简称为G 和 D。
在GAN中,训练集是无标签数据集data,G接受数据z,产生G(z),而D判定G产生的数据是来自于真实数据data还是由G产生的。在训练过程中,双方不断优化自己,直到D无法再区分真实数据和G产生的数据,这时,双方达到了那什均衡。可以说,G相当于造假方,而D相当于警察,GAN的训练过程就是双方进行博弈的过程。
下面给出GAN的minimax公式,其中D(x)代表x来自正式数据集的概率。
我们先来看优化D的部分。我们可以看到,当x来自真实数据集data时,D(x)应该越接近1越好,而当处理G产生的数据时,D(G(z))应该越接近0越好,所以式子中,log(D(x)),log(1-D(G(z)))应该越大越好。
再来看优化G的部分,这里只要看式子的第二项就可以了。G作为生成方,它所要做的就是迷惑D,让D将自己生成的数据误认为成来自真实数据集的数据,所以D(G(z))应该越接近1越好,即log(1-D(G(z)))应该越小越好。
此外,在优化G时,由于在学习初期,G的表现较差,D很容易区分出G产生的数据,即D(G(z))=0, 导致log(1-D(G(z)))可能会出现饱和的问题。在出现这种问题时,可以转而用最大化log(D(G(z)))来优化G。
论文中的这张图片比较直观地展示了整个过程。
图中黑线表示真实数据集data,绿线表示G生成的数据,蓝线表示D的判定。这里可以看到G生成的数据逐渐向真实数据data靠拢,直至D真假难分的过程。
二、算法
在训练过程中,先训练D,训练k次,再训练G,训练1次,如此循环。
三、数学推导
下面证明当D达到最优时
我们回到之前的公式,写出它的期望形式。
对于这个式子,可以通过对D(x)求导,令其导数等于0,从而命题得证。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:GAN学习笔记:生成对抗网络 - Python技术站