http://mp.weixin.qq.com/s?__biz=MzAwMjM3MTc5OA==&mid=404641466&idx=1&sn=8a71fd13f264fa704f58be1f677d7c71&scene=0#wechat_redirect

今天想与大家分享的是图像生成中一些工作。这些工作都基于一大类模型,Generative Adversarial Networks(GAN)。从模型名称上甚至都可以看出一些发展轨迹:GAN->CGAN->LAPGAN->DCGAN->GRAN->VAEGAN 等等。所以,在今天的分享中,我会尽量以梳理论文和论文之间的联系、区别为主。会涉及的论文有:

1.《Generative Adversarial Nets》

2.《Conditional Generative Adversarial Nets》

3.《Deep Generative Image Models using a Laplacian Pyramid of Adversarial Networks》

4.《Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks》

5.《Autoencoding beyond pixels using a learned similarity metric》

6.《Generating Images with Recurrent Adversarial Networks》

GAN

既然是图像生成,就要考虑 generative models。过去的两三年中出现的 generative models 主要可被归于两类。一类是基于 Variational AutoEncoder(VAE),其优点是改变了 AutoEncoder 中很容易过拟合的 reconstruction error based learning 的方法,将学习的目标变成去尽可能满足某个预设的先验分布的性质。然而,可以看出,这种需要“假设先验分布”的方式仍然有局限。而第二类 generative models,Generative Adversarial Networks(GAN)则较好地避开了这个问题。GAN[1] 启发自博弈论中的纳什均衡,其包含一对模型——一个生成模型(G)和一个判别模型(D)。用一个很经典的比喻就是,生成模型(G)就像小偷,要尽可能地提高自己的偷窃手段去欺骗身为警察的判别模型(D),而D也要尽可能地训练自己的火眼金睛去防止被欺骗。所以,真正的学习过程就变成了一种生成模型(G)和判别模型(D)之间的竞争过程——随机从真实样本和由生成模型(G)生成出的“假样本”中取一个,让判别模型(D)去判断是否为真。所以,体现在公式上,就是下面这样一个 minmax 的形式。

从上面的描述中可以看出,GAN 这种竞争的方式不再要求一个假设的数据分布,也就是说我们不用 formulate p(x),而是直接进行 sampling,从而真正达到了理论上可以完全逼近真实数据。这也是 GAN 最大的优势。

然而,everything has a price. 这种不需要预先建模的方式的缺点就是在于它太过自由了,对于较大的图片,较多的 pixel 的情形,基于简单 GAN 的方式就不太可控了。在 GAN[1] 中,每次学习参数的更新过程,被设为 D 更新 k 回,G 才更新 1 回,也是出于类似的考虑。

CGAN

为了解决 GAN 太过自由的这个问题,一个很自然的思想便是给 GAN 加上一点点束缚,于是便有了 Conditional Generative Adversarial Nets(CGAN)[2]。这篇工作的改进非常 straightforward,就是在 D 和 G 的建模中分别加入 conditional 变量 y。后来这一方式也被证明非常有效。

LAPGAN

另一方面,为了改进 GAN 太自由的问题,还有一个想法就是不要让 GAN 一次完成全部任务,而是一次生成一部分,分多次生成一张完整的图片。Sounds familiar?对啊,就是去年 DeepMind 大火的一个工作 DRAW 的思想咯。DRAW 中指出,我们人类在完成一幅图画时,都不一定是一笔完成的,我们又为何要求机器能做到呢?所以 DRAW 用了一种 sequential VAE 的模型,让机器一点点“写”出了一个个数字。于是 Facebook 等人提出的 LAPGAN[3] 则是采用了这样的思想,在 GAN 基础上做出了改进。LAPGAN[3] 这个工作既有 project page,也有开源代码,是非常值得重视的工作。

在实现 sequential version 的方式上,LAPGAN[3] 这个工作采用的是一种几十年前的 Laplacian Pyramid 的方式,也因此起名做 LAPGAN。

这个方式主要的操作便是 downsample 和 upsample,而优势是每次只考虑样本和生成图像之间的残差的学习效果,某种程度上和 Residual Network 的思想是一样的。针对残差的逼近和学习,相对更加容易。于是,在这个思想上,便有了如下 LAPGAN 的学习过程:

这个图中,当图像是较大 pixel 时,便需要进行 Laplacian Pyramid 过程,并且在每一个 process step 时(每一个 Pyramid level),传给 D 的只是针对残差的 compare。另一方面,当 pixel 足够小的时候,也就是最右边的 step,则不再需要进行 upsample 和 downsample 的过程,这时给 D 的 传送则是未经处理的样本和生成的图像了。Facebook 指出,这样的 sequential 方式减少了每一次 GAN 需要学习的内容,也就从而增大了 GAN 的学习能力。值得注意的是,LAPGAN 其实也是 LAPCGAN,都是 conditional 的。另外,每一步的 GAN 都是 independently trained 的。与此同时,这篇论文还总结出了许多工程上的经验,都在他们的 project page 中。

DCGAN

DCGAN[4] 这篇论文的提出看似并没有很大创新,但其实它的开源代码现在被使用和借鉴的频率最高。这一切必须归功于这篇工作中比 LAPGAN 更 robust 的工程经验分享。也就是说,DCGAN,Deep Convolutional Generative Adversarial Networks,这个工作[4],指出了许多对于 GAN 这种不稳定学习方式重要的架构设计和针对 CNN 这种网络的特定经验。重点来看:

