生成式对抗网络(GAN)学习笔记

作者:KevinZonda

GAN 是一个的网络,其将一个无监督学习问题巧妙转换成了监督学习问题。其核心包含了两组神经网络:生成器(G)和辨别器(D)。

生成器的目的是通过输入 z,生成假数据 G(z)

辨别器的目的是根据输入,输出输入是真实的置信度。也就是判定是真实数据还是假数据:如果是真实数据,输出 1;如果是假数据,输出 0。

因此我们的目标可以简化为,我们希望构建一个足够好的辨别器,并让生成器成功欺骗辨别器。

建模

生成器 G

对于生成器 G,其输入是一个随机噪声 zpz(z),输出是一个假数据 G(z)

其目标是使得辨别器 D 无法判定 G(z) 是假数据。因此则为:

maxD(G(z))

辨别器 D

对于辨别器 D,其输入是一个数据,输出 D(x) 是一个概率,表示 x 是真实数据的概率。

因此对于真实数据: xpdata(x),我们期望

maxD(x)

因此对于虚假数据(生成的数据): zpz(z),我们期望

minD(G(z))

目标函数

为此可以构建目标函数:

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

对于辨别器 D

对于生成器 G

我们可以理解数学期望 E 为:

算法 1

需要注意,在最开始时候 D 可能训练的特别好,但是 G 很难训练的很好,那么 G 就会面对梯度消失的问题。

可能的解决方案,使用最大化 logD(G(z)),而不是最小化 log(1D(G(z))) 以训练 G

理论证明

命题 1:最佳的 D

Proposition 1:对于固定的 G,最佳的 D

DG(x)=pdata(x)pdata(x)+pg(x)[0,1]

对于两个分布 pdatapg,为了判别其是否相等,原式=.5(Two Sample Test)。

证明

考虑:

Expf(x)=xp(x)f(x)dx

可得:

V(D,G)=Expdata(x)[logD(x)]+Ezpdata(z)[log(1D(G(z)))]=xpdata(x)logD(x)dx+zpz(z)log(1D(G(z)))dz考虑 G(z)=pg(x)=xpdata(x)logD(x)dx+xpg(x)log(1D(x))dx=xpdata(x)logD(x)+pg(x)log(1D(x))dx

a=pdata(x)y=D(x)b=pg(x)

因此可使原式改写为

V(D,G)=xpdata(x)logD(x)+pg(x)log(1D(x))dx=xalog(y)+blog(1y)dx

考虑到这是一个关于辨别器的函数,也就是对于 D的函数,因此我们认为这个函数是 yalog(y)+blog(1y)

这个函数是个凸函数,因此为求其最大值,我们可以求其导数为0的点。

ddyalog(y)+blog(1y)=ayb1y=0ay=b1yaay=byy=aa+bD(x)=pdata(x)pdata(x)+pg(x)

代入回原式,可得:

C(G)=maxDV(D,G)=Expdata(x)[log(DG(x))]+Ezpz(z)[log(1DG(G(z)))]=Expdata[log(DG(x))]+Expg[log(1DG(x))]=Expdata[logpdata(x)pdata(x)+pg(x)]+Expg[logpg(x)pdata(x)+pg(x)]

因为我们已经完成了最大化 D,因此只需要最小化 C(G) 了。

KL 散度

DKL(P||Q)=Exp(x)logP(x)Q(x)=iP(i)logP(i)Q(i)

有两个分布 PQ,我们希望知道 PQ 之间的差异。

C(G)=Expdata[logpdata(x)pdata(x)+pg(x)]+Expg[logpg(x)pdata(x)+pg(x)]

定理 1:C(G) 的最小值

定理 1:当且仅当 pg=pdata 时,C(G) 达到全局最小解。并且此时 C(G)=log4

证明

考虑当 D 达到 optimal 时候,D(x)=12。因此

C(G)=log12+log12=log4

因此可以重写原式:

C(G)=Expdata[logpdata(x)pdata(x)+pg(x)]+Expg[logpg(x)pdata(x)+pg(x)]=(Expdata[logpdata(x)12(pdata(x)+pg(x))]log2)+(Expg[logpg(x)12(pdata(x)+pg(x))]log2)=log4+DKL(pdata||pdata+pg2)+DKL(pg||pdata+pg2)

考虑 KL 散度的性质:KL散度 0,当其为 0 时,必然是两分布相同,因此为让 C(G) 最小,我们需要让 KL 散度最小,也就是 pdata=pg

算法 1 的收敛性

命题 2

proposition 2:如果 GD 有足够的容量(capacity),并且对于 算法 1的每一步,辨别器 Dpg 在给定 G 被训练到最优,使用如下标准:

Expdata[logDG(x)]+Expg[log(1DG(x))]

那么 pg 收敛到 pdata