深度|OpenAI 首批研究成果聚焦无监督学习,生成模型如何高效的理解世界(附论文)
选自 Open AI
作者:ANDREJ KARPATHY, PIETER ABBEEL, GREG BROCKMAN, PETER CHEN, VICKI CHEUNG, ROCKY DUAN, IAN GOODFELLOW 等
机器之心编译
参与:孙睿、吴攀
引言:这篇博文介绍了 OpenAI 的首批研究结果。研究人员分别从事的四个研究项目贯穿了一个共同的主题:在机器学习中提升或使用生成模型,无监督学习技术的一个分支。除了描述研究人员的研究工作,这篇博客也介绍了生成模型的基本知识:什么是生成模型,生成模型为什么重要,生产模型可能往哪个方向发展。
在 OpenAI,我们的一个核心愿望是开发能让计算机理解我们世界的算法和技术。
对于这个世界,我们很容易忘记我们对它有多了解:你能够理解这个世界是由移动、碰撞、相互作用的 3D 环境和物体构成的;还有行走、交谈和思考的人;进食、飞行、奔跑或吠叫的动物;显示器显示着信息,和语言一起告诉你天气、谁赢得了篮球比赛或 1970 年发生了什么。
世界上有这么大量的信息,很大程度上,这些信息也很方便获取——不管是在原子构成的物理世界中还是在比特构成的数字世界中。唯一棘手的是,如何开发出能分析和理解这个数据宝库的模型和算法。
生成模型(Generative Model)是最有希望实现这一目标方法之一。要训练一个生成模型,我们首先需要收集一个领域内的大量数据(如:数百万张图片、句子或声音等),然后再训练一个能生成类似数据的模型。这种方法背后的直观想法来自理查德·费曼的一句名言:
我不能创造的东西,我就不了解。——理查德·费曼
其中的诀窍是,我们用作生成模型的神经网络的参数数量明显少于我们用于训练的数据量,所以,模型会被迫去发现和有效地内化数据的精华以便生成它。
生成模型有很多短期的应用。但长期来看,它们有自动化学习数据集自然特征的潜力,完全不管分类或维度或其它什么东西。
生成图片
让我们用一个例子来更具体地说明。假设我们有一些大型的图片集合,比如,包含了 120 万张图片的 ImageNet 数据集(但要记住这可能最终会成为一个包含了来自互联网或机器人的图像或视频的大型集合)。如果我们重新调整每一张图像的大小使其长宽皆为 256(这是通常的做法),我们的数据集就是一个1,200,000x256x256x3(大约 200GB) 的巨型像素块。下面是来自该数据集的几张图像样本:
这些图像样本是我们的视觉世界看起来的样子,我们称之为「来自真实数据分布的样本」。我们现在在构建我们的生成模型,我们希望能训练它从头开始生成像这样的图像。具体而言,这种情况下的生成模型会是一个输出图像的大型神经网络,我们将其生成的图像称为「来自模型的样本」。
DCGAN
最近一个这样的模型是来自 Radford 等人的 DCGAN 网络(见下图)。该网络从一个高斯分布中选取 100 个随机数作为输入(我们将这些输入成为代码,或隐变量,用红色表示),然后输出一张图像(在这种情况下是右侧的 64x64x3 的图像,用绿色表示)。随着代码的逐步改变,生成的图像也在改变——这说明该模型已经学会了用来描述世界的模样的特征,而不仅仅是记得某些样本。
该网络(用黄色表示)由标准的卷积神经网络组分构成,例如去卷积层(deconvolutional layers,是卷积层的反向)、全连接层等。
使用随机权重进行初始化,所以,插入到该网络中的一个随机代码会生成一张完全随机的图像。但是,正如你可能想象的,该网络有数百万个我们可以调整的参数,我们的目标是找到一套合适的参数配置,使由随机代码生成的样本看起来和训练数据一样。或换个说法:我们希望模型分布能够匹配图像空间中的真实数据分布。
训练一个生成模型
假设我们使用一个新建立的网络,来生成 200 张图片,且每次都以随机生成的代码开始。那么问题在于:我们应当如何调节网络参数,使得它以后生成更加可靠的样本?需要注意的是,我们现在面对的不是一个简单的监督模式,并且没有任何明显的「范本」作为这 200 张图片的参考;我们想要的只是它们看起来能尽量逼真。
解决这一问题的一个聪明方法是,使用生成式对抗网络(GAN)的方法。在这里,我们引入第二个「判别器( discriminator)」网络(通常是一个标准的卷积神经网络),用来讲一张图片归类为真实的或生成的。例如,我们可以将 200 张生成的图片与 200 张真实图片输入分类器,将其训练成一个辨别两种信息的标准分类器。
但是,除此以外 —— 难题来了 —— 我们同时也可以对鉴别器和生成器进行反向传播,找出某种调节生成器参数的方法,使之生成的 200 张图片能够迷惑鉴别器。
由此,这两个网络陷入了一场对战:鉴别器在试图从人造图片中分辨出真实图片,而生成器在试图制造让鉴别器误以为真的图片。最终,生成器制造的图片还是能被鉴别器识别出来。
还有一些匹配这些分布的其它方法,后文会简单介绍。但是,在那之前,以下是两个动图,展示了来自一个生成模型的样本,帮助你更直观地了解训练过程。在任一情况下,生成器输出的样本开始是混乱、嘈杂的,随着时间推移,收敛成更加合乎逻辑的图像统计特征:
动图
VAE 在学习生成图片(对数阶时间)
GAN 在学习生成图片(线性时间)
这是非常激动人心的 —— 这些神经网络在学习真实的世界看起来是怎样的!这些模型通常只有大约 1 亿个参数,所以,用 ImageNet 训练的时候,需要将 200GB 的像素数据(有损耗地)压缩成 100MB 大小权重。
这激励着这些模型去发现数据中最显著的特征:例如,它会学习到,一个像素附近的像素往往颜色相近,或者世界是由垂直或水平的边界线或色块组成的。最终,模型可能会发现更多更复杂的规则:背景、物品、纹理有某些特定种类,它们会出现在某些特定场景,或者它们在录像中会逐渐以某种方式改变,等等。
更加通用的公式
数学上,我们会将一个样本数据集 [Math Processing Error] x1……xn 视为来自真实数据分布[数学处理误差] p(x)的样本。在下方的示例图像中,蓝色区域是有更高概率(超过一定门槛)会包含真实图片的图像空间,黑点是我们的数据点(每个点表示数据集中的一张图片)。
现在,我们的模型还能够描述一个[Math Processing Error] p^θ(x) 分布(绿色区域),这一分布被采集于单元高斯分布的点(红色)所定义,并通过一个(确定性的)神经网络——也就是我们的生成模型(黄色)进行映射。
我们的网络是一个含有参数 [Math Processing Error] θ 的方程,改变这些参数就意味着改变图像生成的分布。因此,我们的目标就是找到参数[Math Processing Error] θ,使之能够生成与真实数据分布高度匹配的分布(例如,可以通过产生较小的相对散度损失)。因此,你能够想象到一开始的绿色分布是非常随机的,然后训练过程不断地调整参数 [Math Processing Error] θ,来延展和压缩这一分布,使之更好地匹配蓝色分布。
打造生成模型的三个方法
大多数生成模型都有这个基本设置,但在细节上却有所不同,以下给出了三个流行的生成模型方法的例子,让你能感受这种多样性:
生成对抗网络(GAN:Generative Adversarial Networks),前面我们已经讨论过,它将训练过程作为两个不同网络之间的游戏:一个生成器网络(如前所见)和一个次要的判别式网络,该网络会试图将样本归类为真实分布 p(x) 或模型分布 p^(x). 每当判别器(discriminator)注意到了这两个分布之间有不同时,生成器就会稍微调整其参数消除这种不同,直到最终(理论上)生成器准确再现了真实数据分布,而判别器只能随机猜测,无法找到不同之处。
变化自编码器(VAE: Variational Autoencoders)让我们可以在概率图形模型(probabilistic graphical models )的框架中对这一问题进行形式化——在概率图形模型中,我们在数据的对数似然上最大化下限(lower bound)。
而 PixelRNN 这样的自回归模型(Autoregressive models)则通过给定的之前的像素(左侧或上部)对每个单个像素的条件分布建模来训练网络。这类似于将图像的像素插入 char-rnn 中,但该 RNN 在图像的水平和垂直方向上同时运行,而不只是字符的 1D 序列。
所有这些方法都自有其优缺点。例如,变化自编码器让我们可以在带有隐变量的复杂概率图形模型中执行学习和有效的贝叶斯推理(如可查看 DRAW 或注意推理反复(Attend Infer Repeat)了解最近的相对复杂的模型的提示);但是它们生成的样本往往略有模糊。GAN 目前能生成最锐利的图像,但因为训练动态不稳定,它们更难以优化。PixelRNN 有一个非常简单和稳定的训练过程(softmax loss),而且能实现当前最好的对数似然(即生成数据的合理性);但是在采样过程中它们相对低效,而且不能轻松地为图像提供简单的低维度代码。所有这些模型都是活跃的研究领域,我们渴望看到它们未来将会如何发展。
我们近期的一些成绩
在 OpenAI,我们对生成模型感到相当兴奋,并且刚刚发布了4 个推进其向前发展的项目。对于其中每一项贡献,我们都发布了一份技术报告和源代码。
改进 GAN。首先,正如上面提到的,GAN 是一个非常有前途的生成模型家族,因为和其它方法不一样,它们能生成非常干净和锐利的图像,并能学习包含关于这些纹理的有价值的信息的代码。但是,GAN 被设计成了两个网络之间的游戏,而且保持这两者之间的平衡是很重要的(也很困难):比如,他们可能会方案之间振荡,或生成器有崩溃的倾向。在这项成果中,Tim Salimans、Ian Goodfellow、Wojciech Zaremba 及同事们引入了一些让 GAN 训练更稳定的新技术。这些技术让我们可以扩展 GAN,并获得很好的 128x128 像素的 ImageNet 样本:
真正的图像(ImageNet)
生成的图像
我们的 CIFAR-10 样本看起来也非常锐利——亚马逊 Mechanical Turk 上的工作者在我们的样本和真实数据的区分上的错误率为21.3%(随机猜测的话错误率为 50%):
真实的图像(CIFAR-10)
生成的图像
除了生成漂亮的图片,我们为使用 GAN 的半监督学习引入了一种方法,该方法涉及到能产生指示输入的标签的额外输出的判别器。这种方法让我们可以在只需很少有标签样本的情况下在 MNIST、SVHN 或CIFAR-10 上获得当前最佳的结果。比如在 MNIST 上,我们使用一个全连接神经网络在每类只使用了 10 个有标签样本的情况下实现了 99.14% 的准确度——这一结果非常接近使用全部 60,000 个有标签样本的的全监督方法的最佳已知结果。这是非常有前途的,因为在实践中有标签样本可能会相当昂贵。
生成对抗网络(Generative Adversarial Networks)是一种相对较新的模型(两年前才引入),我们预计在训练过程中这些模型的稳定度的进一步提升上还会见到更迅速的进展。
Improving VAE。在这里成果中,Durk Kingma 和 Tim Salimans 为变分推理(variational inference)的准确度的提升引入了一种灵活的、在计算上可扩展的方法。尤其是,大部分 VAE 到目前为止都是用的粗糙的近似后验(approximate posteriors)训练的,其中每一个隐变量都是独立的。最近的扩展通过在其进入链路之前在其它隐变量上调节每一个隐变量而解决了这一问题,但因为引入了顺序依赖(sequential dependencies),这种方法在计算上很低效。这项成果的核心贡献是在所谓的「逆自回归流(IAF: inverse autoregressive flow)」上,和前面提到的成果不一样,这是一种新方法,让我们可以并行处理丰富的近似后验的计算,从而让它们可以达到任意灵活程度。
我们展示了下面右图模型中的一些 32x32 图像样本。左图是来自 DRAW 模型的用于比较的更早期样本(vanilla VAE 样本看起来甚至会更糟糕和更模糊)。DRAW 模型一年前才发布,再次凸显了训练生成模型中所作出的快速进步。
生成于 DRAW 模型
生成于一个使用 IAF 训练的 VAE
InfoGAN。Peter Chen 和同事们引入了 InfoGAN——一种可以学习图像的解开的和可解释的表征的 GAN 的扩展。通常的 GAN 能实现再现模型中的数据分布的目标,带其代码空间的布局和组织是下专化的(underspecified)——在映射单元高斯到图像上存在许多可能的解决方案,而我们最终选择的可能是复杂的和高度纠缠的。InfoGAN 通过增加新目标为该空间添加了额外的结构——该目标涉及到最大化表征变量的小子集和观察之间的互信息(mutual information)。这种方法提供了十分显著的效果。比如,在下面的3D 面部图像中,我们改变代码的一个连续维度,其它维度则保持固定。从这里提供的五个例子(每一行一个)可以看出,代码中得到的维度获取了可解读的维度,且该模型也许了解存在相机角度、面部变化等,而不需要告诉模型这些模型是存在的且重要的。
我们还注意到好的、解开的表征(disentangled representations)之前已经实现(如 Kulkarni 等的 DC-IGN),但这些方法依赖额外的监督,而我们的方法是完全无监督的。
接下来两个最近的项目是在强化学习(RL)设置(OpenAI 的另一个重点领域)中,但它们都涉及到一个生成模型组件。
通过贝叶斯神经网络的深度强化学习中好奇心驱动的探索。在高维和连续空间中实现有效的探索目前还是强化学习领域内一个尚未解决的难题。如果没有有效的探索方法,我们的代理会东闯西撞,直到它们随机跌入某种奖励情况。这在许多简单的玩具任务中是足够的,但如果我们想将这些算法应用于有高维度动作空间的复杂设置(在机器人领域很常见)中,这是不够的。在这篇论文中, Rein Houthooft 及同事提出了 VIME,一种在生成模型上使用不确定性的实用探索方法。VIME 能让代理实现自激励,它会主动寻找惊人的状态-动作。研究表明 VIME 可以提高一系列的策略搜索(policy search)方法,并在带有稀疏奖励的更为实际的任务中取得显著的进展。例如,代理在没有任何指导下必须学习运动基元(locomotion primitives)的场景。
使用 VIME 训练的策略
使用朴素探索训练的策略
最后,我们还想额外包括第五个项目:生成对抗模仿学习(Generative AdversarialImitation Learning)。在该项目中,Jonathan Ho 及同事呈现了一种用于模仿学习(imitation learning)的新方法。Jonathan Ho 是以暑期实习生的身份加入 OpenAI 的。他的研究大部分都是在斯坦福大学完成的,但我们将其作为一个相关项目包括进来,这还是强化学习的 GAN 的一个非常有创造性的应用。标准的强化学习设置通常需要有人设计一个能描述代理的期望行为的奖励函数。但是在实践中,这有时会涉及到昂贵的试错过程才能得到正确的细节。与此相反,在模仿学习中,代理从样本演示之中进行学习(比如机器人的远程操作提供的案例),从而不再需要设计奖励函数。
流行的模仿方法涉及到一个两级工序:首先学习一个奖励函数,然后在那种奖励上运行强化学习。这样一种工序会很慢,而且因为它是间接的,所以也难以保证得到的策略效果良好。这一成果表明人们可以如何通过一个到 GAN 的连接从数据中提取策略。因此,这一方法可以用来从艰难的 OpenAI Gym 环境(如Ant 和 Humanoid)上的专家级演示中学习策略(没有奖励)。
一路向前
生成模型是一个快速推进的研究领域。随着我们继续推进这些模型与扩展训练方法和数据集,我们预期最终可以生成完全让人难辨真假的图像或视频。这本身就可能在多种应用中得到使用,比如按需生成的艺术,或「让我的微笑更宽一点」这样的 Photoshop++ 命令。其它目前已知的应用包括图像去噪、图像修复、超分辨率、结构化预测、强化学习中的探索、和有标签数据的成本很高昂的神经网络预训练。
但是,这一成果的最深层愿景是:在训练生成模型的过程中,我们将能让计算机具备理解世界和世界构成的能力。