原文:戳我
作者: Calvin Luo
行文架构
生成模型
定性:Diffusion属于生成模型,同属生成模型还有耳熟能详的GAN这种对抗式生成模型(adversal generative model),以VAE为代表的最大似然生成模型(likelihood-based model),还有从能量模型(energy-based model)演化而来的分数学习生成模型。
但不论何种模型,本质上都需求要求解出样本数据集$\mathbf{x}$的概率密度函数$p(\mathbf{x})$,然后模型再从这个分布中采样得到我们想要的那种,与原始数据特征一致但数值不同的生成数据。
利用柏拉图的洞穴人假说,引入隐变量一说,以说明某些数据中包含部分我们没有办法观察到的隐变量,正是因为这些隐变量的分布以及取值,影响到了数据本身。那么首先,我们如何找到并表示隐变量?
数学上来说,可以利用一个联合概率分布$p(\boldsymbol{x}, \boldsymbol{z})$来对隐变量$z$进行建模。利用最大似然的办法,我们可以通过这个包含隐变量的模型,对我们想要的$p(\boldsymbol{x}$进行求解。
- 方法一:是对边缘概率密度函数进行积分,$p(\boldsymbol{x})=\int p(\boldsymbol{x}, \boldsymbol{z}) d \boldsymbol{z}$, 但这个方法中我们需要知道所有的隐变量,并且将它们都进行积分后整合结果,这个过程相对比较繁琐,实战中不易实现。
- 方法二:是利用概率的链式法则,$p(\boldsymbol{x})=\frac{p(\boldsymbol{x}, \boldsymbol{z})}{p(\boldsymbol{z} \mid \boldsymbol{x})}$对其进行求解。这种情况需要我们已知一个100%保真的隐变量生成器$p(\boldsymbol{z} \mid \boldsymbol{x})$
上述两种方法几乎实践上都不可能直接实现,但是它们为之后关于置信下界(ELBO)的确定做好了铺垫。
置信下界
整个这个学习过程的目标,本质上都是最大化关于$p(\boldsymbol{x})$的似然函数。
在引入了置信下界之后,优化目标:最大化置信下界 -> 最大化对数似然
原因:
$p(\boldsymbol{x})$的对数似然 = 置信下界 + $q_{\boldsymbol{\phi}}(\boldsymbol{z} \mid \boldsymbol{x}) | p(\boldsymbol{z} \mid \boldsymbol{x})$的KL散度(见式15)
$\log p(\boldsymbol{x})=$
最大化置信下界一定程度等价于最小化$q_{\boldsymbol{\phi}}(\boldsymbol{z} \mid \boldsymbol{x}) | p(\boldsymbol{z} \mid \boldsymbol{x})$的KL散度,也就是使得$q_{\boldsymbol{\phi}}(\boldsymbol{z} \mid \boldsymbol{x})$ 和$p(\boldsymbol{z} \mid \boldsymbol{x})$这两个分布最大程度地接近,从而去模拟真实的隐变量生成器$p(\boldsymbol{z} \mid \boldsymbol{x})$。
此时置信下界表达式为:$\mathbb{E}_{q_\phi(\boldsymbol{z} \mid \boldsymbol{x})}\left[\log \frac{p(\boldsymbol{x}, \boldsymbol{z})}{q_{\boldsymbol{\phi}}(\boldsymbol{z} \mid \boldsymbol{x})}\right]$,包含一个含参生成器$q_\phi(\boldsymbol{z} | \boldsymbol{x})$ ,旨在通过对参数$\phi$的调整,让该表达式最大化的方法,让含参生成器的效果无限接近ground truth,也最大化关于原始数据的对数似然函数。
- 本质上还是在做对原数据的拆解、加噪音,学习怎样解构现有数据,得到其中的隐变量。
如此这般,现在的需求就是:怎样优化使得置信下界能达到最大化?
变分自编码器
有了在上述过程中最大化置信下界的优化目标,衍生出了VAE,变分自编码器,借鉴了这个对原数据的拆解思路,同时引入了在拆解之后的重构,这个重构也就是所谓的“自编码”过程。
鉴于此,VAE中将置信下界的数学表达式进行了进一步拆解,使得:
置信下界 = 对原数据重构的期望 - 关于隐变量分布和原数据解构手法之间的KL散度。
$\mathbb{E}_{q_\phi(\boldsymbol{z} \mid \boldsymbol{x})}\left[\log \frac{p(\boldsymbol{x}, \boldsymbol{z})}{q_{\boldsymbol{\phi}}(\boldsymbol{z} \mid \boldsymbol{x})}\right]$=
后方的KL散度的“解构”指的就是,在已知样本数据的情况下,将其通过一个含参网络预测得到的隐变量分布,将其和真实的隐变量分布间进行比对。
这个KL散度越小,最后重构的效果也就越棒。
VAE中的生成器(encoder)通常选用多元高斯分布$q_{\boldsymbol{\phi}}(\boldsymbol{z} \mid \boldsymbol{x})=\mathcal{N}\left(\boldsymbol{z} ; \boldsymbol{\mu}_\phi(\boldsymbol{x}), \boldsymbol{\sigma}_{\boldsymbol{\phi}}^2(\boldsymbol{x}) \mathbf{I}\right)$,先验分布通常是标准分布:$p(\boldsymbol{z})=\mathcal{N}(\boldsymbol{z} ; \mathbf{0}, \mathbf{I})$
然后对原数据重构的期望可以利用蒙特卡洛(Monte-Carlo)估计法进行估算,也就是进行$L$次无偏采样,然后对其采样值计算后加和,将其重写成:
这里有两个含参网络,$p_{\boldsymbol{\theta}}\left(\boldsymbol{x} \mid \boldsymbol{z}^{(l)}\right)$负责在采样一个$\boldsymbol{z}^{(l)}$后,预测$\boldsymbol{z}^{(l)}$对应的原样本数据。$q_{\boldsymbol{\phi}}(\boldsymbol{z} \mid \boldsymbol{x})$在给定一个样本数据以后,预测样本对应的隐变量。
多重变分自编码器
将VAE的模型进行扩展,就可以得到多重变分自编码器(Hierarchical Variational Encoder HVAE),利用多重结构,利用马尔可夫链结构,对样本对应的隐变量进行更精确的表达。
基于其马尔可夫性,将上述关于置信下界的数学表达式进行扩展:
即:通过$q_\phi\left(\boldsymbol{z}_{1: T} \mid \boldsymbol{x}\right)$,给定样本数据集合$\boldsymbol{x}$,经过参数为$\phi$的网络采样$\boldsymbol{z}_{1: T}$ ,获取$\left[\log \frac{p\left(\boldsymbol{x}, \boldsymbol{z}_{1: T}\right)}{q_{\boldsymbol{\phi}}\left(\boldsymbol{z}_{1: T} \mid \boldsymbol{x}\right)}\right]$的期望值
变分扩散模型
在多重变分自编码器的基础上加上三条限制,就可以得到简化的扩散模型:
- 隐变量的维度和样本数据的维度一致
- 放弃含参网络对解构手法的预测,统一采用“添加高斯噪声”的解构手法。$q\left(\boldsymbol{x}_t \mid \boldsymbol{x}_{t-1}\right)=\mathcal{N}\left(\boldsymbol{x}_t ; \sqrt{\alpha_t} \boldsymbol{x}_{t-1},\left(1-\alpha_t\right) \mathbf{I}\right)$
- 层级扩充到无穷之后,最后一层的数据将完全服从高斯分布$p\left(\boldsymbol{x}_T\right)=\mathcal{N}\left(\boldsymbol{x}_T ; \mathbf{0}, \mathbf{I}\right)$
在这里,置信上界表征变成了:
$\log p(\boldsymbol{x}) \geq$ $\mathbb{E}_{q_\phi\left(\boldsymbol{x}_{1: T} \mid \boldsymbol{x}\right)}\left[\log \frac{p\left(\boldsymbol{x}, \boldsymbol{x}_{1: T}\right)}{q_{\boldsymbol{\phi}}\left(\boldsymbol{x}_{1: T} \mid \boldsymbol{x}\right)}\right]$=
$\mathbb{E}_{q\left(\boldsymbol{x}_1 \mid \boldsymbol{x}_0\right)}\left[\log p_{\boldsymbol{\theta}}\left(\boldsymbol{x}_0 \mid \boldsymbol{x}_1\right)\right]$ - 从不含参网络$q(x_1 | x_0)$中采样得到$x_1$,然后利用含参网络估计$x_0$ ,可视作重构项
$\mathbb{E}_{q\left(\boldsymbol{x}_{T-1} \mid \boldsymbol{x}_0\right)}\left[D_{\mathrm{KL}}\left(q\left(\boldsymbol{x}_T \mid \boldsymbol{x}_{T-1}\right) | p\left(\boldsymbol{x}_T\right)\right)\right]$ - 已知初始样本$x_0$,从不含参数的网络$q(x_{T-1}|x_0)$中采样得到$x_{T-1}$,测算分布$q\left(\boldsymbol{x}_T \mid \boldsymbol{x}_{T-1}\right)$和分布$p\left(\boldsymbol{x}_T\right)$的相似度,相似度越高则说明$T$时刻,数据已经服从了噪声的分布,加不加噪音都一样了。
✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨
已知初始样本$x_0$,通过不含参数的网络$q(x_{t-1}, x_{t+1}|x_0)$采样得到$x_{t-1}$以及$x_{t+1}$,计算在某一个中间时刻,前向和后向过程的分布差异。
正是由于这一项需要用蒙特卡洛估计法$q(x_{t-1}, x_{t+1}|x_0)$估计两个随机变量,蒙特卡洛法方法本身的缺陷导致这样的估计可能致使波动量过大,使得模型只能达到次优。
这时候就有了新的需求:
怎样避免蒙特卡洛估计法所造成的次优而转入最优?
这个时候就可以利用下述变换:
带入计算分布极大似然的公式中:
$\log p(\boldsymbol{x}) \geq$ $\mathbb{E}_{q_\phi\left(\boldsymbol{x}_{1: T} \mid \boldsymbol{x}\right)}\left[\log \frac{p\left(\boldsymbol{x}, \boldsymbol{x}_{1: T}\right)}{q_{\boldsymbol{\phi}}\left(\boldsymbol{x}_{1: T} \mid \boldsymbol{x}\right)}\right]$=
第三项改动较大,意味着已知$x_0$的情况下,利用无参模型$q\left(\boldsymbol{x}_t \mid \boldsymbol{x}_0\right)$采样得到$\boldsymbol{x}_t$。
后面的KL散度意味着:
模型需要在某一个扩散时间点,并在不知道初始样本数据的情况下,对前一步数据的估计效果,要和已知初始样本后再对前一步数据估计的效果一样。
关于加噪的无参模型$q\left(\boldsymbol{x}_t \mid \boldsymbol{x}_0\right)$,表征的是正向加噪过程,(61-70)已证明其可以通过单步采样获得。于此同时(71-84)也证明,在已知$x_0$的情况下,单步降噪还原过程也正比于一个高斯分布,换句话说,单步降噪也可以被视作在一个特定的高斯分布中采样。接下来要解决的问题就是:
怎样优化上述的KL散度?
经过(87-92)的步骤之后,得到了一个优化KL散度的一般形式,由此衍生了三种对降噪过程进行建模的流派:
- 预测上一步的数据
- 预测上一步添加的噪音(126-130)
- 🌟预测上一步添加噪音后数据分布的运动向量(144-148)
关于第三种的能量模型是基于Tweedie方程而来。