文章目录
一、生成的定义
输入是分布,输出也是分布的网络结构。其中,输入包含另外的条件x的,称为条件生成(conditional generation);输入仅有下面的随机分布的,称为无条件生成(unconditional generation)。
为什么输入要采用分布?
比如图中的动漫人脸生成任务,输入要求有红眼睛,这样对应的输出是不确定的,具有随机性。也就是说相同的输入可能有不同的输出,所以输入也得具有随机性。
二、生成对抗网络(GAN)
由于网络架构、损失函数、梯度下降算法等等的不同,衍生出各种各样的GAN,但其基本结构都是由生成器(generator)和判别器(discriminator)组成。
2.1GAN的架构(无条件生成)
下面以动漫人脸生成作为案例分析GAN的架构。
2.1.1生成器generator
**动漫人脸生成的输入只有随机生成的低维度向量,是无条件生成。**比如输入是100维的向量,每个维度的值都由标准正态分布生成。这个100维的向量通过生成器(多个卷积层的组合)会生成一张图片。
2.1.2判别器discriminator
判别器生成的图片传入判别器,每张图片会生成一个标量数值,类似二分类,越接近1代表图片越接近真实照片,接近0则相反。
判别器的原理是对于真实的输入,预测输出是1;对于生成的图片作为输入,预测输出是0。
2.1.3GAN的直观理解
生成器和判别器组合形成基本的GAN架构。
生成器逐渐进步生成更加逼真的图片,判别器不断提高区分生成或者真实图片的能力,两者相互促进提高,这就是名称中对抗的由来。
2.2条件生成(conditional generation)
2.2.1条件生成的错误结构案例
前面讲到条件生成,输入出了随机向量z之外,还有一个条件x。这里x和z一起作为输入,通过生成器产生图片y,然后y再传给判别器,判别器给出图片是否为真实图片的判断。这种结构的问题是判别器会忽视了输入条件,因为它的输入只要是真实图片,不管是否为红眼睛,都会标记为1。很明显没办法达到想要生成红眼睛的要求。
2.2.2正确的结构
正确的网络结构应该要把条件x也作为判别器的输入,这样判别器的输入会有以下三种情形:
- 真实图片并且图片人物满足红眼睛的条件,标记为1
- 真实图片但图片人物并非红眼睛,标记为0
- 生成图片、图片人物满足红眼睛的条件,标记为0
总结就是,判别器的输入只有同时满足真实图片和条件x,判别器才会判定为有效图片,即标记为1;其他的情况,判别器都会标记为0。这样的网络结构最终生成的图片才会满足输入的条件。
2.3GAN的计算过程
初始化生成器和判别器的参数,在每次迭代中(先学习判别器,再学习生成器),重复以下操作:
- 固定生成器的参数,更新判别器的参数(可以连续更新多次判别器再更新一次生成器)
- 固定判别器的参数,更新生成器的参数,使得判别器输出的数值尽可能提高
- 重复1和2
三、GAN的损失函数和评估指标
原始GAN的损失函数就是简单的二分类交叉熵损失,不同的GAN比如WGAN、StyleGAN等损失函数和网络结构都不同。评估指标的话主要从生成图片的多样性,图片与真实图片的距离等角度进行评估。目前没有太深入研究这些问题,后续又遇到再补充。