「DL」 走近 GAN
文章目的是介绍 GAN 的基本概念和组件(流程);
1 基础
生成对抗网络(GAN,Generative Adversarial Networks)是生成式模型中较为优秀的一员;
1.1 特点
1.1.1 优点
- 不依赖任何先验假设:传统的许多方法会假设数据服从某一分布,然后使用极大似然去估计数据分布;
GAN 不需要通过引入下界来近似似然;VAE 由于优化困难,引入了变分下界来优化似然;但是 VAE 对于先验和后验分布做了假设,使得 VAE 很难逼近其变分下界; - 生成方式简单:只需生成器进行前向传播即可;而传统方法的采样方式非常复杂;
- 速度快:GAN 可以并行生成数据;相比于 PixelCNN,PixelRNN,GAN 生成非常快,因为 GAN 使用 Generator 替代了采样的过程;
- 效果好:从实践来看,GAN 生成的结过要比 VAE 更清晰;
扩展:周志华的《机器学习》中对各种采样方式(包括传统采样)的介绍;
1.1.2 缺点
1.2 基本概念
GAN 是一种通过对抗的方式,去学习数据分布的生成式模型;目的是从样本中学习到真实数据的分布,然后根据学到的分布产生新的数据;GAN 的本质是生成器与判别器互相竞争以达到最优(纳什均衡);
对抗指的是生成网络(Generator,G)和判别网络(Discriminator/Divergence,D)的互相对抗;生成网络尽可能生成逼真样本,判别网络则尽可能去判别该样本是真实样本,还是生成的假样本;
G 的输入叫做隐变量 z(通常为服从高斯分布的随机噪声),通过 G 生成 $X_{fake}$ , 判别器负责判别输入的 data 是生成的样本 $X_{fake}$ 还是真实样本 $X_{real}$;
对于 D 来说,这是一个二分类问题,使用交叉熵损失;对于生成器 G 来说,为了尽可能欺骗 D;
实际训练时,生成器和判别器交替训练;
纳什均衡
1.3 目标函数
GAN 的目标函数是最小化两个分布的 JS 散度;实际上,衡量两个分布距离的方式有很多种,JS 散度只是其中一种;如果我们定义不同的距离度量方式,就可以得到不同的目标函数;许多对 GAN 训练稳定性的改进,比如 EBGAN,LSGAN 等都是定义了不同的分布之间距离度量方式;
散度这种度量方式不具备对称性,即 $D_f(p{data} \parallel p_g)$ 和 $D_f(p_g \parallel p_{data})$ 不相等(严格来说,距离度量方式必须具备对称性,所以散度不是一种距离度量方式,不过此处不去刻意关注这一点,直接把散度也作为一种距离度量方式,下文也是如此)
1.2.1 f-divergence
\begin{equation}
D_f(p_{data} \parallel p_g)=\int_xp_g(x)f(\frac{p_{data}(x)}{p_g(x)})dx
\end{equation}
上述公式中 $f$ 为凸函数,且 $f(1)=0$ ;采用不同的 $f$ 函数(Generator),可以得到不同的优化目标:
GAN | Divergence | Generator ($f(t)$) |
---|---|---|
KLD | $t \log t$ | |
GAN | JSD - $2 \log2$ | $t \log t - (t+1) \log(t+1)$ |
LSGAN | Pearson $mathcal{x}^2$ | $(t-1)^2$ |
EBGAN | Total Variance | $|t-1|$ |
LSGAN: 是 f-divergence 中 $f(x)=(t-1)^2$ 时的特殊情况;
Loss:
\begin{equation}
\mathop{\min}\limits_D J(D)=\mathop{\min} \limits_D [{\frac{1}{2}} {E_{x \sim {p_{data}} (x)} } [D(x)-a]^2 + {\frac{1}{2}} {E_{z \sim {p_z}(z)}} [D(G(z))-b]^2]
\end{equation}
原作中取 a=c=1,b=0;
优点:
- 稳定训练:解决了传统 GAN 训练过程中的梯度饱和问题
- 改善生成质量:惩罚距离判别器决策边界较远的生成样本;因为样本类别正确时,训练的效果不一定好;
1.2.2 Integral probality metric(IPM)
IPM 定义了一组评价函数 $f$,用于度量任意两个分布之间的距离;在一个紧凑的空间 $\chi\subset\mathrm{R^d}$ 中,定义 $\mathcal P(\chi)$ 为在 $\chi$ 上的概率测度;那么两个分布 $p_{data}$,$p_g$ 之间的 IPM 可以定义为:
\begin{equation}
d_{\mathcal{F}}(p_{data},p_g)=sup_{f \in \mathcal{F}}\mathbb E_{x \sim p_{data}} [f(x)]-\mathbb E_{x \sim {p_{data}}} [f(x)]
\end{equation}
类似于 f-divergence,不同函数 $f$ 也可以定义出一系列不同的优化目标;典型的有 WGAN,Fisher GAN;
WGAN:提出了一种全新的距离度量方式——地球移动距离(EM, Earth-mover distance),也叫 Wasserstein 距离:
\begin{equation} W(p_{data},p_g)=inf_{\gamma\in\sqcap(p_{data},p_g)}\mathbb E_{(x,y)\in\gamma}[\lVert{x-y}\rVert] \end{equation}
$\sqcap(p_{data},p_g)$ 表示一组联合分布,这组联合分布里的任一分布 $\gamma$ 的边缘分布均为 $p_{data}(x)$ 和 $p_g(x)$
直观上来说,概率分布函数可以理解为随机变量在每一点的质量,所以 $W(p_{data},p_g)$ 则表示把概率分布 $p_{data}(x)$ 搬到 $p_g(x)$ 需要的最小工作量;
WGAN 也可以用最优传输理论来解释,WGAN的生成器等价于求解最优传输映射,判别器等价于计算 Wasserstein 距离,即最优传输总代价;WGAN 的理论推导和解释比较复杂,但代码实现非常简单:
- 判别器最后一层去掉 sigmoid
- 生成器和判别器的 loss 不取 log
- 每次更新判别器的参数之后把它们的绝对值截断到不超过一个固定常数 c
上述第三点,在WGAN的后来一篇工作 WGAN-GP 中,将梯度截断替换为了梯度惩罚
1.2.3 f-divergence 和 IPM 对比
- f-divergence 两个问题
- 随着数据空间的维度 $x\in\mathcal X=\mathcal R^d$ 的增加,f-divergence 会非常难以计算;
- 两个分布的支撑集通常是未对齐的,这将导致散度值趋近于无穷;
- IPM 不受数据维度的影响,且一致收敛于 $p_{data}$,$p_g$ 两个分布之间的距离;而且即便是在两个分布的支撑集不存在重合时,也不会发散;
1.2.4 辅助的目标函数
在许多 GAN 的应用中,会使用额外的 Loss 用于稳定训练或者达到其他的目的;
- 比如在图像翻译,图像修复,超分辨当中,生成器会加入目标图像作为监督信息;
- EBGAN 则把 GAN 的判别器作为一个能量函数,在判别器中加入重构误差;
- CGAN 则使用类别标签信息作为监督信息;
1.4 常见的 GAN
1.4.1 DCGAN
DCGAN 使用 CNN 结构来稳定 GAN 的训练,并使用了一些 trick:
- Batch Normalization;
- 使用Transpose convlution进行上采样;
- 使用Leaky ReLu作为激活函数;
上面这些 trick 对于稳定 GAN 的训练有许多帮助,自己设计 GA 网络时也可以酌情使用;
1.4.2 层级结构
GAN 对于高分辨率图像生成一直存在许多问题,层级结构的 GAN 通过逐层次,分阶段生成,一步步提生图像的分辨率;
- 多对 GAN: StackGAN,GoGAN;
- 单一 GAN:分阶段生成的有 ProgressiveGAN;
1.4.3 自编码结构
经典的 GAN 结构里面,判别网络通常被当做一种用于区分真实——生成样本的概率模型;而在自编码器结构里面,判别器(使用AE作为判别器)通常被当做能量函数(Energy function);对于离数据流形空间比较近的样本,其能量较小,反之则大;有了这种距离度量方式,自然就可以使用判别器去指导生成器的学习;和 LSGAN 有啥区别
AE 作为判别器,为什么就可以当做能量函数,用于度量生成样本离数据流形空间的距离呢?首先,先看AE的loss:
$D(u)=\lVert u-AE(u)\rVert$
AE 的 loss 是一个重构误差;使用 AE 做为判别器时,如果输入真实样本,其重构误差会很小;如果输入生成的样本,其重构误差会很大;因为对于生成的样本,AE 很难学习到一个图像的压缩表示(即生成的样本离数据流行形空间很远);所以,VAE的重构误差作为 $p_{data}$ 和 $p_g$ 之间的距离度量是合理的;典型的自编码器结构的 GAN 有:BEGAN,EBGAN, MAGAN 等;
2 隐空间
隐空间是数据的一种压缩表示的空间;通常来说,我们直接在数据空间对图像进行修改是不现实的,因为图像属性位于高维空间中的流形中;但是在隐空间,由于每一个隐变量代表了某个具体的属性,所以这是可行的;
这部分探讨 GAN 是如何处理隐空间及其属性的,此外还将探讨变分方法如何结合到GAN的框架中;
2.1 隐空间分解
GAN的输入隐变量 z 是非结构化的,我们不知道隐变量中的每一位数分别控制着什么属性;因此有学者提出,将隐变量分解为一个条件变量 c 和标准输入隐变量 z;具体包括监督的方法和无监督的方法;
2.1.1 监督方法
CGAN:将随机噪声 z 和类别标签 c 作为生成器的输入,判别器则将生成的样本/真实样本与类别标签作为输入;以此学习标签和图片之间的关联性。
ACGAN:将随机噪声 z 和类别标签 c 作为生成器的输入,判别器则将生成的样本/真实样本输入,且回归出图片的类别标签;以此学习标签和图片之间的关联性;
2.1.2 无监督方法
无监督方法不使用任何标签信息;因此,无监督方法需要对隐空间进行解耦得到有意义的特征表示;
InfoGAN:对把输入噪声分解为隐变量 z 和条件变量 c (训练时,条件变量 c 从均匀分布采样而来),二者被一起送入生成器;在训练过程中通过最大化 c 和 G(z,c) 的互信息 I(c;G(z,c)) 以实现变量解耦( I(c;G(z,c)) 的互信息表示 c 里面关于 G(z,c) 的信息有多少,如果最大化互信息 I(c;G(z,c)) ,也就是最大化生成结果和条件变量 c 的关联性);模型结构和 CGAN 基本一致,除了 Loss 多了一项最大互信息;
从上面分析可以看出,InfoGAN 只是实现了信息的解耦,至于条件变量 c 每一个值的具体含义是什么,我们无法控制;
ss-InfoGAN:采用半监督学习方法,把条件变量 c 分成两部分, $c=c_{ss}\bigcap c_{us}$,$c_{ss}$ 则利用标签像 CGAN 一样学习,$c_{us}$ 则像 InfoGAN 一样学习;
2.2 GAN & VAE
GAN 相比于 VAE 可以生成清晰的图像,但是却容易出现 mode collapse 问题;VAE 的目标就是重构所有样本,所以不会出现 mode collapse 问题;:ghost:
VAEGAN:结构很像前文提及的 MRGAN;Loss 包括三个部分,分别是判别器某一层特征的重构误差,VAE 的 Loss,GAN 的 Loss;
附录
A 推荐资料
- Hong, Yongjun, et al. “How Generative Adversarial Networks and its variants Work: An Overview of GAN.”z
- GAN的一些小trick
- GAN的使用技巧与注意事项笔记
- 解决模式崩溃的目标函数
B 参考资料
[1]. 我爱馒头. GAN万字长文综述[EB/OL]. https://zhuanlan.zhihu.com/p/58812258. 2019-03-23/2019-03-26.
[2]. 用户1737318. 深度学习的三大生成模型:VAE、GAN、GAN的变种模型[EB/OL]. https://cloud.tencent.com/developer/article/1143273. 2017-08-09/2019-04-09.
[3]. NOVA. GAN总结综述[EB/OL]. https://zhuanlan.zhihu.com/p/59397282. 2019-03-15/2019-04-09.
Comments