diffusion公式推导

手推diffusion

参考链接:https://zhuanlan.zhihu.com/p/525106459
看了大佬的推导过程后自己推了一遍,捋出了一个大概的推导逻辑,并将一些复杂的问题隐藏在整个逻辑后面,思路相对来说比较简单。

整体下来其实学过概率论就能看懂,一些数学符号在一般概率论中没见过的话可以查查。

比如 N ( x t ; 1 − β t x t − 1 , β t I ) \mathcal{N}(x_t; \sqrt{1-\beta_t}x_{t-1}, \beta_t\mathbf{I}) N(xt;1βt xt1,βtI),前面的 x t x_t xt其实就是指服从后面均值方差参数的随机变量。即表达为: x t ∼ N ( 1 − β t x t − 1 , β t I ) x_t \sim \mathcal{N}(\sqrt{1-\beta_t}x_{t-1}, \beta_t\mathbf{I}) xtN(1βt xt1,βtI)
还有就是后面的 I \mathbf{I} I 也就是单位阵,因为 x t x_t xt是一个多维随机变量。

注:下面的 q ( x t − 1 ∣ x t ) q_{(x_{t-1}|x_t)} q(xt1xt)其实本质上来说就是论文中的 p ( x t − 1 ∣ x t ) p_{(x_{t-1}|x_t)} p(xt1xt)

在这里插入图片描述

forward processing / 加噪过程

预设的加噪分布
q ( x t ∣ x t − 1 ) = N ( x t ; 1 − β t x t − 1 , β t I ) ( 1 ) q_{(x_t|x_{t-1})} = \mathcal{N}(x_t; \sqrt{1-\beta_t}x_{t-1}, \beta_t\mathbf{I}) \qquad (1) q(xtxt1)=N(xt;1βt xt1,βtI)(1)

q ( x 1 : T ∣ x 0 ) = ∏ t = 1 T q ( x t ∣ x t − 1 ) ( 2 ) q_{(x_{1:T}|x_0)} = \prod_{t=1}^{T} q_{(x_t|x_{t-1})} \qquad (2) q(x1:Tx0)=t=1Tq(xtxt1)(2)

推理过程

现在我们知道了如何加噪,那么该如何做去噪呢?

既然知道了 q ( x t ∣ x t − 1 ) q_{(x_t|x_{t-1})} q(xtxt1) , 就可以用贝叶斯公式求出 q ( x t − 1 ∣ x t ) q_{(x_{t-1}|x_t)} q(xt1xt)这个逆向的从 x t x_t xt x t − 1 x_{t-1} xt1的分布。不就能实现去噪了吗?

好,开始推!

q ( x t − 1 ∣ x t ) = q ( x t − 1 , x t ) q ( x t ) = q ( x t ∣ x t − 1 ) q ( x t − 1 ) q ( x t ) = q ( x t ∣ x t − 1 , x 0 ) q ( x t − 1 ∣ x 0 ) q ( x t ∣ x 0 ) ( 3 ) \begin{aligned} q_{(x_{t-1}|x_t)} &= \frac{q_{(x_{t-1}, x_t)}} {q_{(x_t)}} \\ &= q_{(x_t|x_{t-1})} \frac{q_{(x_{t-1})}} {q_{(x_t)}} \\ &= q_{(x_t|x_{t-1},x_0)} \frac{q_{(x_{t-1}|x_0)}} {q_{(x_t|x_0})} \qquad (3) \\ \end{aligned} q(xt1xt)=q(xt)q(xt1,xt)=q(xtxt1)q(xt)q(xt1)=q(xtxt1,x0)q(xtx0)q(xt1x0)(3)

α t = 1 − β t \alpha_t = 1 - \beta_t αt=1βt

这三项中,

  • q ( x t ∣ x t − 1 , x 0 ) q_{(x_t|x_{t-1},x_0)} q(xtxt1,x0) 是已知的,由等式 (1) 可知
    q ( x t ∣ x t − 1 , x 0 ) ∝ exp ⁡ ( − 1 2 × ( x t − 1 − β t x t − 1 ) 2 β t ) ∝ exp ⁡ ( − 1 2 × ( x t − α t x t − 1 ) 2 β t ) ( 4 ) \begin{aligned} q_{(x_t|x_{t-1},x_0)} &\propto \exp(-\frac{1}{2} \times \frac{(x_t-\sqrt{1-\beta_t}x_{t-1})^2}{\beta_t}) \\ &\propto \exp(-\frac{1}{2} \times \frac{(x_t-\sqrt{\alpha_t} x_{t-1})^2}{\beta_t}) \qquad (4) \end{aligned} q(xtxt1,x0)exp(21×βt(xt1βt xt1)2)exp(21×βt(xtαt xt1)2)(4)

