来自 扩散模型 Diffusion Model 1-1 概述
扩散模型是什么?
和 GAN 相比优势是什么?
generator 和 discriminator 两者都得训练的比较均衡才能得到好的结果(稳定性),两者对抗,loss 并不能直观的反应训练过程
DDPM 的话,reverse 只是一个去噪模型,目标比较明确,易于训练
扩散阶段
Z t Z_t Zt 服从标准正态分布
β t \beta_t βt 加权系数,越来越大
上图是从 X t X_t Xt 到 X t − 1 X_{t-1} Xt−1 的公式
每张图加噪 T 次太慢了
我们能否直接从 X 0 X_0 X0 直接推导到 X t X_t Xt 呢?
α t \alpha_t αt
X T ≈ Z X_T \approx Z XT≈Z 近似高斯噪声
看看多 batch 的时候是怎么训练的
扩散过程
Z ~ = U N e t ( X t , t ) \widetilde{Z} = UNet(X_t, t) Z =UNet(Xt,t)
也是一步步反推回来的
具体看看 reverse 的公式推导
也即,求条件概率 p ( X t − 1 ∣ X t ) p(X_{t-1}| X_t) p(Xt−1∣Xt)
注意上公式2中 p ( X t ) p(X_t) p(Xt) 表示 p ( X t ∣ X 0 ) p(X_t | X_0) p(Xt∣X0), 公式3中 p ( X t − 1 ) p(X_{t-1}) p(Xt−1) 表示 p ( X t − 1 ∣ X 0 ) p(X_{t-1} | X_0) p(Xt−1∣X0)
正太分布这里忽略了 1 2 π ⋅ σ \frac{1}{ \sqrt{2 \pi} \cdot \sigma} 2π ⋅σ1
把公式1/2/3代入公式4得到公式5
公式4的目的是求出 p ( X t − 1 ∣ X t ) p(X_{t-1} | X_t) p(Xt−1∣Xt), X t − 1 X_{t-1} Xt−1 为变量,把公式5按二次式展开
已知: α t + β t = 1 \alpha_t + \beta_t = 1 αt+βt=1, α t ⋅ α t − 1 ‾ = α t ‾ \alpha_t \cdot \overline{\alpha_{t-1}} = \overline{\alpha_t} αt⋅αt−1=αt
得到了关于 X t X_t Xt 和 X 0 X_0 X0 的表达形式
我们要求的是条件概率 p ( X t − 1 ∣ X t ) p(X_{t-1}| X_t) p(Xt−1∣Xt), X 0 X_0 X0 不知道的,所以要替换掉上式中的 X 0 X_0 X0
得到最终的均值结果,与 X t X_t Xt 和 z ~ \widetilde{z} z 有关
汇总一下:
这里 X t − t X_{t-t} Xt−t 的公式有误,应该为
z z z 服从标准的正态分布
X t − t X_{t-t} Xt−t 公式模拟分子的布朗运动, X t − 1 X_{t-1} Xt−1 中加式1 z ~ \widetilde{z} z 是确定项,加式2 z z z 是随机的正态分布
布朗运动和扩散现象的区别
注意红色字迹的三个基础公式
对应到论文中的公式
注意到这里的 if t>1,最后一步,不需要加扰动噪声了
σ t \sigma_t σt 表示了扰动的系数,非确定性项
有可能 z z z 采样出来的全为0,这样 reverse 的过程变成了一个确定的过程
代码实现
α \alpha α 和 β \beta β 的获取
time embedding 操作,不同时间点做不同的去噪操作