1.2.3 流模型
流模型是一种想法比较直接但实际不容易构造的生成模型,它通过可逆的非线性变换等技巧使得似然函数可以被精确计算出来。相较于FVBN,流模型添加了隐变量的概念,并通过某种确定性的映射关系建立了隐变量到观察变量之间的联系。
我们首先介绍流模型的基本思想。对于一个分布比较简单(例如高斯分布)的隐变量z,其概率密度分布记为pz(z),这时若存在一个连续、可微、可逆的非线性变换g(z),将简单的隐变量z的分布转换成关于样本x的一个复杂分布,我们将非线性变换g(z)的逆变换记为f(x),即有x=g(z)和z=f(x),则可得到样本x的准确的概率密度函数px(x):
注意,非线性变换g(z)会引起空间的变形,即px(x)≠pz(f(x)),但有pz(z)dz=px(x)dx。对于可逆矩阵有det(A-1)=det(A)-1,故px(x)也可写为:
若上述模型构建成功,则生成样本时只需从简单分布pz(z)中随机采样然后使用非线性变换将其变换为x=g(z)即可。
为了使用极大似然估计法训练上述生成模型,我们必须计算样本的概率密度函数px(x)。分析上式,要计算概率密度函数px(x),就需要计算pz(z)和雅可比矩阵的行列式绝对值。pz(z)理论上可以具备任意的形式,但是通常设计为简单的分布,例如高斯分布N(0,I),这样便于进行计算和采样。我们将pz(z)为标准高斯分布的流模型称为标准流模型(normalizing flow model);对于雅可比矩阵,要将f(x)设计为某种特殊的形式,使得雅可比矩阵的行列式易于计算。另外,变换的可逆性要求样本x和隐变量z具有相同的维度。综上,我们需要将上述模型精心设计成一种易于处理且灵活的双射模型,使其逆变换f(x)存在,且对应的雅可比矩阵的行列式可高效计算。
在实际的流模型中,非线性映射f(x)是由多个映射函数f1,f2,…,fk组合而成的,即z=fk°…°f1(x)和x=(z),一个变量连续流过多个变换最终“形成”另一个变量,这就是流模型中流的意义。相应地,雅可比矩阵的行列式可分解为:
此处,我们介绍两种非常基本的流:仿射流(affine flow)和元素流(element-wise flow)。在仿射流中,非线性映射f(x)=A-1(x-b)将样本x映射到标准正态分布,其中可学习参数A为非奇异方阵,b为偏置向量,采样过程为先采样获得z,再根据x=Az+b获得样本。仿射流模型中的雅可比矩阵为A-1,即行列式的计算难度源于矩阵的维度数目是多少。在元素流中,映射是逐元素进行的,即f(x1,…,xn)=(f(x1),…,f(xn)),则雅可比矩阵为对角矩阵:
其行列式也容易计算,即:
为了使读者对流模型有更深刻的理解,我们对NICE模型[4]进行详细的介绍。NICE模型的逆变换f(x)由多个加性耦合层和一个尺度变换层构成。在每个加性耦合层中,首先将n维样本x分解为两部分,x1和x2,例如可以将x的第1,3,5,…个元素划入x1部分,将第2,4,6,…个元素划入x2部分,每个部分的维度均为n/2;也可以将x的第2,4,6,…个元素划入x1部分,将第1,3,5,…个元素划入x2部分;还可以使用其他划分方式。然后对两部分进行变换:
其中m()为任意函数,注意这里要保证m()的输出结果维度与x2一致,NICE模型使用多层全连接网络和ReLU激活函数来构建m()。容易发现,使用加性耦合层作为逆变换f(x)的一部分,它是可逆的,并且雅可比矩阵的行列式也是容易计算的。当已知h1和h2时,可得其逆变换:
其雅可比矩阵为:
根据三角矩阵的性质,其行列式为对角元素的乘积,故加性耦合层雅可比矩阵的行列式绝对值为1。当将多个加性耦合层串联时,NICE模型结构如图1-10所示。由于每层的逆变换是容易计算的,因此串联后的逆变换仍然是容易计算的。此时的雅可比矩阵为:
图1-10 NICE模型结构
根据矩阵行列式的性质,有:
需要说明的是,必须注意在不同的加性耦合层使用不同的划分策略,使得样本不同维度的信息充分混淆。在尺度变换层,定义了一个包含n个非负参数的向量s=[s1,s2,…,sn],将加性耦合层的输出结果h(l)与s逐元素相乘可得到对应的隐变量z。这里s用于控制每个维度的特征变换的尺度,可以表征维度的重要性,对应维度的数值越大,表明这一维度的重要性越低。显然,尺度变换层的逆变换只需逐元素乘1/s,因此生成样本时隐变量需要先经过尺度变换层,需要逐元素乘1/s。尺度变换层作为一种元素流,其雅可比矩阵为:
由此,其雅可比矩阵的行列式为s1s2…sn。现在,我们就构造了可逆的、雅可比矩阵的行列式绝对值易于计算的逆变换f(x)。对于隐变量z,NICE模型假设其n个维度彼此独立,即
若选择z为高斯分布,则样本x的似然函数为:
若选择z为logistic分布,即:
则样本x的似然函数为:
此时,我们可以使用极大似然法对NICE模型进行训练,训练完成后也得到了生成模型g(z)。若z为高斯分布,则直接从高斯分布中采样可得到z;若选择z为logistic分布,则可先在0-1之间的均匀分布中采样得到ε,然后使用变换z=t(ε)得到隐变量。根据两个随机变量的映射关系
则有t(ε)=logε-log(1-ε)。对隐变量z进行非线性变换g(z),即经过尺度变换层的逆变换、多个加性耦合层的逆变换可得到生成样本x。
NICE模型的核心代码如下所示:
Real NVP[5]模型和Glow[6]模型在NICE模型的基础上进行了改进,例如在耦合层中引入了卷积操作,添加了多尺度结构等,进一步提升了生成样本的质量。此外,在自回归模型中引入非线性映射可构建为自回归流模型,主要包括掩膜自回归流(Masked Autoregressive Flow,MAF)、以及逆自回归流(Inverse Autoregressive Flow,IAF)两大类,它们由于设计方法存在较大差异,故在计算似然函数的速度上分别具有不同的优势。总体而言,流模型通过精巧的设计使得样本的概率密度函数可以精确计算,具有非常优雅的理论支撑,但不足之处在于运算过程复杂,并且训练时间过长,实践效果与GAN等模型仍有差距。