下一个GAN?OpenAI提出可逆生成模型Glow

目前,生成对抗网络 GAN 被认为是在图像生成等任务上最为有效的方法,越来越多的学者正朝着这一方向努力:在计算机视觉顶会 CVPR 2018 上甚至有 8% 的论文标题中包含 GAN。近日来自 OpenAI 的研究科学家 Diederik Kingma 与 Prafulla Dhariwal 却另辟蹊径,提出了基于流的生成模型 Glow。据介绍,该模型不同于 GAN 与 VAE,而在生成图像任务上也达到了令人惊艳的效果。

该研究一经发表,立刻引起了机器学习社区的注意,有人对此表示:终于,我们有了 GAN 以外的优秀生成模型

本文将介绍 OpenAI 创造的 Glow,一种使用可逆 1×1 卷积的可逆生成模型。它在之前可逆生成模型研究的基础上(论文:NICE: Non-linear Independent Components Estimation、Density estimation using Real NVP)进一步扩展,并简化了架构。OpenAI 提出的模型可以生成逼真的高分辨率图像,支持高效率采样,并能发现用于操作数据属性的特征。目前,OpenAI 已经发布了该模型的代码,并开放了在线可视化工具,供人们试用。

论文:Glow: Generative Flow with Invertible 1×1 Convolutions

  • 论文链接:https://d4mucfpksywv.cloudfront.net/research-covers/glow/paper/glow.pdf

  • 项目代码(TensorFlow):https://github.com/openai/glow

Note:OpenAI 的 Glow 和 PyTorch 内置的机器学习编译器重名了。

摘要:由于可以追踪确切的对数似然度、潜在变量推断,以及训练与合成的可并行性,基于流的生成模型(Dinh et al., 2014)在概念上就很吸引人。在这篇论文中我们提出了 Glow,这是一种简单的使用可逆 1x1 卷积的生成流。使用该方法,我们展示了在标准基准上的对数似然度的显著提升。也许最引人注目的是,我们展示了仅通过普通的对数似然度目标优化,生成模型就可以高效地进行逼真图像的合成以及大尺寸图像的操作。

 

 

Glow 模型控制人脸图像属性以及和其它人脸图像融合的交互式 demo(读者可在原网页进行交互操作,还可以上传自己的图片)。

研究动机

研究员 Prafulla Dhariwal 和 Durk Kingma 的图像属性操作。训练过程中没有给模型提供属性标签,但它学习了一个潜在空间,其中的特定方向对应于胡须密度、年龄、头发颜色等属性的变化。

生成建模就是观察数据(比如一组人脸图片),然后学习可生成数据的模型。学习近似数据生成过程需要学习数据中存在的所有结构,而且成功的模型应该能够合成与数据相似的输出。精确生成模型应用广泛,包括语音合成、文本分析与合成、半监督学习和基于模型的控制。研究者提出的技术也能应用于上述任务。

Glow 是一种可逆生成模型,也称为基于流的生成模型,是 NICE 和 RealNVP 技术的扩展。相比 GAN 和 VAE,基于流的生成模型迄今为止在研究界受到的关注寥寥无几。

基于流的生成模型具有以下优点:

  • 准确的潜在变量推理和对数似然估计。在 VAE 中,只能推理出对应于数据点的潜在变量的近似值。GAN 根本没有编码器来推理潜在变量。而在可逆生成变量中,可以在没有近似的情况下实现精准推理。不仅实现了精准推理,还得以优化数据的准确对数似然度(而不是下界)。

  • 高效的推理与合成。自回归模型,如 PixelCNN,也是可逆的,然而从这样的模型合成难以实现并行化,并且通常在并行硬件上效率低下。基于流的生成模型如 Glow 和 RealNVP 都能有效实现推理与合成的并行化。

  • 对下游任务有用的潜在空间。自回归模型的隐藏层有未知的边际分布,使其更难执行有效的数据操作。在 GAN 中,数据点通常不是在潜在空间中直接被表征的,因为它们没有编码器,并且可能无法表征完整的数据分布。而在可逆生成模型和 VAE 中不会如此,它们允许多种应用,例如数据点之间的插值,和已有数据点的有目的修改。

  • 内存存储的巨大潜力。在可逆神经网络中计算梯度需要恒定而不是和深度呈线性关系的内存,如 RevNet 论文中所述。

