Generative Adversarial Nets

Summary

作者提出了一个生成式模型,采用多层感知机实现。将生成式模型与判别式模型共同训练,两者扮演零和博弈游戏的两个玩家。对于生成器Generator,需要生成足以骗过判别器的图形,对于判别器Discriminator,需要识别输入是来自真实数据还是生成数据。随着生成器G的训练,判别器的输出将稳定在$ \frac{1} {2} $ 。

Research Objective

设计一种生成式模型,生成足以媲美真实数据的模拟数据。

Problem Statement

  • 价值函数如何定义
  • 如何训练保证生成器与判别器都能够得到优化
  • 最优解以及可收敛证明

Method(s)

  • 价值函数:
    m i n G m a x D V ( D , G ) = E x ∼ p d a t a ( x ) [ l o g D ( x ) ] + E z ∼ p z ( z ) [ l o g ( 1 − D ( G ( z ) ) ) ] min_{G}max_{D}V(D,G)=E_{x \sim p_{data}(x)}[logD(x)]+E_{z \sim p_{z}(z)}[log(1-D(G(z)))] minGmaxDV(D,G)=Expdata(x)[logD(x)]+Ezpz(z)[log(1D(G(z)))]

    p d a t a ( x ) , p z ( z ) p_{data}(x),p_{z}(z) pdata(x),pz(z)分别表示真实数据分布与随机噪声分布;D(x)为判别器输出,输出为[0-1]的概率值;G(z)为生成器输出,输出为生成模拟数据;对于判别器、生成器,需要使得价值函数朝向不同的方向变化。

  • 训练方法:
    笔记:Generative Adversarial Nets

    生成器的输入数据 { z 1 , . . . , z m } \{z^{1},...,z^{m}\} {z1,...,zm}来源于噪声 p g ( z ) p_g(z) pg(z),真实数据 { x 1 , . . . , x m } \{x^{1},...,x^{m}\} {x1,...,xm} p d a t a ( x ) p_{data}(x) pdata(x)中抽样所得。
    训练时,由于需要将两个模型同步训练,故采用的训练方法为先保持生成器不变,沿着红框式子梯度上升的方向优化判别器D,训练k步后(论文中k=1),再根据式2(蓝框)沿着梯度下降的方向优化生成器G。
    这两个优化函数都是价值函数的变形,沿着红框函数梯度上升方向优化很好理解,因为要增强判别器的识别能力,沿着蓝框下降的方向训练生成器,是要提高生成器对判别器的误导能力。

  • 判别器的全局最优解
    判别器的优化方向是将价值函数最大化,对于
    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 将 第 二 个 积 分 中 g ( z ) 改 写 成 x 噪 声 分 布 p z ( z ) 改 写 为 生 成 器 输 出 分 布 p g ( x ) 积 分 对 象 改 为 x , 则 有 V ( G , D ) = ∫ x p d a t a ( x ) l o g ( D ( x ) ) d x + p g ( x ) l o g ( 1 − D ( x ) ) d x 又 对 于 任 意 ( a , b ) ∈ R \ ( 0 , 0 ) 函 数 y → a l o g ( y ) + b l o g ( 1 − y ) 在 [ 0 , 1 ] 区 间 内 取 得 最 大 值 时 y = a a + b , 则 D ( G ) 的 全 局 最 优 解 为 D G ∗ ( x ) = p d a t a ( x ) p d a t a ( x ) + p g ( x ) V(G,D)=\int_{x}p_{data}(x)log(D(x))d_{x}+\int_zp_{z}(z)log(1-D(g(z)))dz \\ 将第二个积分中g(z)改写成x\\ 噪声分布p_z(z)改写为生成器输出分布p_g(x)\\ 积分对象改为x,则有 \\ V(G,D)=\int_{x}p_{data}(x)log(D(x))d_{x}+p_{g}(x)log(1-D(x))dx \\ 又对于任意(a,b)\in R\backslash(0,0)\\ 函数y\rightarrow alog(y)+blog(1-y)在[0,1]区间内取得最大值时\\ y=\frac{a}{a+b},则D(G)的全局最优解为 \\ D^*_G(x)=\frac{p_{data}(x)}{p_{data}(x)+p_g(x)}\\ V(G,D)=xpdata(x)log(D(x))dx+zpz(z)log(1D(g(z)))dzg(z)xpz(z)pg(x)xV(G,D)=xpdata(x)log(D(x))dx+pg(x)log(1D(x))dx(a,b)R\(0,0)yalog(y)+blog(1y)[0,1]y=a+baD(G)DG(x)=pdata(x)+pg(x)pdata(x)

  • 生成器的全局最优解

    作者给出,生成器的最优解为 p d a t a = p g p_{data}=p_g pdata=pg,证明过程如下:
    首先假设判别器已经达到最优解 D G ∗ ( x ) D^*_G(x) DG(x),此时价值函数可改写为:
    C ( G ) = m a x D V ( G , D ) = E x ∼ p d a t a [ l o g D G ∗ ( x ) ] + E z ∼ p z [ 1 − l o g D G ∗ ( G ( z ) ) ] G ( z ) 改 写 为 x , 则 有 : = E x ∼ p d a t a [ l o g D G ∗ ( x ) ] + E x ∼ p g [ 1 − l o g D G ∗ ( x ) ] 带 入 D G ∗ ( x ) , 则 有 : = E x ∼ p d a t a [ l o g p d a t a ( x ) p d a t a ( x ) + p g ( x ) ] + E x ∼ p g [ l o g p g ( x ) p d a t a ( x ) + p g ( x ) ] 当 p d a t a = p g , 则 有 : = E x ∼ p d a t a [ − l o g 2 ] + E x ∼ p g [ − l o g 2 ] = − l o g 4 C(G)=max_DV(G,D) \\ =E_{x\sim p_{data}}[logD^*_G(x)]+E_{z\sim p_{z}}[1-logD^*_G(G(z))]\\ G(z)改写为x,则有: =E_{x\sim p_{data}}[logD^*_G(x)]+E_{x\sim p_{g}}[1-logD^*_G(x)]\\ 带入D^*_G(x),则有: =E_{x\sim p_{data}}[log\frac{p_{data}(x)}{p_{data}(x)+p_g(x)}]+E_{x\sim p_{g}}[log\frac{p_{g}(x)}{p_{data}(x)+p_g(x)}]\\ 当p_{data}=p_g,则有: =E_{x\sim p_{data}}[-log2]+E_{x\sim p_{g}}[-log2] \\ =-log4 \\ C(G)=maxDV(G,D)=Expdata[logDG(x)]+Ezpz[1logDG(G(z))]G(z)x=Expdata[logDG(x)]+Expg[1logDG(x)]DG(x)=Expdata[logpdata(x)+pg(x)pdata(x)]+Expg[logpdata(x)+pg(x)pg(x)]pdata=pg=Expdata[log2]+Expg[log2]=log4
    因为生成器的目的在于使得价值函数值减小,所以接下来只要证明-log4是C(G)的最小值,即可说明 p d a t a = p g p_{data}=p_g pdata=pg是生成器的最优解。证明的过程即在C(G)的基础上,加减log(4),具体如下:
    C ( G ) = E x ∼ p d a t a [ l o g p d a t a ( x ) p d a t a ( x ) + p g ( x ) ] + E x ∼ p g [ l o g p g ( x ) p d a t a ( x ) + p g ( x ) ] − l o g 4 + l o g 4 = − l o g 4 + ∑ p d a t a ( x ) l o g p d a t a ( x ) p d a t a ( x ) + p g ( x ) + l o g 2 + ∑ p g ( x ) l o g p g ( x ) p d a t a ( x ) + p g ( x ) + l o g 2 = − l o g 4 + ∑ p d a t a ( x ) l o g p d a t a ( x ) p d a t a ( x ) + p g ( x ) 2 + ∑ p g ( x ) l o g p g ( x ) p d a t a ( x ) + p g ( x ) 2 第 二 项 与 第 三 项 为 K L 散 度 公 式 , 则 有 = − l o g 4 + K L ( p d a t a ∣ ∣ p d a t a + p g 2 ) + K L ( p g ∣ ∣ p d a t a + p g 2 ) 后 两 项 的 和 就 是 J S 散 度 = − l o g 4 + 2 J S D ( p d a t a ∣ ∣ p g ) J S 散 度 取 值 范 围 为 [ 0 , 1 ] , 故 C ( G ) m i n = − l o g 4 , 此 时 p d a t a = p g C(G)=E_{x\sim p_{data}}[log\frac{p_{data}(x)}{p_{data}(x)+p_g(x)}]+E_{x\sim p_{g}}[log\frac{p_{g}(x)}{p_{data}(x)+p_g(x)}]-log4+log4 \\ =-log4+\sum p_{data}(x)log\frac{p_{data}(x)}{p_{data}(x)+p_g(x)}+log2+\sum p_g(x)log\frac{p_{g}(x)}{p_{data}(x)+p_g(x)}+log2 \\ =-log4+\sum p_{data}(x)log\frac{p_{data}(x)}{\frac{p_{data}(x)+p_g(x)}{2}}+\sum p_g(x)log\frac{p_{g}(x)}{\frac{p_{data}(x)+p_g(x)}{2}} \\ 第二项与第三项为KL散度公式,则有\\ =-log4+KL(p_{data}||\frac{p_{data}+p_g}{2})+KL(p_{g}||\frac{p_{data}+p_g}{2}) \\ 后两项的和就是JS散度 \\ =-log4+2JSD(p_{data}||p_{g}) \\ JS散度取值范围为[0,1],故\\ C(G)_{min}=-log4,此时p_{data}=p_{g} C(G)=Expdata[logpdata(x)+pg(x)pdata(x)]+Expg[logpdata(x)+pg(x)pg(x)]log4+log4=log4+pdata(x)logpdata(x)+pg(x)pdata(x)+log2+pg(x)logpdata(x)+pg(x)pg(x)+log2=log4+pdata(x)log2pdata(x)+pg(x)pdata(x)+pg(x)log2pdata(x)+pg(x)pg(x)KL=log4+KL(pdata2pdata+pg)+KL(pg2pdata+pg)JS=log4+2JSD(pdatapg)JS[0,1]C(G)min=log4pdata=pg

  • 可收敛性证明

    在求解梯度进行反向传播时,由于两个模型是交替训练的,求梯度必须先固定一个模型不变。作者在论证可收敛性时,将V(G,D)改写为U( p g p_g pg,D),看作是关于 p g p_g pg的函数,则U( p g p_g pg,D)在 p g p_g pg上是凸函数。
    数学上存在定理 “对于 f ( x ) = s u p α ∈ A f α ( x ) f(x)=sup_{\alpha \in A}f_{\alpha}(x) f(x)=supαAfα(x), 任意的 α , f α ( x ) \alpha ,f_{\alpha}(x) α,fα(x)在x上总是凸函数,则有 ∂ f β ( x ) ∈ ∂ f , β = a r g s u p α ∈ A f α ( x ) \partial f_{\beta}(x)\in \partial f,\beta=argsup_{\alpha \in A}f_{\alpha}(x) fβ(x)f,β=argsupαAfα(x)
    我对这个定理的理解是 f ( x ) f(x) f(x)是一个与 α \alpha α和x有关的函数, α \alpha α可以理解为一个状态,对于不同的 α \alpha α f ( x ) f(x) f(x)拥有不用的表达方式、值域等,对于某一个状态而言,此时函数表示为 f α ( x ) f_{\alpha}(x) fα(x)。对于 β = a r g s u p α ∈ A f α ( x ) \beta=argsup_{\alpha \in A}f_{\alpha}(x) β=argsupαAfα(x)我将其理解为在不同的x区间内,不同的 α \alpha α对应的函数曲线不同,在该区间内, β \beta β等于 f α ( x ) f_{\alpha}(x) fα(x)取得较大值时,对应的 α \alpha α,因此 β \beta β应该是一个与x有关的 α \alpha α的集合,所以对 f β ( x ) f_{\beta}(x) fβ(x)的导数自然就包含在 f ( x ) f(x) f(x)的导数中,简单的示意图如下:
    笔记:Generative Adversarial Nets

    对应于论文,则价值函数 V ( p g , D ) V(p_g,D) V(pg,D)就是 f ( x ) f(x) f(x),D就是 α \alpha α p g p_g pg就是x, D G ∗ ( x ) D^*_G(x) DG(x)就是 β \beta β。所以在判别器达到 D G ∗ ( x ) D^*_G(x) DG(x)时,对价值函数求导能够优化生成器,并最终收敛到 p g = p d a t a p_g=p_{data} pg=pdata
    但是这个证明需要的条件比较苛刻,作者在第四部分Theoretical Results中提到" Therefore, we would like Algorithm 1 to converge to a good estimator of p d a t a p_{data} pdata,if given enough capacity and training time. The results of this section are done in a non-parametric setting"。而且在收敛性证明里首先就假设了判别器D已经达到了最优解,但是在训练过程中判别器D和生成器G是交替训练的,能不能达到最优解都是个问题,证明的过程比较牵强,作者原话"In practice, adversarial nets represent a limited family of p g p_g pg distributions via the function G ( z ; θ g ) G(z;θ_g) G(z;θg),and we optimize θ g θ_g θg rather than p g p_g pg itself, so the proofs do not apply. "
    不过实验证明这种训练方式以及价值函数是可行的,而且效果很好,理论证明的不严谨显得不那么重要了。

