摘要

基于Flow的生成模型之所以具有较大吸引力,是由于其能够精确计算对数似然,能很容易进行潜在变量的推理,并且在训练和合成时能够并行进行。在本文中,我们提出了Glow,这是一种使用可逆1×1卷积的Flow。通过使用我们的方法,我们在标准benchmark上展示了对数似然的显着改进。也许最引人注目的是,我们证明针对对数似然目标直接优化的生成模型能够有效地实现非常逼真的合成效果,以及对大图像的操纵。我们模型的代码可在https://github.com/openai/glow上获得。

1.介绍


  机器学习领域的两个主要未解决的问题是(1)数据利用率:即如人类一样从少数样本中学习的能力;(2)泛化性:对任务或其上下文改变的鲁棒性。例如,AI系统通常在当给定的输入与训练数据分布不一致时表现的不好。生成式模型这一机器学习的主要分支,是通过以下方式克服这些限制:(1)学习真实环境的模型,在允许agent在与环境实际交互之前,先建模真实模型,(2)学习输入的有意义特征,同时只需要具有很少标签或无监督数据。由于这些特征可以从大型未标注的数据集中学习,并且不一定是特定于任务的,因此基于这些特征的下游任务可能是可能更鲁棒,且数据利用率更高的。在本文中,除了实际应用以外,我们还致力于提高生成式模型性能。
  生成式建模通常涉及极具挑战性的任务,可以在高维输入数据内建模所有依赖性,通常以完整的联合概率分布的形式定义。由于这种联合模型可能捕获数据中存在的所有模式,因此精确的生成式模型的应用场景非常广泛,即语音合成,文本分析,半监督学习和模型控制等多样化场景; 参见第4节。
  近年来,生成式建模的性能在近年来取得了巨大进步,主要是基于似然的方法和生成对抗网络(GANS)(参见第4节)。 基于似然的方法可分为三类:

  1. Autoregressive models。该模型具有应用简单的优点,但同样具有缺点,即合成的并行能力收到限制,因为合成的计算长度与数据的维度成比例,这对于大型图像或视频来说特别麻烦。
  2. Variational autoencoders (VAEs)。其优化了数据对数似然的下界。变分自编码器具有训练和合成能并行化的优点,但相对难以优化。
  3. Flow-based generative models。首先在NICE中进行了描述,并在RealNVP中进行了扩展。在以下部分中,我们将描述这类模型背后的关键想法。

与GANS和VAE相比,基于Flow的生成式模型在研究界中很少受到关注。基于Flow的生成式模型具有以下一些优点:

  • 能够同时精确地进行潜在变量推理和对数似然估计。在VAE中,仅推能够大概估计与数据点对应的潜变变量的值。GAN没有编码器来估计潜在变量。在可逆的生成模型中,潜在变量完全不需要近似。这不仅导致能准确推力,还可以精确优化数据的对数似然,而不是其下界。
  • 能够高效推理和合成。自回归模型,例如PixelCNN,也是可逆的,然而,这种模型的合成难以并行化,并且通常在并行硬件上效率低下。 像Glow(和REALNVP)这样的基于Flow的生成模型是高效的,可以并行推理和合成。
  • 针对下游任务的有用的潜在空间。 自回归模型的隐藏层具有未知的边缘分布,使得对数据执行有效控制更加困难。在GAN中,数据点通常不能直接在潜在的空间中表示,因为它们没有编码器,并且可能无法完全建模数据分布。可逆的生成模型和VAE不是这种情况,它允许进行各种应用,例如其允许在现有数据点和其修改之间进行差值。
  • 能够显着节省内存。如RevNet论文中所述,可逆神经网络中的计算梯度需要固定的内存而不是随深度线性增加的内存。

2.Background: Flow-based Generative Models

