本系列意在长期连载分享,内容上可能也会有所增删改减;

因此如果转载,请务必保留源地址,非常感谢!

知乎专栏:当我们在谈论数据挖掘

引言

GAN(Generative Adversarial Networks)于2014年由 Lan Goodfellow 提出,被 Yann LeCun 誉为"The coolest idea in deep learning in the last 20 years"。事实上,由于 GAN 独特的思路与惊人的实验效果,它自提出就受到广泛关注,用了不到两年的时间,卷席各种 AI 顶会,方兴未艾;另一方面,经过这些年的发展,GAN 依然很不完善,大部分时候只是 TOY 一般的存在。因此,本文会介绍迄今(2017年)部分基础或广泛认可的 GAN 理论与结构,需要进一步了解的同学需得长期跟进相关论文。

GAN

GAN(Generative Adversarial Networks)最初在“Goodfellow I J, Pougetabadie J, Mirza M, et al. Generative Adversarial Networks.2014”中被提出,是一种无监督的生成模型算法。我们先从概念上进行简单介绍。

AutoEncoder 及其相关模型中,介绍过生成模型的本质就是对 [公式] 进行建模,此时一般方法会选定模型并用最大似然学习参数。GAN 与一般生成模型最主要的区别就在于此:

  1. GAN 并不显式地对 [公式] 建模,而试图利用一个 Generator(G) 来学习出数据的分布
  2. 在判断学习出的模型的优劣时,它也并不直接给出误差计算函数,而同样试图用 Discriminator(D) 来自动判断模型的优秀程度

可以看出,GAN 其实跟 DL 领域的趋势是一致的,即将 人工选择复杂模型 的风险转移到 简单模型+人工优化参数 上;而且更进一步,具有一定博弈的意味。当然,这只是感性的说法,下面我们更深入地看看 GAN。

首先,GAN 要优化的目标如下

[公式]

通过迭代训练 Generator 和 Discriminator 来训练 GAN,方法依然是 BP,具体流程如下

目标函数的初步理解

看过DNN 与它的参数们(贰)的同学对 Binary Cross Entropy Loss 应该不会陌生,它是 DNN 中最常用的 Loss Function 之一,其定义为

[公式]

其中, [公式] 代表数据真实 label, [公式]  [公式] 为预测。

可以看出,对于 GAN 中的 Discriminator 和 Generator,本质上都是在优化平均 Binary Cross Entropy Loss(更准确的说是 Binary Cross Entropy Loss 取反)。证明过程较简单,这里不再赘述。

对于 Discriminator 的训练大家都轻车熟路了,没啥区别。但是对于 Generator,GAN 的优化目标问题在于,当 [公式] 接近1,即 Discriminator 基本能正确分辨真实与生成的数据时,Generator 就会出现 Gradient Vanish 问题,从而停止进化。这种情况发生的原因一般为:

  1. 训练初期,Generator 较弱,Discriminator 很容易就能区分出真实数据与随机数据,Generator 会 Gradient Vanish
  2. 训练中期,若 Discriminator 能力远超于同期 Generator,则 Generator 会 Gradient Vanish

训练流程的理解

GAN 的训练过程有两点比较重要:

  1. 输入随机噪声,期望通过训练让 Generator 产生以假乱真的数据,本质是希望 Generator 能将随机噪声的分布 [公式] 映射到真实数据的分布 [公式]
  2. 迭代训练 Generator 和 Discriminator,期间需保持它们能力相近(否则会出现 Gradient Vanish,如上述),期望最后能达到“纳什均衡”。此时虽然 [公式] 显式表达式依然未知,但可以利用 Generator 对数据进行采样,以产生训练样本集中没有的数据

关于第1点,以下给出理论上 Generator 能将随机噪声的分布 [公式] 映射到真实数据的分布 [公式] 的简单证明,基本是概率论基础

[公式]

