讨论 2022-11-15 = ## 生成模型与概率图模型(二) 今天的分享主要介绍Normalizing flow和diffusion model,二者与VAE和GAN对encoder和decoder的松散假设不同,都对encoder和decoder有具体形式的限制,并且都是以多步,长链形式为基础的。在后续的分析中,也可以发现二者具备很多关联之处。 ## Normalizing flow 假如我们的数据分布是$P(X)$,我们想要直接把X会换成正态分布或其他简单的分布,也就是变量代换,好比我们把函数的变量换成另一个变量。分布的变量代换可以用以下式子描述,也是Normalizing flow的一个核心公式,假如$x=f(z)$: $$P_X(x) = P_Z(f^{-1}(x)) |det \frac{\partial f^{-1}}{\partial x} | $$ 与一般函数的变量代换相比,我们引入一项Jacobian matrix的行列式。这一项的由来我们从两个角度来介绍。 首先针对一维分布,试想以下等式(需要条件成立,但概率分布可以满足) \begin{gather} \int P_X(x) dx = 1 \\ \int P_Z(f^{-1}(x)) dz = \frac{dx}{dz} \\ \int P_X(x) dx = \int P_Z(f^{-1}(x)) dz \frac{dz}{dx} \\ \end{gather} 与函数不同,分布有体积的概念,当我们改变P的同时,分布对应的体积需要相应调整,以保证概率和仍为1。 那么对于一个多维分布,它的体积是什么? 首先对于一个满秩的方阵(参见相似对角化,我也没细看),我们可以通过初等变换(行/列线性组合)把它变成对角阵,对角阵的体积即其行列式,同时初等变换不改变行列式的取值,所以实际上任意满秩方阵的体积都等于其行列式。 ![](https://i.imgur.com/z5R4e5N.png) 因此,我们知道了,一开始引入的$|det \frac{\partial f^{-1}}{\partial x} |$实际上就是一个体积元的比例差。 回看公式 $$P_X(x) = P_Z(f^{-1}(x)) |det \frac{\partial f^{-1}}{\partial x} | $$ 假如f是一个神经网络,我们可以通过其和其逆函数把数据分布和标准噪声分布相互转换,即达到了采样的目的。但这里实际上要求了几点,第一是f可逆,因为f不可逆的话,我们无法联系双向过程,同时jacobian如果不是双射,那么肯定不满秩,从而行列式为0。另一方面,我们希望行列式尽可能好求,所以就有了多种设计。 一个经典的方法(NICE)是 $[x_1, x_2] = f([z_1, z_2]) = [z_1, z_2 + g(z_1, \theta)]$,显然它的jacobian矩阵为三角阵,行列式即对角线的乘积,等于1。 另一种方法(RealNVP)是 $[x_1, x_2] = f([z_1, z_2]) = [z_1, \exp(g_1(z1,\theta)) z_2 + g_2(z_1, \theta)]$,此时jacobian仍为三角阵,但行列式也带参了。 Normalizing flow相关的研究主要集中在怎么涉及可逆函数的形式这里,如果我们考虑任意大的神经网络,那么这套框架确实是很好的,但有限资源下,上述方法的维度浪费都很严重,我们发现所有变量都要备份一遍。同时,函数形式也更简单,限制了表达能力。 当然,目前并没有一个很好的解释,为什么normalizing flow很多时候不如VAE和GAN,但一个有趣的观点是,Normalizing flow和bi-Lipschitz的关系,即bi-Lipschitz连续的程度决定了一个可逆函数是否好学([基于数值精度的讨论](https://openreview.net/attachment?id=BJlVeyHFwH&name=original_pdf),换言之,可逆函数难以建模不够Lipschitz连续的函数,导致了表达能力的局限性。 ## Diffusion model 上一次的表达有些问题,实际上Diffusion model的采样原理基于Langevin dynamics而不是逆变换采样,当然Diffusion model的采样原理可以有其他解释。 ### Langevin dynamics 这是一个很有趣的物理学概念,这里不做深入介绍,有兴趣的同学可以自己研究。 Langevin认为粒子的随机运动会形成一个稳态,并且这个稳态的样子是确定的。对于每个粒子的运动,我们认为它服从两个特点,一是尽快去往能量更低的地方,二是有一定随机性,所以, $$x_t = x_{t-1} -\nabla E(x_{t-1}) + \epsilon_t ,$$ 其中E为能量函数,$x_t$为t时刻粒子的位置。 其实,Langevin dynamics表达的含义就是虽然粒子是随机运动的,但最后能量低的地方总归有更多粒子,能量高的地方粒子更少。这其实体现了粒子的分布,并且这个分布和能量函数是直接对应的。假如我们想要分布$P(x)$,对应的运动方程是$x_t = x_{t-1}+\frac{\epsilon}{2}\nabla\log P(x_{t-1}) + \mathcal{N}(0, \epsilon)$ 类比Normalizing flow,同样是t步迭代,Diffusion model两步之间不要求可逆,同时引入了一个标准噪声。 ![](https://i.imgur.com/9wTxCyz.png) 问题是$P(x_{t-1})$求不出,只能想办法替代,那么最直接的做法就是学一个$Q(x_{t}|x_{t-1},\theta)$,让模型来预测每一步该往哪里走。然而这样漫长的路径难以学习,只能考虑怎么对路径做进一步限制。基于对布朗运动的研究,当我们加入的噪声$\epsilon$足够小的时候,高斯运动的逆过程还是高斯分布(这个证明有兴趣的同学可以自己研究)。 所以diffusion model就涉及了一个由数据通过不断地高斯采样到达标准噪声的正过程,以及从标准噪声还原回数据分布的逆过程。此时,我们不仅限定了逆过程/生成过程每一步的函数形式是高斯分布,并且每一步的运动方程都有了一个合理的目标,即逼近相反过程在当前时刻的状态。 其中,数据为$X_0$,标准噪声为$X_T$,正过程$q(x_t|x_{t-1}) = \mathcal{N}(x_t;\sqrt{1-\beta_t}x_{t-1}, \beta_t I)$,逆过程为$p(x_{t-1}|x_t)=\mathcal{N}(x_{t-1};\mu_\theta(x_t, t), \Sigma_\theta(x_t,t))$ 具体过程见下次分享