换脸效果媲美GAN!一文解析OpenAI最新流生成模型「Glow」

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: 基于流的生成模型在 2014 年已经被提出,但是一直被忽视。由 OpenAI 带来的 Glow 展示了流生成模型强大的图像生成能力。文章使用可逆 1 x 1 卷积在已有的流模型 NICE 和 RealNVP 基础上进行扩展,精确的潜变量推断在人脸属性上展示了惊艳的实验效果。

本期推荐的论文笔记来自 PaperWeekly 社区用户 @TwistedW。基于流的生成模型在 2014 年已经被提出,但是一直被忽视。由 OpenAI 带来的 Glow 展示了流生成模型强大的图像生成能力。文章使用可逆 1 x 1 卷积在已有的流模型 NICE 和 RealNVP 基础上进行扩展,精确的潜变量推断在人脸属性上展示了惊艳的实验效果。
如果你对本文工作感兴趣,点击底部阅读原文即可查看原论文。

关于作者:武广,合肥工业大学硕士生,研究方向为图像生成。

■ 论文 | Glow: Generative Flow with Invertible 1x1 Convolutions
■ 链接 | https://www.paperweekly.site/papers/2101
■ 源码 | https://github.com/openai/glow

图像生成在 GAN 和 VAE 诞生后得到了很快的发展,现在围绕 GAN 的论文十分火热。生成模型只能受限于 GAN 和 VAE 吗?OpenAI 给出了否定的答案,OpenAI 带来了 Glow,一种基于流的生成模型。

虽然基于流的生成模型在 2014 年就已经提出来了,但是一直没有得到重视。Glow 的作者在之前已经在基于流的生成模型上提出了 NICE [1] 和 RealNVP [2],Glow 正是在这两个模型基础加入可逆 1 x 1 卷积进行扩展,精确的潜在变量推断在人脸属性上展示了惊艳的实验效果,具体效果可在 OpenAI 放出的 Demo [3] 下查看。

论文引入

随着深度神经网络的发展,生成模型也得到了巨大的飞跃。目前已有的生成模型除了 Glow 外包括三大类,GAN、VAE 和 Autoregressive Model(自回归模型)。 其中自回归模型和 VAE 是基于似然的方法,GAN 则是通过缩小样本和生成之间的分布实现数据的生成。文中对这些已有的生成模型也做了一个小结:

  1. 自回归模型(Autoregressive Model):自回归模型在 PixelCNN 和 PixelRNN 上展示了很不错的实验效果,但是由于是按照像素点去生成图像导致计算成本高, 在可并行性上受限,在处理大型数据如大型图像或视频是具有一定麻烦的。
  2. 变分自编码器(VAE):VAE 是在 Autoencoder 的基础上让图像编码的潜在向量服从高斯分布从而实现图像的生成,优化了数据对数似然的下界,VAE 在图像生成上是可并行的, 但是 VAE 存在着生成图像模糊的问题,Glow 文中称之为优化相对具有挑战性。
  3. 生成对抗网络(GAN):GAN 的思想就是利用博弈不断的优化生成器和判别器从而使得生成的图像与真实图像在分布上越来越相近。GAN 生成的图像比较清晰, 在很多 GAN 的拓展工作中也取得了很大的提高。但是 GAN 生成中的多样性不足以及训练过程不稳定是 GAN 一直以来的问题,同时 GAN 没有潜在空间编码器,从而缺乏对数据的全面支持。

基于流的生成模型,首先在 NICE 中得到提出并在 RealNVP 中延伸。可以说流的生成模型被 GAN 的光芒掩盖了,但是是金子总会发光。Glow 一文算是将流生成模型推到了学术的前沿,已经有很多学者在讨论 Glow 的价值,甚至有说 Glow 将超越 GAN。

具体还要看学术圈的进一步发展,不过 Glow 确实在图像的生成,尤其是在图像编码得到的潜在向量精确推断上展示了很好的效果。在 OpenAI 放出的 Demo 上展示了很惊艳的实验效果,就人脸合成和属性变化上可以看出 Glow 确实可以媲美 GAN。

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

  1. 精确的潜在变量推断和对数似然评估,在 VAE 中编码后只能推理出对应于数据点的潜在变量的近似值,GAN 根本就没有编码器更不用谈潜在变量的推断了。在 Glow 这样的可逆生成模型中,可以在没有近似的情况下实现潜在变量的精确的推理,还可以优化数据的精确对数似然,而不是其下限。
  2. 高效的推理和合成,自回归模型如 PixelCNN,也是可逆的,然而这样的模型合成难以实现并行化,并且通常在并行硬件上效率低下。而基于流的生成模型如 Glow 和 RealNVP 都能有效实现推理与合成的并行化。
  3. 对下游任务有用的潜在空间,自回归模型的隐藏层有未知的边际分布,使其执行有效的数据操作上很困难;在 GAN 中,由于模型没有编码器使得数据点通常不能在潜在空间中直接被表征,并且表征完整的数据分布也是不容易的。而在可逆生成模型和 VAE 中不会如此,它们允许多种应用,例如数据点之间的插值,和已有数据点的有目的修改。
  4. 内存的巨大潜力,如 RevNet 论文所述,在可逆神经网络中计算梯度需要一定量的内存,而不是线性的深度。

