说明:论文原文Generative Adversarial Nets (nips.cc),文中图片均来自该论文。
提出了一种框架(GAN),该框架通过对抗过程来评估生成模型。
框架中有两个模型:生成模型 G G G和辨别模型 D D D, G G G用来提取数据的分布从而生成人造数据, D D D用来评估样本来自训练数据集的可能性(即样本是真实的可能性)。 G G G的目标是让 D D D尽可能犯错误(类似于博弈游戏)。在最优情况下, G G G完全吻合原始数据的特性,此时 D D D输出的概率全部是 50 50% 50。该框架不需要任何的马尔可夫链(条件概率相互依赖)。
基于反向传播的识别算法已经取得了巨大的成功。而深度生成模型因为种种原因并没有取得很好的进展。作者提出了一种能够跨过现有困难的框架的生成模型评估方法——对抗网络(adversarial nets)。
作者举了一个例子:将生成模型 G G G比作是一个假币制造者,而把辨别模型 D D D比做一个警察。 G G G需要尽可能制造难以辨别的假币, D D D需要尽可能的识别假币。两者之间的竞争关系使得 G G G的“造假”水平和 D D D的辨别能力都能得到提升,在最终情况会期望达到一种平衡(博弈论中叫做纳什均衡,但这里的平衡似乎并那么那是平衡:警察最终无法辨别,而Faker却获得成功)。
G G G和 D D D最简单的情况下都是是MLP(多层感知机),文中的 G G G将的输入初始是一个随机的高斯分布,通过训练让 G G G(通过调整MLP的参数)能使输出数据尽可能的接近真实数据。过程中使用了反向传播和dropout。
其他工作中大多数都是基于最大似然估计进行推理。
而生成随机网络(不需要马尔科夫链)可以生成想要的样本。
作者指出自己的工作与VAEs(variational autoencoders)有一定的相似之处,但是不完全相同。
NCE(Noise-contrastive estimation)也训练识别模型,但是识别模型由噪声分布和模型分布的概率密度的比率来定义(这样定义需要能够同时对两个模型进行评估和反向传播)。
predictability minimization中也有两个网络,但是不同于GAN,第一个网络中的隐藏单元会尽可能的输出与另一个网络不同的输出,而另一个网络的隐藏层会尽可能地输出与第一个网络相同的输出。
以标量为例,来说明两个网络需要做的事情,首先我们需要定义一些符号:
正如前面介绍的,两个网络有着各自的目标:
对于 D D D和 G G G的目标可以用一个方程来表示:
m i n G m a x D V ( D , G ) = E [ l o g D ( x ) ] + E [ l o g ( 1 − D ( G ( z ) ) ) ] ( 1 ) \underset {G}{min}\ \underset {D}{max}V(D,G) = E[logD(x)]+E[log(1-D(G(z)))] \quad (1) Gmin DmaxV(D,G)=E[logD(x)]+E[log(1−D(G(z)))](1)
上述公式需要拆开来看:
实际的训练:
Figure 1是Algorithm 1的一个简单情况的可视化:
存在全局的最优解 p g = p d a t a p_g = p_{data} pg=pdata,下面进行详细的说明。
Proposition 1:当 G G G固定时,对于 D D D存在最优解:
D G ∗ ( x ) = p d a t a ( x ) p d a t a ( x ) + p g ( x ) ( 2 ) D^*_G(x) = \frac {p_{data}(x)} {p_{data}(x) + p_g(x)} \quad(2) DG∗(x)=pdata(x)+pg(x)pdata(x)(2)
上面的公式很好理解,下面进行证明:
最优解就是让 V ( G , D ) V(G,D) V(G,D)最大的点,而:
V ( G , D ) = ∫ x p d a t a ( x ) l o g ( D ( x ) ) d x + ∫ z p z ( z ) l o g ( 1 − D ( G ( z ) ) ) d z = ∫ x p d a t a ( x ) l o g ( D ( x ) ) + p g ( x ) l o g ( 1 − D ( x ) ) d x ( 将 z 看成 x 的函数 z ( x ) ) ( 3 ) \begin{align*} V(G,D)&= \int_x p_{data}(x)log(D(x))dx + \int_zp_z(z)log(1-D(G(z)))dz \\ &= \int_x p_{data}(x)log(D(x))+p_g(x)log(1-D(x))dx(将z看成x的函数z(x)) \quad (3) \end{align*} V(G,D)=∫xpdata(x)log(D(x))dx+∫zpz(z)log(1−D(G(z)))dz=∫xpdata(x)log(D(x))+pg(x)log(1−D(x))dx(将z看成x的函数z(x))(3)
而 p d a t a ( x ) l o g ( D ( x ) ) + p g ( x ) l o g ( 1 − D ( x ) ) p_{data}(x)log(D(x))+p_g(x)log(1-D(x)) pdata(x)log(D(x))+pg(x)log(1−D(x))的最大值在 D ( x ) = p d a t a ( x ) p d a t a ( x ) + p g ( x ) D(x)=\frac {p_{data}(x)} {p_{data}(x) + p_g(x)} D(x)=pdata(x)+pg(x)pdata(x)处取得(因为 a l o g ( y ) + b l o g ( 1 − y ) alog(y) +blog(1-y) alog(y)+blog(1−y)的最大值在 y = a a + b y=\frac a {a + b} y=a+ba处取得,其中 0 ≤ y ≤ 1 , a + b ≠ 0 , a ≥ 0 , b ≥ 0 0\le y\le 1, a+b \ne 0, a\ge 0, b \ge 0 0≤y≤1,a+b=0,a≥0,b≥0)。
将(2)带入(1)中我们可以得到:
C ( G ) = m D a x V ( G , D ) = E p d a t a [ l o g p d a t a ( x ) p d a t a ( x ) + p g ( x ) ] + E p g [ p g ( x ) p d a t a ( x ) + p g ( x ) ] ( 4 ) \begin{align*} C(G) &= \underset D max V(G, D)\\ &= E_{p_{data}}[log\frac {p_{data}(x)} {p_{data}(x) + p_g(x)}]+E_{p_g}[\frac {p_{g}(x)} {p_{data}(x) + p_g(x)}] \quad (4) \end{align*} C(G)=DmaxV(G,D)=Epdata[logpdata(x)+pg(x)pdata(x)]+Epg[pdata(x)+pg(x)pg(x)](4)
Theorem 1:当且仅当 p g = p d a t a p_g = p_{data} pg=pdata时 C ( G ) C(G) C(G)取最小值 − l o g 4 -log4 −log4,即 G G G此时达到最优。
证明需要用到一些统计的知识:K-L散度和J-S散度
C ( G ) = − l o g 4 + E ( l o g 2 ) + E p d a t a [ l o g p d a t a ( x ) p d a t a ( x ) + p g ( x ) ] + E ( l o g 2 ) + E p g [ p g ( x ) p d a t a ( x ) + p g ( x ) ] = − l o g 4 + K L D ( p d a t a ∣ ∣ p d a t a + p g 2 ) + K L D ( p g ∣ ∣ p d a t a + p g 2 ) = − l o g 4 + 2 J S D ( p d a t a ∣ ∣ p g ) \begin{align*} C(G) &= -log4 + E(log2) + E_{p_{data}}[log\frac {p_{data}(x)} {p_{data}(x) + p_g(x)}]+E(log2)+E_{p_g}[\frac {p_{g}(x)} {p_{data}(x) + p_g(x)}]\\ &=-log4 + KLD(p_{data}||\frac {p_{data}+p_g} {2}) + KLD(p_{g}||\frac {p_{data}+p_g} {2})\\ &=-log4 + 2JSD(p_{data}||p_g) \end{align*} C(G)=−log4+E(log2)+Epdata[logpdata(x)+pg(x)pdata(x)]+E(log2)+Epg[pdata(x)+pg(x)pg(x)]=−log4+KLD(pdata∣∣2pdata+pg)+KLD(pg∣∣2pdata+pg)=−log4+2JSD(pdata∣∣pg)
J-S散度是一个非负数,当且仅当 p d a t a = p g p_{data}=p_g pdata=pg时取 0 0 0所以上式的最小值位 − l o g 4 -log4 −log4(G的目标是取最小值)。
注:
K L D 的定义: K L D ( p ∣ ∣ q ) = E p ( l o g p q ) = ∫ p ( x ) ( l o g p ( x ) − l o g q ( x ) ) d x K L D 性质:( 1 )非负;( 2 )非对称性: K L D ( p ∣ ∣ q ) ≠ K L D ( q ∣ ∣ p ) J S D 的定义: J S D ( p ∣ ∣ q ) = 1 2 ( K L D ( p ∣ ∣ m ) + K L D ( q ∣ ∣ m ) ) 其中 m = p + q 2 J S D 性质:( 1 )非负;( 2 )对称性 \begin{align*} &KLD的定义:KLD(p||q)=E_p(log\frac p q)=\int p(x)(logp(x)-logq(x))dx\\ &KLD性质:(1)非负;(2)非对称性: KLD(p||q)\ne KLD(q||p)\\ &JSD的定义:JSD(p||q)=\frac 1 2(KLD(p||m)+KLD(q||m)) \quad 其中m=\frac{p+q} 2\\ &JSD性质:(1)非负;(2)对称性 \end{align*} KLD的定义:KLD(p∣∣q)=Ep(logqp)=∫p(x)(logp(x)−logq(x))dxKLD性质:(1)非负;(2)非对称性:KLD(p∣∣q)=KLD(q∣∣p)JSD的定义:JSD(p∣∣q)=21(KLD(p∣∣m)+KLD(q∣∣m))其中m=2p+qJSD性质:(1)非负;(2)对称性
Proposition 2:在算法1的过程中只要 D D D在过程能够到达最优解,那么 p g p_g pg会收敛于 p d a t a p_{data} pdata,证明略。
即使在实际的训练中我们并没有更新 p g p_g pg而是更新MLP的参数,但是这同样可以获得不错的表现。
在MNIST,TFD,CIFAR-10上做了实验。实验结果如Table 1所示(表格中的数字越大,效果越好):
Figure 2展示了生成的图片(最右边应该是真实数据)。
Figure 3表示:两张图的的最左边和最右边的数字时真实的,中间的数字是通过线性插值生成的。
缺点:
优点:
Table 2是一份详细的总结,第一行是模型名称,第一列是方面。
可以增加的拓展: