GAN 生成对抗网络 学习笔记

GAN 应用

  1. 图片、视频生成领域
    图像风格变换、文字转图片、真人照片变 2d 图像
  2. 3D 对象生成
    如 2D 图片变 3D
    reference

GAN 背景

生成器的背景

由于大多数关于深度生成模型的工作都集中于提供概率分布函数的参数说明的模型上,要通过似然函数进行训练,需要对似然梯度进行多次近似,这使得这种模型的似然函数十分难以处理。

因此,“生成器”得以发展,生成器虽然不能明确的表示可能性,但可以从期望的分布中生成样本,可以精确的反向传播。

xzA1pQ.png

相关模型: VAE 和 GAN 的区别

xzbBi6.png

比如他先将关于狗的逼真的图像放入 encoder 中去学习,找到这个图像在虚拟的潜在空间中的表示(一个虚拟向量),然后 decoder 拿到这个虚拟表达或相近的点,重建 encoder 之前看到的真实图像。训练结束后,decoder 会在潜在空间上随机选取点,来生成真实的图片。

整个训练过程和模型中会被注入一些噪音,不是让图像编码为潜在空间中的一个点,而是将图像编码到整个分布上,然后对该分布上的一个点进行采样。

而在 GAN 中,G 接受随机噪声输入,生成真实的例子。

可预测性最小化

可预测性最小化中,神经网络中每个隐藏单元都被训练成与第二个网络的输出不同,第二个网络再根据其他隐藏单元的值预测该隐藏单元的值。

GANs 中与可预测性最小化的不同点
  1. GAN 中网络之间的竞争是唯一的训练标准,该标准足以训练网络。可预测性最小化只是一种正则化方法。
  2. 竞争性质不同。GAN 的一个网络产生高维向量,作为另一个网络的输入,并试图选择另一个网络不知道如何处理的输入;可预测性最小化,比较两个网络的输出,一个网络试图使输出相似,而另一个网络试图使输出相似输出不同。
  3. GANS 基于极大极小博弈,并非优化问题,一个代理寻求最大化,另一个寻求最小化,博弈在鞍点处终止,鞍点是对一个参与人策略的最小值和对其他参与人策略的最大值。可预测性最小化被描述为一个目标函数最小化的优化问题,学习接近目标函数的最小值。

对抗网络

数学原理

我们训练后最终需要的生成的分布,其实就是一个和真实数据无限近似的分布,也就是说我们希望求解到参数 theta,使得 P_G(x;theta)尽可能接近于 P_data(x)。

P(x;theta) theta 表示为 P 分布的参数
P_G(x;theta) 生成的数据的分布
P_data(x) 真实数据的分布

使用极大似然估计的思想来处理该问题,求得 theta,得以生成近似于真实数据的分布 P_G(x)。
计算 theta

formula

对上个式子进行推导

formula
化简为 KL 散度表达式(KL 散度即为衡量两个概率分布差异的方式)。使 KL 散度尽可能低,也就是让生成的分布与真实数据分布尽可能接近

kl

训练过程

(1) 初始化 G 和 D 两个网络的参数
(2) 从训练集抽取 n 个样本,以及生成器利用噪声分布生成的 n 个样本。固定生成器,训练 D,使其尽可能的区分真假。
(3) 循环更新 k 次 D 后,更新 1 次 G,使 D 无法区分真假。

多次更新迭代后,理想状态下,D 无法区分图片是来自于真实的训练样本集合,还是由 G 生成的样本,此时 D 输出的概率为 0.5,训练完成。

生成模型 G

G 用来捕获数据分布,生成新数据。G 的训练过程为最大限度的提高判别模型 D 的出错概率。G 由一些随机噪声和 类别 Y 生成特征 X,也就是求 P(X|Y)

判别模型 D

用来估计样本是来自于训练数据还是生成模型 G 的概率。D 的输入为一组特征,输出类别 Y。也就是求 P(Y|X)

可以认为,G 是一个造假钞的机器;D 是验钞机;D 告诉 G 如何分辨真伪;G 告知 D 如何生产假钞。在 G 和 D 的相互交流下,D 判别真伪的概率到达峰值。

最终的 GAN 模型,G 生成的样本可以以假乱真,D 的输出趋于 0.5,这时真假样本难以区分。

BCELoss

对抗损失
z 为噪声,G(z)为将噪声喂给生成器的结果。对 D 训练,要让 D(x)尽可能的高,也就是给高分,对 D(G(z))尽可能低,所以整个式子 L_GAN 也越高,所以训练 D,也就是让 L_GAN 取到最大值。

对 G 训练,G(z)要更大,所以要使模型训练好,就要让 L_GAN 要取到最小值。
交替训练 D 和 G,
训练过程为: minGmaxDL_GAN,但我们只考虑如何让损失更小,所以要把 max 转为 min 问题
formula
这看起来像 BCELoss

formula

常用几种 GAN——Loss 的理解

数学表示

为了学习数据 x 上的分布 Pg,噪声变量 p(z),到数据空间的映射 G(z,theta_g)中,G 为多层感知器表示的微分函数,参数为 theta_g。