基于流的生成模型的优势展示了 Glow 的魅力,但是在 Glow 论文解读前,我们还是先回顾一下前两个基于流的生成模型 NICE 和 RealNVP。

NICE

NICE 的全称为 NON-LINEAR INDEPENDENT COMPONENTS ESTIMATION,翻译过来就是“非线性独立分量估计”。整体上来说,NICE 是为了对复杂的高维数据进行非线性变换,将高维数据映射到潜在空间,产生独立的潜在变量。这个过程是可逆的,即可以从高维数据映射到潜在空间,也可以从潜在空间反过来映射到高维数据。

为了实现这个可逆的映射关系,就需要找到一个满足映射的函数 f,使得 h=f(x),这里的 x 就是高维数据,对应到图像生成上 x 就是输入的图像,h 就是映射到的潜在空间。这个过程是可逆的,也就是。这个潜在空间可以给定一个先验分布 pH(h),即 h∼pH(h)。 所以实现 NICE 的关键就是找到这个可逆的映射 f,这个不是一件容易的事,此时就引入了一个矩阵用于辅助实现映射,这就是雅可比矩阵。

雅可比矩阵

假设是一个从欧式 n 维空间转换到欧式 m 维空间的函数。这个函数由 m 个实函数组成。 这些函数的偏导数(如果存在)可以组成一个 m 行 n 列的矩阵,这就是所谓的雅可比矩阵:

image

此矩阵表示为:

image

雅可比行列式

如果 m=n,那么 F 是从 n 维空间到 n 维空间的函数,且它的雅可比矩阵是一个方块矩阵,此时存在雅克比行列式。

雅克比矩阵有个重要的性质就是一个可逆函数(存在反函数的函数)的雅可比矩阵的逆矩阵即为该函数的反函数的雅可比矩阵。即,若函数在点的雅可比矩阵是连续且可逆的,则 F 在点 p 的某一邻域内也是可逆的,且有。

image


对雅克比矩阵有所了解后就可以实现映射:

image

其中就是 x 处的函数 f 的雅可比矩阵。

设计这个映射函数 f 的核心就是将输入 x 进行分块,即。

image

image

其中 m 是任意复杂的函数,但是这个分块对于任何 m 函数都具有单位雅可比行列式,且下面是可逆的:

image

上面的映射用对数表示就是:

image

计算具有高维域函数的雅可比行列式并计算大矩阵的行列式通常计算量是很大的,所以直接去算雅克比行列式是不现实的,所以需要对计算做一定的简化。 NICE论文采用分层和组合变换的思想处理,即(此处符号根据 NICE 一文与 Glow 有些许出入)。 在一些细节优化上可以采用矩阵的上三角矩阵和下三角矩阵做变换表示方阵。

有了分层和组合变换的处理,接着就是对组合关系的确立,文中采用寻找三角形雅克比矩阵函数簇,通过耦合层关联组合关系,也就是对 x 做分块找到合适的函数 m。 具体的细节这里不展开了,有兴趣的可以阅读原文了解。
RealNVP

RealNVP 的全称为 Real-valued Non-volume Preserving 强行翻译成中文就是“实值非体积保持”,文章的全称为 DENSITY ESTIMATION USING REAL NVP, 翻译过来就是“使用 RealNVP 进行密度估计”。RealNVP 是在 NICE 的基础上展开的,在 NICE 的基础上将分层和组合变换的思想进一步延伸。

NICE 中采用的耦合关系是加性耦合层,即对于一般的耦合层:

image

所谓加性耦合层就是取 g(a;b)=a+b,其中,此时:


image

除了可以选择加性耦合层,还可以选择乘法耦合层或者仿射耦合层(affine coupling layer)。

