我们之前讲的 GAN 中的生 成器,它没有输入任何的条件,它只是输入一个随机的分布,然后产生出来一张图片。我们现 在想要更进一步的是希望可以操控生成器的输出,我们给它一个条件x,让他根据条件x跟 输入z 来产生输出y。那这样的条件型生成器有什么样的应用呢?比如可以做文字对图片的 生成,那如果要做文字对图片的生成,它其实是一个监督学习的问题,我们需要一些有标签的 数据,需要去搜集一些人脸图片,然后这些人脸都要有文字的描述。比如这个样本是红眼睛、 黑头发,另一个是黄头发、有黑眼圈等等标签的样本,才能够训练这种条件型生成器。所以在 文字变图像这样的任务里面,我们的条件x就是一段文字。我们希望输入一段文字,然后生 成器就可以产生出来一张图片,这张图片就是这段文字所描述的图片。那一段文字怎么输入 给生成器呢,其实依赖于你自己。以前会用RNN把它读过去,然后得到一个向量,再丢到生 成器中。今天也许你可以把它丢到一个Transformer 的编码器中,然后得到一个向量,再丢 到生成器中,只要能够让生成器读一段文字就行。我们期待的模型是输入“红眼睛”,然后机器 就可以画一个红眼睛的角色,而且每次画出来的角色都不一样。那这个画出来什么样的角色, 取决于你采样到到什么样的z。采样到不一样的z,就会画出不一样的角色,但是这个角色都 是红眼睛的。那这个就是条件型生成的应用,文字变图像。
具体怎么做条件型的GAN呢?我们现在的生成器有两个输入,一个是正态分布中采样 出来的z,另一个是条件x也就是一段文字,然后它会产生出来一个y,也就是一张图片。同 时,我们需要一个判别器。如果按照我们过去介绍的知识,判别器就是使用一张图片y当作输 入,输出一个数值,这个数值代表输入的图片多像真实的图片。训练这个判别器的方法就是, 如果看到真实的图片就输出1,如果看到生成的图片就输出0。这样就可以训练判别器,然后 判别器跟生成器反复训练。
但是这样的方法没办法真的解条件型的GAN的问题,因为如果我们只有训练这个判别 器,只会将y当做输入的话,那生成器会学到的东西就是,只要产生出来的图片y好,但是跟 输入完全没有任何关系,因为对生成器来说它只要产生清晰的图片就可以骗过判别器了。它 何必要去管输入的文字叙述是什么呢,所以直接就无视这个条件x,直接产生一个图片骗过判别器就结束了。但这显然不是我们要的,所以在条件型的GAN里面,就要做有点不一样的 设计,也就是判别器不是只吃图片y,同时还要吃条件x。同时判别器输出的数值不只是看y 好不好,还要看y 跟x配不配。如果y跟x配不上,那就要给一个很低的分数,如果y跟 x 配上,那就要给一个很高的分数。我们需要文字和图像成对的数据来训练判别器,所以条件 型的GAN,一般的训练是需要这个成对的标注数据的。所以当看到这些真正的成对数据,就 给它1分,看到红色眼睛但是文字叙述是黑色头发,就给它0分,看到黑色头发但是文字叙 述是红色眼睛,也给它0分,这样就可以训练判别器了,如图1所示。
图1 条件型GAN
那其实在实际操作中,只是拿这样的负样本对和正样本对来训练判别器,得到的结果往 往不够好。往往还需要加上一种不好的状况:已经产生好的图片但是文字叙述配不上的状况。 所以通常会把我们的训练数据拿出来,然后故意把文字跟图片乱配,或者故意配一些错的,然 后告诉判别器看到这种状况,也是要输出不匹配。用这样子的数据,才有办法把判别器训练 好。然后生成器跟判别器反复的训练,最后才会得到好的结果,这个就是条件型的GAN。
在目前的例子里面都是看一段文字产生图片,当然条件型的GAN的应用不只看一段文 字产生图片,比如也可以看一张图片产生其他图片。比如,给GAN房屋的设计图,然后让 生成器直接把房屋产生出来,或者给它黑白的图片然后让它把颜色着上,或者给它素描的图, 让它把它变成实景实物,再或者给它白天的图片,让它变成晚上的图片,给它起雾的图片,让 它变成没有雾的图片等等。那像这样子的应用,叫做图像翻译,也就是输入一张图片,然后产 生出来另外一张图片,也叫做Pix2pix。那跟刚才讲的从文字产生图像也没有什么不同,现在 只是从图像产生图像,把文字的部分用图像取代掉而已。所以其中同样要产生生成器,产生一 张图片,然后要产生判别器,判别器要输入两张图片,然后输出一个数值。其中可以用监督学 习的方法,训练一个图片生成图片的生成器,但是可能生成的结果图片非常地模糊,原因在于 同样的输入可能对应到不一样的输出。生成器学到的就是把不同的可能平均起来,结果变成 一个模糊的结果。所以这个时候我们的判别器它是输入是一张照片和输入条件,同时看图片 和条件看有没有匹配来决定它的输出。另外,如果单纯用GAN的话它有一个小问题,它产生 出来的图片比较真实,但是与此同时它的创造力、想像力过度丰富,会产生一些输入没有的东 西。所以如果要做到最好往往就是GAN跟监督学习同时使用,就是说你的生成器不只要骗 过判别器,同时你的生成器还要产生出来的图片跟标准答案越像越好。
条件型GAN还有很多应用,比如给GAN听一段声音,然后产生一个对应的图片。比如 说给它听一段狗叫声,GAN可以画出一只狗。这个应用的原理跟刚才讲的文字变图像是一样 的,只是输入的条件变成声音而已。对于标签的成对数据就是声音和图像成对的数据,这个并 没有很难搜集,因为可以爬到大量的影片,影片里面有图像有画面也有声音,并且每一帧是一 一对应的,所以可以用这样的数据来训练。另外条件型GAN还可以产生会动的图片,比如给 GAN 一张蒙娜丽莎的画像,然后就可以让蒙娜丽莎开始讲话等等。