提出CGAN是因为非条件的生成模型中,对生成的内容控制,实际上只要保证真实性就可以了;采用CGAN的话,我们会增加一些额外的信息去控制数据生成的过程,例如一些类别的标签,例如数字图片数据集中,可以通过引入标签(one-hot),来控制生成的图片趋向于数字,而不是其他的一些图片。
- CGAN模型
目标函数:
相比较GAN模型的目标函数
多了一个标签信息y,在D 和 G 中都用到了,在各自的输入中增加这一项
示意图
- 一些实验
- 单一模型
- MNIST图片数据集中,条件是one-hot形式的图片标签,即 数字1 用 [0,1,0,0,0,0,0,0,0,0] 来表示
- 在G中,从均匀分布中抽取100维的噪声数据z,hidden layer 是 1200个单元(z连接到200个单元,y连接到1000个单元,然后拼接起来),并通过relu 来激活,最后通过全连接到784维并对每个单元做sigmoid激活
- 在D中,通过maxout网络将x 映射到240维,将y映射到50维;采用5组权重W,最终的结果是采用max(f(W1*X),f(W2*X),f(W3*X),f(W4*X),f(W5*X)) 对应的那组,实际上maxout方法,随着深度越深,参数会呈现指数式的增长。
- 采用SGD,batch设置为100,采用momentum的方法控制学习率。dropout 设置为0.5
- 生成的结果如下图所示
- 多模型
- 有些图片是有多个标签的,例如一张 图片,标签可以为女性,香蕉等。
- 用户产生的标识(metadata)跟传统意义上的标签不太一样,因为描述可以是主观的,另外UGM(user-generated metadata) 有大量的同义词,不同的人会用不同的词来描述同一个概念,解决这个问题,采用词向量的方式。
- 多模型的“多”指的是一个图片有多个标签的意思
- 对于图片的表示,首先预训练一个CNN,并用最后一个全连接层(4096个单元)来表示图片
- 对于词语的表示,从YFCC100M的metadata中获取用户标识,标题,以及描述。然后利用skip-gram训练了一个200维的词向量,我们会删除出现次数小于200的词语,最终得到247465大小的词典
- 我们把卷积和词语得到的向量在GAN训练过程中是固定的。
- 这里,我们目标是生成图片的标签(tags)
- 评估阶段,对于每张图片,我们生成100个样例(tag),然后从词库中找到最相近的20个单词,那么总共会得到20*100个,然后选出排名top10的词作为图片的tags
- 这里,我们可以理解为,把图片作为CGAN中的y
- 单一模型
refer:https://arxiv.org/pdf/1411.1784.pdf Conditional Generative Adversarial Nets