OpenAI 首个研究成果 生成式模型系列
Neil Zhu,简书ID Not_GOD,University AI 创始人 & Chief Scientist,致力于推进世界人工智能化进程。制定并实施 UAI 中长期增长战略和目标,带领团队快速成长为人工智能领域最专业的力量。
作为行业领导者,他和UAI一起在2014年创建了TASA(中国最早的人工智能社团), DL Center(深度学习知识中心全球价值网络),AI growth(行业智库培训)等,为中国的人工智能人才建设输送了大量的血液和养分。此外,他还参与或者举办过各类国际性的人工智能峰会和活动,产生了巨大的影响力,书写了60万字的人工智能精品技术内容,生产翻译了全球第一本深度学习入门书《神经网络与深度学习》,生产的内容被大量的专业垂直公众号和媒体转载与连载。曾经受邀为国内顶尖大学制定人工智能学习规划和教授人工智能前沿课程,均受学生和老师好评。
OpenAI 现在第一个研究成果已经公开:这四个项目 有着同样的主题——那就是加强或者使用了生成式模型. 生成式模型是无监督学习 的一个分支. 除了介绍我们的工作,本文将会教你关于生成式模型更多的内容:这种模型是什么,为何重要,往哪里发展.
**我们 OpenAI 的核心志向是开发出算法和技术可以赋予计算机理解世界的能力. **
其实我们常会忽视自己对世界的认知和理解:世界是一个 3D 的环境,对象可以移动,碰撞和交互;行走,对话和思考的人类;放牧、飞翔、奔跑或者咆哮;播放天气,篮球赛或者 1970 年发生的事情的用语言表示的信息的显示器.
这些海量信息就在我们的身边,某种程度上触手可及 —— 或者是在原子物理世界中,或者是比特的数字世界里. 而最为棘手的部分就是发展出可以分析和理解数据中潜藏的珍宝的模型和算法.
生成式模型是达到这个目标的最为可能的方式之一. 要训练一个生成式模型,我们首先收集某个领域中的大量数据(如,数以百万计的图像、句子或者声音等),然后训练一个可以生成像这些数据模型. 这个观点的直觉其实是 Richard Feynman 名言的含义:
``What I cannot create, I do not understand.''
而完成这个任务的关键就是我们用神经网络作为生成式模型,这样的模型参数的数量远小于我们用来训练的数据的量,迫使模型能够发现和有效地内化(internalize)数据的本质,从而才可以生成这些数据.
生成式模型有很多短期(short-term)应用. 但是从长远角度来看,他们有着自动学习数据集的自然特征的潜力,包含类型、维度或者其他特征.
生成图像
让我们看看一个具体的例子. 假设我们有某个大量图像的集合,比如说 ImageNet 数据集中 120 万幅图像(但是需要记住这也可以是互联网或者机器人中获得的大量的图像或者视频的集合). 如果我们将每幅图重置为 256 的宽高的图像(典型的处理方式),我们的数据集就是一个 1200000256256*3(约 200 GB)的像素块. 这里是该数据集的一些样例图像:
这些图像是我们视觉世界呈现的样子,我们将它们成为“从真实数据分布中采样的样本”. 现在我们构造生成式模型,将他们训练成可以生成如同这些样本图的模型. 这里的生成式模型可以是一个大的神经网络可以输出图像,这些图像称为“来自模型的样本”.
DCGAN
最近的一个模型是来自 Radford 等人的 DCGAN network (下图所示). 这个网络以 100 个从一个高斯分布中采样的随机数为输入(这些数字我们称为代码(code),或者隐含变量,红色文字所示),输出了一个图像(在这里是 64643 的右部的图像,绿色文字所示). 当代码增量式变化时,生成出的图像也随之变化——这说明模型已经学到了可以描述世界是什么样的特征,而不是仅仅是记住了一些样本.
网络(黄色部分)由标准的卷积神经网络如去卷积层(卷积层的的逆),全连接层 等:
DCGAN 使用随机权重进行初始化,所以随机代码输入到网络中会生成一个完全随机的图像. 但是,你可以想象,这个网络有数百万的参数可以调整,目标就是找到一个参数的设置,可以使得从随机代码中生成出的样本看起来像训练数据. 或者换言之,我们想要模型分布匹配在图像空间中的真实的数据分布.
训练一个生成式模型
假设我们使用新初始化网络生成 200 幅图,每次从一个不同的随机代码开始. 问题是:我们如何调整网络的参数来鼓励他产生更加可信的新的图像?注意到我们不是在一个简单的监督学习场景下,也没有对产生的 200 幅图像设定任何显式的预计目标;我们仅仅希望他们看起来真实.
处理这个问题的巧妙的方式是根据生成式对抗网络 Adversarial Network (GAN)方法. 这里我们引入第二个判别器网络(通常是一个标准的卷积神经网络). 例如,我们可以将 200 生成出的图像和 200 幅真实图像作为判别器的输入,训练成为一个标准的分类器来区分这两个来源的图像. 除此之外——我们同样可以反向传播通过判别器和生成器来找出如何改变生成器的参数来让判别器对其 200 样本微小地困惑. 这两个网络就产生了一种对抗:判别器试着从伪造图像中区分出真实图像而产生器则尝试创造可以让判别器觉得它们真实的图像. 最后,生成器网络输出让判别器无法区分的图像.
现在有几种其他的匹配这些分布的方式. 但在我们讨论这些分布前,下图给出两个动画展示了从生成式模型采样的过程,以给于你们一个视觉上的关于训练过程感受. 在两个例子中,采样出的样本开始时有噪声和混乱的,经过了一段时间收敛到产生可信的图像统计:
[VAE](https://openai.com/blog/generative-models/#vae) learning to generate images (log time) [GAN](https://openai.com/blog/generative-models/#gan) learning to generate images (linear time)这令人兴奋——这些神经网络学习视觉世界样子!这些模型通常有仅仅 10 亿参数,所以一个在 ImageNet 上训练的网络(粗略地)将 200GB 的像素数据压缩到 100MB 的权重上. 这种需求让模型发现数据最主要的特征:例如,模型很可能学习靠近的像素更可能拥有相同的颜色,或者世界是由水平和竖直边构成,或者不同颜色的色团等等. 最终,模型可能会发现很多更加复杂的规律:图像存在某个类型的背景、对象、纹理,会出现在某种可能的排列,或者他们按照某种方式在视频中随着时间变换,等等.
更加一般的形式
数学上看,我们考虑数据集 $x_1,…,x_n$ 是从一个真实数据分布 $p(x)$. 在下面的图像,蓝色区域展示了一部分图像空间,以高概率(超过某阈值)包含真实图像,而黑色点表示我们的数据点(每个是数据集中图像). 现在我们的模型同样刻画了一个分布 $\hat{p}_\theta(x)$ (绿色的),由一个单位 Gaussian 分布(红色)获得的点,将他们通过一个(确定型)神经网络映射进行定义——得到了生成式模型(黄色).
我们的网络是参数为 $\theta$ 的函数,调整这些参数就能改变生成出的图像分布. 我们的目标是找到参数 $\theta$ 可以产生一个较好匹配真实数据分布的分布(例如,两个分布 KL 散度很小). 因此,你可以想象绿色分布从随机开始,然后训练过程迭代式改变参数 $\theta$ 来拉长和压缩自己使得更匹配蓝色分布.
生成式模型三个方法
大多数生成式模型有这个基础的设置,但是细节不同. 这里有三个流行的生成式模型方法的例子可以让你看看差异:
- Generative Adversarial Networks (GANs) 这个我们在上面讨论过了,给出一个训练过程作为两个不同的网络的博弈:一个生成器网络(如上)和一个判别器网络尝试分类样本为来自真实分布 $p(x)$ 和模型分布 $\hat{p}(x)$. 每次判别器注意到两个分布之间的差异生成器微微调整了自己的参数,直到最后(理论上)生成器准确地重新制造真实数据分布,判别器随机猜测并不能找到差异.
- Variational Autoencoders (VAEs) 让我们可以在概率图模型框架下形式化这个问题,我们会最大化数据的对数似然的下界.
- 如 PixelRNNAutoregressive 模型训练一个建模了给定前面像素下每个独立像素条件分布的网络(从左到右,从上到下). 这类似于将图像的像素输入到一个 char-rnn,但是 RNN 水平和垂直遍历图像,而不是 1D 的字符序列.
所有这些方法有各自的优缺点. 例如,变分自编码器可以执行学习和在复杂的包含隐含变量的概率图模型上进行高效地贝叶斯推断(如 DRAW 或者 Attend Infer Repeat 近期相对复杂的模型). 但是,他们生成的样本会有些模糊不清. GANs 目前生成了清楚的图像,但是因为不稳定的训练动态性很难优化. PixelRNNs 有一个非常简单和稳定的训练过程(softmax loss)并且当前给出了最优的对数似然(即,产生出数据的可信程度). 然而,他们在采样时相对低效而且没有给图像以简单的低维代码. 所有这些模型是研究的活跃的领域,我们迫切想要知道他们未来的发展!
近期贡献
我们对 OpenAI 做出的生成式模型非常兴奋,刚刚发布了四个对近期工作项目改进工作. 对每个贡献,我们同样发布了技术报告和源代码.
Improving GANs(code). 首先,正如上面所说 GANs 是一个非常有前景的生成式模型,因为不像其他方法,他们产生了非常干净和清晰图像,并学习可以包含关于这些纹理有价值的信息的代码. 然而,GANs 被建模成两个网络之间的博弈,保持他们的平衡很重要(且有技巧):例如,他们可能在解之间震荡或者生成器有奔溃的倾向. 在个工作中,Tim Salimans, Ian Goodfellow, Wojciech Zaremba 和其他同事已经引进了一些新的技术让 GAN 训练更加稳定. 这些技术让我们能够规模化 GANs 并获得很好的 128*128 ImageNet 样本:
Generated from DRAW model Generated from a VAE trained with IAF我们CIFAR-10 的样本看起来也是非常清晰的——Amazon Mechanical Turk workers可以从真实数据中以错误率 21.3% 区分这些样本(50% 的错误率代表随机猜测):
Real images (CIFAR-10) Generated images除了生成更好的图像外,我们引入了一种半监督学习的方法包括判别器产生额外输出来表示输入的标记. 这个方法可以让我们在 MNIST SVHN 和 CIFAR-10 上获得当前最佳结果,而不需要过多的标记样本. 在 MNIST 中,我们仅仅对每个类有 10 个标记样本并使用了一个全连接的神经网络就达到了 99.14% 的准确率——这个结果接近已知最优的使用了 6 万幅标记样本的监督学习方法的结果. 由于标记样本在应用中很难轻易获取,所以上述方法是很有前景的.
生成式对抗网络是相对新的模型(两年前提出来的)我们期望在未来出现更多的提升训练时模型的稳定性的研究成果出现.
Improving VAEs (code) 在这项工作中,Durk Kingma 和 Tim Salimans 引入了一个灵活并且计算规模化方法来提升变分推断的准确率. 尤其是,大多数 VAE 目前训练采用的暴力的近似后验分布,其中每个隐含变量是独立的. 最近的扩展工作 已经通过将每个隐含变量定义在其之前的变量的链上的条件分布解决了这个问题,但由于引入的序列依赖仍没有达到计算高效. 而核心贡献就是称为 逆自递归流 inverse autoregressive flow (IAF) 的方法,该方法允许我们并行化丰富的近似后验分布计算,让这些后验可能任意的灵活计算.
我们在下面的图中展示了一些 32*32 的图像样本. 前一幅是来自 DRAW 模型的早期样本(初级 VAE 样本看起来更差和模糊). DRAW 模型是一年前发表的,这里也可以感受到训练生成式模型的进展迅猛.
Generated from DRAW model Generated from a VAE trained with IAFInfoGAN (code). Peter Chen 和同时给出了 InfoGAN —— 一个对 GAN 的扩展,学习图像的去纠缠的和可解释的表示. 正常的 GAN 通过用模型重新产生数据分布达到这个目的,但是代码空间的 layout 和组织是 underspecified —— 存在很多可能的解可以将单位 Gaussian 映射到图像上,最终获得的可能是非常复杂和高度纠缠的. InfoGAN 对该空间引入了额外的结构通过增加一个新的包含最大化表示向量和观测值的小的子集的互信息目标函数. 这个方法给出相当出色的结果. 例如,在 3D 人脸图像中,我们变动代码的一个连续的维度,保持其他维度不变. 很明显从 5 个提供的例子中(每一行),代码的结果维度刻画了可解释的维度,并且模型在没有告诉这些重要特征存在的情形下可能已经理解到是存在摄像头角度、面部变化等等:
我们同样注意到良好的,去纠缠的表示之前已经有了这样的研究(如 Kulkarni 等人的DC-IGN),但这些方法依赖于额外的监督信息,而现在的这个方法则是完全非监督的.
下两个近期项目是强化学习场景下(另一个 OpenAI 聚焦的领域),但是他们都有生成式模型的部分.
Curiosity-driven Exploration in Deep Reinforcement Learning via Bayesian Neural Networks (code). 在高维度连续空间中进行高效的探索是当前强化学习领域未解决挑战之一. 没有有效的探索方法,agent 只能到处乱闯直到碰巧遇到奖励. 这在简单的玩具例子中就够了,但是若对高维度行动空间(如在机器人中)这些算法是完全不够的. 这篇文章中,Rein Houthooft 和同事给出了 VIME,一个实用的实用生成式模型的不确定性进行探索的方法. VIME 让 agent 本身驱动;它主动地寻求意外的状态-行动. 我们说明了 VIME 可以提高一系列 策略搜索 方法,并在更多稀疏奖励的实际任务(比如agent 需要在无指导的情形下学习原始行动的场景)取得了显著改进.
Policy trained with VIME Policy trained with naive exploration最后,我们介绍一下第五个项目:Generative Adversarial Imitation Learning(code),其中 Jonathan Ho 和同事们给出了一个新的模仿学习(imitation learning)的方法. Jonathan Ho 作为暑期实习生加入 OpenAI 的. 他在 Stanford 完成了这个工作的大部分,但是我们这里提出来,是因为内容的相关性和结合 GAN 到 RL 上的创造性. 标准的强化学习场景通常需要我们设计一个奖励函数刻画了预期的 agent 的行为. 但是,实际情况是,有时候这样会引入昂贵的试错过程以正确地获得细节. 相比较而言,模仿学习中,agent 从样本展示中学习(例如机器人的远程控制),消除了对设计奖励函数的依赖.
流行的模仿方法包含两个阶段的流程:首先学习奖励函数,然后依照奖励函数执行 RL. 这样的过程非常缓慢,也由于这种间接性方法,对结果策略的质量很难有保证. 这项工作展示了如何通过 GAN直接从数据中抽取策略. 所以,这个方法在 OpenAI Gym 环境(如 Ant 和 Humanoid)中可以用来从专家表现中进行策略学习.
迈向未来
生成式模型是快速发展的研究领域. 在我们持续提升这些模型,并规模化训练和数据集,我们可以期待最终产生的样本已经能够完全描述可信的图像或者视频. 这个可能在很多应用中有用,如 按需生成艺术、或者 Photoshop++ 命令如“让我的笑容更宽”. 额外的应有包含 图像去噪, inpainting, 超分辨率,结构预测, 在强化学习中的探索 和标记数据昂贵的神经网络预训练
但是,这项工作更深的启示是,在训练生成式模型的过程中,我们最终会赋予计算机对世界和世界构成的理解.