结果

使用该技术,OpenAI 在标准基准数据集上获得了优于 RealNVP 的显著改进,后者是之前基于流的生成模型的最好结果。

在不同数据集的测试集上对 RealNVP 模型和 Glow 模型的量化性能评估(bits per dimension)对比结果。

Glow 模型在包含三万张高分辨率人脸图像的数据集上进行训练后生成的结果示例。


Glow 模型可以生成逼真的高分辨率图像,而且非常高效。该模型使用一块 NVIDIA 1080 Ti GPU,只需大约 130ms 即可生成一张 256 x 256 的图像,研究人员发现从温度降低的模型中采样通常会带来高质量的样本。上图中的图像示例就是通过将潜在空间标准差的温度缩放 0.7 而得到的。

潜在空间中的插值

研究人员还可以在任意人脸图像之间插值,方法是使用编码器对两张图像进行编码,然后从中间点进行采样。注意:输入是任意人脸图像,而不是从模型中采集的样本,因此这可以证明该模型支持完整的目标分布。

在 Prafulla 的人脸图像和名人面部图像之间进行插值。

潜在空间中的操作

研究人员可以在无需标签的情况下训练一个基于流的模型,然后使用学到的潜在表征进行下游任务,如处理输入的属性。这些语义属性可以是头发的颜色、图像的风格、乐声的音高,或者文本句子的情绪。由于基于流的模型具备一个完美的编码器,因此你可以编码输入,并计算输入在具备和不具备某属性时的平均本征向量(latent vector)。然后利用两个本征向量之间的向量方向来处理任意输入。

