0%

Generative Adversarial Nets

一个生成模型G:学习到数据分布,使得D犯错概率最大
一个判别模型D:判别一个样本是来自真实数据还是G
存在一个特解,使得G可以涵盖住真实训练数据分布,D的判别概率始终是12
对于MLP定义的G和D,可以使用反向传播训练整个系统,而不需要使用任何的马尔科夫链或者是展开的近似推理网络。

导论

迄今为止,大多数深度学习伟大的成功都是在判别模型上,将高维复杂的输入映射到一个类别标签。
而生成模型则有着很多的困难,如很难在极大似然估计和相关策略中进行概率计算,并且生成模型的上下文中难以利用分层线性单元的优势。

本文提出了一个新的规避了这些困难的生成模型。

GAN框架能够给很多模型和优化问题提供一种训练方法。

对抗网络

为了从数据 x 上学习到生成器的分布 pg ,我们先给定一个先验输入噪声 pz(z)
然后利用 G(z;θg) 将z映射到数据空间,其中G是一个多层感知机。
再定义一个 D(x;θd) :计算x来自真实数据而不是生成器生成的分布pg的概率。

训练D以最大化分类正确率,并且同时训练G以最小化log(1D(G(z)))

最终的评估函数:

(1)minGmaxDV(D,G)=Expdata (x)[logD(x)]+Ezpz(z)[log(1D(G(z)))]

训练过程中,不会在一次训练循环里直接完成D的优化,那在有限数据集里会导致过拟合。因此,我们会在优化K次D和优化1次G中交替进行。只要G变化的足够缓慢,这将有助于保持D在它最优解的附近。

这个策略类似于SML/PCD[2]中,为了避免样本在马尔科夫链中学习迭代时burning的方式。,

实际上,公式(1)可能不能给G提供足够的梯度以供学习。在训练的初期,G效果很差,D可以轻易的分辨出数据的真假。此时 log(1D(G(z))) 变得饱和:即接近极限了已经,变化很小。相比于训练G以最小化 log(1D(G(z))) ,我们可以训练G以最大化log(D(G(z))) ,这个目标函数可以有相同的结果但是有更好的梯度。

GAN示意图:蓝线为判别器的认为的概率分布,黑点为真实数据的分布,绿线为生成器的分布。x线为真实数据域,z线为生成器采样数据域。箭头为z通过G映射到x。(b) 训练D后,D逼近真实数据分布。(c) 更新G,D的梯度引导G向真实分布靠近。(d) 足够训练的情况下,学习到的分布完全和训练分布一致,D(x)=0.5

理论

生成器G隐式地定义了一个概率分布 pg=G(z)——即从 zpz 中的采样结果。因此,我们希望训练算法在充分的环境下,可以最终收敛出一个不错的估计器来估计 pdata

接下来会证明这个minimax过程对于 pg=pdata 有一个全局最优解。然后会证明公式(1)可以通过训练算法来获得最优解。

训练算法

GAN的小批量随机梯度下降训练。
K:超参数,表明在判别器D上经过的step。

for number of training iterations do

  • for k steps do

    1. 从先验噪声 pg(z) 中采样出m大小的小批量样本 {z(1),,z(m)}
    1. 从真实数据分布 pdata (x) 中采样出m大小的小批量样本 {x(1),,x(m)}
    1. 通过随机梯度下降更新判别器D:

θd1mi=1m[logD(x(i))+log(1D(G(z(i))))]

  • end k for

  • 从先验噪声 pg(z) 中采样出m大小的小批量样本 {z(1),,z(m)}

  • 通过随机梯度下降更新生成器G:

θg1mi=1mlog(1D(G(z(i))))

end train iterations for

证明 pg=pdata 的全局最优解

首先证明:固定G时,D的最优解为

DG(x)=pdata (x)pdata (x)+pg(x)

给定任何G,D,训练目标都是最大化 V(G,D)

V(G,D)=Expdata (x)[logD(x)]+Ezpz(z)[log(1D(G(z)))]=xpdata (x)log(D(x))dx+zpz(z)log(1D(g(z)))dzzx=xpdata (x)log(D(x))+pg(x)log(1D(x))dx

求积分最大值可以转化为求被积函数最大值:

