本文转自「中国计算机学会」(订阅号:ccfvoice),经平台同意授权转载。
恭喜今日头条AI Lab论文《从生成对抗网络到更自动化的人工智能》在《中国计算机学会通讯》2017年第9期专栏上发表!
特此转载,与热爱技术的你一起分享~
“What I cannot create, I do not understand.” 这是著名物理学家费曼的一句名言。把这句话放在人工智能领域,可以理解为:要想让机器真正理解某样东西,就得让它学会如何创造那样东西。近年来,深度学习研究可谓如火如荼,特别是在计算机视觉领域,深度学习算法在人脸识别和物体分类等应用上已经超越了人的分辨力。那么,机器在图像理解方面真的足够智能了吗?套用费曼的那句话,如果机器学习算法能够生成逼真的图像,那它就应该真正理解图像了吧?然而,机器学习算法在生成图像的能力上还很不理想,只能生成很模糊的、缺乏细节的图像。幸运的是,随着生成对抗网络(Generative Adversarial Net, GAN)的出现,生成式模型迎来了一个美好的春天。
什么是生成对抗网络
生成对抗网络是伊恩·古德费洛(Ian Goodfellow)在2014年提出的。他最早想要解决的问题是如何生成高质量的人工数据集以弥补真实数据的不足,跟“对抗”没有半点关系。当时,他遇到的难点是如何衡量生成的数据的质量。简单的办法是希望生成的数据与真实数据尽可能相似,也就是用L1范数或L2范数作为损失函数;又或者直接简单地在两个真实样本之间插值产生样本。但古德费洛又发现,这些方法的效果都不理想,于是就想到训练一个神经网络来判别生成样本的好坏。他用一个生成器生成假样本,用另一个判别器去区分真假样本,这就是GAN的雏形。在训练的过程中,生成器努力地欺骗判别器,而判别器努力地学习如何正确区分真假样本,这样,两者就形成了对抗的关系——至此,也就产生了生成对抗网络。随后,各种关于GAN的论文如雨后春笋般破土而出。
具体而言,一个GAN主要包含两个独立的神经网络:生成器(Generator)和判别器(Discriminator)(见图1)。生成器的任务是,从一个随机均匀分布里采样一个噪声z,然后输出合成数据G(z);判别器获得一个真实数据x或者合成数据G(z)作为输入,输出这个样本为“真”的概率。
图1 生成对抗网络的一般结构
GAN的目标函数如公式1所示。D(x)表示判别器认为x是真实样本的概率,而1-D(G(z))则是判别器认为合成样本为假的概率,取对数相加就能得到公式1的形式。训练GAN的时候,判别器希望目标函数最大化,也就是使判别器判断真实样本为“真”,判断合成样本为“假”的概率最大化;与之相反,生成器希望该目标函数最小化,也就是降低判别器对数据来源判断正确的概率。
公式1 生成对抗网络的目标函数
虽然“对抗机制”很巧妙地让我们免去了设计复杂目标函数的烦恼,但GAN也存在一些问题。实际应用中,由于生成器的更新依赖于判别器,所以,如果判别器学习得不好,生成器也会学习得不好。为了缓解这个问题,在实际训练中,我们常常让判别器更新若干次之后,再让生成器更新一次。即便如此,GAN的训练过程还是非常不稳定,而且生成的数据的多样性仍不如真实样本,此谓“模式收缩”(mode collapse)。后来,研究者们通过一系列的理论研究,发现导致训练不稳定以及模式收缩的主要原因是,最早的GAN中对真实分布与模拟分布的距离度量方法不合适,于是提出用更平滑的度量来代替原来的方法,进而提出了WGAN-GP[1]等方法。其中的数学推导较复杂,有兴趣的读者可以自行阅读原论文。
GAN带来了什么改变
GAN从提出到现在不过三年时间,但是与之相关的论文已经是浩如星海。从很多计算机视觉领域的论文里我们可以发现,往往在旧的方法基础上加一个判别器,套上对抗机制,也能取得比原先要好的效果。而对GAN为什么能取得更好的效果,学术界仍没有统一的意见和完备的解释。以图像生成为例,一个比较普遍的解释是,之前我们在图像生成式模型中使用的基于L1范数和L2范数的损失函数,过于注重生成样本与真实样本“像素级”的一一对应,而且最后经过均值以后每个像素的误差都变成一样,导致生成的图像比较模糊。即使以L1范数做损失函数比L2范数更接近稀疏解,理论上会比基于L2范数的方法获得更锐利的图像,但生成图像的质量仍然不理想。
GAN有什么特别之处呢?正如古德费洛最早的灵感是设计一个神经网络来判断生成样本的好坏一样,GAN的最大的优势来自于判别器的引入,让我们不用费尽心思为一些难以直接用数学公式衡量好坏的任务设计目标函数。例如,在计算机视觉领域有一个研究热点是风格迁移,可把自拍照转换成卡通风格,或把风光照转换成符合某个画家画风的图像等等。在这类应用中,很难用数学公式直接衡量生成的图像的风格是否合适,而如果要用基于范数的损失函数则需要大量成对的标注数据。但有了GAN,我们就可以让判别器来学习判断图像的风格。因为判别器学习的是图像风格而不是图像里的物体,所以只需要符合同一种风格的图像就能训练,不需要对应图像中的物体。在自然语言处理的任务中也类似,例如在聊天机器人方面,采用基于范数的损失函数可能会让机器人固定地针对某些问题产生某些固定答案,这是过拟合的表现。而实际上,我们知道同一个意思有很多种表达,想要让机器人学会用不同方式来表达同一个意思,就可以利用GAN。因此,GAN最大的魅力就在于这种对抗机制的普适性,相信它会在很多目标函数复杂的研究领域取得突破性进展。
虽然对抗机制给我们带来了很多便利,但它也有明显的缺点。在很多复杂的图像生成任务上,GAN的表现并不如人意,例如它会经常生成扭曲的人体。反观基于范数的方法,即使生成复杂的图像也能保证物体基本轮廓的正确。这种区别主要来自于范数目标函数是对每个像素操作的,把生成图像与真实图像的像素一一对应上,也就相当于约束了物体的轮廓;而GAN则对图像整体做判断,并没有对物体轮廓做约束。所以现在用GAN做图像生成的模型,在训练生成器的时候会加上一个L1或者L2范数的损失函数。实验结果表明,这样做确实会比单纯使用对抗目标函数效果更好。
除此之外,GAN实际上是一个统一了生成式模型与判别式模型的框架。一般而言,我们用GAN是为了用它的生成器生成以假乱真的数据,所以我们通常把它归为生成式模型。而实际上,它的判别器也是一个判别式模型,能够在一些特定的任务中体现它的价值。最近SIGIR会议的最佳论文IRGAN,就是利用GAN把信息检索(information retrieval)领域的生成式模型和判别式模型结合起来。在信息检索领域,通常有两种流派,即生成式模型和判别式模型。生成式模型做的是,给定一个问题(query),输出与它最匹配的文档(document);而判别式模型,是输入一个问题和文档对,输出两者匹配的程度。可以看到,GAN的框架很直接地把二者联系起来了:生成模型的输出就是判别模型的输入,判别模型的输出又能促进生成模型的学习。
GAN在计算机视觉上的应用
目前GAN的最基本的应用就是生成以假乱真的图像。图像生成的任务主要分两种,第一种是生成某种类别的图像,第二种是根据用户的描述生成符合描述的图像。目前,第一种图像生成的任务已经取得了很好的效果,例如2016年发表的PPGN[2]模型,在视觉效果上已经取得了行业顶尖的效果(见图2),其生成的火山图像整体上已经可以达到以假乱真的效果。而根据描述生成图像的任务,目前达到的效果还差强人意。这个任务的难点在于,生成器并不是学到了如何生成每个物体之后把它们组合起来,而是尝试一次到位生成整张图像,这与人类绘画的过程不一样。GAN根据文字生成单个物体的图像效果很不错,但在多物体的复杂图像上效果就差得多,有时候甚至难以分辨生成的图像内容。如图3所示,根据文字生成的图像能够让人分辨出大概的内容,但如果不看文字的话,图第一行右边两张图还是会让人摸不着头脑。可见,在文字转换为图像这个领域,还有非常大的研究空间。
另一种很热门的应用是图像转换(image-to-image translation),图像风格迁移只是其中一小类而已。具体而言,图像转换可以包含很多种,例如把一张夏天的图像转换成冬天的样子,给用笔画的物体轮廓填上彩色的细节纹理,给手机拍摄的照片自动虚化使之看起来像单反相机拍摄的一样,等等。今年初发表的CycleGAN[3]模型就是利用了对抗机制与范数损失函数结合的办法,加上类似对偶学习(dual learning)的对偶模型设计,使得模型能够在无标注的数据集上取得良好的表现。图 4为CycleGAN模型图像转换的例子,其中普通马与斑马的相互变换让人印象深刻。除此之外,图像转换还包括人脸变换,可以把不笑的人脸变成笑脸、给人带上或摘下眼镜、改变发型等,可见GAN有希望结合到众多手机P图软件里面进一步丰富软件的功能和趣味性。图5为IcGAN[4]模型对人脸做变换的例子,从黑发变金发、从直发变爆炸头、把微笑变成露齿笑甚至改变性别,不得不赞叹GAN的神奇力量犹如鬼斧神工。
GAN还可以应用于图像描述,即给图像配上一段详细的描述。这个任务上也很能体现GAN的优势:在我们描述一张图像的内容时,由于着眼点不同,可以有不同的描述,而以往的模型对于一张图只能生成一个固定描述。最近的一篇论文提出的RTT-GAN[5]模型则实现了上述“看图写作”的能力:给出一张图以及对图中一些物体的简短描述,模型会生成一段连贯的篇章,而用户可以通过控制先描述的物体来改变图像中物体的描述顺序,从不同的描述中体会到不同的观测视角,如图6所示。
GAN在自然语言处理上的应用
与生成图像相比,生成文本的难度要大得多,因此,GAN在自然语言处理上的效果并不理想。例如,当判别器返回的梯度是+1时,我们能够直接更新像素,这种更新反映在图像上是有意义的。但在自然语言方面,一个词+1是什么意思呢?也许我们可以规定“iPhone6”+1=“iPhone7”,但对于多数词而言,不存在这种规则。即使通过词向量(word embedding),在高维空间里面,向量的分布也是很稀疏的,一个词向量加减一个数很可能对应不上其他任何词的向量,这样的更新对生成器的学习也就没有帮助。但之前我们提到的图像描述又是怎么做到的呢?
要想训练GAN生成文本,不得不提到强化学习中的策略梯度方法。这是一种基于蒙特卡洛搜索的方法:模型在生成下一个词之前,会生成一个字典大小的多项式概率分布。假设搜索宽度是d,那么就从这个多项式分布里随机抽取d个词,以此类推直到生成长度达到限制n或者出现句尾符。我们再把生成的这些句子放到判别器里获得对应的分数,之后再通过反向梯度从后往前更新每次生成的多项式分布以及前面的神经网络参数。在GAN中使用策略梯度的方案,最早出现在去年的SeqGAN模型中,后面用GAN做自然语言处理的研究也基本沿用了这套方案。
GAN在自然语言处理方面的论文主要涉及的是人机对话、机器翻译、问答等。
GAN是人类走向人工智能的一大助力
人类对人工智能的追求从未止步。从传统的机器学习到如今的深度学习,人类已经能够在某些任务上创造出具有自我决策能力的“智能体”,如大家耳熟能详的围棋大师AlphaGo。在早期的传统机器学习时代,人们需要精心设计如何从数据中提取有用的特征,设计针对特定任务的目标函数,再利用一些通用的优化算法来搭建机器学习系统。在深度学习崛起之后,人们很大程度上不再依赖于精心设计的特征,而让神经网络去自动学习有用的特征。但针对具体任务,我们还是需要设计具体的目标函数以约束模型的学习方向 ,否则学习出来的模型所做的事可能并不是我们原来所设想的那样。但是,自从有了生成对抗网络,我们在很多场景中不再需要精心设计的目标函数了,而是让判别器自己学,效果会更好。如图 7所示,从传统机器学习到深度学习,我们让特征学习自动化了;生成对抗网路的出现,进一步把目标函数的学习也自动化了。再加上去年谷歌提出的一种利用神经网络让深度学习模型学会优化自身的算法learn2learn[6],把最后一步优化也给自动化了。人工智能算法从理论上可以完全实现从输入到输出的自动化,它的下一步发展,应该是能根据不同任务自动设计神经网络模型的算法了,让我们拭目以待。
参考文献:
[1] Gulrajani I, Ahmed F, Arjovsky M, et al. Improved training of wasserstein gans[OL]. (2017). arXiv preprint arXiv:1704.00028.
[2] Nguyen A, Yosinski J, Bengio Y,etal. Plug & play generative networks: Conditional iterative generation of images in latent space[OL].(2016). arXiv preprint arXiv:1612.00005.
[3] Zhu J Y, Park T, Isola P, et al. Unpaired image-to-image translation using cycle-consistent adversarial networks[OL]. (2017). arXiv preprint arXiv:1703.10593.
[4] Perarnau G, van de Weijer J, Raducanu B, et al.[OL]. (2016). Invertible Conditional GANs for image editing. arXiv preprint arXiv:1611.06355.
[5] Liang X, Hu Z, Zhang H, et al. Recurrent Topic-Transition GAN for Visual Paragraph Generation[OL]. (2017). arXiv preprint arXiv:1703.07022.
[6] Andrychowicz M, Denil M, Gomez S, et al. Learning to learn by gradient descent by gradient descent[C]//Proceedings of the Advances in Neural Information Processing Systems. 2016: 3981-3989.
作者:
黄鹤
美国伊利诺伊州大学芝加哥分校博士生。今日头条人工智能实验室实习生。研究方向:深度学习和数据挖掘。
王长虎
CCF高级会员,CCCF编委。今日头条人工智能实验室科学家、技术总监。研究方向:计算机视觉、多媒体分析和机器学习。