而 RealNVP 正是采用仿射耦合层来代替加性耦合层,仿射耦合层采用 g(a;b)=a⊙b1+b2,其中 b1≠0,此时的 m 函数为:,⊙ 为哈达马积,也就是矩阵的乘法表示,RealNVP 引入仿射耦合层后模型更加灵活。 用 s 代表尺度,t 代表平移量,此时的分块表示为:


image

这样就实现了通过堆叠一系列简单的双射来构建灵活且易处理的双射函数。

RealNVP 在 NICE 的基础上的另一大改进就是做多尺度框架的设计。所谓的多尺度就是映射得到的最终潜在空间不是一次得到的,而是通过不同尺度的 潜在变量拼接而成的。我们看一下 RealNVP 给出的多样性示例解释图,这个图其实还不太清晰,在 Glow 中给的图就已经很清晰了。

image

上图的意思就是每一次做流生成潜在变量时,由于要将两个潜在变量拼接后输出,为了保证多尺度就每次保留一个潜在变量,将另一个潜在变量返回到输入再次进行流操作, 经过 L−1 次流操作后将不再返回到输入而是直接输出和之前的 L−1 个潜在变量拼接形成最后的潜在变量的输出。我们再结合公式理解一下,这里稍微有点绕:

image

举个例子就是,比如输入 x 有 D 维,第一次经过流得到潜在变量 (z1,h1) 其中 z1 和 h1 维度都是, 保留 z1,将 h1 送入下一轮流将得到的潜在变量,保留一个,送入另一个,直到第 L−1 轮将潜在变量直接输出和其余的潜在变量拼接形成最终的输出 z。 这里强调一下,多尺度框架的循环和流内部的经历的次数没关系,这里为了保留 RealNVP 原文的符号,采用的符号都是原文中的符号。

RealNVP 基本上就是这样,但是细节还有很多,这里不详细展开,深入了解的可读原文。
Glow模型

我们先一起来看看 Glow 的模型框架:

image

可以看到整个模型分为 (a) 和 (b),其实 (a) 只是对 (b) 中的“step of flow”的展开。Glow 的思想和前两篇整体上是一致的,都是为了找到可逆的双射来实现输入和潜在空间的相互转换。

在设计映射函数时,采用分层变换的思想,将映射 f 函数变换为,也就是一个完整的流需要 K 次单步流才能完成,即

image


(这里的 h 值是内部流的过渡符号和上文提到的多尺度结构不同)。在完整流结束后经过 split 后做多尺度循环,经过 L−1 循环最终的潜在变量就是。

image


我们把单步流的框架再仔细分析一下。

Actnorm

单步流中的第一层就是 Actnorm 层,全称为 Activation Normalization 翻译为激活标准化,整体的作用类似于批归一化。但是批量归一化添加的激活噪声的方差与 GPU 或其他处理单元(PU)的小批量大小成反比,这样造成了性能上的下降,所以文章推出了 Actnorm。

Actnorm 使用每个通道的标度和偏差参数执行激活的仿射变换,类似于批量标准化,初始化这些参数,使得在给定初始数据小批量的情况下,每个通道的后行为动作具有零均值和单位方差。初始化后,标度和偏差被视为与数据无关的常规可训练参数。可以理解 Actnorm 就是对输入数据做预处理。

Invertible 1x1 Convolution

可逆 1x1 卷积是在 NICE 和 RealNVP 上的改进,NICE 和 RealNVP 是反转通道的排序,而可逆 1×1 卷积替换该固定置换,其中权重矩阵被初始化为随机旋转矩阵。具有相等数量的输入和输出通道的 1×1 卷积是置换操作的概括。通过矩阵的简化计算,可以简化整体的计算量。

Affine Coupling Layers

仿射耦合层在 RealNVP 中就已有应用,而 Glow 的基础是默认读者已经掌握了 NICE 和 RealNVP 所以单单只读 Glow 可能不能轻易的理解文章。

仿射耦合层的映入是实现可逆转换的关键,仿射耦合的思想我们上面也有提过,Glow 将其分为三部分讲解。

零初始化(Zero initialization):用零初始化每个 NN () 的最后一个卷积,使得每个仿射耦合层最初执行一个同一性函数,这有助于训练深层网络。

拆分和连接(Split and concatenation):split () 函数将输入张量沿通道维度分成两半,而concat () 操作执行相应的反向操作:连接成单个张量。 RealNVP 中采用的是另一种类型的分裂:沿着棋盘图案的空间维度拆分。Glow 中只沿通道维度执行拆分,简化了整体架构。