由等式(2) 可知,剩余两项可写为:

  • q ( x t − 1 ∣ x 0 ) = ∏ s = 1 t − 1 q ( x s ∣ x s − 1 ) ( 5 ) q_{(x_{t-1}|x_0)} = \prod_{s=1}^{t-1} q_{(x_s|x_{s-1})} \qquad (5) q(xt1x0)=s=1t1q(xsxs1)(5)
  • q ( x t ∣ x 0 ) = ∏ s = 1 t q ( x s ∣ x s − 1 ) ( 6 ) q_{(x_{t}|x_0)} = \prod_{s=1}^{t} q_{(x_s|x_{s-1})} \qquad (6) q(xtx0)=s=1tq(xsxs1)(6)

其实它俩也是高斯分布,看我给你推。


证明:

∵ q ( x t ∣ x t − 1 ) = N ( x t ; 1 − β t x t − 1 , β t I ) ∴ x t ∼ N ( 1 − β t x t − 1 , β t I ) ∴ x t = α t x t − 1 + 1 − α t z 1 w h e r e z 1 , z 2 , . . . ∼ N ( 0 , 1 ) = α t ( α t − 1 x t − 2 + 1 − α t − 1 z 2 ) + 1 − α t z 1 = α t α t − 1 x t − 2 + α t ( 1 − α t − 1 ) z 2 + 1 − α t z 1 \because q_{(x_t|x_{t-1})} = \mathcal{N}(x_t; \sqrt{1-\beta_t}x_{t-1}, \beta_t\mathbf{I}) \\ \quad \\ \therefore x_t \sim \mathcal{N}(\sqrt{1-\beta_t}x_{t-1}, \beta_t\mathbf{I}) \\ \quad \\ \begin{aligned} \therefore x_t &= \sqrt{\alpha_t} x_{t-1} + \sqrt{1-\alpha_t} z_1 \qquad where z_1, z_2,... \sim \mathcal{N}(0,1)\\ &= \sqrt{\alpha_t} (\sqrt{\alpha_{t-1}} x_{t-2} + \sqrt{1-\alpha_{t-1}} z_2) + \sqrt{1-\alpha_t} z_1 \\ &= \sqrt{\alpha_t\alpha_{t-1}} x_{t-2} + \sqrt{\alpha_t(1-\alpha_{t-1})} z_2 + \sqrt{1-\alpha_t} z_1 \\ \end{aligned} \\ q(xtxt1)=N(xt;1βt xt1,βtI)xtN(1βt xt1,βtI)xt=αt xt1+1αt z1wherez1,z2,...N(0,1)=αt (αt1 xt2+1αt1 z2)+1αt z1=αtαt1 xt2+αt(1αt1) z2+1αt z1

好,有意思的来了

α t ( 1 − α t − 1 ) z 2 ∼ N ( 0 , α t ( 1 − α t − 1 ) I ) 1 − α t z 1 ∼ N ( 0 , ( 1 − α t ) I ) ∴ α t ( 1 − α t − 1 ) z 2 + 1 − α t z 1 ∼ N ( 0 , ( 1 − α t α t − 1 ) I ) \sqrt{\alpha_t(1-\alpha_{t-1})} z_2 \sim \mathcal{N}(0, \alpha_t(1-\alpha_{t-1})\mathbf{I}) \\ \sqrt{1-\alpha_t} z_1 \sim \mathcal{N}(0, (1-\alpha_{t})\mathbf{I}) \\ \quad \\ \therefore \sqrt{\alpha_t(1-\alpha_{t-1})} z_2 + \sqrt{1-\alpha_t} z_1 \sim \mathcal{N}(0, (1-\alpha_t\alpha_{t-1})\mathbf{I}) αt(1αt1) z2N(0,αt(1αt1)I)1αt z1N(0,(1αt)I)αt(1αt1) z2+1αt z1N(0,(1αtαt1)I)