Conclusion

  1. 判别器最优解为: D G ∗ ( x ) = p d a t a ( x ) p d a t a ( x ) + p g ( x ) D^*_G(x)=\frac{p_{data}(x)}{p_{data}(x)+p_g(x)} DG(x)=pdata(x)+pg(x)pdata(x)
  2. 生成器的最优解为: p d a t a = p g p_{data}=p_g pdata=pg
  3. 价值函数的最小值为-log4,表达式可转换为: − l o g 4 + 2 J S D ( p d a t a ∣ ∣ p g ) -log4+2JSD(p_{data}||p_{g}) log4+2JSD(pdatapg)

Net

这篇论文对网络提及比较少,本身网络也是由多层感知机搭配一些**函数实现的,比较简单。
判别其实一个二分类模型,生成器输入为随机噪声,输出为1*1024的向量,将这个向量重排成图像即可。
GAN比较有意思的在于loss,生成器与判别器两个loss分别定义为g_loss,和d_loss,由于GAN训练方法的特殊性,两个模型一直在博弈,所以loss的曲线变化是一直在震荡的,两个loss如下图所示:
笔记:Generative Adversarial Nets

从loss上看,g_loss远大于d_loss,所以是判别器获得了胜利,但是对于生成器生成的图片,也已经达到了非常好的效果。复现时我是用MNIST数据集作为数据输入,生成的图片如下:
笔记:Generative Adversarial Nets

这十张图片均为生成器由MNIST训练后生成的图片,可以看到用肉眼已经很难看出他们与手写的字体有什么不同。

Notes(optional)

理解K-L散度

理解JS散度

argmax

Reference(optional)

。。。。。。。。

相关文章: