GAN和VAE都out了?理解基于流的生成模型(flow-based): Glow,RealNVP和NICE,David 9的挖坑贴

生成模型一直以来让人沉醉,不仅因为支持许多有意思的应用落地,而且模型超预期的创造力总是让许多学者和厂商得以“秀肌肉”:

OpenAI Glow模型生成样本样例,在隐空间控制图像渐变

了解基于流的生成模型(flow-based)前,先回顾目前主流的两类生成模型GAN和VAE,David 9文章早已介绍过

VAE与GAN结构比较

GAN简单粗暴,用两个深度网络(判别器D和生成器G)交替学习使得生成器G可以模拟现实生成样本,但是缺陷也是明显的:GAN不能直接了当地给出一个样本的隐分布的表征(你可以生成一个明星,但是你无法马上生成一个“微笑的”或“年轻的”明星),即,你很难用隐变量随意操纵生成的样本,你只知道生成的是任意样本(除非你重新设计GAN,像我们以前谈到的cGAN或者FaderNetworks等等。。)

VAE思路就完全不同,它继承了古老的贝叶斯理论,相信一切的创造可以用抽样后验概率来缔造。

你想创造新样本?好的,但是真实分布空间X 太复杂了,我们先意淫一个后验空间Z吧:

来自论文:DENSITY ESTIMATION USING REAL NVP

只要X空间Z空间是可以相互映射转换,从一个简单Z空间中抽样随机变量z,就能从z生成在X空间中的真实样本x 。注意:VAE不仅是encoderdecoder的简单组合,最终的样本表征不是用深度网络层直接拿出一层隐层,而是用随机变量z去抽样,使随机变量z的空间分布模拟这个隐层分布。这样,VAE的encoder隐层就赋予了Z空间分布的表征意义。但是VAE的表征意义仅仅是针对单个样本的,z没有包含高层语义(比如我要控制生成“微笑的”明星),另外VAE模型本身也难以优化。

知道了GAN和VAE的缺陷,再来了解基于流的生成模型(Glow,RealNVP和NICE)就更自然。

基于流的生成模型两大卖点是:

隐变量z的丰富语义能力,以及容易进行计算并行(parallel)。

详细探讨之前,首先我们需要理解什么是基于流的生成模型,“流”或者“flow”是什么意思?

flow-based生成模型与传统的后验模型(如VAE)相似,以隐空间Z的隐变量z抽样为模型核心,以容易计算的log-likelihood损失函数为指导。与VAE不同的是,最终隐变量z的抽样方式更巧妙,flow-based模型通过一系列可逆函数f 对隐变量z进行多次转换:

来自:Glow论文

这里的f1,f2,fK就是可逆函数,h1,h2,z 都是隐变量,隐变量就像在管道流中“流动”一样,下面是来自论文Improving Variational Inference with Inverse Autoregressive Flow的类似结构:

来自论文:Improving Variational Inference with Inverse Autoregressive Flow

越是后几层导出的隐变量z,越是有较高级的语义属性 。为什么?

从信息论角度David 9认为,可以理解每个可逆转换函数f 蕴含映射X空间 <–> Z空间 的信息,函数f 越多,拥有的空间转换能力越强,最终可以导致:如果隐变量z蕴含较高语义的布局样式等信息,可逆函数f也能成功还原出图像(不仅是像素级别的还原)。

另外, 可逆的转换函数f 之所以可逆,空间转换依靠了求解雅可比(jacobian)行列式

其中

雅可比(jacobian)行列式 。

论文RealNVP的附加实验也进一步说明了这一点:

其中第一列是原图,后面几列是高层隐变量的还原图像,并且从左向右,把隐变量信息逐步删减(依次保留100%, 50%, 25%, 12.5% 到 6.25%),模型依旧能还原图像的轮廓等高层信息。

OpenAI 的新模型Glow生成样本样例,在隐空间控制图像渐变,也说明高层特征在流模型中是容易操纵的(Glow在流模型中的其他技巧我们先不细讲):

那么如何解释流模型容易进行计算并行(parallel)?这个有很多种方式比较容易理解,首先对图像的抽样可以用类似带步长卷积,把图像分割成多个通道(但这些通道不影响X空间 <–> Z空间的映射):

来自论文RealNVP

隐变量z可以并行在这些通道上计算,甚至有些通道可以不做可逆变换,直接采取类高斯抽样:

来自论文RealNVP

图像在维度上的抽样灵活性可以保证你总能找到一些方法使得模型整体加速。当然基于流的生成模型还有许多技巧有待挖掘,比如Glow中1*1卷积的应用,David 9期待在下次和大家分享研读心得。

 

参考文献:

  1. Glow: Generative Flow with Invertible 1×1 Convolutions
  2. Density estimation using Real NVP
  3. Improving Variational Inference with Inverse Autoregressive Flow
  4. 独家 | GAN大盘点,聊聊这些年的生成对抗网络 : LSGAN, WGAN, CGAN, infoGAN, EBGAN, BEGAN, VAE
  5. https://zhuanlan.zhihu.com/p/39973479
  6. https://blog.openai.com/glow/
  7. https://github.com/openai/glow
  8. NICE: Non-linear Independent Components Estimation

本文采用署名 – 非商业性使用 – 禁止演绎 3.0 中国大陆许可协议进行许可。著作权属于“David 9的博客”原创,如需转载,请联系微信: david9ml,或邮箱:yanchao727@gmail.com

或直接扫二维码:

发布者

David 9

David 9

邮箱:yanchao727@gmail.com 微信: david9ml

《GAN和VAE都out了?理解基于流的生成模型(flow-based): Glow,RealNVP和NICE,David 9的挖坑贴》上有2条评论

  1. 我想问一下作者,如何更新可逆转换函数f呢,从代码上来看,可逆函数f是随机初始化的,模型根据极大似然来更新f,具体过程是怎样的?

发表评论

电子邮件地址不会被公开。 必填项已用*标注