规整化流 & NICE模型
参考:
统计学习建模p(x∣θ)的目标:
- 采样该结构,生成数据。
- 评估测试数据的似然概率。在拒绝采样或评估模型时有用。(unconditional likelihood estimation)
- 获得变量间的条件依赖关系。如p(x1∣x2)可以用来判别或者回归。(conditional likelihood estimation)
- 评判算法。如熵、互信息、高阶矩等指标。
以上四个目标,第一个研究的最充分。合成图像、声音,已在谷歌商用。但第二三四个,研究寥寥。仅举几例,GAN的解码器,支撑集(映射到非零值的自变量)不可得;DRAW模型乃至VAE模型,概率密度不可得;哪怕已解析地了解某分布,解析的度量(如KL距离,earth-mover距离)还是不可得。【译者按:这句话说的简单点就是:深度产生式模型不容易甚至不可能进行测试和度量】
规整化流
规整化流的主要目标:从一个简单的分布出发,构建出新分布:
- 足够复杂,容得下多个模式。
- 足够简单,能采样,能估计密度,能重参数化。

经过这样的变化,p(x)周围的微元上的一个p(x)dx应当与变换后的p(y)dy相同,这样定义域上的所有微元积分到一起时能保证结果不变。
由于变换要求可逆,所以变换函数f(⋅)应当是单调增函数或者单调减函数。
- 单调增函数的逆函数h(⋅)也应当是单调增函数。因此:
FX(x)=p[X≤x]=p[f(Z)≤x]=p[Z≤h(x)]=FZ(h(x))
pX(x)=dxdFX(x)=dxdFZ(h(x))=pZ(h(x))∗h′(x)
h′(x)会是正数
- 当f(⋅)是单调减函数,其反函数亦然。因此:
FX(x)=p[X≤x]=p[f(Z)≤x]=p[Z≥h(x)]=1−FZ(h(x))
pX(x)=dxdFX(x)=dx(1−dFZ(h(x)))=pZ(h(x))∗−h′(x)
统一起来,可以简单表示为:
pX(x)=pZ(h(x))∗∣h′(x)∣
对于多元且非线性的变换:
y=f(x)
则应当额外乘上逆变换对原变量的雅可比矩阵的行列式的绝对值:
p(y)logp(y)=p(f−1(y))⋅∣detJ(f−1(y))∣=logp(f−1(y))+log∣det(J(f−1(y)))∣
这样,通过多次的复合变换,即可将简单地分布变换为更有表达能力的复杂分布。

NICE模型
学习训练流程
存在一个数据集D,将其中的每个样本输入进编码器,也就是将图像所对应的复杂的概率分布中采样出的样本,经过多重的可逆的变量转换,最终输出的同纬度编码。我们将其视为最终输出的复合的简单的隐变量z。
将这个隐变量输入正态的概率密度函数(所设定的先验)输出其似然,通过反向传播最大化该似然。
θmaxlogpX(D;θ)=x∈D∑logpZ(fθ−1(x))+logdet(∂x∂fθ−1(x))
推理采样流程
从相同维度的高斯分布中采样一个样本,通过编码器可逆变换形成的解码器解码。
NICE网络结构设计
分块耦合层
为了将上述的雅可比矩阵转换为下三角矩阵:将D维的输入x分为两个部分x1和x2。分别是从x的1 ~ d维度和d+1 ~ D维度。
且由于h的定义是从x向z定义的,因此以下变换即为上文提到的逆变换,求其雅可比矩阵的行列式。
h1=x1h2=x2+m(x1)
m是任意的变换函数,以上操作得到h的过程称为“加性耦合层”(Additive Coupling)。
[∂x∂h]=(Id[∂x1∂m]OId:D)
以上雅可比矩阵的行列式为1。
在后续的推理时,即可用相同的神经网络m构建逆过程。
x1=h1x2=h2−m(h1)
单个变换不能达到非常强的非线性,所以我们需要多个简单变换的复合,以达到强非线性,增强拟合能力。
x=h(0)↔h(1)↔h(2)↔⋯↔h(n−1)↔h(n)=z
[∂x∂z]=[∂h(0)∂h(n)]=[∂h(n−1)∂h(n)][∂h(n−2)∂h(n−1)]⋯[∂h(0)∂h(1)]
且因为“矩阵的乘积的行列式等于矩阵的行列式的乘积”,而每一层都是加性耦合层,因此每一层的行列式为 1,所以结果就是:
det[∂x∂z]=det[∂h(n−1)∂h(n)]det[∂h(n−2)∂h(n−1)]...det[∂h(0)∂h(1)]=1

因此,可以通过 交叉耦合 的方式使得信息充分混合达到更强的表示能力。
h1(1)=x1h2(1)=x2+m1(x1)h1(3)=h1(2)h2(3)=h2(2)+m3(h1(2))h1(2)h2(2)h1(4)h2(4)=h1(1)+m2(h2(1))=h2(1)=h1(3)+m4(h2(3))=h2(3)

尺度变换层
隐变量z与输入x是具有相同维度D的,但是由于x本身未必能占据D维的空间。
这里NICE引入了尺度变换层用于探索降维的可能。
从z的先验分布开始
若z是均值为0,方差 不为 1的高斯分布,则:
q(z)=(2π)D/2∏i=1Dσi1exp(−21i=1∑Dσi2zi2)
此时,样本x的对数似然约为:
logq(x)∼−21i=1∑Dσi2fi2(x)−i=1∑Dlogσi
这里,我们可以将σi视作反应第i维数据弥散程度的参数,如果σi值很小,接近于0,则可认为对于隐变量z第i维并不重要(分布坍缩成一个具体的值)。
因此尺度变换层即为对最终输出的隐变量z再乘以s
z=s⊗h(n)
因此,最终似然变为如下形式(因为最后乘以s操作的雅可比矩阵的行列式为(s1…sD)的对角矩阵)
logq(x)∼−21s⊗f(x)2+i∑logsi
最终的损失函数即为上式的相反数,最小化损失函数,最大化对数似然。
这里的s不能完全等价于先验的标准差。但可以视作先验的标准差也作为训练参数,用来衡量每个维度弥散程度,为探索降维提供了可能。
特征解耦
- 一个好的特征,理想情况下各个维度之间应该是相互独立的,这样实现了特征的解耦,使得每个维度都有自己独立的含义。
- 先验分布为各分量独立的高斯分布,由于各分量的独立性,我们可以认为其各个维度的特征是解耦的(控制改变单个维度时,就可以看出生成图像是如何随着该维度的改变而改变,从而发现该维度的含义。)
- 也可以对两幅图像的编码进行插值(加权平均),得到过渡自然的生成样本。