排列(Permutation):上面的每个流程步骤之前都应该对变量进行某种排列,以确保在充分的流程步骤之后,每个维度都可以影响其他每个维度。 NICE 完成的排列类型是在执行加性耦合层之前简单地反转通道(特征)的排序;RealNVP 是执行(固定)随机排列;Glow 则是采用可逆 1 x 1 卷积。文中也对三种方法做了实验上的比较。

对于单步流的内部操作,文章也做了解释:

image


Glow实验

实验的开篇是比较 Glow 和 RealNVP,反转操作上 NICE 采用反转,RealNVP 采用固定随机排列,Glow 采用可逆 1 × 1 卷积,并且耦合方式也影响实验的效果,文章比较了加性耦合层和仿射耦合层的性能差距。通过在 CIFAR-10 数据集的平均负对数似然(每维度的比特)来衡量不同操作的差距,其中所有模型都经过 K = 32 和 L = 3 的训练,实验效果如下图:

image

可以从上图看出,Glow 采用的方法都取得了较小的平均负对数似然,这说明了在实验上是由于其他几个模型的。

为了验证 RealNVP 和 Glow 整体的框架下的差距,实验进一步扩展,比较了 CIFAR-10,ImageNet 和 LSUN 数据集上两者的差距,在相同预处理下得到的结果如下:

image

正如表 2 中显示的,模型在所有数据集上实现了显着的改进。

在高分辨率图像的生成上,Glow 使用了 CelebA-HQ 数据集,数据集包含 3 万张高分辨率的图片。实验生成 256 x 256 图像,设置 K=32,L=6。我们看到这里的 L 取了 6,在高分辨率下,多尺度的丰富可能会让得到的潜在变量具有更多的图像细节。试验中采用了退火算法来优化实验,在退火参数 T=0.7 时候,合成的随机样本如下图:

image

可以看到合成的图像质量和合理性都是很高的,为了对潜在变量插值生成图像,实验以两组真实图片为依据,插值中间的过渡,生成的结果如下:

image

从上图能看出整体的过渡还是相当顺畅的,感觉很自然,这就是 Glow 在潜在变量精确推断的优势所在,这样的实验结果让人很惊讶!

为了生成更多含语义的图像,文章利用了一些标签来监督训练,对于不同人脸属性合成的图像如下:

image

生成的效果和过渡都是很自然合理。

退火模型对提高生成也是很重要的环节,文章对比了不同退火参数 T 下的实验效果,合理的 T 的选择对于实验效果还是很重要的。

image

为了说明模型深度(多尺度)的意义,文中对比了 L=4 和 L=6 的效果,可以看出多尺度对于整体模型的意义还是很大的。


image

总结

Glow 提出了一种新的基于流的生成模型,并在标准图像建模基准上的对数似然性方面展示了改进的定量性能,特别是在高分辨率人脸图像合成和插值生成上取得了惊艳的效果。从整体的阅读上可以看出 Glow可以完成较好的图像合成和变换的工作,具体的工作还要在吃透代码再进一步了解。写的过程中有什么问题,欢迎指正,谢谢。

参考文献

[1]. NICE: Non-linear independent components estimation" Laurent Dinh, David Krueger, Yoshua Bengio. ArXiv 2014.
[2]. Density estimation using Real NVP. Ding et al, 2016.
[3]. Glow Demo: https://blog.openai.com/glow/

原文发布时间为:2018-07-13
本文作者:武广
本文来自云栖社区合作伙伴“ PaperWeekly”,了解相关信息可以关注“ PaperWeekly”。