令x\textbf xx为具有未知真实分布x〜p∗(x)\textbf x〜p^*(\textbf x)x〜p∗(x)的高维随机向量。我们收集一个独立同分布的数据集D\mathcal DD,并选择具有参数θ\textbf θθ的模型pθ(x)p_{\textbf θ}(\textbf x)pθ​(x)。在数据x\textbf xx为离散的情况下,对数似然目标的优化相当于最小化下式:
L(D)=1N∑i=1N−logpθ(xi)(1)\mathcal L(\mathcal D)=\frac{1}{N}\sum^N_{i=1}-log~p_{\textbf θ}(\textbf x^{i})\tag{1}L(D)=N1​i=1∑N​−log pθ​(xi)(1)
  在数据x\textbf xx为连续的情况下,我们则优化下式:
L(D)≃1N∑i=1N−logpθ(x~i)+c(2)\mathcal L(\mathcal D)\simeq \frac{1}{N}\sum^N_{i=1}-log~p_{\textbf θ}(\tilde {\textbf x}^{i})+c\tag{2}L(D)≃N1​i=1∑N​−log pθ​(x~i)+c(2)
其中x~(i)=x(i)+u,u〜U(0,a)\tilde{\textbf x}^{(i)}=\textbf x^{(i)}+u,~u〜\mathcal U(0,a)x~(i)=x(i)+u, u〜U(0,a),并且c=−M⋅logac=-M·log~ac=−M⋅log a,其中aaa由数据的离散化级别确定,MMM是x\textbf xx的维度。等式1和等式2这两个目标都是测量纳特或比特中的预期压缩成本。 优化过程通过对mini-batch数据采用随机梯度下降来完成。
  在大多数基于flow的生成模型中,生成过程被定义为:
z∼pθ(z)(3)\textbf z\sim p_{\textbf θ}(\textbf z)\tag{3}z∼pθ​(z)(3)
x=gθ(z)(4)\textbf x=g_{\textbf θ}(\textbf z)\tag{4}x=gθ​(z)(4)
其中z\textbf zz是潜在变量,并且pθ(z)p_{\textbf θ}(\textbf z)pθ​(z)具有(通常是简单的)易计算的密度,例如各向同性的多元高斯分布:pθ(z)=N(z;0,I)p_{\textbf θ}(\textbf z)=\mathcal N(\textbf z;0,\textbf I)pθ​(z)=N(z;0,I)。 函数gθ(..)g_{\textbf θ}(..)gθ​(..)是可逆的,也称为双映射函数,使得给定数据点x\textbf xx,潜在变量推断由z=fθ(x)=gθ−1(x)\textbf z =f_{\textbf θ}(\textbf x)=g^{-1}_{\textbf θ}(\textbf x)z=fθ​(x)=gθ−1​(x)完成。为了简洁起见,我们将省略下标θ\textbf θθ。
  我们专注于函数fff(以及函数ggg),其由一系列变换组成:f=f1◦f2◦⋅⋅⋅◦fKf=f_1◦f_2◦···◦f_Kf=f1​◦f2​◦⋅⋅⋅◦fK​,使得x\textbf xx和z\textbf zz之间的关系可以写为:
x⟷f1h1⟷f2h2⋯⟷fKz(5)\textbf x \stackrel{f_1}{\longleftrightarrow} \textbf h_1 \stackrel{f_2}{\longleftrightarrow} \textbf h_2 \cdots \stackrel{f_K}{\longleftrightarrow}\textbf z\tag{5}x⟷f1​​h1​⟷f2​​h2​⋯⟷fK​​z(5)
  这种可逆变换序列也称为normalizing flow。基于等式4的变量变换,给定数据点x\textbf xx的模型的概率密度函数(PDF)可以写为:
