想与大家分享的是图像生成中一些工作。
这些工作都基于一大类模型,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》
重要文献:
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.《Generating Images with Recurrent Adversarial Networks》
6.《Autoencoding beyond pixels using a learned similarity metric》
GAN[1]->CGAN[2]->LAPGAN[3]->DCGAN[4]->GRAN[5]->VAEGAN[6]
图像生成最重要的是生成模型的构建,当今的图像生成模型主要可分为两类:
一类是基于Variational AutoEncoder(VAE),其优点是改变了AutoEncoder中很容易过拟合的reconstruction error based learning的方法,将学习目标定为尽可能满足某个预设的先验分布的性质。然而这种需要“假设先验分布”的方式仍然有局限。
第二类生成模型Generative Adversial Networks(GAN)则较好地避开了这个问题,GAN启发自博弈论中的纳什均衡,其包含一对模型——一个生成模型G和一个判别模型D。用一个很经典的比喻就是,生成模型G就像小偷,要尽可能地提高自己的偷窃手段去欺骗身为警察的判别模型D,而D也要尽可能地训练总计的火眼金睛去防止被欺骗。所以,真正的学习过程就变成了一种生成模型G和判别模型D之间的竞争过程——随机从真实样本和由生成模型G生成出的“假样本”中取一个,让判别模型D去判断是否为真。
从上面的描述可以看出,GAN这种竞争的方式不再要求一个假设的数据分布,也就是说不需要构想p(x)再作修正,而是直接进行取样,从而真正达到了理论上可以完全逼近真实数据,这也是GAN最大的优势。但这种不需要于先建模的方式的缺点就在于太过自由,对于较大的图片,较多像素点的情形,基于简单的GAN的方式就太不可控了,在GAN[1]中,每次学习参数的更新过程,被设定为D更新k回,G才更新1回,也是出于类似的考虑。
![](https://i-blog.csdnimg.cn/blog_migrate/0bc404a804bb6730afc093e904dbf559.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/90097ccf2e525fbab92891239b966319.webp?x-image-process=image/format,png)
为了解决GAN太过自由的这个问题,比较直接的想法就是给GAN加上一些约束,于是便有了Conditional Generative Adversarial Nets(CGAN)[2]。这篇文章的工作就是在D和G的建模当中分别加入条件变量y,后来这一方式也被证明非常有效。
为了改进GAN太过自由导致对较大图片,较多像素点处理的劣势,另外一个想法是不要让GAN一次完成全部任务,而是一次生成一部分,分多次生成一张完整的图片。这跟2015年DeepMind大火的一个工作DRAW的思路一致。DRAW提出一种sequential VAE的模型,让机器一点点“写”出一个数字。于是LAPGAN[3]采用了这个思想,在GAN基础上做出了改进。在实现sequential version的方式上,LAPGAN采用的是Laplacian Pyramid的方式,因此起名为LAPGAN。这个方式主要的操作是downsample与upsample,优势在于每次只考虑样本和生成图像之间的残差的学习效果,某种程度上与Residual Network的思想一致。针对残差的逼近和学习,相对更加容易。LAPGAN的学习过程如下:
![](https://i-blog.csdnimg.cn/blog_migrate/7dd2a267d67cf43665f99c9947b3ecdc.webp?x-image-process=image/format,png)
如上图,当图像像素点较多时,便需要进行Laplacian Pyramid过程,并且在每个process step时(每一个Pyramid level),传给D的只是针对残差的compare。另一方面,当pixel足够小的时候,也就是最后边的step,则不再需要进行upsample和downsample的过程,这时给D的传送则是未经处理的样本和生成的图像了。Facebook指出,这样的sequential方式减少了每一次GAN需要学习的内容,也就从而增大了GAN的学习能力。值得注意的是,LAPGAN其实也是LAPCGAN,都是conditional的。另外,每一步的GAN都是independent trained。与此同时,这篇论文还总结出了许多工程上的经验,都在他们的project page中。
DCGAN【4】这篇论文的提出看似并没有很大创新,但其实它的开源代码现在被使用和借鉴的频率最高。这一切必须归功于这篇工作中比LAPGAN更robust的工程经验分享。也就是说,DCGAN,Deep Convolutional Generative Adversarial Networks,这个工作【4】,只出了许多对于GAN这种不稳定学习方式重要的架构设计和针对CNN这种网络的特定经验,重点来看:
比如他们提出既然之前已经被提出的stride convolutional networks作为一个可以fully differentiable的generator G,在GAN中会变现得更加可控和稳定。又比如,本来Facebook的LAPGAN中指出Batch Normalization(BN)被用在GAN中的D上会导致整个学习的collapse,但是DCGAN中则成功将BN用在了G和D上。这些工程性的突破无疑是更多人选择DCGAN这一工作作为base的重要原因。
![](https://i-blog.csdnimg.cn/blog_migrate/17349fd21a4e9b3b97b1d7f74256e061.webp?x-image-process=image/format,png)
另一方面,他们在visualize generative models也有许多贡献。比如他们学习了ICLR 2016论文《Generating Sentences From a Continuous Space》中的interpolate space的方式,将生成图片中的hidden states都展示出来,可以看出图像逐渐演变的过程。
与此同时,他们也将Vector Arithmatic运用在了图像上,得到了如下的一些结果:
![](https://i-blog.csdnimg.cn/blog_migrate/4524dabd1e21370e7b962d18448aaa6f.webp?x-image-process=image/format,png)
论文【5】与DRAW也有许多相似点。上文提到,在改进GAN时,可以考虑sequential version。Sequential models的好处便是可以让下一步的model利用上一步得到的结果,在之前的结果上作出修改,类似于一种conditional的方式。为了让GAN也拥有这种sequential的能力,论文【5】将GAN与LSTM结合,称为GRAN,使其分割成了step by step的过程。每一个step中,就像LSTM中的hidden state一样,这里也有h_{c,t}。与简单的LSTM不同的是,这里决定每个cell内容的不仅仅是hidden states,还有一个“hidden of prior”,是专属于GAN中的生成模型G的一个先验h_z。h_z和h_{c,t}拼接之后共同决定当前step的update——what to draw。
![](https://i-blog.csdnimg.cn/blog_migrate/b776dee74c8a666bf49b599c638d4493.webp?x-image-process=image/format,png)
并且,因为完美利用了gradient of convolutional的性质,这个改造后的GRAN可以将每次的求导看作一次decoding过程,而每次的convolution等操作变成encoding过程,也就可以因此对应到DRAW中的decoder和encoder部分。而GAN和DRAW最大的不同之处在于。GAN中在计算loss时是在hidden space中,而DRAW是在原始input space中。
在实验中,这篇论文也确实证明了sequential models(multi-step)生成的图像比single step的要好。只不过,generative models的评估标准还比较模糊,所以实验结果上并不能很好地和以前的GAN或者相关方法做比较。这篇论文的另一个创世便是提出了一种GAN这种特殊generative models的评价方法。过去用于评价generated image的Parzen windows或者manual evaluation等方法都各有各的缺点。这篇论文提出,既然本来就是竞争模型,可以让两组GAN互相“竞争”评价。互为评委,互为选手。
![](https://i-blog.csdnimg.cn/blog_migrate/294e3ae4fce7bd56bb70e6d255898716.webp?x-image-process=image/format,png)
最后说一下缺点,现阶段来看这个模型的可扩展性还不是很好,尽管说是step by step的,在最后的实验中也只用了几个discrete step做实验。
上文说的都是通过编程sequential versions来减弱GAN的自由性。但是还有一篇工作【6】是反其道而行之的,将GAN中学出来的feature重新运用在VAE的reconstruction objective中,从而结合了GAN和VAE的优点,于是这个工作被称为VAEGAN。
![](https://i-blog.csdnimg.cn/blog_migrate/59c9c493889ef6afe131742e8dfbe28e.webp?x-image-process=image/format,png)
![](https://i-blog.csdnimg.cn/blog_migrate/c4d064eccc3bf0edabe72a8e42449a3f.webp?x-image-process=image/format,png)
具体的,因为在以前的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。这个思想还是很有扩展性的。