OpenAI-Generative Models
原文链接:https://openai.com/blog/generative-models/
我们在OpenAI的核心愿望之一是开发算法和技术,赋予计算机了解我们世界的能力。
很容易忽略你对这个世界的了解:你明白它是由3D环境,移动、碰撞、交互的对象所组成的;还有走路、说话、思考的人类;还有吃草、飞行、奔跑、嚎叫的动物;监视器上显示的天气的信息、谁赢了篮球比赛或者1970年发生了什么。
无论是在原子物理世界还是在数字比特世界,这种大量的信息都可以很大程度上非常容易的访问。唯一棘手的部分是开发模型和算法去分析和了解这个宝库的数据。
生成模型是实现这一目标的最有希望的方法之一。为了训练生成模型,我们首先在一些域中收集了大量的数据(例如,考虑数百万的图像、句子和声音等),然后在训练模型生成类似的数据。这种方法背后的直觉遵循着著名的名言,引自Richard Feynman:
What I cannot create, I do not understand. —Richard Feynman
诀窍就是,我们用作生成模型的神经网络有着明显小于我们训练它们的数据量的参数,所以模型为了生成它们被强迫发现和有效地使内在化数据的本质。
生成模型有许多短期的应用。但从长远来看,他们具有自动学习数据集的自然特征的潜力,无论是类别还是维度,还是其他完全不同的东西。
生成图像
让我们用一个更加具体的例子。假如我们有一些大量的图像集合,例如ImageNet数据集中的120万张图像(但是请记住,这最终可能是来自互联网或机器人的图像或视频的大集合)。如果我们调整每个图像的宽度和高度为256,我们的数据集是一个大的1200000x256x256x3(约200GB)像素块。一下是此数据集的几个示例图像。
这些图像是我们的视觉世界看起来的样子,我们将这些称之为“真实数据分布的样本”。我们现在构建我们想要训练的生成模型去从混乱中生成像这样的图像。具体地,在这种情况下的生成模型可以是输出图像的一个大型神经网络,并且我们将这些图像称为“来自模型的样本”。
DCGAN
一个最近的模型是DCGAN network,这个网络把从均匀分布中获得的100个随机数字作为网络的输入(我们称之为编码或者隐变量,即为下图中红色部分),输出一个图像(下图中的绿色部分,右边64x64x3尺度)。随着编码以递增的方式改变,生成的图像同样也是如此--这表明模型已经学到了描述世界外观的特征,而不仅仅是记住一些例子。
这个网络(黄色部分)有标准的卷积神经网络组件组成,例如去卷积层(卷积层的反向),全连接层等。
DCGAN用随机权重初始化,因此将随机的编码送入网络将生成完全随机的图像。然而,你可以想象,网络有数百万的参数需要调整,目标是找到这些参数的设置,使得随机编码生成看起来像训练数据的图像。换句话说,我们希望模型分布匹配空间中的正式数据分布。
训练一个生成模型
假设我们使用新的初始化网络去生成200个图像,每次使用不同的随机编码。问题是:我们如何调整网络参数,以鼓励它在未来生成稍微更可信的样本?请注意,我们对于我们想要生成的200个图像不是在一个简单的监督设置中,同时也没有任何明确的期望目标;我们只是希望它看起来更加的真实。
围绕这个问题一个聪明的方式是遵循Generative Adversarial Network(GAN)的方法。这里我们介绍第二个判别网络(通常是标准的卷积神经网络),它试图区分图像是真实的还是生成的。例如,我们将生成的200个图像和200个真实的图像送入判别网络,并且训练该网络作为一个标准的分类器用于区分这两个源。但除此之外--这里的技巧--我们也可以在判别器和生成器上使用反向转播以找到我们应该如何改变生成器的参数,使其生成的200个样本更加真实,从而更加混淆判别器。这两个网络被锁定在一场战斗中:判别器试图区分真实图像和伪造图像,并且生成器试图创建使判别器认为它们是真实图像的图像。最后,生成网络输出足以使判别器无法与真实图像区分的图像。
有一些其他的方法来匹配这些分布,我们将在下面做简要讨论。但在此之前,下面是两个动画,显示来自生成模型的样本,给你训练过程的视觉感受。在这两种情况下,来自生成器的样本开始于噪声和混乱,并且随着时间的收敛具有更加可信的图像统计:
VAE learning to generate images (log time)
GAN learning to generate images (linear time)
这是令人兴奋的--这些神经网络正在学习视觉世界的样子!这些模型通常只有1亿个参数,因此在ImageNet上训练的网络必须(有损)将200GB的像素压缩到100MB的权重上。这激发它发现数据的最突出的特征:例如他可能知道附近的像素可能具有相同的颜色,或者世界由水平或垂直边缘或不同颜色的斑点所组成。最终,模型可以发现更多复杂的规律性:存在某些类型的背景,目标,纹理,他们可能以某些排列发生,或者它们在视频中随着时间的推移以某种方式变换等。
更一般的形式
数学上,我们考虑一个数据集的作为来自真实数据分布的样本。在下面的示例图像中,蓝色区域显示图像空间中具有高概率(超过某个阈值)包含实际图像的部分,黑色点表示我们的数据点(每个都是我们的数据集中的一个图像)。现在我们的模型也描述了一个分布(绿色区域),这个分布是通过从单位高斯分布(红色区域)取点并通过(确定性)神经网络(我们生成模型(黄色))而隐含定义的。
我们的网络是一个带参数的函数,并且调整这些参数将调整生成的图像分布。我们的目标是找到参数,使其产生一个与真实数据分布最相似匹配的分布(例如,通过具有小的KL散度损失)。因此,可以想象绿色分布从一个随机状态开始,然后训练迭代地改变参数来拉伸和挤压它以更好地匹配蓝色分布。
生成模型的三种方法
- Generative Adversarial Networks (GANs)
- Variational Autoencoders (VAEs)
- Autoregressive models such as PixelRNN
向前走(Going forward)
生成模型是一个迅速发展的的研究领域。随着我们继续推进这些模型并扩大训练和数据集,我们可以期望最终生成描绘完全合理的图像或视频的样本。这本身可以在多个应用程序中使用,例如按需生成的艺术,或Photoshop++命令,如“让我的笑容更宽”。目前已知的其他应用包括图像去噪、修复、超分辨率、结构化预测、强化学习中的探索,以及在标记数据昂贵的情况下的神经网络预训练。
然而,这项工作的更深远的前景是,在训练生成模型的过程中,我们将赋予计算机对世界及其构成的理解。