比如他们提出既然之前已经被提出的 strided convolutional networks 可以从理论上实现和有 pooling 的 CNN 一样的功能和效果,那么 strided convolutional networks 作为一个可以 fully differentiable 的 generator G,在 GAN 中会表现得更加可控和稳定。又比如,本来 Facebook 的 LAPGAN 中指出 Batch Normalization(BN) 被用在 GAN 中的 D 上会导致整个学习的 collapse,但是 DCGAN 中则成功将 BN 用在了 G 和 D 上。这些工程性的突破无疑是更多人选择 DCGAN 这一工作作为 base 的重要原因。

另一方面,他们在 visualize generative models 也有许多贡献。比如他们学习了 ICLR 2016 论文《Generating Sentences From a Continuous Space》中的 interpolate space 的方式,将生成图片中的 hidden states 都 show 了出来,可以看出图像逐渐演变的过程。

与此同时,他们也讲 Vector Arithmetic 运用在了图像上,得到了如下的一些结果:

GRAN

今天要推荐的倒数第二篇论文[5] 也和 DRAW 有着非常多的相似点。之前已经说了,在改进 GAN 时,可以考虑 sequential version。Sequential models 的好处便是可以让下一步的 model 利用上一步得到的结果,在之前的结果上做出修改,类似于一种 conditional 的方式。为了让 GAN 也拥有这种 sequential 的能力,这篇论文[5] 将把 GAN 和 LSTM 结合,称为 GRAN,使其分割成了 step by step 的过程。每一个 step 中,就像 LSTM 的 cell 一样,都有一个 C_t,这个决定的是 what to draw,也就是画的 content,也是每一个 step 的 output;同时,就像 LSTM 中的 hidden states 一样,这里也有 h_{c,t}。与简单的 LSTM 不同的是,这里决定每个 cell 内容,也就是 的不仅仅是 hidden states,还有一个 “hidden of prior”,是专属于 GAN 中的生成模型 G 的一个先验 ,h_z。 h_z 和 h_{c,t} 拼接(concatenate)之后共同决定当前 step 的 update——what to draw。

并且,因为完美利用了 gradient of convolution 还是 convolution 的性质,这个改造后的 GRAN 可以将每次的求导看做一次 decoding 过程,而每次的 convolution 等操作变成 encoding 过程,也就可以因此对应到 DRAW 中的 decoder 和 encoder 部分。而 GAN 和 DRAW 最大的不同之处便在于,GAN 中在计算 loss 时是在 hidden space 中,而 DRAW 是在原始 input space 中。

那么在实验中,这篇论文也确实证明了 sequential models(multi-step)生成的图像比 single step 的要好。只不过,generative models 的 evaluation 还比较模糊,所以实验结果上并不能很好地和以前的 GAN 或者相关方法做比较。接下来另一个重点来了,这篇论文的一个创新便是提出了一种 GAN 这种特殊 generative models 的评价方法。过去用于评价 generated image 的 Parzen Windows 或者 manual evaluation 等方法都各有各的缺点。这篇论文提出,既然本来就是竞争模型,可以让两组 GAN 互相“竞争”评价。互为评委,互为选手。下面这个配图也是挺萌的……

那么在实验中,这篇论文也确实证明了 sequential models(multi-step)生成的图像比 single step 的要好。只不过,generative models 的 evaluation 还比较模糊,所以实验结果上并不能很好地和以前的 GAN 或者相关方法做比较。接下来另一个重点来了,这篇论文的一个创新便是提出了一种 GAN 这种特殊 generative models 的评价方法。过去用于评价 generated image 的 Parzen Windows 或者 manual evaluation 等方法都各有各的缺点。这篇论文提出,既然本来就是竞争模型,可以让两组 GAN 互相“竞争”评价。互为评委,互为选手。下面这个配图也是挺萌的……

那么在实验中,这篇论文也确实证明了 sequential models(multi-step)生成的图像比 single step 的要好。只不过,generative models 的 evaluation 还比较模糊,所以实验结果上并不能很好地和以前的 GAN 或者相关方法做比较。接下来另一个重点来了,这篇论文的一个创新便是提出了一种 GAN 这种特殊 generative models 的评价方法。过去用于评价 generated image 的 Parzen Windows 或者 manual evaluation 等方法都各有各的缺点。这篇论文提出,既然本来就是竞争模型,可以让两组 GAN 互相“竞争”评价。互为评委,互为选手。下面这个配图也是挺萌的…… 最后说说缺点吧,现阶段来看这个模型的可扩展性还不是那么好,尽管说是 step by step 的,在最后的实验中也只用了几个 discrete step 做实验,[1,3,5] 这样。

VAEGAN

上面说的都是通过变成 sequential versions 来减弱 GAN 的自由性。但是还有一篇工作[6],是“反其道而行之”,将 GAN 中学出来的 feature 重新运用在 VAE 的 reconstruction objective 中,从而结合了 GAN 和 VAE 的优点。于是,这个工作被称为 VAEGAN

具体的,因为在以前的 reconstruction objective 中,都用到的是 element-wise distance metrics。这种 metrics 其实对于很多 hidden feature/space 的学习并不好。这篇论文的根本 idea 就是利用 GAN 中 Discriminator D,使其当做 learned similarity measure,来替代/弥补 reconstruction objective 中的这种 similarity measure component。D 学习到的 similarity measure 便可以被认为是一种 high-level representation 中的 measurement。可以看出,这个思想还是很有可扩展性的。

今天的论文全部介绍完毕,其实基于博弈论的竞争思想,还发展处了 Adversarial AutoEncoder 等工作,但是思想上大同小异,大家有兴趣可以自己再去阅读啦。