logpθ(x)=logpθ(z)+log∣det(dz/dx)∣(6)log~p_{\textbf θ}(\textbf x)=log~p_{\textbf θ}(\textbf z)+log|det(d\textbf z/d\textbf x)|\tag{6}log pθ​(x)=log pθ​(z)+log∣det(dz/dx)∣(6)
=logpθ(z)+∑i=1Klog∣det(dhi/dhi−1)∣(7)=log~p_{\textbf θ}(\textbf z)+\sum^K_{i=1}log|det(d\textbf h_i/d\textbf h_{i-1})|\tag{7}=log pθ​(z)+i=1∑K​log∣det(dhi​/dhi−1​)∣(7)
为了方便,我们定义h0=△x,hK=△z\textbf h_0 \stackrel{\vartriangle}{=}\textbf x,~\textbf h_K \stackrel{\vartriangle}{=}\textbf zh0​=△x, hK​=△z。 标量值log∣det(dhi/dhi−1)∣log|det(d\textbf h_i/d\textbf h_{i-1})|log∣det(dhi​/dhi−1​)∣是雅可比矩阵(dhi/dhi−1)(d\textbf h_i/d\textbf h_{i-1})(dhi​/dhi−1​)的行列式绝对值的对数,也称为log-determinant。基于变换函数fif_ifi​,对数密度的值将从hi−1\textbf h_{i-1}hi−1​变为hi\textbf h_ihi​。虽然它可能看起来感觉计算成本非常高,但它的值能够被化简到去计算某个特定变换。基本思想是选择雅各比矩阵(dhi/dhi−1)(d\textbf h_i/d\textbf h_{i-1})(dhi​/dhi−1​)是三角矩阵的变换。对于这些变换,log-determinant的计算会很简单:
log∣det(dhi/dhi−1)∣=sum(log∣diag(dhi/dhi−1)∣)(8)log|det(d\textbf h_i/d\textbf h_{i-1})|=sum(log|diag(d\textbf h_i/d\textbf h_{i-1})|)\tag{8}log∣det(dhi​/dhi−1​)∣=sum(log∣diag(dhi​/dhi−1​)∣)(8)

3.Proposed Generative Flow


  基于NICE的和RealNVP flow,我们提出了一种新的flow。它由一系列flow操作步骤组成,并结合了多尺度架构,如图2所示。flow的每个步骤均由actnorm(第3.1节)组成,然后是可逆的1×1卷积(第3.2节),然后是耦合层(第3.3节)。
  该flow与多尺度架构结合在一起,由于篇幅限制,可以参考(Dinh et al., 2016) 了解更多细节。该结构中flow的深度为KKK,并总共有LLL个尺度(图2)。

3.1 Actnorm: scale and bias layer with data dependent initialization

在 Dinh et al. (2016)中,作者提出了使用batch normalization来减轻训练深层模型时遇到的问题。但是,由于通过batch normalization添加的激活噪声与每个GPU或其他处理单元(PU)的mini-batch的大小成反比,因此当使用小的mini-batch时性能会降低。对于大图像,由于内存限制,我们仅能设置mini-batch为1进行训练。我们提出了一个actnorm层(作为activation normalizaton),该层对每个通道使用缩放和偏差参数进行仿射转换,这类似于batch normalization。这些参数由给定的初始mini-batch数据初始化,以使得每个激活后的通道均值为零,并且方差为1。这是data dependent initialization的一种形式。初始化后,缩放和偏差被视为独立于数据的常规可训练参数。

3.2 Invertible 1 × 1 convolution

(Dinh et al., 2014, 2016) 提出的flow包含会颠倒通道顺序的恒等变换。我们提出用一个可学习的可逆的1×1卷积替换这种固定的变换,其中权重矩阵被初始化为随机旋转矩阵。注意,具有相同输入和输出通道数量的1×1卷积是组合操作的泛化。
 具有c×cc×cc×c权重矩阵W\textbf WW的可逆1×1卷积,对维度为h×w×ch×w×ch×w×c的张量H\textbf HH的雅可比对数行列式是很简单的,可以直接计算如下:
log∣det(dconv2D(h;W)dh)∣=h⋅w⋅log∣det(W)∣(9)log|det(\frac{d~conv2D(\textbf h;\textbf W)}{d~\textbf h})|=h\cdot w\cdot log|det(\textbf W)|\tag{9}log∣det(d hd conv2D(h;W)​)∣=h⋅w⋅log∣det(W)∣(9)
  det(W)det(\textbf W)det(W)的计算或微分成本是O(c3)\mathcal O(c^3)O(c3),其通常与Conv2D(h;W)Conv2D(\textbf h;\textbf W)Conv2D(h;W)的计算成本(O(h⋅w⋅c2)\mathcal O(h·w·c^2)O(h⋅w⋅c2))相当。我们将权重W\textbf WW初始化为一个随机旋转矩阵,其对数行列式为0,在一个SGD步骤之后,这些值从0开始改变。
  LU Decomposition。通过使用LU分解法直接对W\textbf WW进行参数化,可以将det(W)det(\textbf W)det(W)的计算成本从O(c3)\mathcal O(c^3)O(c3)降低到O(c)\mathcal O(c)O(c):
W=PL(U+diag(s))(10)\textbf W=\textbf P\textbf L(\textbf U+diag(s))\tag{10}W=PL(U+diag(s))(10)
其中P\textbf PP是个一个置换矩阵,L\textbf LL是一个对角线值为1的下三角矩阵,U\textbf UU是一个对角线值为0的上三角矩阵,sss是一个向量。然后,对数行列式可以简化为:
log∣det(W)∣=sum(log∣s∣)(11)log|det(\textbf W)|=sum(log~|s|)\tag{11}log∣det(W)∣=sum(log ∣s∣)(11)
  当ccc非常大时,计算成本的差异会非常显著,尽管对于我们实验中使用的网络,我们没有测量到执行计算时间上的巨大差异。
  在该参数化中,我们首先使用随机旋转矩阵来初始化W\textbf WW的参数,然后计算P\textbf PP(其保持固定)的对应值,以及L\textbf LL和U\textbf UU的相应初始值(其被优化)。

3.3 Affine Coupling Layers


  一个强大的可逆变换,前向函数,反向函数和对数行列式在计算上是有效的,其在(Dinh et al., 2014, 2016)中作为仿射耦合层进行引入。如表1所示。加法耦合层是一种特殊情况,其向量s=1s=1s=1,对数行列式为0。
  Zero initialization。我们将每个NN()NN()NN()的最后一个卷积初始化为0,因此每个仿射耦合层最初都执行一个恒等函数。我们发现这有助于训练非常深的网络。
  Split and concatenation。如(Dinh et al., 2014)一样,split()split()split()函数沿通道维度将一个输入张量分为两个半部,而concat()concat()concat()操作执行对应的反向操作:连接成单个张量。在(Dinh et al., 2016) 中,引入了另一种类型的split()split()split():沿着空间维度使用棋盘格模式。 在这项工作中,我们只能沿通道维度进行拆分,从而简化整体结构。
  Permutationflow的每个操作步骤都应在某种变换下执行,以确保在具有足够多的flow操作之后,每个维度都可以影响每个其他维度。在(Dinh et al., 2014, 2016) 的置换类型在执行加性耦合层之前简单地逆转通道(特征)的顺序。 另一种选择是执行(固定的)随机排列。我们可逆的1x1卷积是对此类排列的泛化。在实验中,我们比较了这三个选择。