V(G,D)=xpdata (x)log(D(x))+pg(x)log(1D(x))dxxmaxypdata (x)log(y))+pg(x)log(1y)dx

并且因为固定G求D的最优,因此不涉及D的都可看作常数项即:

f(D(x))=pdata (x)log(D(x))+pg(x)log(1D(x))=alogD+blog(1D)f(y)=alogy+blog(1y)

其中 a,b(0,1) 。为了求最优解,对该式计算 y 的一阶导可得 y=aa+b,继续求该位置的二阶导可得:

f(aa+b)=a(aa+b)2b1(aa+b)2<0

因此最优D为:

DG(x)=pdata (x)pdata (x)+pg(x)PG=Pdata=12

定理1:C(G) 当且仅当 pg=pdata 时取得全局最小值 -log4

证明:

结合公式(1)和D的最优解,可知 C(G) 有如下表达式 :

$$ C(G)=xpdata (x)log(pdata (x)pG(x)+pdata (x))+pG(x)log(pG(x)pG(x)+pdata (x))dxpg=pdata,C(G)=log4

$$

为了检查这个 -log4 是不是最优值,构造方程:

$$ C(G)=x(log2log2)pdata (x)+pdata (x)log(pdata (x)pG(x)+pdata (x))+(log2log2)pG(x)+pG(x)log(pG(x)pG(x)+pdata (x))dx=log2xpG(x)+pdata(x)dx+xpdata(x)(log2+log(pdata(x)pG(x)+pdata (x)))+pG(x)(log2+log(pG(x)pG(x)+pdata(x)))dxC(G)=log4+xpdata (x)log(pdata (x)(pG(x)+pdata (x))/2)dx+xpG(x)log(pG(x)(pG(x)+pdata (x))/2)dx

$$

后面两个积分式即是KL散度(一种衡量分布差异的方法):

KL散度为非负值,具有非对称性,且KL散度为0当且仅当两个离散分布处处相同。

DKL(PQ)=ExP[logP(x)Q(x)]=ExP[logP(x)logQ(x)]

C(G)=log4+KL(pdata pdata +pG2)+KL(pGpdata +pG2)

由于KL散度的非负性质,我们可以得到-log4即为C(G)的全局最小值。进一步需要证明 pG=pdata 是取值的唯一点。

因为KL散度是非对称的,因此构造两个相反的KL散度相加,它们的和就是对称项,即可以表示为JS散度:

JSD(PQ)=12KL(P(P+Q)/2)+12KL(Q(P+Q)/2)

因此 C(G) 可表示为:

C(G)=log4+2JSD(pdata|pG)

根据JS散度非负,且只有 pG=pdata,JSD=0。 综上所述,得证。

实验效果

MINIST
TFD
CIFAR-10 全连接
CIFAR-10 卷积D和逆卷积G

优缺点

缺点:

  1. pg(x) 没有显式的表达。
  2. G不能在更新D之前训练过多,要不然会发生模型崩溃问题。

模型崩溃Mode collapse 是指 GAN 生成的样本单一。当G发现一种样本可以欺骗到D时,就只会生成那一种mode的样本。判别网络最后会判别来自该 mode 的样本是假的。最后,生成网络 G 会简单地锁定到另一个 mode。该循环会无限进行,就会限制生成样本的多样性

优点:

  1. 只需要反向传播,不需要马尔科夫链,不需要推理网络
  2. 多种多样的模型可以结合在GAN的框架中。
  3. 不会直接使用真实数据样本去更新G,而是只能通过判别器的梯度引导。换句话说,生成器不会直接copy原始输入。

Other

为什么要distribution?
为了同样的输入能够产生不同的输出

JS散度的问题?
如果两个分布完全不重叠,JS散度值始终是 log 2,改进有Wasserstein distance...

参考文献

[1]Goodfellow I, Pouget-Abadie J, Mirza M, et al. Generative adversarial nets[J]. Advances in neural information processing systems, 2014, 27.

[2]Younes, L. (1999). On the convergence of Markovian stochastic algorithms with rapidly decreasing ergodicity rates. Stochastics and Stochastic Reports, 65(3), 177–228.

[3]GAN完整理论推导与实现, 机器之心, https://www.jiqizhixin.com/articles/2017-10-1-1

Powered By Valine
v1.5.2