上面的计算就省了,递推一下,下面的递推可能看上去有点武断,但确实是对的

x t = α t x t − 1 + 1 − α t z 1 = α t α t − 1 x t − 2 + 1 − α t α t − 1 z 2 = . . . = α t α t − 1 . . . α 1 x 0 + 1 − α t α t − 1 . . . α 1 z t ( 7 ) \begin{aligned} x_t &= \sqrt{\alpha_t} x_{t-1} + \sqrt{1-\alpha_t} z_1 \\ &= \sqrt{\alpha_t\alpha_{t-1}}x_{t-2} + \sqrt{1-\alpha_t\alpha_{t-1}} z_2 \\ &= ... \\ &= \sqrt{\alpha_t\alpha_{t-1}...\alpha_1}x_{0} + \sqrt{1-\alpha_t\alpha_{t-1}...\alpha_1} z_t \qquad (7)\\ \end{aligned} xt=αt xt1+1αt z1=αtαt1 xt2+1αtαt1 z2=...=αtαt1...α1 x0+1αtαt1...α1 zt(7)

简记一下 α t ‾ = ∏ i = 1 t α i \overline{\alpha_t} = \prod_{i=1}^t \alpha_i \qquad αt=i=1tαi 等式(7)就可以简写为:

x t = α t ‾ x 0 + 1 − α t ‾ z t ∼ N ( α t ‾ x 0 , 1 − α t ‾ I ) ( 8 ) x_t = \sqrt{\overline{\alpha_t}} x_0 + \sqrt{1-\overline{\alpha_t}} z_t \sim \mathcal{N}(\sqrt{\overline{\alpha_t}} x_0,1-\overline{\alpha_t}\mathbf{I}) \qquad (8) xt=αt x0+1αt ztN(αt x0,1αtI)(8)

证明完毕, x t 和 x t − 1 x_t和x_{t-1} xtxt1 确实都是高斯分布


那么(5)(6)的分布也到手了

q ( x t − 1 ∣ , x 0 ) ∝ exp ⁡ ( − 1 2 × ( x t − 1 − α t − 1 ‾ x 0 ) 2 1 − α t − 1 ‾ ) q ( x t ∣ , x 0 ) ∝ exp ⁡ ( − 1 2 × ( x t − α t ‾ x 0 ) 2 1 − α t ‾ ) \begin{aligned} q_{(x_{t-1}|,x_0)} &\propto \exp(-\frac{1}{2} \times \frac{(x_{t-1} - \sqrt{\overline{\alpha_{t-1}}} x_0)^2}{1-\overline{\alpha_{t-1}}}) \\ q_{(x_{t}|,x_0)} &\propto \exp(-\frac{1}{2} \times \frac{(x_{t} - \sqrt{\overline{\alpha_{t}}} x_0)^2}{1-\overline{\alpha_{t}}}) \\ \end{aligned} q(xt1,x0)q(xt,x0)exp(21×1αt1(xt1αt1 x0)2)exp(21×1αt(xtαt x0)2)
好好好,现在倒推的分布 q ( x t − 1 ∣ x t ) q_{(x_{t-1}|x_t)} q(xt1xt)也就快到手了

这里留给大佬的公式截图,公式太长不想写了

  1. 用得到的三项的分布对逆向概率分布计算并整理
    在这里插入图片描述

  2. 对应标准高斯密度函数,得到 x t − 1 x_{t-1} xt1的均值和方差

一般正态分布


这一步是把 x 0 x_0 x0替换为 x t x_t xt,用的是等式(8)。

在这里插入图片描述

总结

DDPM的每一步推断可总结为

  1. 每个时间步通过 x t x_t xt 与t得到 Z θ ( x t , t ) Z_{\theta}(x_t,t) Zθ(xt,t),并根据此计算出 μ θ ( x t , t ) 和 Σ \mu_{\theta}(x_t, t)和\Sigma μθ(xt,t)Σ

  2. μ 和 Σ \mu和\Sigma μΣ得到 q ( x t − 1 ∣ x t ) q_{(x_{t-1}|x_t)} q(xt1xt),用以反推 x t − 1 x_{t-1} xt1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值