当前位置: 华文问答 > 科学

Diffusion 理论学习4

2024-05-15科学

关于sde的讨论在前面章节

ODE视角下的Diffusion Model

理论推导

主要参考:https:// kexue.fm/archives/9228

首先先对dirac函数做个分析

p(y) = E_{y\sim p(y)}[\delta(x-y)]

这是因为

p(\mathbf{x}) = \int \delta(\mathbf{x} - \mathbf{y}) p(\mathbf{y}) d\mathbf{y} = \mathbb{E}_{\mathbf{y}}[\delta(\mathbf{x} - \mathbf{y})]

直观理解,当我们想知道一个分布在某个取值处的概率,可以看作是delta函数的期望值,相当于你采样这个分布,只有当x=y的时候才是1,那么求期望就恰好是取值为y的概率值。

接下来,考虑p_{t+\Delta t}(\mathbf{x})

\begin{aligned} p_{t+\Delta t}(\mathbf{x}) \\ =&\,\mathbb{E}_{\mathbf{x}_{t+\Delta t}}\left[\delta(\mathbf{x} - \mathbf{x}_{t+\Delta t})\right] \\ =&\mathbb{E}[\delta(\mathbf{x} - (\mathbf{x}_t + \mathbf{f}_t(\mathbf{x}_t) \Delta t + g_t \sqrt{\Delta t}\mathbf{\varepsilon}))] \\ \approx&\, \mathbb{E}_{\mathbf{x}_t, \mathbf{\varepsilon}}\left[\delta(\mathbf{x} - \mathbf{x}_t) - \left(\mathbf{f}_t(\mathbf{x}_t) \Delta t + g_t \sqrt{\Delta t}\mathbf{\varepsilon}\right)\cdot \nabla_{\mathbf{x}}\delta(\mathbf{x} - \mathbf{x}_t) + \frac{1}{2} \left(g_t\sqrt{\Delta t}\mathbf{\varepsilon}\cdot \nabla_{\mathbf{x}}\right)^2\delta(\mathbf{x} - \mathbf{x}_t)\right] \\ =&\, \mathbb{E}_{\mathbf{x}_t}\left[\delta(\mathbf{x} - \mathbf{x}_t) - \mathbf{f}_t(\mathbf{x}_t) \Delta t\cdot \nabla_{\mathbf{x}}\delta(\mathbf{x} - \mathbf{x}_t) + \frac{1}{2} g_t^2\Delta t \nabla_{\mathbf{x}}\cdot \nabla_{\mathbf{x}}\delta(\mathbf{x} - \mathbf{x}_t)\right] \\ =&\,p_t(\mathbf{x}) - \nabla_{\mathbf{x}}\cdot\left[\mathbf{f}_t(\mathbf{x})\Delta t\, p_t(\mathbf{x})\right] + \frac{1}{2}g_t^2\Delta t \nabla_{\mathbf{x}}\cdot\nabla_{\mathbf{x}}p_t(\mathbf{x}) \end{aligned}

其中第一行是Dirac函数的性质,第二行是diffusion的SDE的定义(dx = f(x,t)dt + g(t) dw ),第三行是dirac函数在x-x_t 处的展开,并且忽略o(\Delta t) 以上的项。第四行对\epsilon 求期望,注意一阶矩是0,二阶矩是1。最后一行是Dirac函数分布性质的逆运用。

两边除以\Delta t 取极限,就得到Focker-Plank方程

\frac{\partial}{\partial t} p_t(\mathbf{x}) = - \nabla_{\mathbf{x}}\cdot\left[\mathbf{f}_t(\mathbf{x}) p_t(\mathbf{x})\right] + \frac{1}{2}g_t^2 \nabla_{\mathbf{x}}\cdot\nabla_{\mathbf{x}}p_t(\mathbf{x})

我们把g_t 里拆分出一部分\sigma_t 来,得到

\begin{aligned} \frac{\partial}{\partial t} p_t(\mathbf{x}) =&\, - \nabla_{\mathbf{x}}\cdot\left[\mathbf{f}_t(\mathbf{x})p_t(\mathbf{x}) - \frac{1}{2}(g_t^2 - \sigma_t^2)\nabla_{\mathbf{x}}p_t(\mathbf{x})\right] + \frac{1}{2}\sigma_t^2 \nabla_{\mathbf{x}}\cdot\nabla_{\mathbf{x}}p_t(\mathbf{x}) \\ =&\,- \nabla_{\mathbf{x}}\cdot\left[\left(\mathbf{f}_t(\mathbf{x}) - \frac{1}{2}(g_t^2 - \sigma_t^2)\nabla_{\mathbf{x}}\log p_t(\mathbf{x})\right)p_t(\mathbf{x})\right] + \frac{1}{2}\sigma_t^2 \nabla_{\mathbf{x}}\cdot\nabla_{\mathbf{x}}p_t(\mathbf{x}) \end{aligned}

接下来,考虑FP方程的逆运用,我们上面算FP方程的时候,除了x_{t+1} 是按照SDE写的,剩下的全是dirac函数的技巧,因此FP方程其实和SDE是对应的,现在我们重新整理之后,得到了一个新的FP方程,那么回去看对应的SDE又是啥呢?答案是

d\mathbf{x} = \left(\mathbf{f}_t(\mathbf{x}) - \frac{1}{2}(g_t^2 - \sigma_t^2)\nabla_{\mathbf{x}}\log p_t(\mathbf{x})\right) dt + \sigma_t d\mathbf{w}

但是要注意,刚才得到新FP的过程是恒等变换(拆出一部分\sigma^2 ,另外别忘了FP的左侧描述的是p_t(x) ,所以说不同的SDE是可以有相同的p_t(x) 的。另外,这个新过程和原来过程相比,随机部分的系数从原来的g_t^2 缩小为\sigma^2 ,这就说明了保持p_t(x) 不变可以实现缩小方差,我们发现极限情况下,如果让\sigma^2=0 ,那就是上一小节末尾提到的确定性过程。

所以极端情况的ODE为

d\mathbf{x} = (f_t(\mathbf{x}) - \frac{1}{2}g_t^2\nabla_{\mathbf{x}}\log p_t(\mathbf{x})) dt

另外注意ODE因为变化过程是确定的,因此不存在什么正向逆向的问题,只需关于t按照不同的方向积分即可。

直观理解

x 服从的分布是p_0(x) ,p_t(x) 则是对x做变换后t 时刻x 的边缘分布,我们希望定义一个变换过程,使得p_t(x) 在不断变化直到最后分布变成Gaussian。而FP方程的左边恰好就是这个变换过程所对应的x 的分布随时间变化的导数。这个导数的值由sde的f和g的两项决定的。因此,只要能保证FP-方程左边不变,就说明p_t(x) 的变化方式一样。

而保证FP-方程左边不变,相应的方程右边可以做很多恒等变换,每个恒等变换的背后都产生了新的f和g,背后是一个新的sde,甚至极限情况是ODE。