Unsupervised Conditional Generation
注:本文所有图片均来自李宏毅老师授课PPT
无监督的条件GAN网络,简单来说就是给出两堆data(data之间没有任何的关联),machine自己学到怎么从一堆转到另外一堆。有两种方法:
1. Direct Transformation
Direct Transformation,直接进行转换。这种方法适用于input和output的差别比较小,比如说是颜色或者风格上的变化。举例来说,现在有两类图像一类是普通的风景照(x),一类是梵高的画作(y)。对于生成器G,我们希望输入x中的图它能生成带有x本来特征的又属于‘y’风格的图,但是因为x和y之间没有任何联系并且是无监督学习,仅仅靠生成器是很难完成任务的,所以就要用到判别器D。D的工作就是通过学习大量的梵高画作来判别G生成的图是否属于y。
所以总的说来D的工作就是判断G的输出是否是y类数据,G的工作就是尽力去骗过D。如果G成功骗过了D,那么就说明G的输出就会像是y类的图。可能有这样的疑问:如果G直接生成一张跟输入无关的但是属于梵高风格的画作就可以直接通过D的判别了(如下图)?显然这并不是我们想要达到的目的。【相关paper [Tomer Galanti, et al. ICLR, 2018]】
解决这个问题的第一个方法是:无视这个问题。这样仍然是有机会可以work的,因为生成器在收到一个input的时候是不会主动改变太多的,它所希望的是改最少的地方就能通过判别器的判别。
但是如果生成器叠得很深的话,这个问题就必须要考虑了。可以做一些额外的处理,比如拿一个pre-train好的network(比如VGG),把生成器的输入和输出都扔进这个network,生成器在努力通过判别器的同时还需要让自己的输入和输出在那个network中的输出不要相差太多(也就是生成器自己的输入和输出越接近越好)。【相关paper Baseline of DTN [Yaniv Taigman, et al., ICLR, 2017] 】
还有一个解决方法:CycleGAN。在这个模型中除了要训练X到Y的生成器G1,还要训练一个Y到X的生成器G2,G2目的在于能把G1的输出还原成尽可能和G1输入一模一样的图。这样一来G1就不能产生一个和输入完全无关的图。下左图是单向CycleGAN的图示,右图是双向CycleGAN,也就是按照单向CycleGAN的结构增加一组一样的方向相反的生成器和判别器:把Y的图生成器转为X的图(用判别器来判别),同时再把图转回Y的图,让转回的和最初的图越接近越好。【相关paper [Jun-Yan Zhu, et al., ICCV, 2017]】
但是Cycle有GAN一个尚待研究的问题就是它可能会隐藏一些输入的信息。用下图的例子来讲就是,最开始的输入在红框中有一些黑点,这些黑点在第一个生成器的输出中是不存在的,但是第二个生成器可以把黑点返现出来。这说明了生成器在对图像进行转换的时候隐藏了一些信息,但是这并不是我们想要的,我