第一部分在这里:【GAN的魔法】生成对抗网络技术进展及论文笔记1
#3. CGAN的应用
CGAN,即Conditional GAN,是加了条件项的GAN。之前说到GAN不稳定,那么一个想法就是给GAN加一些束缚是不是可以让它变得稳定些。
那么它的目标函数和GAN稍稍有点不一样,在生成模型D和判别模型G的建模过程中加入条件变量y,这里的y可以是类别啊,或者是一些属性等等:
比如文献2这篇文章就以人脸的属性作为条件变量去训练GAN,最后它把属性给可视化了:
第一行是GAN生成的人脸,第二行是以age作为条件变量,加偏移让他变得更老,第三行是以smile作为条件变量,偏移让人脸笑起来。(并不是所有属性都可以明显地表现在生成的人脸中,作者在文章中用了36种属性,只有以上2种有明显的变化。)
是不是觉得很惊艳?CGAN竟然能创造自己的人脸,并且让它有表情,有年龄变化。那是怎么做到的呢?包括两个部分——GAN生成人脸,Conditional控制人脸属性的变化。
首先GAN生成人脸的训练过程大概是这样的:
- G刚开始的时候是一个特别傻的生成器,它输出一些随机噪声来尝试着骗D
- D很快就学到了G的随机噪声和真正人脸之间的区别。但是D需要训练足够长的时间才能建立一个基本的区别法则——例如基于肤色的区分
- G发现了它的失败,开始生成带有肤色的图片来欺骗D
- D又不断地发现新的人脸结构,比如鼻子啊眼睛等,并用它们来区别真实的人脸和G的假人脸
- G又跟随D的脚步,学习去画这些带有人脸结构的图片来欺骗D
以此循环,D学习新的可区分的特征,G又尝试着复制这些特征。如下图就是一个不断学习的过程,可以看出生成模型从啥也没有的噪声开始,在不断地学习人脸的关键特征。
网络如下所示,在没有条件变量时,生成器的输入只有z,加入条件变量以后其实和z的输入方法是一样的,两个输入并联起来了,只不过y是已知的东西,如类别、属性之类的,而z是需要学习用来生成样本的一个随机噪声分布。
CGAN用于人脸生成的效果如下所示,同一行表示CGAN在同一属性加扰动后的结果,可以看出同一行的人脸还是相似的,不过有轻微的变化,就是因为人脸属性发生了改变。(最右一张图片是用于训练的数据库中和生成的图片最接近的一张图,说明整个网络确实是在生成人脸,而不是简单地把训练数据记忆下来)
本节参考文献:
【1】《Conditional Generative Adversarial Nets》
【2】《Conditional generative adversarial nets for convolutional face generation》
#4. LAPGAN的应用
LAPGAN是Facebook的一个工作,它则是从另一种思路改进GAN的不稳定。想法就是不要让 GAN一次完成全部任务,而是一次生成一部分,分多次生成一张完整的图片,这样不就比较容易学习了吗。
LAPGAN引入了拉普拉斯金字塔,这个东西是指同一幅图像在不同分辨率下的一系列过滤图片,例如下图中的 I ~ 0 \widetilde{I}_0 I
0, I ~ 1 \widetilde{I}_1 I