生成扩散模型漫谈(十二):“硬刚”扩散ODE
By 苏剑林 | 2022-09-28 | 70453位读者 |在《生成扩散模型漫谈(五):一般框架之SDE篇》中,我们从SDE的角度理解了生成扩散模型,然后在《生成扩散模型漫谈(六):一般框架之ODE篇》中,我们知道SDE对应的扩散模型中,实际上隐含了一个ODE模型。无独有偶,在《生成扩散模型漫谈(四):DDIM = 高观点DDPM》中我们也知道原本随机采样的DDPM模型中,也隐含了一个确定性的采样过程DDIM,它的连续极限也是一个ODE。
细想上述过程,可以发现不管是“DDPM→DDIM”还是“SDE→ODE”,都是从随机采样模型过渡到确定性模型,而如果我们一开始的目标就是ODE,那么该过程未免显得有点“迂回”了。在本文中,笔者尝试给出ODE扩散模型的直接推导,并揭示了它与雅可比行列式、热传导方程等内容的联系。
微分方程 #
像GAN这样的生成模型,它本质上是希望找到一个确定性变换,能将从简单分布(如标准正态分布)采样出来的随机变量,变换为特定数据分布的样本。flow模型也是生成模型之一,它的思路是反过来,先找到一个能将数据分布变换简单分布的可逆变换,再求解相应的逆变换来得到一个生成模型。
传统的flow模型是通过设计精巧的耦合层(参考“细水长flow”系列)来实现这个可逆变换,但后来大家就意识到,其实通过微分方程也能实现这个变换,并且理论上还很优雅。基于“神经网络 + 微分方程”做生成模型等一系列研究,构成了被称为“神经ODE”的一个子领域。
考虑$\boldsymbol{x}_t\in\mathbb{R}^d$上的一阶(常)微分方程(组)
\begin{equation}\frac{d\boldsymbol{x}_t}{dt}=\boldsymbol{f}_t(\boldsymbol{x}_t)\label{eq:ode}\end{equation}
假设$t\in[0, T]$,那么给定$\boldsymbol{x}_0$,(在比较容易实现的条件下)我们可以确定地求解出$\boldsymbol{x}_T$,也就是说该微分方程描述了从$\boldsymbol{x}_0$到$\boldsymbol{x}_T$的一个变换。特别地,该变换还是可逆的,即可以逆向求解该微分方程,得到从$\boldsymbol{x}_T$到$\boldsymbol{x}_0$的变换。所以说,微分方程本身就是构建可逆变换的一个理论优雅的方案。
雅可比行列式 #
跟之前的扩散模型一样,在这篇文章中,我们将$\boldsymbol{x}_0$视为一个数据样本,而将$\boldsymbol{x}_T$视为简单分布的样本,我们希望通过微分方程,来实现从数据分布到简单分布的变换。
首先,我们从离散化的角度来理解微分方程$\eqref{eq:ode}$:
\begin{equation}\boldsymbol{x}_{t+\Delta t} - \boldsymbol{x}_t = \boldsymbol{f}_t(\boldsymbol{x}_t)\Delta t\label{eq:ode-diff}\end{equation}
由于是确定性变换,所以我们有
\begin{equation}p_t(\boldsymbol{x}_t) d\boldsymbol{x}_t = p_{t+\Delta t}(\boldsymbol{x}_{t+\Delta t}) d\boldsymbol{x}_{t+\Delta t} = p_{t+\Delta t}(\boldsymbol{x}_{t+\Delta t}) \left| \frac{\partial \boldsymbol{x}_{t+\Delta t}}{\partial \boldsymbol{x}_t} \right| d\boldsymbol{x}_t\end{equation}
这里的$\frac{\partial \boldsymbol{x}_{t+\Delta t}}{\partial \boldsymbol{x}_t}$表示变换的雅可比矩阵,$|\cdot|$代表行列式的绝对值。直接对式$\eqref{eq:ode-diff}$两边求偏导,我们就得到
\begin{equation}\frac{\partial \boldsymbol{x}_{t+\Delta t}}{\partial \boldsymbol{x}_t} = \boldsymbol{I} + \frac{\partial \boldsymbol{f}_t(\boldsymbol{x}_t)}{\partial \boldsymbol{x}_t}\Delta t\end{equation}
根据《行列式的导数》一文,我们就有
\begin{equation}\left|\frac{\partial \boldsymbol{x}_{t+\Delta t}}{\partial \boldsymbol{x}_t}\right| \approx 1 + \text{Tr}\,\frac{\partial \boldsymbol{f}_t(\boldsymbol{x}_t)}{\partial \boldsymbol{x}_t}\Delta t = 1 + \nabla_{\boldsymbol{x}_t}\cdot \boldsymbol{f}_t(\boldsymbol{x}_t) \Delta t\approx e^{\nabla_{\boldsymbol{x}_t}\cdot \boldsymbol{f}_t(\boldsymbol{x}_t) \Delta t}\end{equation}
于是我们可以写出
\begin{equation}\log p_{t+\Delta t}(\boldsymbol{x}_{t+\Delta t}) - \log p_t(\boldsymbol{x}_t) \approx -\nabla_{\boldsymbol{x}_t}\cdot \boldsymbol{f}_t(\boldsymbol{x}_t) \Delta t\label{eq:approx-ode}\end{equation}
泰勒近似 #
假设$p_t(\boldsymbol{x}_t)$是一簇随着参数$t$连续变化的分布的概率密度函数,其中$p_0(\boldsymbol{x}_0)$是数据分布,$p_T(\boldsymbol{x}_T)$则是简单分布,当$\Delta t$和$\boldsymbol{x}_{t+\Delta t} - \boldsymbol{x}_t$都较小时,我们有一阶泰勒近似
\begin{equation}\log p_{t+\Delta t}(\boldsymbol{x}_{t+\Delta t}) - \log p_t(\boldsymbol{x}_t) \approx (\boldsymbol{x}_{t+\Delta t} - \boldsymbol{x}_t)\cdot \nabla_{\boldsymbol{x}_t}\log p_t(\boldsymbol{x}_t) + \Delta t\frac{\partial}{\partial t}\log p_t(\boldsymbol{x}_t)\end{equation}
代入式$\eqref{eq:ode-diff}$的$\boldsymbol{x}_{t+\Delta t} - \boldsymbol{x}_t$,然后对照式$\eqref{eq:approx-ode}$,可以得到$\boldsymbol{f}_t(\boldsymbol{x}_t)$所满足的方程
\begin{equation}-\nabla_{\boldsymbol{x}_t}\cdot \boldsymbol{f}_t(\boldsymbol{x}_t) = \boldsymbol{f}_t(\boldsymbol{x}_t)\cdot \nabla_{\boldsymbol{x}_t}\log p_t(\boldsymbol{x}_t) + \frac{\partial}{\partial t}\log p_t(\boldsymbol{x}_t)\label{eq:ode-f-eq}\end{equation}
换句话说,满足该方程的任意$\boldsymbol{f}_t(\boldsymbol{x}_t)$,都可以用来构造一个微分方程$\eqref{eq:ode}$,通过求解它来实现数据分布和简单分布之间的变换。我们也可以将它整理得
\begin{equation}\frac{\partial}{\partial t} p_t(\boldsymbol{x}_t) = - \nabla_{\boldsymbol{x}_t}\cdot\Big(\boldsymbol{f}_t(\boldsymbol{x}_t) p_t(\boldsymbol{x}_t)\Big)\label{eq:ode-f-eq-fp}\end{equation}
它其实就是《生成扩散模型漫谈(六):一般框架之ODE篇》介绍的“Fokker-Planck方程”在$g_t=0$时的特例。
热传导方程 #
我们考虑如下格式的解
\begin{equation}\boldsymbol{f}_t(\boldsymbol{x}_t) = - \boldsymbol{D}_t(\boldsymbol{x}_t)\,\nabla_{\boldsymbol{x}_t}\log p_t(\boldsymbol{x}_t)\label{eq:ode-f-grad}\end{equation}
其中$\boldsymbol{D}_t(\boldsymbol{x}_t)$可以是一个矩阵,也可能是一个标量,视具体考虑的复杂度而定。为什么要考虑这种形式的解?说实话,笔者一开始就是往DDIM格式去凑的,后来就是发现一般化后能跟下面的扩散方程联系起来,所以就直接设为式$\eqref{eq:ode-f-grad}$了。事后来看,如果假设$\boldsymbol{D}_t(\boldsymbol{x}_t)$是非负标量函数,那么将它代入式$\eqref{eq:ode-diff}$后,就会发现其格式跟梯度下降有点相似,即从$\boldsymbol{x}_0$到$\boldsymbol{x}_T$是逐渐寻找低概率区域,反之从$\boldsymbol{x}_T$到$\boldsymbol{x}_0$就是逐渐寻找高概率区域,跟直觉相符,这也算是式$\eqref{eq:ode-f-grad}$的一个启发式引导吧。
将式$\eqref{eq:ode-f-grad}$代入方程$\eqref{eq:ode-f-eq-fp}$后,我们可以得到
\begin{equation}\frac{\partial}{\partial t}p_t(\boldsymbol{x}_t) = \nabla_{\boldsymbol{x}_t}\cdot\Big(\boldsymbol{D}_t(\boldsymbol{x}_t)\,\nabla_{\boldsymbol{x}_t} p_t(\boldsymbol{x}_t)\Big)\end{equation}
这就是偏微分方程中的“扩散方程”。这里我们只考虑一个极简单的情形——$\boldsymbol{D}_t(\boldsymbol{x}_t)$是跟$\boldsymbol{x}_t$无关的标量函数$D_t$,此时扩散方程简化为
\begin{equation}\frac{\partial}{\partial t}p_t(\boldsymbol{x}_t) = D_t \nabla_{\boldsymbol{x}_t}^2 p_t(\boldsymbol{x}_t)\label{eq:heat}\end{equation}
这就是“热传导方程”,是我们接下来要重点求解和分析的对象。
求解分布 #
利用傅里叶变换,可以将热传导方程转为常微分方程,继而完成分布$p_t(\boldsymbol{x}_t)$的求解,结果是:
\begin{equation}\begin{aligned}
p_t(\boldsymbol{x}_t) =&\, \int \frac{1}{(2\pi\sigma_t^2)^{d/2}}\exp\left(-\frac{\Vert \boldsymbol{x}_t - \boldsymbol{x}_0\Vert^2}{2\sigma_t^2}\right)p_0(\boldsymbol{x}_0) d \boldsymbol{x}_0 \\
=&\, \int \mathcal{N}(\boldsymbol{x}_t; \boldsymbol{x}_0, \sigma_t^2 \boldsymbol{I})\, p_0(\boldsymbol{x}_0) d \boldsymbol{x}_0
\end{aligned}\label{eq:heat-sol}\end{equation}
其中$\sigma_t^2 = 2\int_0^t D_s ds$,或者$D_t = \dot{\sigma}_t \sigma_t$(其中$\sigma_0=0$)。可以看到,热传导方程的解正好是以$p_0(\boldsymbol{x}_0)$为初始分布的高斯混合模型。
过程:这里简单介绍一下热传导方程的求解思路。对于不关心求解过程的读者,或者已经熟悉热传导方程的读者,可以跳过这部分内容。
用傅里叶变换求热传导方程$\eqref{eq:heat}$其实很简单,对两边的$\boldsymbol{x}_t$变量做傅里叶变换,根据$\nabla_{\boldsymbol{x}_t}\to i\boldsymbol{\omega}$的原则,结果是
\begin{equation}\frac{\partial}{\partial t}\mathcal{F}_t(\boldsymbol{\omega}) = -D_t \boldsymbol{\omega}^2 \mathcal{F}_t(\boldsymbol{\boldsymbol{\omega}})\end{equation}
这只是关于$t$的常微分方程,可以解得
\begin{equation}\mathcal{F}_t(\boldsymbol{\omega}) = \mathcal{F}_0(\boldsymbol{\omega}) \exp\left(-\frac{1}{2}\sigma_t^2 \boldsymbol{\omega}^2\right)\end{equation}
其中$\sigma_t^2 = 2\int_0^t D_s ds$,而$\mathcal{F}_0(\boldsymbol{\omega})$则是$p_0(\boldsymbol{x}_0)$的傅里叶变换。现在对两边做傅里叶逆变换,$\mathcal{F}_t(\boldsymbol{\omega})$自然变回$p_t(\boldsymbol{x}_t)$,$\mathcal{F}_0(\boldsymbol{\omega})$变回$p_0(\boldsymbol{x}_0)$,$\exp\left(-\frac{1}{2}\sigma_t^2 \boldsymbol{\omega}^2\right)$则对应正态分布$\mathcal{N}(\boldsymbol{x}_t; \boldsymbol{0}, \sigma_t^2 \boldsymbol{I})$,最后利用傅里叶变换的卷积性质,就得到解$\eqref{eq:heat-sol}$。
完成设计 #
现在我们汇总一下我们的结果:通过求解热传导方程,我们确定了
\begin{equation}p_t(\boldsymbol{x}_t) = \int \mathcal{N}(\boldsymbol{x}_t; \boldsymbol{x}_0, \sigma_t^2 \boldsymbol{I})\, p_0(\boldsymbol{x}_0) d \boldsymbol{x}_0 \label{eq:heat-sol-2}\end{equation}
此时对应的微分方程
\begin{equation}\frac{d\boldsymbol{x}_t}{dt}=-\dot{\sigma}_t \sigma_t \nabla_{\boldsymbol{x}_t}\log p_t(\boldsymbol{x}_t)\end{equation}
给出了从$p_0(\boldsymbol{x}_0)$到$p_T(\boldsymbol{x}_T)$的一个确定性变换。如果$p_T(\boldsymbol{x}_T)$易于采样,并且$\nabla_{\boldsymbol{x}_t}\log p_t(\boldsymbol{x}_t)$已知,那么我们就可以随机采样$\boldsymbol{x}_T\sim p_T(\boldsymbol{x}_T)$,然后逆向求解该微分方程,来生成$\boldsymbol{x}_0\sim p_0(\boldsymbol{x}_0)$的样本。
第一个问题,什么时候$p_T(\boldsymbol{x}_T)$是易于采样的?根据结果$\eqref{eq:heat-sol-2}$,我们知道
\begin{equation}\boldsymbol{x}_T\sim p_T(\boldsymbol{x}_T) \quad\Leftrightarrow\quad \boldsymbol{x}_T = \boldsymbol{x}_0 + \sigma_T \boldsymbol{\varepsilon},\,\,\, \boldsymbol{x}_0\sim p_0(\boldsymbol{x}_0),\,\boldsymbol{\varepsilon}\sim \mathcal{N}(\boldsymbol{0},\boldsymbol{I})\end{equation}
当$\sigma_T$足够大时,$\boldsymbol{x}_0$对$\boldsymbol{x}_T$的影响就很微弱了,此时可以认为
\begin{equation}\boldsymbol{x}_T\sim p_T(\boldsymbol{x}_T) \quad\Leftrightarrow\quad \boldsymbol{x}_T = \sigma_T \boldsymbol{\varepsilon},\,\,\,\boldsymbol{\varepsilon}\sim \mathcal{N}(\boldsymbol{0},\boldsymbol{I})\end{equation}
这就实现了$p_T(\boldsymbol{x}_T)$易于采样的目的。因此,选择$\sigma_t$的一般要求是:满足$\sigma_0 = 0$和$\sigma_T \gg 1$的光滑单调递增函数。
第二个问题,就是如何计算$\nabla_{\boldsymbol{x}_t}\log p_t(\boldsymbol{x}_t)$?这其实跟《生成扩散模型漫谈(五):一般框架之SDE篇》中的“得分匹配”一节是一样的,我们用一个神经网络$\boldsymbol{s}_{\boldsymbol{\theta}}(\boldsymbol{x}_t, t)$去拟合它,训练目标是
\begin{equation}\mathbb{E}_{\boldsymbol{x}_0,\boldsymbol{x}_t \sim \mathcal{N}(\boldsymbol{x}_t; \boldsymbol{x}_0, \sigma_t^2 \boldsymbol{I})p_0(\boldsymbol{x}_0)}\left[\left\Vert \boldsymbol{s}_{\boldsymbol{\theta}}(\boldsymbol{x}_t, t) - \nabla_{\boldsymbol{x}_t} \log \mathcal{N}(\boldsymbol{x}_t; \boldsymbol{x}_0, \sigma_t^2 \boldsymbol{I})\right\Vert^2\right]
\end{equation}
这叫做“条件得分匹配”,其推导我们在SDE篇已经给出了,这里就不重复了。
文章小结 #
在这篇文章中,我们对ODE式扩散模型做了一个“自上而下”的推导:首先从ODE出发,结合雅可比行列式得到了概率变化的一阶近似,然后对比直接泰勒展开的一阶近似,得到了ODE应该要满足的方程,继而转化为扩散方程、热传导方程来求解。相对来说,整个过程比较一步到位,不需要通过SDE、FP方程等结果来做过渡。
转载到请包括本文地址:https://spaces.ac.cn/archives/9280
更详细的转载事宜请参考:《科学空间FAQ》
如果您还有什么疑惑或建议,欢迎在下方评论区继续讨论。
如果您觉得本文还不错,欢迎分享/打赏本文。打赏并非要从中获得收益,而是希望知道科学空间获得了多少读者的真心关注。当然,如果你无视它,也不会影响你的阅读。再次表示欢迎和感谢!
如果您需要引用本文,请参考:
苏剑林. (Sep. 28, 2022). 《生成扩散模型漫谈(十二):“硬刚”扩散ODE 》[Blog post]. Retrieved from https://spaces.ac.cn/archives/9280
@online{kexuefm-9280,
title={生成扩散模型漫谈(十二):“硬刚”扩散ODE},
author={苏剑林},
year={2022},
month={Sep},
url={\url{https://spaces.ac.cn/archives/9280}},
}
September 28th, 2022
最近这篇文章 https://arxiv.org/abs/2209.11178 做了类似的事,在 N+1 维空间和 1 维时间(时间维几乎用不到,但是便于理解)下,数学上会更简单。具体来说,对于一个 N+1 维向量场,选取一个(固定的)N 维起始面和一个(固定的)N 维终止面,在(固定的)起始面(按固定的 tractable 分布)上采样 n 个粒子,让这些粒子沿场线运动,直到到达终止面,这样就拿到了(终止面上的)n 个 sample。而向量场的设计也非常简单,我们只需要写出一个格林函数(即目标分布为 $\delta$ 分布时的向量场) $\vec{G}(\vec{x}; \vec{x}')$ 满足 $\nabla_\vec{x} \cdot \vec{G}(\vec{x}; \vec{x}') = 0$ 即可(事实上还有边界条件,不过不重要),对于任意目标分布 $p(\vec{x})$ 的向量场就是 $\vec{v}(\vec{x}) = \mathbb{E}_{\vec{x}' \sim p(\vec{x}')}
\vec{G}(\vec{x}; \vec{x}')$ ,训练 loss 也是简单的 $\mathbb{E}_{\vec{x}'} |\vec{\mathrm{NN}}(\vec{x}) - \vec{G}(\vec{x}; \vec{x}')|^2$ 。这个理论框架基本上就是这一类模型实际实现的描述,每一个概念能对应到代码上,很难想象还会有更简单的理论框架。另外,我大致推了一下,任何基于线性 ODE 的模型都能由这个框架描述。
这篇文章我也正在阅读,读完再跟大家交流哈~
October 3rd, 2022
这里应该式能把(10)式理解为对于(9)式的一个附加约束 (同时正如本文所展现的intuition,这个附加约束等价于对概率流的引导/约束)。那么一个自然的问题就是这样的附加约束的唯一性,不过看起来这里的(10)式是最显然的一种情况了。
突然发现一个问题,“在本文中,笔者尝试给出ODE扩散模型的直接推导”。在给出(9)式这个假设之后,我们可以推导出来(13)中$p_t(x_t)$遵循的方程。这里我们可以通过类比(13)式直接得到forward过程中$p_t(x_t|x_0)$是一个高斯分布。那么给定任意样本$x_0$,就可以通过一步采样到达某一个$x_T$。(这里似乎展示了forward过程可以是不断加Gaussian的过程,进一步的我的问题是那么会不会有别的形式的类似(10)的约束对应不同的forward过程?)
最终给出的结果(17),是一个forward ODE,并且这个ODE描述的是“给出了从$p_0(x_0)$到$p_T(x_T)$的一个确定性变换”。这里我感觉(13)后面的部分笔者就是在建立一个假设已知score function之后从任意$x_0$到某个$x_T$的确定演化(但是个人认为这个结论从实际角度出发,需要多次调用参数模型$x_\theta$使得它似乎不那么有价值(?))。希望这里笔者能够给出一个这个(17)forward和前面讲ODE部分的reverse ODE之间的对应关系(即确定$x_0$,$x_T$之间的双向确定性变换关系,这样一个有趣的结果就是可以通过对“latent space”的操作来实现,比如说,对图片的编辑)。
其实全文的逻辑是这样的:如果一个微分方程$\eqref{eq:ode}$能够描述分布簇$p_t(\boldsymbol{x}_t)$的变换,那么它应该满足方程$\eqref{eq:ode-f-eq-fp}$。后面要做的事情,应该是给定$p_t(\boldsymbol{x}_t)$来求解$\boldsymbol{f}_t(\boldsymbol{x}_t)$,但我发现不大容易,所以干脆设定$\boldsymbol{f}_t(\boldsymbol{x}_t)$来反推$p_t(\boldsymbol{x}_t)$了。
所以这里我的理解就略有不同,我的理解是对于任意的方程(1),我们可以通过近似(泰勒展开)得到公式(9)来描述$p_t(x_t)$的变换。然后我把(10)式理解为了对方程(9)的额外约束。
其实全文逻辑我不能理解的地方应该是:
1. (13)或者(16)式应该是隐含了$p(\boldsymbol{x}_t|\boldsymbol{x}_0) = \mathcal{N}(\boldsymbol{x}_t; \boldsymbol{x}_0, \sigma_t^2 \boldsymbol{I})$,那么就可以直接通过概率采样$x_t$, 那么为什么还要去通过(17)式来描述forward过程(反正(17)中的score function是只能近似得到的)?
2. 以及,“逆向求解该微分方程”,这里似乎没有给出如何能够得到(17)式对应的可逆微分方程形式,有一种最后一环没有扣上的感觉?
1、对于$p_t(\boldsymbol{x}_t)$,我们要限定$p_0(\boldsymbol{x}_0)$为数据分布,$p_T(\boldsymbol{x}_T)$为易于采样的分布,如果你是从任意$\boldsymbol{f}_t(\boldsymbol{x}_t)$出发,那么求解$\eqref{eq:ode-f-eq-fp}$得到的$p_t(\boldsymbol{x}_t)$就未必满足这个边界条件;
2、ODE既是前向过程,也是反向过程,它的反向过程就是从$t=T$出发,取$\Delta t$为负数,逐步推到$t=0$,这就是确定性的ODE的好处。
我猜测你后面的疑惑在于“实现给定$p_t(\boldsymbol{x}_t)$“这个操作在实践上是否可行?理论上是可行的,比如普通扩散模型定义的加噪前向过程,就是定义了一簇$p_t(\boldsymbol{x}_t)$,其形式是
$$p_t(\boldsymbol{x}_t)=\int p(\boldsymbol{x}_t|\boldsymbol{x}_0)p_0(\boldsymbol{x}_0)d\boldsymbol{x}_0=\mathbb{E}_{\boldsymbol{x}_0\sim p_0(\boldsymbol{x}_0)}[p(\boldsymbol{x}_t|\boldsymbol{x}_0)]$$
其特点就是能表示为$\boldsymbol{x}_0$的期望形式,可以采样估算。这个特点使得我们后期可以构建一个诸如得分匹配的训练方案,用一个神经网络把它拟合出来。
October 3rd, 2022
请问式(9)是怎么从(8)推出来的
我明白了,谢谢,苏老师。
请问是怎么推出来的呢
November 18th, 2022
苏老师,(3)式里面第一个等号应该是减号?
不是减号,就是等号。
December 19th, 2022
感谢苏老师的分享,有几个问题:
1,关于“梯度下降”那个intuition。为什么x0到xT的“降梯度”合理?而且pt是随时间变化的
2,突然将f(x,t)的解界定为热传导方程感觉很突兀,没太懂是怎么联系起来的
3,得分匹配式20是怎么将p(x,t)的梯度化简成式中减号后的那一项的?我试了下推导,式16中的积分号没办法约掉…
期待苏老师的回复~
1、这是intuition,合不合理看个人,按照我之前的理解,生成模型就是将真实样本放在某个能量函数的低谷处(相应于概率密度函数的高峰处),所以通过梯度下降寻找局部最小值点就能找到真实样本;
2、理由同1 / 当然,一开始我只是想凑出已有的结果 / “界定”一词不大对,只是“试探”出一个可行解,事实上它有无穷多的解,比如 https://kexue.fm/archives/9370 ;
3、https://kexue.fm/archives/9209#%E5%BE%97%E5%88%86%E5%8C%B9%E9%85%8D 这里有较为完整地推导,正文也有给出。
December 23rd, 2022
刚刚突然发现(17)式和Elucidating the Design Space of Diffusion-Based Generative Models这篇文章中的(1)式一模一样,不过推导思路好像没什么关系,他这篇文章中的s(t)和\sigma(t)有种突如其来的感觉~
February 27th, 2023
公式5中间的等号是怎么得到的?并且$\mathrm{Tr}(\frac{\partial f_t(\mathbf{x}_t)}{\partial \mathbf{x}_t})$是一个标量,而$\nabla_{\mathbf{x}_t}\cdot f_t(\mathbf{x}_t)$应该是一个矩阵,两者怎么会相等呢?你《行列式的导数》一文只是解释了第一个inequality,能给出解释吗?
$\boldsymbol{f}_t(\boldsymbol{x}_t)$是一个向量,$\frac{\partial \boldsymbol{f}_t(\boldsymbol{x}_t)}{\partial \boldsymbol{x}_t}$是一个矩阵,$\text{Tr}\frac{\partial \boldsymbol{f}_t(\boldsymbol{x}_t)}{\partial \boldsymbol{x}_t}$是矩阵的对角线元素之和;$\nabla_{\boldsymbol{x}_t}\cdot \boldsymbol{f}_t(\boldsymbol{x}_t)$指的是将$\nabla_{\boldsymbol{x}_t}$当成普通向量那样,跟向量$\boldsymbol{f}_t(\boldsymbol{x}_t)$做内积,结果正好是$\text{Tr}\frac{\partial \boldsymbol{f}_t(\boldsymbol{x}_t)}{\partial \boldsymbol{x}_t}$。这些都是通用定义,两者相等是根据这些定义显然易得的结果。
您在最后提到了“这些定义”,那么$\nabla_{x_t}$这个notation的定义是什么,很遗憾,我在此文中没有找到。按照一般理解的话应该是对某个函数关于$x_t$求梯度,但是这里并没有指出是对哪个函数求梯度。说实话,这是我第一次看到这种notation,我具体指的是一个求梯度符号后面直接跟了一个内积符号然后接着是一个函数。我还是没能理解您说的“结果正好是这个trace”,更不用说“显然易得”,可能是我太笨了,麻烦您再指导一下,主要是两点:1.那个notation不清楚,2.“结果正好是”。感觉这两点像是一个问题,notation清楚了后面的可能也清楚了。
$\nabla_{\boldsymbol{x}_t}$就是求梯度的运算的记号,至于梯度符号与向量函数做内积的运算$\nabla_{\boldsymbol{x}_t}\cdot \boldsymbol{f}_t(\boldsymbol{x}_t)$,叫做散度(维基百科:https://zh.wikipedia.org/zh-hans/%E6%95%A3%E5%BA%A6 ),它还有一个记号是$\text{div}\, \boldsymbol{f}_t(\boldsymbol{x}_t)$,这些确实都是标准的运算和记号,不是我信口开河的,任意一本介绍梯度的书,大概率也会介绍散度运算(当当上以“梯度”为关键词,随便搜了一本 http://product.dangdang.com/23818959.html )。此外,在三维空间中,还有旋度运算,它是梯度符号与向量函数的叉积$\nabla_{\boldsymbol{x}_t} \times \boldsymbol{f}_t(\boldsymbol{x}_t)$。
确实,本文没有对所有记号的含义作出详细描述,但本文已经尽量使用标准记号,并且假设想要阅读本文的读者已经初步了解向量微积分基础,况且本文其实没有用到什么向量微积分的进一步结论,只是借用了里边的定义和记号。比如你有疑问的$\text{Tr}\frac{\partial \boldsymbol{f}_t(\boldsymbol{x}_t)}{\partial \boldsymbol{x}_t} = \nabla_{\boldsymbol{x}_t}\cdot \boldsymbol{f}_t(\boldsymbol{x}_t)$,这确确实实是从定义上看出它们相等,而不是复杂运算后得出他们相等。
March 16th, 2023
感谢你的解释,我同意你的解释。是我忘记了散度的定义以及notation,刚才重新翻看了数分中散度的定义,确实那个trace=div,定义上就是这样。你很了不起,能这么耐心回答一个读者的困惑,我佩服你。Hamilton引进了微分算子$\nabla$后,梯度(grad),散度(div),旋度(rot)的表示就很简洁了。
April 14th, 2023
请问苏老师,式子3第一个等号是怎么得出来的呢?可能问题有点降智,还请赐教。
解决了。感谢
就是概率密度函数的换元法,自行搜索一下~
June 6th, 2023
这里补充一下式(8)到式(9)的推导:展开式(8)有$-p_t(x_t)\nabla_{x_t}\cdot f_t(x_t)=f_t(x_t)\cdot \nabla_{x_t}p_t(x_t)+\frac{\partial}{\partial t}p_t(x_t)$,因此 $\frac{\partial}{\partial t}p_t(x_t)=-(p_t(x_t)\nabla_{x_t}\cdot f_t(x_t)+f_t(x_t)\cdot \nabla_{x_t}p_t(x_t))=-\nabla_{x_t}\cdot (f_t(x_t)p_t(x_t))$。