第二个多层感知器 D(x,theta_d),输出一个标量。D(x)表示,x 是来自于数据,而不是 Pg 的概率。
formula
最大化 D,最小化 G,minmax 处理整个价值函数。

G 和 D 被赋予足够的容量,训练允许人们恢复生成数据的分布。

在学习初期,G 很差的时候,D 可以拒绝高置信度的样本,因为它们与训练数据明显不同,这种情况下,log(1-D(G(z)))饱和,可训练 G 来使 log(D(G(z)))最大化。

数据分布

z 通过 G 映射为 x。绿色线为生成的数据分布。黑色虚线是真实的空间分布。蓝色虚线是判别器的分布:来看映射出来的向量是否为真。

经过一次迭代,由 a 变为 b,判别器改变,可以更明显的把真实样本和生成样本做区分。

由 b 到 c,经过若干次的判别器更新后,因为已经学到为真的规律,修改生成器 G 的映射,让生成的样本趋近于真,(也就是 d 图的状态)。此时的生成器就是我们需要的东西,这时去除掉判别器。
demp

GAN 训练技巧

梯度惩罚

GAN 的对抗训练机制让 Generator 和 Discriminator 的梯度极不稳定,很容易出现训练发散的情况。
因此需要对梯度进行限制,早期研究中常常会使用梯度剪裁来限制梯度变化,但是简单的剪裁可能会带来梯度消失或者爆炸的情况出现。近些年来很多关于 GAN 的论文都使用到了名为梯度惩罚的技术,即将模型对于输入的梯度作为 loss 中的惩罚项,使得模型输入有微小变化的时候,网络权重不会产生太大的变化。

优先训练 D

这个策略下大致有如下三种不同的实现方式:

在 Generator 开始训练之前,先训练一个能判别真假的 Discriminator;
每训练 n(n>=1)次 Discriminator,训练一次 Generator;
在 Discriminator 中使用更大的学习率(Heusel, Martin et al. “GANs Trained by a Two Time-Scale Update Rule Converge to a Local Nash Equilibrium.” NIPS (2017))
标签平滑或者添加噪声
在 Discriminator 和 Generator 的 loss 中都有不少的分类 loss,使用标签平滑或者合理地对标签添加噪声都可以降低训练难度。

使用更多的标签信息
在训练过程中,除了图片的真假信息外,如果数据集中有其他信息,尽量利用起来,能够提升模型训练效果。

利用分类网络建立图片的重建 loss

在 Generator 的损失函数中,通常会加入一个重建损失,用于评估生成图片和真实图片之间的差距。

在一些对生成图片的细节要求不高的任务中,可以直接使用 L1Loss 作为重建损失,

为了得到更细致的生成结果,可以 i 利用分类的特征提取能力,将生成图片和真实图片在分类网络中得到的特征图之间的差距加入到重建损失中。

训练 GAN 的常用技巧

总结

GAN 的优缺点

优点

● GAN 是一种生成式模型,相比较其他生成模型(玻尔兹曼机和 GSNs)只用到了反向传播,而不需要复杂的马尔科夫链

● 相比其他所有模型, GAN 可以产生更加清晰,真实的样本

● GAN 采用的是一种无监督的学习方式训练,可以被广泛用在无监督学习和半监督学习领域

● 相比于变分自编码器, GANs 没有引入任何决定性偏置( deterministic bias),变分方法引入决定性偏置,因为他们优化对数似然的下界,而不是似然度本身,这看起来导致了 VAEs 生成的实例比 GANs 更模糊

● 相比 VAE, GANs 没有变分下界,如果鉴别器训练良好,那么生成器可以完美的学习到训练样本的分布.换句话说,GANs 是渐进一致的,但是 VAE 是有偏差的

● GAN 应用到一些场景上,比如图片风格迁移,超分辨率,图像补全,去噪,避免了损失函数设计的困难,不管三七二十一,只要有一个的基准,直接上判别器,剩下的就交给对抗训练了。

缺点

● 训练 GAN 需要达到纳什均衡,有时候可以用梯度下降法做到,有时候做不到.我们还没有找到很好的达到纳什均衡的方法,所以训练 GAN 相比 VAE 或者 PixelRNN 是不稳定的,但我认为在实践中它还是比训练玻尔兹曼机稳定的多

● GAN 不适合处理离散形式的数据,比如文本

● GAN 存在训练不稳定、梯度消失、模式崩溃的问题(目前已解决)

GAN 的变体

Auxiliary Classifier GAN

实现辅助分类-生成对抗网络(Auxiliary Classifier Generative Adversarial Network)。
demo

BiGAN

双向生成对抗网络(Bidirectional Generative Adversarial Network)。
demo

更多-> GAN 的多种变体

reference

Generative Adversarial Nets 研读笔记
Generative adversarial nets GAN 对抗网络的开山之作
GAN 原理,优缺点、应用总结
训练 GAN 网络技巧总结 生成对抗网络稳定训练方法
GAN 原理学习笔记
通俗理解 GAN(一):把 GAN 给你讲得明明白白