论文地址:glow
终于开始总结流模型的最终成熟版--glow。数学原理跟NICE和RealNVP基本一致,主要是在网络模型上进行了优化。
一、论文概述
1、摘要部分指出了流模型吸引人的地方,对对数似然精确的计算和潜在变量精确的推断,以及训练和合成的并行性。glow模型在之前流模型的基础上采用了可逆的1 x 1卷积核对输入数据进行打乱,简化了网络模型。
2、在背景知识介绍上,主要介绍了流模型背后的数学原理,通过选取三角矩阵简化对雅克比行列式求值的难度。具体可以参考关于流模型的第一篇博客NICE。
3、在第三部分具体介绍glow模型,单步流的第一步是Actnorm层,通过Acrnorm层对数据进行规范化处理,采用每个通道的缩放和偏差参数进行**,使得小批量的数据在**后具有零均值和单位方差,而且这两个参数可以进行训练。相当于对数据进行了预处理,避免网络性能的下降。
第二步是可逆的1x1卷积核,目的是采用矩阵乘法实现对各个维度数据的打乱,使信息混合得更加充分,同时采用1x1的卷积核使得参数矩阵可以训练。在其中还涉及到LU分解,使得计算更加方便。
第三步是仿射变换层,训练得出可逆的函数。
整体框架采取了RealNVP的多尺度结构。
在table1中给出了详细的数学公式:
4、实验部分
首先是定性实验部分。比较了glow和RealNVP在传统数据集上的表现,Glow在量化指标BPD(bits/dim,压缩每个通道所需的比特数,越小越好)都优于RealNVP模型。同时在对数似然(越大越好)上与传统的生成模型(VAE和自回归模型)进行比较。
在实验中,耦合层采用三层卷积层,前两层采用ReLU**函数,第一层和最后一层是3x3的卷积核,中间一层是1x1的卷积核,每层都是512个通道数,所以输入和输出的大小相同,有利于进行深度训练。
在实验中对置换操作进行了比较,分别采取了直接反转(reverse)、固定(不参与训练)的随机置换(shuffle)、1x1可逆卷积核三种方式,同时在不同的耦合层进行实验。采用1x1可逆卷积核可以取得最低loss,而且收敛最快。
定量实验应该是属于glow的编码部分。
定性实验部分算是属于生成部分,主要是包括图像生成、插值和控制生成。插值部分通过将真实照片编码,对潜在变量进行线性插值生成图片,整个过程是比较顺滑的。控制生成是根据标签的差值(如微笑的平均潜在变量-不笑的平均潜在变量)进行控制,相当于很小程度的监督。
这里需要注意的是使用了退火参数(reduced-temperature),文章中是选取0.7效果比较好。
对于网络的深度L,文章中是选取6效果比较好。
二、感想
glow对潜在变量空间应用的潜力确实比较大,生成效果根据文章来看确实不错,接下来就需要自己来认真看一下源代码,进行实现,估计真正跑起来需要很多时间。