GAN和VAE都没有显式地(explicitly)对真实数据的概率密度函数(probability density function,PDF) $p(\mathbf{x}),\mathbf{x}\in\mathcal{D}$ 进行建模,而是采用对抗训练或优化上界(Evidence Lower Bound,ELBO)的方式避开概率计算,因为 $p(\mathbf{x})$太难算了!以带隐变量的生成模型 $p(\mathbf{x})=\int p(\mathbf{x}\mid\mathbf{z})p(\mathbf{z})d\mathbf{z}$ 为例,因为不可能遍历所有的潜在编码 $\mathbf{z}$,所以 $p(\mathbf{x})$的计算是非常困难的(intractable)。

Flow-based生成模型通过normalizing flows解决了这个问题,normalizing flows是一个非常强大的概率密度函数计算工具。计算出 $p(\mathbf{x})$之后我们可以有效地完成下游任务,如:采样出不存在于训练集但真实存在的样本点(data generation)、计算某个时间可能发生的概率(density estimation)等等。

线性代数基础概述

在flow-based模型之前,先来了解线性代数中两个重要的概念:雅可比行列式(Jacobian Determinant)与变量变换定理/换元积分法(the change of variable rule);前者阐述了雅可比行列式的定义,后者阐述了如何用雅可比行列式进行变量变换;

雅可比矩阵和行列式

如果一个函数 $\mathbf{f}$把一个n维的输入映射为m维的输出, $\mathbf{f}: \mathbb{R}^n\mapsto\mathbb{R}^m$,那么这个函数的一阶(first-order)偏导数(partial derivative)叫做雅可比矩阵(Jacobian Matrix),表示为 $\mathbf{J}$。 $\mathbf{J}$的第i行、第j列的计算公式为 $\mathbf{J_{ij}=\frac{\partial{f_i}}{\partial{x_j}}}$

$$ \mathbf{J}=\left[\begin{array}{ccc}\frac{\partial f_1}{\partial x_1} & \cdots & \frac{\partial f_1}{\partial x_n} \\\vdots & \ddots & \vdots \\\frac{\partial f_m}{\partial x_1} & \cdots & \frac{\partial f_m}{\partial x_n}\end{array}\right] $$

雅可比行列式只存在于方阵(square matrices)中,是一个由矩阵中所有元素参与计算得到的实数;行列式的绝对值表示在该数据点处对空间扩展和收缩的程度(how much expands or contracts space),也可以理解为行列式中的行或列向量所构成的超平行多面体的有向面积或有向体积。对于二阶行列式:

$$ \left[\begin{array}{cc} a_1 & a_2 \\b_1 &b_2\end{array} \right]=a_1b_2-a_2b_1 $$

例如向量 $a=\{1,0\}, b=\{0,1\}$所构成的有向面积为11-00=1。而对于雅可比矩阵,对应函数 $\mathbf{f}$在点 $\mathbf{x}$的微分,矩阵的每一项代表各个维度下面积或体积的伸缩因子。

将上面二阶行列式的计算扩展到n阶有如下公式:

$$ \operatorname{det} M=\operatorname{det}\left[\begin{array}{cccc}a_{11} & a_{12} & \ldots & a_{1 n} \\a_{21} & a_{22} & \ldots & a_{2 n} \\\vdots & \vdots & & \vdots \\a_{n 1} & a_{n 2} & \ldots & a_{n n}\end{array}\right]=\sum_{j_1 j 2 \ldots j_n}(-1)^{\tau\left(j_1 j_2 \ldots j_n\right)} a_{1 j_1} a_{2 j_2} \ldots a_{n j_n} $$

其中 $j_1j_2…j_n$是 $1,2,…,n$的一个排列, $\sum\limits_{j_1 j_2 \ldots j_n}$是遍历所有 $1,2,…,n$排列 ${j_1 j_2 \ldots j_n}$求和;方阵 $M$的行列式有如下性质:

变量变换定理(Change of Variable Theorem)

给定一维随机变量$z$以及概率密度函数 $z\sim\pi(z)$,我们使用映射函数构建一个新的随机变量 $x=f(z)$,函数 $f$是可逆的,所以有 $z=f^{-1}(x)$, 如何得到新的随机变量 $x$的概率密度函数 $p(x)$呢? 由概率分布的定义可知:

$$ \int p(x)dx = \int \pi(z)dz = 1 \\ \therefore p(x)=\pi(z)\left|\frac{dz}{dx}\right|=\pi(f^{-1}(x))\left|\frac{df^{-1}}{dx}\right|=\pi(f^{-1}(x))\left|(f^{-1})'(x)\right| $$

根据定义, $\int\pi(z)dz$是无限(infinite)多个宽度无穷小(infinitesimal)的矩形面积之和,在位置 $z$处的矩形的高度就是其密度函数 $\pi(z)$。由 $z=f^{-1}(x)$可得 $\frac{\Delta z}{\Delta x}=(f^{-1}(x))'$, $\Delta z=(f^{-1}(x))' \Delta x$, 所以此处的 $(f^{-1}(x))'$ 可以任务是变量 $x$和 $z$在两个不同的坐标系中对应位置处的矩形的面积的比值。

多维变量的变换与一维变量的变换比较相似: