GAN解读
生成对抗网络:
GAN是一种通过两个神经网络相互对抗的深度学习模型,其目标是设计一个生成器,能够从一个简单分布中随机采样输入到生成器网络中,输出想要生成的内容;如果是条件式的,生成器会再接受一个输入x作为条件,对于同一个x,有不同的采样输出不同的y,输出y的分布的网络就是生成器。
GAN中另一个网络就是判别器,是用来区分y是真实的还是生成的。因此在训练的更新过程可以表示为,生成器G想要生成能够骗过判别器D的输出,而判别器D想要区分输入是真实的还是通过生成器生成的。实际上,判别器可以当作一个分类模型,区分真实的数据和生成的数据这两个类别。
训练过程:
Stpe1:初始化G和D的网络参数
Stpe2:先固定生成器G,将生成器的输出与对真实数据的采样同时输入到判别器D中,其中赋予这两种数据不同的标签(可以是0/1),更新判别器D;
Step3:固定判别器D,更新生成器G;
Step4:不断重复Step2和Step3,知道生成器的效果满意或者出现某些问题(后面会讲);
损失函数/目标函数:
生成器G的损失函数(理论):
其中\(DIV\)为散度,在原始论文中为JS散度,但是这是在最优判别器D*的情况下推导出的这个公式,实际在代码训练过程中用的公式为:
实际上就是把所有的z经过生成器的输出输入到判别器中,将得到的分数求平均值作为期望;
判别器D的目标函数(要求最大):
评估方式:
由于GAN是生成式模型,没有直接的评估函数,只能依靠间接的评估方式,例如:如果你生成的是人脸,可以用人脸检测模型来判断是否能检测出人脸;或者可以用分类器对生成结果进行分类,看看是否都属于同一种类别,如果结果集中就说明生成器效果好。
训练问题:
GAN网络以难训练而出名,这里列举两个训练过程中可能会出现的问题。
1.Mode Collapse(模式崩溃):在训练过程中可能会出现最终生成器只生成了少数的集中样本,对不很多不同的z都会输出相同的结果,这是由于生成器发现了某些样本更加容易骗过判别器,因此会出现类似偷懒的情况, 过多输出该样本;
2.Mode Dropping(模式确实):生成器的样本没有覆盖所有的样本,可能会出现忽略部分数据集的情况。
由于GAN没有明确的评估方式,很多问题只能在训练过程中对生成结果进行可视化才能发现,很多问题在最新的GAN研究中也没有很好的解决。
条件式生成模型:
区别去原来的生成器G,条件式的生成模型的生成器G会同时接受随机采样的z和一个条件x,这个条件x可能是对数据某些特征的简单描述,可以通过RNN或者Transformer等网络提取特征后输入到网络中;判别器在打分的时候也不是仅仅判断输入的图片是否是真实的,还要判断输入的图片和输入的标签是否一致。因此数据集的没每个数据都要有自己的标签。
对于条件式生成模型的应用非常多,可以用来生成指定的图片,也可以用来做图片到图片的风格转换等。
无监督GAN:
这里只做一个简单的介绍,无监督的GAN是指数据域之间没有成对的对应数据例如,想要输入一个真实的人物,为这个人物作画,我们无法收集每个人物和他对应的画,只能收集许多真实的人物照片和想要的画风的画,这些数据之间不是一一对应的关系;
CycleGAN:对于两个数据域A,B,设置两个生成器G:A->B,F:B->A和两个对应的判别器,生成器G输入A的数据,生成B的数据,生成器F则要求输入G的输出,还原回到A的数据。两个判别器分别判断两个输出的真假。这也就能实现A到B的转换。
StarGAN:一个生成器G(x,c)用于输入x和目标域的标签c,判别器D(x)用于判断图片真假的同时预测所属域的标签,这样就可以实现多个域之间转换。
同样无监督的GAN同样难以训练,可能会消耗大量的算力,在训练过程中也可能会出现许多问题导致模型崩溃。

浙公网安备 33010602011771号