相关文章
|
30天前
|
机器学习/深度学习 人工智能 并行计算
"震撼!CLIP模型:OpenAI的跨模态奇迹,让图像与文字共舞,解锁AI理解新纪元!"
【10月更文挑战第14天】CLIP是由OpenAI在2021年推出的一种图像和文本联合表示学习模型,通过对比学习方法预训练,能有效理解图像与文本的关系。该模型由图像编码器和文本编码器组成,分别处理图像和文本数据,通过共享向量空间实现信息融合。CLIP利用大规模图像-文本对数据集进行训练,能够实现zero-shot图像分类、文本-图像检索等多种任务,展现出强大的跨模态理解能力。
82 2
|
1月前
|
机器学习/深度学习 人工智能 算法
模型无关的局部解释(LIME)技术原理解析及多领域应用实践
在当前数据驱动的商业环境中,人工智能(AI)和机器学习(ML)已成为各行业决策的关键工具,但随之而来的是“黑盒”问题:模型内部机制难以理解,引发信任缺失、监管合规难题及伦理考量。LIME(局部可解释模型无关解释)应运而生,通过解析复杂模型的个别预测,提供清晰、可解释的结果。LIME由华盛顿大学的研究者于2016年提出,旨在解决AI模型的透明度问题。它具有模型无关性、直观解释和局部保真度等优点,在金融、医疗等领域广泛应用。LIME不仅帮助企业提升决策透明度,还促进了模型优化和监管合规,是实现可解释AI的重要工具。
82 9
|
1月前
|
开发框架 供应链 监控
并行开发模型详解:类型、步骤及其应用解析
在现代研发环境中,企业需要在有限时间内推出高质量的产品,以满足客户不断变化的需求。传统的线性开发模式往往拖慢进度,导致资源浪费和延迟交付。并行开发模型通过允许多个开发阶段同时进行,极大提高了产品开发的效率和响应能力。本文将深入解析并行开发模型,涵盖其类型、步骤及如何通过辅助工具优化团队协作和管理工作流。
57 3
|
5天前
|
存储 网络协议 安全
30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场
本文精选了 30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场。
18 2
|
5天前
|
存储 安全 Linux
Golang的GMP调度模型与源码解析
【11月更文挑战第11天】GMP 调度模型是 Go 语言运行时系统的核心部分,用于高效管理和调度大量协程(goroutine)。它通过少量的操作系统线程(M)和逻辑处理器(P)来调度大量的轻量级协程(G),从而实现高性能的并发处理。GMP 模型通过本地队列和全局队列来减少锁竞争,提高调度效率。在 Go 源码中,`runtime.h` 文件定义了关键数据结构,`schedule()` 和 `findrunnable()` 函数实现了核心调度逻辑。通过深入研究 GMP 模型,可以更好地理解 Go 语言的并发机制。
|
2月前
|
机器学习/深度学习 人工智能 UED
OpenAI o1模型:AI通用复杂推理的新篇章
OpenAI发布了其最新的AI模型——o1,这款模型以其独特的复杂推理能力和全新的训练方式,引起了业界的广泛关注。今天,我们就来深入剖析o1模型的特点、背后的原理,以及一些有趣的八卦信息。
318 73
|
1月前
|
机器学习/深度学习 搜索推荐 大数据
深度解析:如何通过精妙的特征工程与创新模型结构大幅提升推荐系统中的召回率,带你一步步攻克大数据检索难题
【10月更文挑战第2天】在处理大规模数据集的推荐系统项目时,提高检索模型的召回率成为关键挑战。本文分享了通过改进特征工程(如加入用户活跃时段和物品相似度)和优化模型结构(引入注意力机制)来提升召回率的具体策略与实现代码。严格的A/B测试验证了新模型的有效性,为改善用户体验奠定了基础。这次实践加深了对特征工程与模型优化的理解,并为未来的技术探索提供了方向。
93 2
深度解析:如何通过精妙的特征工程与创新模型结构大幅提升推荐系统中的召回率,带你一步步攻克大数据检索难题
|
24天前
|
安全 Java
Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧
【10月更文挑战第20天】Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧,包括避免在循环外调用wait()、优先使用notifyAll()、确保线程安全及处理InterruptedException等,帮助读者更好地掌握这些方法的应用。
16 1
|
1月前
|
机器学习/深度学习 算法 Python
深度解析机器学习中过拟合与欠拟合现象:理解模型偏差背后的原因及其解决方案,附带Python示例代码助你轻松掌握平衡技巧
【10月更文挑战第10天】机器学习模型旨在从数据中学习规律并预测新数据。训练过程中常遇过拟合和欠拟合问题。过拟合指模型在训练集上表现优异但泛化能力差,欠拟合则指模型未能充分学习数据规律,两者均影响模型效果。解决方法包括正则化、增加训练数据和特征选择等。示例代码展示了如何使用Python和Scikit-learn进行线性回归建模,并观察不同情况下的表现。
277 3
|
1月前
|
人工智能 自然语言处理 安全
【通义】AI视界|Adobe推出文生视频AI模型,迎战OpenAI和Meta
本文精选了过去24小时内的重要科技新闻,包括微软人工智能副总裁跳槽至OpenAI、Adobe推出文本生成视频的AI模型、Meta取消高端头显转而开发超轻量设备、谷歌与核能公司合作为数据中心供电,以及英伟达股价创下新高,市值接近3.4万亿美元。这些动态展示了科技行业的快速发展和激烈竞争。点击链接或扫描二维码获取更多资讯。

推荐镜像

更多