这篇博客为阅读论文后的总结与感受,方便日后翻阅、查缺补漏,侵删!
论文:Conditional Generative Adversarial Nets
参考:博客一、博客二
介绍这个问题前,我们首先回顾GAN的优点与缺点:
GAN 的优点:
● GAN是一种生成式模型,相比较其他生成模型(玻尔兹曼机和GSNs)只用到了反向传播,而不需要复杂的马尔科夫链。
● 相比其他所有模型,GAN可以产生更加清晰,真实的样本。
● GAN采用的是一种无监督的学习方式训练,可以被广泛用在无监督学习和半监督学习领域。
● 相比于变分自编码器,,GANs没有引入任何决定性偏置( deterministic bias),变分方法引入决定性偏置,因为他们优化对数似然的下界,而不是似然度本身,这看起来导致了VAEs生成的实例比GANs更模糊。
● 相比VAE,GANs没有变分下界,如果鉴别器训练良好,那么生成器可以完美的学习到训练样本的分布。换句话说,GANs是渐进一致的,但是VAE是有偏差的。
● GAN应用到一些场景上,比如图片风格迁移,超分辨率,图像补全,去噪,避免了损失函数设计的困难,不管三七二十一,只要有一个的基准,直接上判别器,剩下的就交给对抗训练了。
GAN的缺点:
● 训练GAN需要达到纳什均衡,有时候可以用梯度下降法做到,有时候做不到。我们还没有找到很好的达到纳什均衡的方法,所以训练GAN相比VAE或者PixelRNN是不稳定的,但我认为在实践中它还是比训练玻尔兹曼机稳定的多。
● GAN不适合处理离散形式的数据,比如文本。
● GAN存在训练不稳定、梯度消失、模式崩溃的问题(目前已解决)。
CGAN,它是对生成性对抗网络(GAN)的一个扩展,属于对已有模型的改进;我们知道GAN与其他生成式模型相比,最大的优势是不需要显示估计数据的概率分布,不需要预先建模假设一个数据分布;而是使用一种分布直接进行采样,采用博弈的思想使生成的图像更加逼近真实图像。然而,这种不需要预先建模的方法缺点是太过自由了,对于较大的图片,较多的像素的情形,基于简单 GAN 的方式就不太可控了。为了解决GAN太过自由这个问题,一个很自然的想法是给GAN加一些约束,于是便有CGAN的提出来解决这个问题,这项工作提出了一种带条件约束的GAN,在生成模型(D)和判别模型(G)的建模中均引入条件变量y,使用额外信息y对模型增加条件,可以指导数据生成过程。简单来说:GAN的训练太过灵活,我们无法控制生成图像的一些细节,CGAN的提出思想是给GAN加一些约束,来控制图像的生成。
在论文中,作者还指出:尽管现在的监督神经网络(尤其是卷积网络)取得了许多成功,但同样不可避免的存在以下问题:
解决第一个问题的一种方法是利用其他模式的附加信息:例如,使用自然语言语料库学习标签的向量表示,其中几何关系在语义上是有意义的。在这样的空间中进行预测时,通常存在一个事实:当预测错误时,我们仍然“接近”真实情况(例如预测“桌子”而不是“椅子”)。
解决第二个问题的一种方法是使用条件概率生成模型,将输入作为条件变量,将一对多映射实例化为条件预测分布,即后面模型中常用的条件变量y。
古德费罗等人,介绍了生成性对抗网络(GAN),它是一个使用博弈对策训练深层生成模型的框架。目标是学习与实际数据分布匹配的生成器分布。GAN没有试图显式地将概率分配给数据分布中的每个,而是通过将噪声变量转换为样本。该生成器通过与鉴别器网络进行训练,鉴别器网络旨在区分来自真实数据分布和生成器生成的分布的样本。因此,对于给定的生成器,最佳鉴别器为。更正式地说,博弈的对策由以下表达式给出:
的输出为[0,1]之间的一个值,越接近于1越表示该数据集来自真实的数据分布。
介绍了这么多背景知识,终于要开始介绍我们今天的主角,其实CGAN在原始GAN上的改动不大,但却异常有效;如果生成器和判别器都被限制在一些额外的信息上,那生成对抗网络可以被扩展成条件模型(CGAN)。可以是任意一种附加的信息,比如类标签或者其他形式的数据。我们可以通过输入到判别器和生成器作为附加的输入层执行条件。具体做法:我们习惯将前面介绍的额外信息称作条件信息;在生成阶段,将条件信息与噪音信息一同输入到生成网络中,判别阶段,做法类似将条件信息与真实图像输入到判别网络中。此时,优化的目标函数为:
下图是一个简单的条件对抗网的结构:
看到这,其实我有个疑问:按照前面的介绍和条件对抗网的结构,目标函数为啥要写成,感觉写成更合理有木有,这让我很困惑;我看到博客有说:一张图片对应多个标签时,将其视为是多种条件下的标签,即一个标签对应一种条件限制。这样模型就变成了在某个条件下进行预测,模型的输入也变成了某个条件下的图片。
第二个疑问:正如infoGAN那样(参考我另一篇博客),模型在训练过程中,为了追求简单,会不会忽略条件变量,而演变成传统的GAN模型,但随后我猜想不是一个给定概率分布,而是一个确定的向量,这样造成模型无法忽视的存在。
论文中的实验分成单模态、多模态分别实验,这里我们要明确啥叫模态(Modality)?简单来说:每一种信息的来源或者形式,都可以称为一种模态。例如,人有触觉,听觉,视觉,嗅觉;信息的媒介,有语音、视频、文字等;多种多样的传感器,如雷达、红外、加速度计等。以上的每一种都可以称为一种模态。同时,模态也可以有非常广泛的定义,比如我们可以把两种不同的语言当做是两种模态,甚至在两种不同情况下采集到的数据集,亦可认为是两种模态。
作者在MNIST图像上训练了一个有条件的对抗网络(CGAN),条件是它们的类标签,类标签编码为one_hat编码。简单来说,就是将图像对应数字的类别用one_hat编码为10维条件向量,比如:数字1对应条件向量为,发现在实验过程中,实验maxout激活函数,往往更有效。
实验结果如下:
第一行使用条件向量为对应数字1,训练我们的模型,成功生成了数字全为0的图像,其他行同理;看来提出的CGAN确实可以起到控制图像生成细节的目的。
像Flickr这样的照片网站是一个含有丰富标记的数据源,这些数据以图像和它们相关联的用户标记标签(UGM)的形式存在,尤其是用户标签。用户标签(UGM)不同于更规范的图像标签,因为他们通常更具描述性。在语义上更接近人类是如何用自然语言描述图像而不仅仅是识别图像中呈现的对象。UGM的另一个方面就是同义词是普遍存在的,不同的用户可能会使用不同的词汇来描述相同的概念;因此,有一个有效率的方法去标准化这些标签也就十分重要。概念词嵌入在这里非常有用因为相关的概念最终被相似的向量所表示。
在本节中,我们将演示图像的自动标记,并使用多标签预测,使用条件对抗网络来生成(可能是多模式)基于图像特征的标记向量分布。具体做法:使用我们预先训练好的模型提取图像的特征向量,该特征向量在后面环节将会代替图像进行训练,对于词语表达,作者训练出一个大小为247465的语料库。我们使用的数据集为MIR Flickr,并忽略掉那些没有标记的图像;条件变量为UGM,根据前面得到语料库使用自然语言处理技术映射成向量的形式。为了评价,我们为每张图像产生100个标签样本,对于每个生成标签样本基于语料库得到的向量表示,运用余弦相似性来找到前20个最接近的单词,然后我们在所有100个样本中选择前10个最常见的单词。(个人理解:生成模型会自动生成这些图像标记)
下图为实验结果:
从实验结果来看,基于每张图片自动生成的标签与图片语义比较符合,进一步证明了提出的CGAN是有效地。
最近要看的论文比较多,还没来得及编程实现上述过程,后续实验会使用tensorflow编程实现上述框架,这里先占个位。
本人系深度学习初学者,水平低,上述内容为读完论文的感想与笔记,可能存在错误,希望各位大佬指教、更正。