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

作者:KevinZonda

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

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

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

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

建模

生成器 G

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

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

maxD(G(z))

辨别器 D

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

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

maxD(x)

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

minD(G(z))

目标函数

为此可以构建目标函数:

minGmaxDV(D,G)=Ex∼pdata(x)[log⁡D(x)]+Ez∼pdata(z)[log⁡(1−D(G(z)))]

对于辨别器 D:

对于生成器 G:

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

算法 1

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

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

理论证明

命题 1:最佳的 D

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

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

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

证明:

考虑:

Ex∼pf(x)=∫xp(x)f(x)dx

可得:

V(D,G)=Ex∼pdata(x)[log⁡D(x)]+Ez∼pdata(z)[log⁡(1−D(G(z)))]=∫xpdata(x)log⁡D(x)dx+∫zpz(z)log⁡(1−D(G(z)))dz考虑 G(z)=pg(x)=∫xpdata(x)log⁡D(x)dx+∫xpg(x)log⁡(1−D(x))dx=∫xpdata(x)log⁡D(x)+pg(x)log⁡(1−D(x))dx

令

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

因此可使原式改写为

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

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

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

ddyalog⁡(y)+blog⁡(1−y)=ay−b1−y=0ay=b1−ya−ay=byy=aa+bD(x)=pdata(x)pdata(x)+pg(x)

代入回原式,可得:

C(G)=maxDV(D,G)=Ex∼pdata(x)[log⁡(DG∗(x))]+Ez∼pz(z)[log⁡(1−DG∗(G(z)))]=Ex∼pdata[log⁡(DG∗(x))]+Ex∼pg[log⁡(1−DG∗(x))]=Ex∼pdata[log⁡pdata(x)pdata(x)+pg(x)]+Ex∼pg[log⁡pg(x)pdata(x)+pg(x)]

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

KL 散度

DKL(P||Q)=Ex∼p(x)log⁡P(x)Q(x)=∑iP(i)log⁡P(i)Q(i)

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

C(G)=Ex∼pdata[log⁡pdata(x)pdata(x)+pg(x)]+Ex∼pg[log⁡pg(x)pdata(x)+pg(x)]

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

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

证明:

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

C(G)=log⁡12+log⁡12=−log⁡4

因此可以重写原式:

C(G)=Ex∼pdata[log⁡pdata(x)pdata(x)+pg(x)]+Ex∼pg[log⁡pg(x)pdata(x)+pg(x)]=(Ex∼pdata[log⁡pdata(x)12(pdata(x)+pg(x))]−log⁡2)+(Ex∼pg[log⁡pg(x)12(pdata(x)+pg(x))]−log⁡2)=−log⁡4+DKL(pdata||pdata+pg2)+DKL(pg||pdata+pg2)

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

算法 1 的收敛性

命题 2

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

Ex∼pdata[log⁡DG∗(x)]+Ex∼pg[log⁡(1−DG∗(x))]

那么 pg 收敛到 pdata。