生成对抗网络GAN:原理与实践
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.2.3 流模型

流模型是一种想法比较直接但实际不容易构造的生成模型,它通过可逆的非线性变换等技巧使得似然函数可以被精确计算出来。相较于FVBN,流模型添加了隐变量的概念,并通过某种确定性的映射关系建立了隐变量到观察变量之间的联系。

我们首先介绍流模型的基本思想。对于一个分布比较简单(例如高斯分布)的隐变量z,其概率密度分布记为pzz),这时若存在一个连续、可微、可逆的非线性变换gz),将简单的隐变量z的分布转换成关于样本x的一个复杂分布,我们将非线性变换gz)的逆变换记为fx),即有x=gz)和z=fx),则可得到样本x的准确的概率密度函数pxx):

注意,非线性变换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)即可。

为了使用极大似然估计法训练上述生成模型,我们必须计算样本的概率密度函数pxx)。分析上式,要计算概率密度函数pxx),就需要计算pzz)和雅可比矩阵的行列式绝对值。pzz)理论上可以具备任意的形式,但是通常设计为简单的分布,例如高斯分布N(0,I),这样便于进行计算和采样。我们将pzz)为标准高斯分布的流模型称为标准流模型(normalizing flow model);对于雅可比矩阵,要将fx)设计为某种特殊的形式,使得雅可比矩阵的行列式易于计算。另外,变换的可逆性要求样本x和隐变量z具有相同的维度。综上,我们需要将上述模型精心设计成一种易于处理且灵活的双射模型,使其逆变换fx)存在,且对应的雅可比矩阵的行列式可高效计算。

在实际的流模型中,非线性映射f(x)是由多个映射函数f1,f2,…,fk组合而成的,即z=fk°…°f1x)和x=z),一个变量连续流过多个变换最终“形成”另一个变量,这就是流模型中流的意义。相应地,雅可比矩阵的行列式可分解为:

此处,我们介绍两种非常基本的流:仿射流(affine flow)和元素流(element-wise flow)。在仿射流中,非线性映射fx)=A-1x-b)将样本x映射到标准正态分布,其中可学习参数A为非奇异方阵,b为偏置向量,采样过程为先采样获得z,再根据x=Az+b获得样本。仿射流模型中的雅可比矩阵为A-1,即行列式的计算难度源于矩阵的维度数目是多少。在元素流中,映射是逐元素进行的,即fx1,…,xn)=(fx1),…,fxn)),则雅可比矩阵为对角矩阵:

其行列式也容易计算,即:

为了使读者对流模型有更深刻的理解,我们对NICE模型4进行详细的介绍。NICE模型的逆变换f(x)由多个加性耦合层和一个尺度变换层构成。在每个加性耦合层中,首先将n维样本x分解为两部分,x1x2,例如可以将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)的一部分,它是可逆的,并且雅可比矩阵的行列式也是容易计算的。当已知h1h2时,可得其逆变换:

其雅可比矩阵为:

根据三角矩阵的性质,其行列式为对角元素的乘积,故加性耦合层雅可比矩阵的行列式绝对值为1。当将多个加性耦合层串联时,NICE模型结构如图1-10所示。由于每层的逆变换是容易计算的,因此串联后的逆变换仍然是容易计算的。此时的雅可比矩阵为:

图1-10 NICE模型结构

根据矩阵行列式的性质,有:

需要说明的是,必须注意在不同的加性耦合层使用不同的划分策略,使得样本不同维度的信息充分混淆。在尺度变换层,定义了一个包含n个非负参数的向量s=[s1,s2,…,sn],将加性耦合层的输出结果h(l)s逐元素相乘可得到对应的隐变量z。这里s用于控制每个维度的特征变换的尺度,可以表征维度的重要性,对应维度的数值越大,表明这一维度的重要性越低。显然,尺度变换层的逆变换只需逐元素乘1/s,因此生成样本时隐变量需要先经过尺度变换层,需要逐元素乘1/s。尺度变换层作为一种元素流,其雅可比矩阵为:

由此,其雅可比矩阵的行列式为s1s2sn。现在,我们就构造了可逆的、雅可比矩阵的行列式绝对值易于计算的逆变换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 NVP5模型和Glow6模型在NICE模型的基础上进行了改进,例如在耦合层中引入了卷积操作,添加了多尺度结构等,进一步提升了生成样本的质量。此外,在自回归模型中引入非线性映射可构建为自回归流模型,主要包括掩膜自回归流(Masked Autoregressive Flow,MAF)、以及逆自回归流(Inverse Autoregressive Flow,IAF)两大类,它们由于设计方法存在较大差异,故在计算似然函数的速度上分别具有不同的优势。总体而言,流模型通过精巧的设计使得样本的概率密度函数可以精确计算,具有非常优雅的理论支撑,但不足之处在于运算过程复杂,并且训练时间过长,实践效果与GAN等模型仍有差距。