Generative Adversarial Network
核心思想
生成对抗网络由一个生成网络(Generator)与一个判别网络(Discriminator)组成。生成网络从隐空间(latent space 即噪声所在空间)中随机采样作为输入,其输出结果需要尽量模仿训练集中的真实样本。判别网络的输入则为真实样本或生成网络的输出,其目的是将生成网络的输出从真实样本中尽可能分辨出来。而生成网络则要尽可能地欺骗判别网络。两个网络相互对抗、不断调整参数,最终目的是使判别网络无法判断生成网络的输出结果是否真实。
GAN的原理
GAN的目标函数公式:
min G max D V ( D , G ) = E x ∼ p d a t a ( x ) [ log D ( x ) ] + E z ∼ p z ( z ) [ log ( 1 − D ( G ( z ) ) ) ] \min _ { G } \max _ { D } V ( D , G ) = \mathbb { E } _ { \boldsymbol { x } \sim p _ { \mathrm { data } } ( \boldsymbol { x } ) } [ \log D ( \boldsymbol { x } ) ] + \mathbb { E } _ { \boldsymbol { z } \sim p _ { \boldsymbol { z } } ( z ) } [ \log ( 1 - D ( G ( \boldsymbol { z } ) ) ) ] GminDmaxV(D,G)=Ex∼pdata(x)[logD(x)]+Ez∼pz(z)[log(1−D(G(z)))]
符号 | 解释 |
---|---|
G | 生成器 |
D | 判别器 |
x \boldsymbol { x } x | 真实数据 |
p d a t a p _ { \mathrm { data } } pdata | 真实数据分布 |
z \boldsymbol { z } z | 噪声 |
p z ( z ) p _ { \boldsymbol { z } } ( z ) pz(z) | 高斯随机噪声分布 |
这个公式表示为一个最大最小优化问题,即最大化判别器,最小化生成器:
max D : 表 示 D 要 尽 可 能 正 确 地 识 别 出 真 实 数 据 和 G 伪 造 的 数 据 。 \max _ { D } : 表示D 要尽可能正确地识别出真实数据和 G 伪造的数据。\qquad \qquad \qquad \qquad Dmax:表示D要尽可能正确地识别出真实数据和G伪造的数据。
min G : 表 示 G 要 尽 可 能 缩 小 自 己 生 成 的 数 据 与 真 实 数 据 的 差 别 , 让 D 真 假 难 辨 。 \min _ { G } : 表示G 要尽可能缩小自己生成的数据与真实数据的差别,让 D 真假难辨 。\quad Gmin:表示G要尽可能缩小自己生成的数据与真实数据的差别,让D真假难辨。
希望达到的效果就如上图所示,生成式对抗网络会训练并更新判别分布(D,图中蓝色虚线部分),希望能将真实的分布( p d a t a ( x ) p _ { \mathrm { data } }(x) pdata(x),图中黑色虚线)和生成分布( p g ( G ( z ) ) p_{g}(G(z)) pg(G(z)),绿色实线)区分开来,z表示属于某一分布的噪声数据,经过生成器之后,变 x = G ( z ) x = G(z) x=G(z),得到一个生成分布 p g ( G ( z ) ) p_{g}(G(z)) pg(G(z)),而上方的 x x x水平线则代表真实的分布X中的一部分.向上的箭头表示映射 x = G ( z ) x = G(z) x=G(z) 如何对噪声样本(均匀采样)施加一个不均匀的分布 p g p_g pg。
(a)考虑在收敛点附近的对抗训练:和 已经十分相似,D 是一个局部准确的分类器。
(b)在算法内部循环中训练 D 以从数据中判别出真实样本,该循环最终会收敛到 D ( x ) = p d a t a ( x ) / ( p d a t a ( x ) + p g ( x ) ) D(x) = p _ { \mathrm { data } }(x) /(p _ { \mathrm { data } }(x)+ p_{g}(x) ) D(x)=pdata(x)/(pdata(x)+pg(x))
(c)随后固定判别器并训练生成器,在更新 G 之后,D 的梯度会引导 G(z)流向更可能被 D 分类为真实数据的方向。
(d)经过若干次训练后,如果 G 和 D 有足够的复杂度,那么它们就会到达一个均衡点。这个时候 p g = p d a t a p_{g} =p _ { \mathrm { data } } pg=pdata,即生成器的概率密度函数等于真实数据的概率密度函数,也即生成的数据和真实数据是一样的。在均衡点上 D 和 G 都不能得到进一步提升,并且判别器无法判断数据到底是来自真实样本还是伪造的数据,即 D(x)= 1/2。
理论推导
理论基础之KL散度
对与同一个随机变量 x 有两个单独的概率分布 P(x) 和 Q(x) ,用KL散度可以衡量这两个分布的差异:
D K L ( P ∥ Q ) = E x ∼ P [ log P ( x ) Q ( x ) ] = E x ∼ P [ log P ( x ) − log Q ( x ) ] D _ { \mathrm { KL } } ( P \| Q ) = \mathbb { E } _ { \mathrm { x } \sim P } \left[ \log \frac { P ( x ) } { Q ( x ) } \right] = \mathbb { E } _ { \mathrm { x } \sim P } [ \log P ( x ) - \log Q ( x ) ] DKL(P∥Q)=Ex∼P[logQ(x)P(x)]=Ex∼P[logP(x)−logQ(x)]
KL散度的性质:
- 非负性,同时当且仅当P和Q相同分布时候,KL散度才会为0。因为这个非负性,所以它可以经常用来衡量两个分布之间的差异。
- 非对称性, 虽然可以衡量分布的差异,但是这个差异的距离不是对称的,所以KL散度在P对于Q下的和Q对于P下两种情况是不同的。
GAN被定义为最大最小优化问题,可以拆分为两个优化问题:最优判别器和最优生成器
最优判别器
固定生成器G,最大化价值函数,从而得出最优判别器D。其中,最大化的价值函数评估了生成器生成的数据分布和数据集分布的差异: V ( G , D ) = E x ∼ p d a t a log ( D ( x ) ) + E x ∼ p c ( x ) log ( 1 − D ( x ) ) V(G,D)= E _ { x \sim p _ { data} } \log ( D ( x ) ) + E _ { x \sim p _ { c } ( x ) } \log ( 1 - D ( x ) ) V(G,D)=Ex∼pdatalog(D(x))+E