炼数成金 门户 商业智能 自然语言处理 查看内容

HFL技术分享 #16 | 基于流的生成模型

2019-6-18 15:00| 发布者: 炼数成金_小数| 查看: 30867| 评论: 0|来自: 哈工大讯飞联合实验室

摘要: 生成模型(Generative Model)与判别模型(Discriminative Model)是机器学习模型里的两大家族。判别模型常常用来做回归、分类的任务;而生成模型是一个数据模拟器,可以做数据采样与生成相关的任务。例如,时下非常 ...

网络 工具 模型 框架 神经网络

摘要
基于流的生成模型(Flow-based Generative Model,以下简称流模型)是一种不同于GAN、VAE的神经网络生成模型框架,它具有一些独特的优点。本文将先对生成模型的基础知识做一个简要的回顾,之后详细介绍流模型框架下的三个具体模型工作: NICE、RealNVP和Glow。

引言
生成模型(Generative Model)与判别模型(Discriminative Model)是机器学习模型里的两大家族。判别模型常常用来做回归、分类的任务;而生成模型是一个数据模拟器,可以做数据采样与生成相关的任务。例如,时下非常流行的GAN(Generative Adversarial Net)就是一种生成模型框架,其下各种具体的GAN结构与应用更是五花八门数不胜数。在GAN的框架中,生成器(Generator)以对抗训练的方式学习到待拟合数据的分布;而同样作为生成模型,本文将要介绍的流模型框架则提供了另外一个思路——从概率密度变换的角度解决这个问题。

背景介绍(生成模型回顾)
我们先看判别模型。判别模型的目标是学习一个x和y的映射,这里x是输入数据,y是数据的标签;也就是对p(y|x)建模。判别模型的例子有SVM,LR,以及神经网络中各种回归、分类任务对应的结构都是判别模型。

生成模型的目标是学习到数据整体的概率分布p(z,x),这里z是隐变量;隐变量的分布形式p(z)通常是事先指定的,所以等价于学习数据的条件概率分布p(x|z)。判别模型例子有LDA、隐马尔科夫模型(HMM)、朴素贝叶斯和高斯混合模型。在神经网络中,GAN、VAE、流模型等是生成模型的典型代表。
生成模型可以看成一个数据模拟器。其中一些生成模型允许我们做数据的密度估计,即计算出p(x),这类模型称为显式(explict)的,如VAE、玻尔兹曼机、PixelCNN等;另一类模型并不显式计算出p(x),而只能从p(x)中采样,称为隐式(implict)的,如GAN就属于此类。不需要标签、可以利用大量无标注数据是生成模型的一大优点;此外生成模型还可用于计算数据表示供下游任务使用。

明确一下生成模型的目标:现在模型的输入只有数据本身x,我们需要指定一个(或者一类)隐变量分布p(z),学习到数据的条件概率分布p(x|z),并且希望隐变量z所在的空间包含语义级别的特征。

基于流的生成模型
一、预备知识
在正式介绍模型之前,先介绍两个数学概念:雅克比矩阵(Jacobian Matrix)和随机变量函数的分布。


随机变量函数的分布
若z是一个服从分布π(z)随机变量,x=f(z)是关于z的函数,f是一一可逆映射,那么x的概率分布为

其中det(dz/dx)是将z看成x的函数得到的雅克比矩阵的行列式。这个公式非常重要,是流模型中的概率密度变换操作的基础。
下面依据发表时间先后顺序介绍流模型方向的三篇文章。这三篇文章分别引入了三个模型:NICE、RealNVP、Glow。NICE是流模型的开山之作,构建了流模型的主体结构;后两个模型沿用NICE的核心思想并做了一些改进,效果有明显的提升。

二、NICE: Non-linear Independent Components Estimation [1]
训练生成模型的一个重要目标是得到数据的概率分布与揭示数据的内部的隐藏结构,途径之一是学习数据表示。那么什么样的表示是好的表示呢?本文的作者认为一个好的表示等价于一个容易被建模的表示,而容易被建模意味着表示可以由更简单的表示组合出来。设x是数据,f是从数据空间到表示空间的映射,h是x的表示: h=f(x),为了可以直接采样且不丢失任何信息,这里要求f可逆。那么一个好的表示意味着h的分布pH(h)在各个维度d上是独立的,可以被分解成它们的乘积:

至此,我们得到了损失函数。接下来的任务是设计合理的网络结构(也就是f):合理的结构不仅与任务相配,同时也要能方便计算与训练。
除了f之外,上式中另一个未定量是h的先验分布pHd。因为真实的数据分布千差万别,所以h的先验分布是否必须非常复杂?其实不必,因为只要f足够复杂,f(x)可以产生几乎任意分布,所以h的先验分布取为高斯分布,真实世界复杂性的部分交给f处理就好了。

网络结构设计
使用神经网络建模f,有如下3个条件:
1. 拟合能力强:这一点在上文已提及,是为了能拟合各种分布;
2. 雅克比行列式计算简单:因为损失函数中包含雅克比行列式项,而行列式计算与的复杂度与行列式的阶数的三次方成正比,所以必须有所简化;
3. 逆运算计算简单:是为了能高效进行采样与编码。
为了满足这三个条件,NICE模型以及后续的RealNVP、Glow模型均采用了模块化思想,把f设计成一组简单函数的复合:

其中每一个fi都是一个简单的网络结构,且满足上面的3个要求。进行采样或编码时,数据依次经过f1,f2…,fL的变换,最终变成目标分布,如同一个流流过网络,此即流式(Flow-based)的由来。
那如何达到这三个条件?
1. 条件1可以通过堆叠网络(增加f的深度)达成;
2. 三角矩阵的行列式是对角元的乘积,所以设计fi使其雅克比矩阵为三角阵,行列式的计算复杂度降至与阶数的一次方成正比,此即满足了条件2;


仍然十分简单的计算。注意到这里并没有要求m是可逆的,所以可以设计出任意复杂的网络结构。
若只做一次加和耦合层操作,xI1经过变换,xI2保持不变,因此需要对调I1和I2两组维度,再输入加和耦合层,并将这个过程重复若干次, 以达到信息充分混合的目的,如图1所示。

图 1 :NICE中加和耦合层的叠加

加和耦合层的雅克比行列式为1,保持分布的“体积”不变。但输出维度和输入维度相同,会产生维度浪费问题,因为不是每个维度都同等重要。NICE在最后一层引入了一个尺度变换


实验结果
作者在MNIST、TFD(人脸数据集)、SVHN(街景门牌数据集)和CIFAR-10上做了实验。图2是NICE模型在这四个数据集上分别训练再采样得到的图片。


图 2: NICE模型在MNIST(左上)、TFD(右上)、SVHN(左下)、CIFAR-10(右下)上训练的结果

可以看到对于较简单的数据集如MNIST和TFD,NICE模型可以较好地学到数据的特征;对于较复杂的场景,NICE就无能为力了。

三、Density estimation using Real NVP [2]
RealNVP是NICE的改进。基于NICE的思想,RealNVP中引入了更复杂的网络结构,极大地增强了模型的表现能力,更适配于处理图像问题。它的主要贡献点如下。
仿射耦合层(Affine Coupling Layer)
为了满足网络结构设计的3个条件,NICE模型采用了加和耦合层作为网络的基本结构。在RealNVP中,为加和耦合层添加了一个对角的缩放变换,从而成为仿射耦合层:


s在这里起到对x的部分维度缩放的作用。从它的矩阵形式可以看出仿射耦合层的雅克比行列式一般不等于1,而行列式的物理含义是体积,所以仿射耦合层对“体积”做了缩放,不再如NICE中保持不变,这就是论文标题中的缩写NVP(Non-Volume Preserving)的由来。

Mask Convolution
在NICE中,为了确保加性耦合层能混合所有的信息,在各个加性耦合层之间需要将维度按不同方式分成两组并交换位置。因为NICE中只使用了全连接层,所以采用的维度分组策略也很简单:直接取前一半和后一半。

为了更好地处理图像问题,RealNVP中使用了卷积层。但如此一来之前的维度分组策略不再合适:若直接在空间维度上切割与重排,会破坏图像和卷积的空间相关性。为了克服这个困难RealNVP提出了两种分割策略:按通道分割与棋盘式分割。两种分割与重排方式如图3所示。

图 3:棋盘式分割策略(左)与按通道分割策略(右)

在按通道分割策略中,分割与重排过程只在通道维度上进行;在棋盘式分割策略中,虽然是在空间上分割与重排,但每个点周围保留了一半的近邻点,空间相关性的破坏也大大降低。

多尺度结构
首先定义压缩(squeeze)操作: 以空间上2*2的像素块为一组,将大小s*s*c的图片变成大小s/2 * s/2 * 4c的图片,即将空间信息放入通道维度中。压缩操作减小空间尺寸的同时增加了通道数量,在按通道分割策略下可以混合并打乱更多信息。

图 4:压缩操作

