泊松流生成模型.

本文作者使用场论来建模扩散模型,具体地,把扩散模型建模为一个$d$维空间的引力场。假设引力源位于\(\mathbf{y}\),那么位于\(\mathbf{x}\)的物体所受到的引力可以记为

\[F(\mathbf{x}) = - \frac{1}{S_d(1)} \frac{\mathbf{x}-\mathbf{y}}{\left\|\mathbf{x}-\mathbf{y}\right\|^d }\]

其中$S_d(1)$是$d$维单位超球面的表面积。该式实际上是$d$维Poisson方程的格林函数的梯度。

在引力场中,大部分场线都是从远处出发,终止于某个引力源点。如果每个引力源都代表着一个要生成的真实样本点,那么远处的任意点只要沿着场线运动,就可以演变成一个真实样本点。

引力场具有线性可加性,即如果引力源有多个,那么直接将各个引力源的引力相加即可。下面给出了四个引力源的向量场,其中引力源用黑色点标记出,彩色线表示场线:

引力场具有等效性质:无穷远处的多源引力场,等价于位于质心、质量叠加的质点引力场。下图给出了多源引力场及其对应的质心引力场,可以看到当距离变大时(橙色圆圈位置),两者的引力场几乎一致了。

单个质点的引力场具有各向同性。这意味着在足够大半径时,可以认为场线是均匀地穿过以质点为球心的球面的。扩散模型的初始分布是在远处的任意点采样,因此在一个半径足够大的球面上进行均匀采样即可。

然而,引力场的各向同性会造成引力源的相互抵消现象,从而出现“模式坍缩(Mode Collapse)”。以一个均匀分布在球壳上的引力场为例:

在球壳外部是正常的各向同性分布,但是在球壳内部的引力场相互抵消了。抵消现象意味着任意选一个球面,球面上均匀分布的引力源由于引力相互抵消,那么就相当于不存在该引力源了。如果引力源相互抵消,通过远处的任意点沿着场线运动,永远也达不到某些引力源,即意味着某些真实样本无法生成,生成结果就会缺失多样性,这就是“模式坍缩”现象。

模式坍缩无法避免,是因为连续性分布的假设导致各向同性无法避免。要想避免模式坍缩,就要想办法杜绝分布的各向同性。由于真实样本的分布是目标分布,这是不能改变的,然而可以给它增加一维:如果在$d+1$维空间去讨论,那么原来的$d$维分布可以视为$d+1$维空间的一个平面,平面就不可能各向同性了。

假设要生成的真实样本为\(\mathbf{x} \in \mathbb{R}^{d}\),引入一个新维度$t$,使得数据点变为\((\mathbf{x},t) \in \mathbb{R}^{d+1}\)。假设真实样本服从的分布是\(\mathbf{x} \sim p(\mathbf{x})\),则\((\mathbf{x},t) \sim \delta(t) p(\mathbf{x})\),其中$\delta(\cdot)$是狄拉克分布。相当于将真实样本放到$d+1$维空间的$t=0$平面上。这样处理后在$d+1$维空间中,真实样本点的$t$取值总是$0$,因此就不会出现各向同性现象。

根据引力的线性叠加性,$d+1$维空间的引力场为

\[\begin{aligned} F(\mathbf{x},t) &= - \frac{1}{S_{d+1}(1)} \iint \frac{(\mathbf{x}-\mathbf{x}_0,t-t_0)}{(\left\|\mathbf{x}-\mathbf{x}_0\right\|^2 + \left(t-t_0\right)^2 )^{(d+1)/2}} \delta(t_0) p(\mathbf{x}_0)d\mathbf{x}_0 dt_0 \\ &= - \frac{1}{S_{d+1}(1)} \int \frac{(\mathbf{x}-\mathbf{x}_0,t)}{(\left\|\mathbf{x}-\mathbf{x}_0\right\|^2 + t^2 )^{(d+1)/2}}p(\mathbf{x}_0)d\mathbf{x}_0 \\ & \propto \mathbb{E}_{\mathbf{x}_0 \sim p(\mathbf{x}_0)} \left[ - \frac{(\mathbf{x}-\mathbf{x}_0,t)}{(\left\|\mathbf{x}-\mathbf{x}_0\right\|^2 + t^2 )^{(d+1)/2}} \right] \end{aligned}\]

引入得分函数\(s_{\theta}(\mathbf{x},t)\)来学习\(F(\mathbf{x},t)\),训练目标为:

\[\mathbb{E}_{\mathbf{x}_0 \sim p(\mathbf{x}_0)} \left[ \left\| s_{\theta}(\mathbf{x},t)+ \frac{(\mathbf{x}-\mathbf{x}_0,t)}{(\left\|\mathbf{x}-\mathbf{x}_0\right\|^2 + t^2 )^{(d+1)/2}} \right\|^2 \right] \\ \approx \left\| s_{\theta}(\mathbf{x},t)+ \text{Norm} \left(\mathbb{E}_{\mathbf{x}_0 \sim p(\mathbf{x}_0)} \left[\frac{(\mathbf{x}-\mathbf{x}_0,t)}{(\left\|\mathbf{x}-\mathbf{x}_0\right\|^2 + t^2 )^{(d+1)/2}}\right]\right) \right\|^2\]

前向过程通过为每个真实样本进行扰动的方式来构建:

\[\mathbf{x} = \mathbf{x}_0 + || \epsilon_x||(1+\tau)^m \mathbf{u}, \quad t= |\epsilon_t|(1+\tau)^m\]

其中\((\epsilon_x,\epsilon_t)\sim \mathcal{N}(\mathbf{0},\sigma^2\mathbf{I}_{(d+1)\times(d+1)}),m \sim U[0,M]\)。\(\mathbf{u}\)是$d$维单位球面上均匀分布的单位向量。

完成向量场函数\(F(\mathbf{x},t)\)的训练后,记\(F_\mathbf{x}\)是\(F(\mathbf{x},t)\)的前$d$个分量,\(F_t\)是其第$d+1$个分量。采样过程沿着场线运动,也就是运动轨迹要时刻跟\(F(\mathbf{x},t)\)同方向,即

\[(d \mathbf{x}, dt) = (F_\mathbf{x},F_t) d\tau \rightarrow \frac{d \mathbf{x}}{dt} = \frac{F_\mathbf{x}}{F_t}\]

初始分布应该是半径足够大的、$d+1$维的球面均匀分布。但既然以$t=0$为终止信号,那么不妨固定一个足够大的$t=T$(大致是$40$∼$100$这个量级),然后在$t=T$这个平面上做采样,这样一来生成过程就变成了微分方程从$t=T$到$t=0$的运动过程。