Glow: Generative Flow with Invertible 1×1 Convolutions翻译相关推荐

  1. 论文阅读 Glow: Generative Flow with Invertible 1×1 Convolutions

    Glow: Generative Flow with Invertible 1×1 Convolutions [pdf] [github] 目录 Glow: Generative Flow with ...

  2. 论文笔记(六)【Glow: Generative Flow with Invertible 1 x 1 Convolutions】

    论文地址:glow 终于开始总结流模型的最终成熟版--glow.数学原理跟NICE和RealNVP基本一致,主要是在网络模型上进行了优化. 一.论文概述 1.摘要部分指出了流模型吸引人的地方,对对数似 ...

  3. 【English】Day 2 大英读写2 U1 A 7.11.12 翻译

    U1 A 7.11.12 翻译 Blame for the scandal of this language deficit should be thrust upon our schools,whi ...

  4. 【AM】Glow-TTS: A Generative Flow for Text-to-Speech via Monotonic Alignment Search

    文章目录 1. Related Work 1.1. Alignment Estimation between Text and Speech 1.2. Text-to-Speech Models 1. ...

  5. [译] Kotlin Flow 官方 Guide 指南(2021-06-13)翻译

    原文链接:https://github.com/Kotlin/kotlinx.coroutines/blob/master/docs/topics/flow.md 文章目录 Flow 是冷流 Flow ...

  6. 以太坊solidity迁移flow cadence指南11 ---NFT盲盒应用

    NIST Warning:阅读本文,需要至少幼儿园中班数学水平,要能数到10!对那些只会1以内加法的码农,请在有经验的码农陪同下观看本文. 背景知识 本节主要介绍cadence随机数在盲盒中的应用. ...

  7. Normalized Glow论文阅读

    论文链接:Glow: Generative Flow with Invertible 1×1 Convolutions 文章目录 摘要 简介 背景:基于流的生成模型 提出的生成流 Actnorm:具有 ...

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

    在碎片化阅读充斥眼球的时代,越来越少的人会去关注每篇论文背后的探索和思考. 在这个栏目里,你会快速 get 每篇精选论文的亮点和痛点,时刻紧跟 AI 前沿成果. 点击本文底部的「阅读原文」即刻加入社区 ...

  9. 二元函数图像生成器_GAN生成图像综述

    点击上方"CVer",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者:YTimo(PKU EECS)   研究方向:深度学习,计算机 ...

最新文章

  1. 痛苦是能让人成长的,所以不要害怕遇到痛苦
  2. Open vSwitch(OVS)版本与Linux内核的关系
  3. linux amd显卡下载,下载:AMD显卡Linux催化剂驱动9.10版
  4. 超时流式处理 - 没有消息流入的数据异常监控
  5. 信息检索报告_读者信息素养状况问卷调查分析报告来啦
  6. WildFly 8的Camel子系统集成了Java EE –入门
  7. iis mysql5.7_手动配置网站环境 IIS 10+PHP 7.1+MySQL 5.7
  8. 每日一题(23)——malloc与free(四)
  9. 多个vue项目合并成一个_再见Vlookup,合并多个表格发现一个最简单方法
  10. 扩展中断控制器8259实验_「正点原子FPGA连载」第十三章双核AMP实验
  11. asp 不能读取mysql 长文本文件,从文本文件中读取信息并存储入数据库_asp技巧
  12. Vim新手必看:Vim 命令图解
  13. c语言不定参数的使用,C语言中不定参数的实现
  14. 易筋SpringBoot 2.1 | 第六篇:JdbcTemplate访问MySQL
  15. 计算机乐谱吃鸡,Capo可自动识别音乐生成乐谱
  16. 收评:5月24日资金流向(摘自益盟)
  17. OpenCV基础——threshold函数的使用
  18. 关于AFNetworking上传图片问题
  19. 给初学者推荐的10个Python免费学习网站!赶紧收藏吧!
  20. 矩阵笔记1:矩阵分析(第三版)-史荣昌-第一章:线性空间和线性变换

热门文章

  1. SpringBoot (六) 整合配置文件 @Value、ConfigurationProperties
  2. decode函数的用法
  3. python达内培训课程
  4. MATLAB规划问题——线性规划和非线性规划
  5. 高考用计算机吗,高考可以带计算器吗
  6. mosquito源码分析和优化
  7. 普通人如何快手直播带货;快手直播带货需要注意什么?丨国仁网络资讯
  8. 精通java_Java学到什么程度才能叫精通?
  9. 是时候和学生时代说再见了
  10. [趣味分享]纯手工制作的滑翔机