上述过程需要相对较小规模的标注数据,可以在模型训练好之后进行(训练过程不需要标签)。之前利用 GAN 的研究(https://arxiv.org/abs/1606.03657)需要分别训练编码器。使用 VAE 的研究(https://arxiv.org/abs/1804.03599)只能保证解码器和编码器可以兼容分布内数据。其他方法包括直接学习表示变换的函数,如 Cycle-GAN,但是它们需要对每一次变换进行重新训练。

使用基于流的模型处理属性的简单代码片段:

# Train flow model on large, unlabelled dataset X
m = train(X_unlabelled)

# Split labelled dataset based on attribute, say blonde hair
X_positive, X_negative = split(X_labelled)

# Obtain average encodings of positive and negative inputs
z_positive = average([m.encode(x) for x in X_positive])
z_negative = average([m.encode(x) for x in X_negative])

# Get manipulation vector by taking difference
z_manipulate = z_positive - z_negative

# Manipulate new x_input along z_manipulate, by a scalar alpha \in [-1,1]
z_input = m.encode(x_input)
x_manipulated = m.decode(z_input + alpha * z_manipulate)

该研究的主要贡献(不同于早期 RealNVP 研究)是添加了可逆 1x1 卷积,以及删除其他组件,从而整体简化架构。

RealNVP 架构包含两种层的序列:含有棋盘掩码(checkerboard masking)的层和含有通道掩码(channel-wise masking)的层。研究人员移除了含有棋盘掩码的层以简化架构。含有通道掩码的层执行并重复以下步骤:

1. 通过在通道维度上反转输入的顺序来置换输入。

2. 从特征维的中间向下将输入分成两部分:A 和 B。

3. 将 A 输入浅层卷积神经网络。根据神经网络的输出对 B 进行线性变换。

4. 连接 A 和 B。

将这些层连在一起之后,A 更新 B,B 更新 A,然后 A 再更新 B……这种信息的二分流动(bipartite flow)显然是相当僵硬的。研究人员发现,通过将步骤(1)的反向排列改变为(固定)shuffling 排列,模型性能可以得到改善。

更进一步,模型还可以学习最优排列。学习置换矩阵(permutation matrix)是一种离散优化,不适合梯度上升。但由于置换操作只是具有平方矩阵的线性变换的特例,因此可以用卷积神经网络来实现,置换通道相当于通道数相等的输入和输出的 1x1 卷积运算。因此,研究人员用学习的 1x1 卷积运算替换固定排列。1x1 卷积的权重被初始化为一个随机的旋转矩阵。如下图所示,这一运算带来了模型性能的大幅提升。研究人员还指出,通过对权重进行 LU 分解,可以高效地完成优化目标函数所涉及的计算。

主要贡献——可逆 1x1 卷积,极大地改进了模型。

此外,研究人员删除了批归一化,用一个激活归一化层作为替代。这个层简单地移动和扩大了激活函数,给定数据的初始 minibatch,该层具备依靠数据的初始化技术可对激活函数进行归一化操作。这能把 minibatch 大小缩减到 1(对于较大的图像),把模型大小扩大。

规模

本文提出的架构结合了各种优化方法,例如梯度检查点,因此能够训练规模更大的基于流的生成模型。此外,研究人员使用 Horovod 在机器集群上训练模型。上面 demo 中使用的模型是在有 8 块 GPU 的 5 台机器上训练的。使用这个设置,可以训练具有 1 亿多个参数的模型。

研究方向

本研究表明,训练基于流的模型来生成真实的高分辨率图像并非不可能,而且还能学习隐藏表征,用于数据处理这样的下游任务。研究人员还为未来的研究提供了几个方向:

1. 在似然函数上可与其它模型类别相媲美。自回归模型和 VAE 在对数似然上表现要比基于流的模型好,然而,它们各自有采样效率低、推理不精确的缺陷。可以将基于流的模型、VAE 以及自回归模型三者相结合来权衡其长处。这会是一个有趣的研究方向。

2. 改进架构,从而提高计算与参数效率。为了生成真实的高分辨率图像,人脸生成模型使用了大约 2 亿个参数、600 个卷积层,因此训练成本极高。而较浅的模型在学习长期依存关系时表现会变差。使用自注意架构,或者用更进步的训练方法作为更好的解决方案能够让训练流模型更廉价。

原文链接:https://blog.openai.com/glow/

产业OpenAI生成模型
7
相关数据
激活函数技术
Activation function

在 计算网络中, 一个节点的激活函数定义了该节点在给定的输入或输入的集合下的输出。标准的计算机芯片电路可以看作是根据输入得到"开"(1)或"关"(0)输出的数字网络激活函数。这与神经网络中的线性感知机的行为类似。 一种函数(例如 ReLU 或 S 型函数),用于对上一层的所有输入求加权和,然后生成一个输出值(通常为非线性值),并将其传递给下一层。

神经网络技术
Neural Network

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

卷积神经网络技术
Convolutional neural network

卷积神经网路(Convolutional Neural Network, CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。卷积神经网路由一个或多个卷积层和顶端的全连通层(对应经典的神经网路)组成,同时也包括关联权重和池化层(pooling layer)。这一结构使得卷积神经网路能够利用输入数据的二维结构。与其他深度学习结构相比,卷积神经网路在图像和语音识别方面能够给出更好的结果。这一模型也可以使用反向传播算法进行训练。相比较其他深度、前馈神经网路,卷积神经网路需要考量的参数更少,使之成为一种颇具吸引力的深度学习结构。 卷积网络是一种专门用于处理具有已知的、网格状拓扑的数据的神经网络。例如时间序列数据,它可以被认为是以一定时间间隔采样的一维网格,又如图像数据,其可以被认为是二维像素网格。

生成模型技术
Generative Model

在概率统计理论中, 生成模型是指能够随机生成观测数据的模型,尤其是在给定某些隐含参数的条件下。 它给观测值和标注数据序列指定一个联合概率分布。 在机器学习中,生成模型可以用来直接对数据建模(例如根据某个变量的概率密度函数进行数据采样),也可以用来建立变量间的条件概率分布。

机器学习技术
Machine Learning

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

似然函数技术
Likelihood function

在数理统计学中,似然函数是一种关于统计模型中的参数的函数,表示模型参数中的似然性。 似然函数在统计推断中有重大作用,如在最大似然估计和费雪信息之中的应用等等。“ 似然性”与“或然性”或“概率”意思相近,都是指某种事件发生的可能性,但是在统计学中,“似然性”和“或然性”或“概率”又有明确的区分。

目标函数技术
Objective function

目标函数f(x)就是用设计变量来表示的所追求的目标形式,所以目标函数就是设计变量的函数,是一个标量。从工程意义讲,目标函数是系统的性能标准,比如,一个结构的最轻重量、最低造价、最合理形式;一件产品的最短生产时间、最小能量消耗;一个实验的最佳配方等等,建立目标函数的过程就是寻找设计变量与目标的关系的过程,目标函数和设计变量的关系可用曲线、曲面或超曲面表示。

参数技术
parameter

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

半监督学习技术
Semi-Supervised Learning

半监督学习属于无监督学习(没有任何标记的训练数据)和监督学习(完全标记的训练数据)之间。许多机器学习研究人员发现,将未标记数据与少量标记数据结合使用可以显着提高学习准确性。对于学习问题的标记数据的获取通常需要熟练的人类代理(例如转录音频片段)或物理实验(例如,确定蛋白质的3D结构或确定在特定位置处是否存在油)。因此与标签处理相关的成本可能使得完全标注的训练集不可行,而获取未标记的数据相对便宜。在这种情况下,半监督学习可能具有很大的实用价值。半监督学习对机器学习也是理论上的兴趣,也是人类学习的典范。

语音合成技术
Speech synthesis

语音合成,又称文语转换(Text to Speech)技术,是将人类语音用人工的方式所产生,能将任意文字信息实时转化为标准流畅的语音朗读出来,相当于给机器装上了人工嘴巴。它涉及声学、语言学、数字信号处理、计算机科学等多个学科技术,是信息处理领域的一项前沿技术,解决的主要问题就是如何将文字信息转化为可听的声音信息,也即让机器像人一样开口说话。

权重技术
Weight

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。

张量技术
Tensor

张量是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数,这些线性关系的基本例子有内积、外积、线性映射以及笛卡儿积。其坐标在 维空间内,有 个分量的一种量,其中每个分量都是坐标的函数,而在坐标变换时,这些分量也依照某些规则作线性变换。称为该张量的秩或阶(与矩阵的秩和阶均无关系)。 在数学里,张量是一种几何实体,或者说广义上的“数量”。张量概念包括标量、矢量和线性算子。张量可以用坐标系统来表达,记作标量的数组,但它是定义为“不依赖于参照系的选择的”。张量在物理和工程学中很重要。例如在扩散张量成像中,表达器官对于水的在各个方向的微分透性的张量可以用来产生大脑的扫描图。工程上最重要的例子可能就是应力张量和应变张量了,它们都是二阶张量,对于一般线性材料他们之间的关系由一个四阶弹性张量来决定。

TensorFlow技术
TensorFlow

TensorFlow是一个开源软件库,用于各种感知和语言理解任务的机器学习。目前被50个团队用于研究和生产许多Google商业产品,如语音识别、Gmail、Google 相册和搜索,其中许多产品曾使用过其前任软件DistBelief。

机器之心
机器之心

机器之心是国内领先的前沿科技媒体和产业服务平台,关注人工智能、机器人和神经认知科学,坚持为从业者提供高质量内容和多项产业服务。

推荐文章
生成对抗网络及其变体的论文汇总生成对抗网络及其变体的论文汇总
黄小天黄小天
2
机器之心开放中英词汇库:期待与读者的共同进步机器之心开放中英词汇库:期待与读者的共同进步
机器之心机器之心
换脸效果媲美GAN!一文解析OpenAI最新流生成模型「Glow」换脸效果媲美GAN!一文解析OpenAI最新流生成模型「Glow」
PaperWeeklyPaperWeekly
4
返回顶部