多尺度的结构如图5所示。设输入数据x的维数为s*s*c。在每个尺度上,输入会经过耦合层、压缩等操作组合成的网络的计算(图中用f表示),输出的维度为s/2*s/2*4c,此时将输出在通道上切成两半z和h,其中h进入下一个尺度计算,而另一半z直接输出,最终的输出是各个尺度输出的z的集合:

因为不是所有的输入维度都需要经过全部的变换,所以多尺度结构显著减少了计算量。除此之外,直观地看越早提取出的z经过的变换层数越少,表示的信息越局域;反之亦然。这些z构成了不同层次的表示。

图 5:多尺度结构

RealNVP实验结果
数据集中真实样本与RealNVP的采样样本对比展示于图6。与NICE相比,RealNVP的实验结果明显清晰许多,模型拟合能力的确得到了提升。可以看出模型对人脸和卧室这类简单场景学习得较好,而在ImageNet这类普通自然场景上的效果仍然不理想。

图 6:RealNVP在ImageNet、CelebA 、LSUN数据集上的效果。左列是数据集中样本,右列为RealNVP采样出的样本。

四、Glow: Generative Flow with Invertible 1×1 Convolutions [3]
Glow在RealNVP基础上进一步增强了网络的表达能力。它的改进点在:

ActNorm层
当batch size很小时,各个batch间的variance较大,此时Batch Normalization不适用,Glow中引入了缩放平移变换来代替BN层的作用:


计算量由之前的O(c3)减少到O(c),达到可接受的范围。在实际操作时,用正交矩阵初始化W,计算它的PLUs分解,优化时固定P,仅优化L、U和s。
Glow同样采用了多尺度结构,整个Glow的模型结构与RealNVP相似,如下图所示。

图 7:Glow模型结构

Glow实验结果
定量实验
论文中对比了使用反转、打乱、1x1卷积三种做维度重排的方式。图8的结果表明了无论是使用加和耦合层还是仿射耦合层,1x1卷积都可以达到较低的负对数似然。

图 8:不同耦合层与分割策略下的负对数似然

定性实验
在卧室照片数据集LSUN上训练,选取合适的退火温度参数,采样的图片质量可媲美真实图片(图9)。

图 9:LSUN数据集上训练的模型的采样样本

图10展示了人脸数据集上通过在两张真实图片的隐变量之间插值得到的合成图片,结果同样非常真实且过渡顺畅。可以看出中间的合成图片并不是像素级别插值的结果。

图10:潜空间中真实图片间线性插值得到的样本

总结
本文介绍了流模型——一种不同于GAN和VAE的神经网络生成模型框架,并分析了此框架下的三个模型——NICE、RealNVP和Glow的结构。从数学的角度看,这类模型的优点是具有显式、严格的密度估计与隐变量推断;从结果上看,生成的样本质量高,并且同时能学到有丰富语义的隐变量。然而为了生成高质量的样本所需的计算量较大,并且目前暂未有在NLP等非图像领域上的应用。因此流模型框架以及如何与NLP结合还有待将来进一步研究。

参考文献
[1] Laurent Dinh, David Krueger and Yoshua Bengio. NICE: Non-linear Independent Components Estimation. arXiv Preprint arXiv:1410.8516.
[2] Laurent Dinh, Jascha Sohl-Dickstein and Samy Bengio. Density estimation using Real NVP. arXiv Preprint arXiv: 1605.08803.
[3] Diederik P. Kingma and Prafulla Dhariwal. Glow: Generative Flow with Invertible 1x1 Convolutions. In Advances in Neural Information Processing Systems, pages 10236-10245.

声明:本文版权归原作者所有,文章收集于网络,为传播信息而发,如有侵权,请联系小编及时处理,谢谢!

欢迎加入本站公开兴趣群
商业智能与数据分析群
兴趣范围包括:各种让数据产生价值的办法,实际应用案例分享与讨论,分析工具,ETL工具,数据仓库,数据挖掘工具,报表系统等全方位知识
QQ群:81035754

鲜花

握手

雷人

路过

鸡蛋

相关阅读

最新评论

热门频道

  • 大数据
  • 商业智能
  • 量化投资
  • 科学探索
  • 创业

即将开课

 

GMT+8, 2019-8-7 01:41 , Processed in 0。171232 second(s), 25 queries 。

江西快三开奖结果 江苏快三开奖结果 河北快3开奖结果 江苏快3开奖结果 江苏快3开奖结果 上海快3开奖结果 江苏快3开奖结果 江苏快3开奖结果 江苏快三开奖结果 江苏快三开奖结果