淘先锋技术网

首页 1 2 3 4 5 6 7

ICLR 2017 | GAN Missing Modes 和 GAN

2016-11-07小 S 程序媛的日常 程序媛的日常

ICLR 2017 的 submission DDL 刚刚过,网上就纷纷有了 ICLR 2017 导读的文章。本周我也将为大家带来 ICLR 2017 submission 的分类导读,而且是更详细地介绍!今天开篇就来介绍我一直很关注也一直在做的 GAN 方面的部分论文(不是全部,分批介绍吧)。


今天会介绍的论文有(全部来自 ICLR 2017 submissions):

1. 《Mode Regularized Generative Adversarial Networks》. Tong Che, Yanran Li, Athul Jacob, Yoshua Bengio, Wenjie Li

2. 《Generative Adversarial Parallelization》. Daniel Jiwoong Im, He Ma, Chris Dongjoo Kim, Graham Taylor

3. 《Unrolled Generative Adversarial Networks》. Luke Metz, Ben Poole, David Pfau, Jascha Sohl-Dickstein.

4. 《Improving Generative Adversarial Networks with Denoising Feature Matching》. David Warde-Farley, Yoshua Bengio

5. 《Energy-based Generative Adversarial Networks》. Junbo Zhao, Michael Mathieu, Yann LeCun




下面进入一篇。

Mode RegularizedGenerative Adversarial Networks

GAN 模型虽然在过去引起极大的关注,但是它过于 free 的训练方式使得它对于参数极其敏感,训练过程极其不稳定。除此以外,GAN 生成的样本(主要是图片)会存在比较严重的 missing modes 的问题。所谓 missing modes 可以用这篇论文[1] 中的这样一张图来解释:


即如果 training data 中有一些 modes 的样本占比很小,则很容易在训练时被 miss 掉,使得 GAN 只能学会大 modes 的表达,从而生成出的样本会集中在某几个 modes 上,从而缺少 diversity。另一个更可怕的问题是,当这种 missing modes problem 出现时,更容易加剧 GAN 训练不稳定的问题。


为此,这篇论文[1] 提出一种 mode-regularized 的思想,来增加对 GAN 训练过程的控制。具体来说,与其上 GAN 中的生成网络 G 直接从 noise vector z 映射到样本空间,我们可以让 z 从一个样本空间先映射过来,也就是有一个 z = encoder(X) 的过程,从而再,G(encoder(X))。这样的好处是,reconstruction 过程会增加额外的学习信息,使得生成网络生成出来的 fake data(generated sample)不再那样容易被判别网络 D 一下子识别出来。这样 D 和 G 就都能一直有 loss/gradient 去将训练过程较为稳定地进行下去,从而达到了让 GAN 训练更加稳定的效果。另一方面,因为 encoder(X) 保证了 X 和映射后的 X 的空间的对应性,也就可以保证了生成网络能覆盖所有样本空间的样本 modes,也就理论上保证了 missing modes 问题的减少。所以,这篇论文[1] 给出的是一种 rugularizer for GAN,而用这样的 regularizer 的 GAN 就被作者叫做 Regularized-GAN(在实验中)。


在此基础上,作者继续提出了一种 manifold-diffusion GAN(MDGAN),它将这种 reconstruction 作为一种 regularizer 的想法进一步变成了 two-step training。也就是说,要让 reconstruction 也能有更好的目标,把这种 reconstruction loss 提取成单独的一步去训练——于是乎,第一步 manifold step 就是去做 G(Enc(X)) 和 X 的训练,减少这两者之间的差别;第二步 diffusion 就是让 G(Enc(X)) 再和 G(z) 做拉近。这样从模型训练的过程,形象的理解就是,先把两个分布的“形状”调整好,再把两个分布的距离拉近。


在实验中,这篇论文[1] 还有一个贡献就是提出了新的 evaluation metric,叫做 MODE score。作者基于以前由 OpenAI 团队提出的 Inception score,发现,Inception score 有一种很不好的现象是,即使 GAN 的网络训练塌了(即会产生完全是噪音,肉眼根本不 perceptual 的图片),inception score 的分数也会很高(很高应该代表的是图片非常像真实样本)。这是不 make sense 的。为此,作者给了新的 score,将塌了的情况用一种额外的 metric 衡量进来——从而使得最终的 MODE score 是基于样本质量和样本 mode(塌了的话,mode 就非常差),两个角度。



最终,运用几种 metric,这篇论文[1] 证明了这样的 mode regularizers 是非常有助于提高 GAN 训练的稳定性的,同时也非常有助于提高 mode diversity 的。除了这样的量化分析,作者同时给了一些生成的样本质量来证明:这种 regularizer 并不会影响生成的图片质量。




Generative Adversarial Parallelization

今天介绍的第二篇论文[2],其实也是为了提高 GAN 训练稳定性。它是之前(很久之前)已经在公众号介绍过的另一篇 GAN 的工作的后续。这篇论文[2] 解决稳定性的方法很简单,我个人认为它也和 OpenAI 提出 Inception Score 的那篇论文有关系。在那篇论文里,openAI 团队还提出了一种 minibatch discrimination 的训练方法,也就是在每次让 GAN 的判别网络 D 进行判别时,不要基于单个样本,而是基于一个 minibatch 的一批样本。这样一批样本组成起来,就更加 “robust”。那么现在要介绍的这篇论文[2] 是怎么做的呢,这篇论文缩写是 GAP,它就是说,我们不要让 GAN 每次一个生成网络用一个判别网络来判别,而是同时训练几组 GAN,然后让他们的判别网络 D 们,swap,交替着去判别其他的生成网络 G 的样本。这就很像是 minibatch discrimination 了。就是我们一起学,你可能只见过现象 A(mode A),我见过 mode B,那我见过 mode B 的 D_B 去来判别你只会生成 mode A 的 G_A,这就更容易 robust 了,也更容易不 miss modes。用一个(卖萌的)图例来一图以蔽之:


