本篇文章将会简单地介绍 Conditional GAN 的原理以及一些有趣的应用。

Conditional GAN 可以拿来做什么事情?

常见 Conditional GAN 的应用像是从一句话生成出一张图片、从黑白照片生成彩色照片,或是从手绘涂鸦生成一张彩色照片。之所以要用 Conditional GAN 而不用监督学习的原因可以用下图说明:

上图取自于李宏毅老师的 GAN Lecture 2: Conditional Generation。这个例子是想要生成一张火车的图片,而训练资料中包含了火车的正面(蓝点)及侧面照片(绿点),如果用监督学习生成的话,产生的图片很有可能位于这些训练资料的中间,也就是说生成的图片可能会很模糊,这也就是为什么要用 Conditional GAN 来生成图片的原因了。

Conditional GAN 的 loss function 与 GAN 的略有不同。我们都还记得在 GAN 中 discriminator 的作用是判别由 generator 生成的图片是否为真实的图片,但是在上述由文字生成图片的应用中,假设我们一样想要生成一张火车的图片,此时 generator 仍然可以生成一张看起来相当真实的汽车的图片,如果 discriminator 只判定这张图片真不真实的话,那么它就会被 generator 骗过了,因为我们想要的是一张火车的图片而不是汽车的图片。因此 Conditional GAN 调整了 discriminator 的输入,同时要输入一张图片以及对应的文字,这样 discriminator 不只能够学习出一张图片是否为真,也能训练出这张图片与对应的文字是否相符。

在一系列谈 GAN 的文章中,我们都提到了不能让 discriminator 太强,否则会太容易 overfitting。有几篇 paper 运用了一个小技巧,也就是对于图片的 discriminator 来说,一次只判定一个小 patch 而不是一次判定整张图片,也有些人设计了 multi-scale 的 discriminator 想达到相同的目的。

他们也做了一个有趣的 demo 网站,有兴趣的读者可以去试一试。