Conditional Generative Adversarial Nets
利用五一假期的小尾巴终于看完了CGAN的论文,特意记录一下,方便以后查找。
前言
利用五一假期最后的小尾巴,终于看完了CGAN的论文,记录一下自己的读书笔记。
Conditional Generative Adversarial Nets 发表于2014年,它也是比较经典的GAN论文之一。
论文地址:https://arxiv.org/pdf/1411.1784.pdf
一、总述
CGAN的全称是Conditional Generative Adversarial Networks,即条件生成对抗网络。
CGAN与GAN相比是一种新的训练生成网络模型的方法,CGAN是通过多增加一个条件输入数据y,使得这个条件y能够同时约束生成器和判别器。
二、GAN与CGAN的区别
1. 输入输出
1.1 GAN的输入输出
生成器:输入是一个随机噪声,输出是一幅图像
判别器:输入是一张图像,输出是该图像是真实图像的概率值
1.2 CGAN的输入输出
生成器:输入是一个随机噪声,一个条件,输出是符合该条件的图像
判别器:输入是一张图像,一个条件,输出是该图像在该条件下是真实图像的概率值
这里的生成器与判别器与GAN里面的有点不一致了,它们的功能更加强大了,生成器必须要生成和条件相匹配的样本,而判别器不仅要判别图像是否真实,还要判别图像和条件是否匹配。
2. 损失函数
2.1 GAN的损失函数
GAN包含一个生成器和一个判别器,其中生成器G和判别器D进行博弈,损失函数如下:
2.2 CGAN的损失函数
CGAN添加的额外条件y只需要和x与z进行合并,作为G和D的输入即可,由此得到了CGAN的损失函数如下:
三、CGAN的网络框架
CGAN的整体网络框架与GAN大致相同,唯一的变化就是添加了条件作为控制输出,框架结构图如下:
这里的y可以是任何类型的辅助信息,例如类标签等等。我们可以向生成器和判别器输入条件y来实现条件控制。
个人理解
通过阅读CGAN的论文,使得我对于之前的GAN的知识也有了更加深刻理解:
(1)对于生成器和判别器,我们知道卷积神经网络能够实现图像抽象特征的提取,如果我们定义生成器的输入为“图像的特征”(随机噪声向量),那么可以用反卷积或者是上采样实现图像的生成;而对于判别器本质就是一个有监督的二分类器,输入是图像,输出是真实图像的概率值。
(2)为什么生成器每次都需要随机噪声的输入?
首先,每次选择随机噪声都会产生新的图像,如果每次都使用相同的随机噪声,则模型会产生相同的图像。并且,随机噪声就是特征向量,对于每个图像都是唯一的,因为它的每一项都会决定新的图像产生的一个因素。所以,这也就决定我们不同的项目的所选择的噪声不同,噪声的维度也是不尽相同。
总结
GAN总体来说就是学习样本的数据分布,在训练过程中,生成器会近似这个分布,而判别器会告诉生成器它产生错误的地方,生成器和判别器两者交替训练,不断提升。
CGAN就是在原来的GAN的基础上添加了条件信息,使得GAN的生成结果可控。具体就是我们在生成器和判别器上添加约束条件来引导数据的生成过程,使得输出我们想要的结果。若条件C设置为类别标签y,则可认为CGAN是将无监督的GAN模型变为有监督模型。
CGAN是GAN里重要的基础,也是我们向后理解的基石,充分理解好CGAN的原理,对于我们后续的学习会有潜移默化的帮助。
加油,兄弟们!
参考文献
[1]Conditional Generative Adversarial Nets
[2]https://blog.csdn.net/zh20166666/article/details/82937895
[3]https://www.freesion.com/article/7633887700/