关于第2点,就不太乐观了,可能会出现 Non-Convergence 的问题。如Lan Goodfellow 在 Quora 中的回答所说,“所有的理论都认为 GAN 应该在纳什均衡上有卓越的表现,但梯度下降只有在凸函数的情况下才能保证纳什均衡。当博弈双方都由神经网络表示时,在没有实际达到均衡的情况下,让它们永远保持对自己策略的调整是可能的。”

目标函数的进一步理解

限于篇幅,这部分的推导均会省略,有兴趣的同学可以查阅原文或相关文献。

前文介绍了 GAN 的训练是迭代训练 Discriminator 和 Generator,且优化的目标是 Binary Cross Entropy Loss。接下来我们来考虑某一轮的训练,当前时刻的 Discriminator 和 Generator 分别是 D 和 G,我们需要先训练出新的 [公式] ,满足

[公式]

对于给定样本 [公式] ,对它而言最好的 [公式] 会是

[公式]

其结果为

[公式]

将其带入 [公式] ,可以化简得到

[公式]

其中, [公式] 表示 JS Divergence,其范围为 [公式]  [公式] 公式如下,其中 [公式] 表示 KL Divergence

[公式]

即,接下来我们要求解的 [公式] 是满足

[公式]

毫无疑问,其结果就是

[公式]

这里,被用于衡量 [公式]  [公式] 的距离的指标最好能随着两者的相似性增加逐渐减小为0。可是 JS Divergence 并不太适用于这个场景,原因在于 [公式] 。也就是,绝大多数情况下而言 [公式] ,而在 [公式] 时, [公式] 会突变为0。因此,正常情况下根本不会产生 Gradient 来优化 Generator 。在“Arjovsky M, Bottou L. Towards Principled Methods for Training Generative Adversarial Networks. 2017.”中作者给出了详细证明。这里我们只给出图例说明,如下图两条曲线:它们虽然有重合,但是相比于两条曲线占有的空间(想象是两条很长的曲线)几乎是忽略不计的。

GAN 与 VAE 的区别

最后,作为两大主流生成模型,我们来谈谈 GAN 与 VAE 的区别

  1. VAE 在理论上需要利用 Variational Inference 进行近似,进而引入偏差;而 GAN 不需要这种近似,即理想情况下 GAN 能更好地拟合数据真实分布。事实上,VAE 确实在生成图像时更加模糊,而 GAN 相对锐利
  2. VAE 作为 AE 的一种,本质上是对数据的压缩,同时可以用于生成新数据;而 GAN 则主要关注还原真实数据分布,通过采样生成新数据

WGAN

原始 GAN 其实存在各种问题,鲁棒性极差,如:非常依赖 Discriminator 和 Generator 的结构设计、需要精心的调节超参数、没有一种指标来量化训练的进度、还可能出现 Mode Collapse,不一而足。自 GAN 提出后,大量的文章都尝试解决 GAN 的某些问题,而 WGAN(Wasserstein GAN)则几乎同时解决(缓解)了上述所有的不足,引发了大量的关注与讨论。下面,我们简单介绍下这个相对成熟版本的 GAN。

其实 WGAN 的提出经历了三个阶段:

  1. 在“Arjovsky M, Bottou L. Towards Principled Methods for Training Generative Adversarial Networks. 2017.”,作者主要对 GAN 存在的问题进行了严谨的理论分析,非常精彩
  2. 在“Arjovsky M, Chintala S, Bottou L. Wasserstein GAN. 2017.”,作者提出了 WGAN,最大的贡献在于利用 Wasserstein Distance(Earth-Mover Distance)代替 GAN 中的 JS Divergence,极大缓解了 GAN 难以训练的问题
  3. 在“Gulrajani I, Ahmed F, Arjovsky M, et al. Improved Training of Wasserstein GANs. 2017.”,作者对 WGAN 的目标函数进行了优化,在改进了训练过程的同时也能达到更好的效果

下面我们简单介绍一下 WGAN 及 Improved WGAN。

