![生成对抗网络GAN:原理与实践](https://wfqqreader-1252317822.image.myqcloud.com/cover/116/48213116/b_48213116.jpg)
1.2.3 流模型
流模型是一种想法比较直接但实际不容易构造的生成模型,它通过可逆的非线性变换等技巧使得似然函数可以被精确计算出来。相较于FVBN,流模型添加了隐变量的概念,并通过某种确定性的映射关系建立了隐变量到观察变量之间的联系。
我们首先介绍流模型的基本思想。对于一个分布比较简单(例如高斯分布)的隐变量z,其概率密度分布记为pz(z),这时若存在一个连续、可微、可逆的非线性变换g(z),将简单的隐变量z的分布转换成关于样本x的一个复杂分布,我们将非线性变换g(z)的逆变换记为f(x),即有x=g(z)和z=f(x),则可得到样本x的准确的概率密度函数px(x):
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_26_01.jpg?sign=1739068465-406G2oEBi9XH9lOQjnLPvY6EARWihHlk-0-846b8244a05ca6a9d3fe4ea09bd2709e)
注意,非线性变换g(z)会引起空间的变形,即px(x)≠pz(f(x)),但有pz(z)dz=px(x)dx。对于可逆矩阵有det(A-1)=det(A)-1,故px(x)也可写为:
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_26_02.jpg?sign=1739068465-DPYn19m5GdWTYJEIWkdS39hB1AxHjjjq-0-30b2bb0fa6cd449ad93ab4873510f5b1)
若上述模型构建成功,则生成样本时只需从简单分布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),一个变量连续流过多个变换最终“形成”另一个变量,这就是流模型中流的意义。相应地,雅可比矩阵的行列式可分解为:
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_26_04.jpg?sign=1739068465-awq2jG0Nz9O94K3Qg1OfN8J0yu5pduKp-0-5e6e39b85d3190a8dd39ed78638f5c56)
此处,我们介绍两种非常基本的流:仿射流(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)),则雅可比矩阵为对角矩阵:
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_27_01.jpg?sign=1739068465-HPlTidxCfBoiiv82oNPlxK6feBhcYKnh-0-3f6260d5fa2a4b2ef8ca0c23a84bf17c)
其行列式也容易计算,即:
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_27_02.jpg?sign=1739068465-LGbKYZXsoOYjNl9noEDSfWkzqKq7pLH3-0-5c31135f569861610102fa1204149a2e)
为了使读者对流模型有更深刻的理解,我们对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部分;还可以使用其他划分方式。然后对两部分进行变换:
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_27_03.jpg?sign=1739068465-WXa41aVcnQW8KZVgpCtwztDpKEC92MuF-0-1c1c2e53000eed667ad2151e912d1c40)
其中m()为任意函数,注意这里要保证m()的输出结果维度与x2一致,NICE模型使用多层全连接网络和ReLU激活函数来构建m()。容易发现,使用加性耦合层作为逆变换f(x)的一部分,它是可逆的,并且雅可比矩阵的行列式也是容易计算的。当已知h1和h2时,可得其逆变换:
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_27_04.jpg?sign=1739068465-zoVcTlHQyCdmrO6plhRodwushwIMb3OP-0-1206069b748134953911ee94e1ace6b1)
其雅可比矩阵为:
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_27_05.jpg?sign=1739068465-ULpDds6qBAFBzzaD9RoqzRhwEGMe7bhW-0-1c69a5db8549af004a7c1b882f4e36ac)
根据三角矩阵的性质,其行列式为对角元素的乘积,故加性耦合层雅可比矩阵的行列式绝对值为1。当将多个加性耦合层串联时,NICE模型结构如图1-10所示。由于每层的逆变换是容易计算的,因此串联后的逆变换仍然是容易计算的。此时的雅可比矩阵为:
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_27_06.jpg?sign=1739068465-ODWfYLPOkQd4vwe5IbGFaKex9RdI4XIM-0-7b367cb33b2b122cde183858b1b98a26)
图1-10 NICE模型结构
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_28_01.jpg?sign=1739068465-gXRF6jgJPYorwOqGaLaurOgGSPKU5Jit-0-4971343e6d4966614ee957320145f682)
根据矩阵行列式的性质,有:
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_28_02.jpg?sign=1739068465-gtFdsyZplOAGbXkHQwRInnuV1W77RC7V-0-8a72d40a693129afb16f41df58ec6f3f)
需要说明的是,必须注意在不同的加性耦合层使用不同的划分策略,使得样本不同维度的信息充分混淆。在尺度变换层,定义了一个包含n个非负参数的向量s=[s1,s2,…,sn],将加性耦合层的输出结果h(l)与s逐元素相乘可得到对应的隐变量z。这里s用于控制每个维度的特征变换的尺度,可以表征维度的重要性,对应维度的数值越大,表明这一维度的重要性越低。显然,尺度变换层的逆变换只需逐元素乘1/s,因此生成样本时隐变量需要先经过尺度变换层,需要逐元素乘1/s。尺度变换层作为一种元素流,其雅可比矩阵为:
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_28_03.jpg?sign=1739068465-Au47BR3amKyrrQZZFisHjWoccvxy5u4a-0-4cfbd0aee244bb954ddfe492f3b4a0d1)
由此,其雅可比矩阵的行列式为s1s2…sn。现在,我们就构造了可逆的、雅可比矩阵的行列式绝对值易于计算的逆变换f(x)。对于隐变量z,NICE模型假设其n个维度彼此独立,即
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_28_04.jpg?sign=1739068465-VSzOcAwEneuw0Dtrs0lwHsPx2UGGiz8b-0-c55da402531bfde4d8bd34e50b2a489c)
若选择z为高斯分布,则样本x的似然函数为:
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_28_05.jpg?sign=1739068465-5TTmx2tqMRP3TyYFqESzvsHMQyYZtNXX-0-1a8cd3f558f4c2874793bbdbaf0268be)
若选择z为logistic分布,即:
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_28_06.jpg?sign=1739068465-O2CJYszGI6vtCNCuakJmxx4M6ZgEf0Yj-0-5cbd6dd582fa6fb66f062e388e10c8e3)
则样本x的似然函数为:
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_28_07.jpg?sign=1739068465-aunzblujyhIosBoAKUkfn4IQFfIW4kQy-0-c3424f5c2bf8d591e3f31d73cc62b28b)
此时,我们可以使用极大似然法对NICE模型进行训练,训练完成后也得到了生成模型g(z)。若z为高斯分布,则直接从高斯分布中采样可得到z;若选择z为logistic分布,则可先在0-1之间的均匀分布中采样得到ε,然后使用变换z=t(ε)得到隐变量。根据两个随机变量的映射关系
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_29_01.jpg?sign=1739068465-Kuj1yPoeirZWyavSZxlQiAJArjPiBa2U-0-da32cd7f6de45c2305cbcf33cdb4ff1c)
则有t(ε)=logε-log(1-ε)。对隐变量z进行非线性变换g(z),即经过尺度变换层的逆变换、多个加性耦合层的逆变换可得到生成样本x。
NICE模型的核心代码如下所示:
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_29_02.jpg?sign=1739068465-oA4hfYcNkF0rja75uAdTm7DmSYQBshmy-0-26ace453736e2c8d1ff183ccd93c7f1c)
![](https://epubservercos.yuewen.com/7550BE/27732744204343206/epubprivate/OEBPS/Images/978-7-111-71223-7_30_01.jpg?sign=1739068465-NGwoB4TKYWuczlWhCpApbw5mV8I4XS47-0-c81f565c6e0691dfc3544465fe00caac)
Real NVP[5]模型和Glow[6]模型在NICE模型的基础上进行了改进,例如在耦合层中引入了卷积操作,添加了多尺度结构等,进一步提升了生成样本的质量。此外,在自回归模型中引入非线性映射可构建为自回归流模型,主要包括掩膜自回归流(Masked Autoregressive Flow,MAF)、以及逆自回归流(Inverse Autoregressive Flow,IAF)两大类,它们由于设计方法存在较大差异,故在计算似然函数的速度上分别具有不同的优势。总体而言,流模型通过精巧的设计使得样本的概率密度函数可以精确计算,具有非常优雅的理论支撑,但不足之处在于运算过程复杂,并且训练时间过长,实践效果与GAN等模型仍有差距。