这篇论文在后续的 experiments 分别通过抛出问题的方式来 lead experiments results,但是总体的结论就是,我们这样 swap 可以提高 trainig 的稳定性,也更容易让学出来的生成样本的分布逼近真实分布。但是比较可惜的是,他们更多的实验是在 toy example 上做的,会更期待更好的效果吧。


Unrolled Generative Adversarial Networks

然后要分享的第三篇论文[3],也是为了提高 GAN 训练稳定和减少 missing modes(mode collapse)。这篇论文做的更加理论一点,它们提出了一种新的 loss。这种 loss 并不是通过改变模型 architecture 来引入的,也不是一种新的 metric,可是一种 gradient-based loss。如果说我们过去做 gradient descent trainig 时候,是让 gradient 进行改变,让其他模型参数保持不变的话;那么他们提出的这种 loss,被叫做 surrogate loss,则是要能基于一阶 gradient 改变后的其他模型参数的变化再去改变二阶甚至高阶 gradient——从而是一种 gradient dynamics 信息。这件事其实并不是很常见,因为在我们大部分神经网络和机器学习的训练中,我们都只会用到一阶导数信息。然而,二阶或者高阶导数的出发点其实是我们真正的不 approximate 的求解就应该是不断的 unroll 出 gradient 的或者是 exact solution 的。而这件事就是非常难算的。所以可以认为,这篇论文[3] 提出的这种 loss 是一种中间态,tradeoff。


上面就是这个 loss 的表达式。进一步来分析,这篇论文[3] 又把这个 loss 给拆成了3项,来分开介绍他们的 contribution:


其中第二项最重要,就是当生成网络 G change 的时候,判别网络 D 能给出很好的反馈——所以当 G 往不好的方面(mode collapse)时改变的时候,D 的这项就会给出较大的惩罚。所以说,G 在生成的时候就要考虑到我走这一步(这么改变)的话,D 会怎么变(D 会怎么看我- -),于是乎 G 的考虑就比以前多了。也是一种高阶 gradient information 的体现。


所以这篇论文[3]我认为最重要的贡献就是,它指出了也强调了高阶信息在神经网络或者在机器学习中的重要性(主要是神经网络)。顺着这个思路思考下去,应该也能为其他模型和其他任务带来一些新的解决方法。




Improving Generative Adversarial Networks with Denoising Feature Matching

接下来要介绍的这篇论文[4] 想法和[3] 有点相似,同时也可以认为是 openAI 那篇论文中(minibatch discrimination 那篇)另一个 trick——feature matching 的延伸和泛化。这个说的是啥呢,在之前训练 GAN 中,已经有人提出了一些比较 heuristic 的训练方法,或者说 addiitional feature,去帮助稳定和提高效果。其中就有一些是用判别网络 D 学到的 feature 来做辅助,让 G 生成的时候要尽可能去匹配 D 的一些 feature 的统计特征。这个事情其实比较好理解,就是说既然你 D 能通过一些东西(feature)判断我不好,那么我就把你的东西直接抄过来,变成我自己的一种能力,让你不再能(只)利用这个 feature 来判别出我是假的。但是这个事情,在这篇论文[4] 之前都很 heuristic,包括前人的 VAEGAN 也提到了 Dis_l(layer)这种 feature 加入一种新 loss。


那么这篇论文[4] 又为什么和今天介绍的论文[3] 有关系呢,它们其实都指出了一种 gradient 或者说生成网络 G 要去改进的方向。[3] 是用高阶 gradient 直接指导 G,而这篇论文[4] 是用 denoising feature matching 来让 G 生成的时候 manifold 更趋向于真实 distribution——而这个 distribution 是通过用 D 学出来的 feature space 来体现的。





Energy-based Generative Adversarial Networks

下面要介绍的这篇论文[5],EBGAN,其实已经放在 arXiv 上有一段时间了。它的主要贡献个人认为还是在于给出了一种 parameter sweeping 的系统调参方法。至于它利用 energy model 来刻画 diversity 的这种方式,我觉得还有值得深挖的地方,暂时来说并没有发挥出太大的 energy based model 的功能。也就是说,他们虽然也致力于解决 mode diversity 的问题,但是解决的办法就是一种 ad-hoc loss——去衡量 diversity,然后把这个 diversity metric 加入 loss function:
如他们在论文里说的,这种 loss 和 minibatch discrimination(上文已经介绍)没什么本质区别。


他们的 parameter sweeping 是这样做的:


就是把 GAN 中,判别网络 D 和生成网络 G 的层数和特征数都提取出来(因为只做了 MLP 的,所以没有什么特殊网络结构),然后把优化等等各种参数都提取出来。这样排列组合(其实没有排列- -),就可以做出一堆 model。把这堆 model 全跑一遍,算 inception score。并给出一些实验结果。这种方式还是不错的,不过局限性也很明显。因为像 DCGAN 这种 CNN 基础的网络就不太能通过这种方式试验出来,而正是 DCGAN 这种网络结构现在种种实验结果表明其更稳定。


写得好累……明天再继续!