上文提到,原始的 GAN 由于 JS Divergence 衡量分布距离时突变的性质,训练 Generator 会出现 Gradient Vanish 的问题;于是,WGAN 改用 Wasserstein Distance(Earth-Mover Distance)来衡量两个分布的距离。Wasserstein Distance 具体定义限于篇幅不展开了,其实跟后面关系也不大,有兴趣的同学可以查看原文献。Wasserstein Distance 的一个重要性质就是变化是平滑的,也就是说能够很好地描述两个分布逐渐变得相似的这个过程,根本上解决了 Gradient Vanish 的问题。

更让人意想不到的是,作者在历史文献中找到了将 Wasserstein Distance 直接套用 GAN 框架中的理论依据,即可以推导出分布 [公式]  [公式] 的Wasserstein Distance可以写作

[公式]

其中, [公式] 表示上确界; [公式] 表示函数 [公式] 的 Lipschitz 常数小于等于1,即对任意 [公式] 需要 [公式] 满足

[公式]

上式的含义为,对所有满足 [公式]  [公式] ,计算 [公式] ,并取其最大值。如果代入 GAN 的场景,即

[公式]

可以看出,使用 Wasserstein Distance 时目标函数与原始 GAN 不同,但同样可以用神经网络来学习 Discriminator 和 Generator。区别仅在于 [公式] 这个约束。

原始 WGAN 利用 weight clipping 的方式来处理这个带约束的问题,很快“Gulrajani I, Ahmed F, Arjovsky M, et al. Improved Training of Wasserstein GANs. 2017.”的作者提出了更加优秀的解决方法,这里我们只简单介绍下后者。作者将上述约束转化为目标函数中的 Penalty 项,这其实也是很多约束优化算法的做法,具体优化目标转变为

[公式]

关于 Penalty 项有两点需要说明:

  1. 对于 [公式] ,这里并不是对整个空间采样,而只对 [公式] 之间的空间采样。这里就不展开了,有需要了解细节的同学请参考原文
  2. 直接观察 Penalty 项,其意义是期望 [公式] 逼近1,而非严格小于等于1。关于这点,其原因在于在 [公式] 的采样区域中, [公式] 实际上通常为1;且用范数而非 [公式] 能加快收敛速度并提升效果。原文同样有更详细说明

最终,WGAN 的训练步骤为

WGAN 在效果上虽然没有飞跃的进步,但其巨大的意义在于使 GAN 的实用性大大提升,体现主要体现为以下方面:

  1. 不再需要精心平衡 Discriminator 和 Generator 的能力了,且效果更稳健,不依赖于过于精心设计(trick)的结构
  2. 缓解了 Mode Collapse 现象,确保生成的数据的多样性
  3. 最重要的是,有一个数值可以定量描述并跟踪训练的效果了

可以预见,在缓解了这些问题后,GAN 研究的价值和热度都会得到显著的提升,不得不说是比较振奋人心的。

尾巴

这一篇拖更了很久了,近期更新节奏也会比较慢,工作和生活上都需要投入更多的心思。不过,最近还是去参加了 Chris Manning  Sebastian Thrun 两位大牛的报告,感觉还是有一定收获的,以后有机会聊一聊。

下一篇大概会开启 Reinforcement Learning 部分,具体安排还得再考虑下,毕竟这领域是个巨坑,作为专栏也只能抽取些有意思的部分谈一谈。

本系列其他文章:

Supervised Learning:

当我们在谈论 Deep Learning:DNN 与 Backpropagation

当我们在谈论 Deep Learning:DNN 与它的参数们(壹)

当我们在谈论 Deep Learning:DNN 与它的参数们(贰)

当我们在谈论 Deep Learning:DNN 与它的参数们(叁)

当我们在谈论 Deep Learning:CNN 其常见架构(上)

当我们在谈论 Deep Learning:CNN 其常见架构(下)

当我们在谈论 Deep Learning:GAN 与 WGAN