Diffusion 笔记

最后更新于 2023-11-05 1734 次阅读


Diffusion

CLIP + VQGN + Diffusion = DALLE2

扩散模型,基于分布的思想

基于规律进行扩散过程

GAN

生成器判别器迭代逼近生成目标

表现博弈对抗生成过程

cons

训练多个网络,收敛难度较大

损失难以观测

容易学习偏见(骗过判别器

多样性降低

Diffusion

DDPM 原文

Source目标存在稳定分布

通过迭代加噪音实现扩散,击碎分布

网络训练去噪过程

前向扩散 + 反向还原 = Diffusion模型

基于时刻进行迭代

(噪声作为标签)

加噪过程

$\alpha_t = 1-\beta_t$ 对于每个时刻,新增噪音,保持相同的扩散幅度,有$\beta_t$从起始时刻起逐渐增大

通过$x _ { t } = \sqrt { \alpha _ { t } } x _ { t - 1 } + \sqrt { 1 - \alpha _ { t } } z _ { 1 }$ 对图像进行迭代,由$\alpha_t$控制上一时刻保留的幅度,从而控制整体扩散幅度

(串行计算墨迹难以训练,前向过程干就完事了)

设计$\alpha_t$按已知项线性衰减,对上述迭代项进行递推

$$xt= \sqrt { a { t } a { t - 1 } } x { t - 2 } + ( \sqrt { a { t } ( 1 - \alpha { t - 1 } ) } z { 2 } + \sqrt { 1 - \alpha { t } } z { 1 } )= \sqrt { a { t } a { t - 1 } } x { t - 2 } + \sqrt { 1 - \alpha { t } \alpha { t - 1 } } z _ { 2 }$$

依据高斯分布乘以系数等于重采样改变方差的规则,对高斯噪声项进行化简

可得快速迭代公式

$$x_t= \sqrt{\bar\alpha_t}x_0 + \sqrt{1-\bar\alpha_t} z_t$$

其中$\bar\alpha_t$为迭代累乘项,而$z_t$仍为标准分布

去噪过程

image

构建一个分布的还原思想$P(X_{t-1}|X_t)$

贝叶斯公式,实现逆过程

$$q ( x { t - 1 } | x { t } , x { 0 } ) = q ( x { t } | x { t - 1} , x { 0 } ) \frac { q ( x { t - 1 } | x { 0 } ) } { q ( x { t } | x { 0 } ) }$$

已知加噪的迭代方法$q(x_t|x_{t-1},x_0) = \sqrt { \alpha _ { t } } x _ { t - 1 } + \sqrt { 1 - \alpha _ { t } } z$,使用贝叶斯求逆向去噪过程

又已知$q(x_t|x_0),q(x_{t-1}|x_0)$均可由快速迭代公式前向取得,因此逆向过程的目标也是可求的

有概率项服从不同正态分布

$$\begin{array}{lll}
q ( x _ { t } | x _ { t - 1} , x _ { 0 } )
& \sqrt{\bar\alpha_{t-1}}x_0 + \sqrt{1-\bar\alpha_{t-1}} z
& \sim\mathcal N(\sqrt{\bar\alpha_{t-1}}x_0, 1-\bar\alpha_{t-1}) \\
q ( x _ { t - 1 } | x _ { 0 } )
& \sqrt{\bar\alpha_t}x_0 + \sqrt{1-\bar\alpha_t} z
& \sim\mathcal N(\sqrt{\bar\alpha_{t}}x_0, 1-\bar\alpha_{t})\\
q ( x _ { t } | x _ { 0 } )
& \sqrt { \alpha _ { t } } x _ { t - 1 } + \sqrt { 1 - \alpha _ { t } } z
& \sim\mathcal N(\sqrt{\alpha_{t}}x_{t-1}, 1-\alpha_{t})

\end{array}$$

由此,我们可得$q ( x _ { t - 1 } | x _ { t } , x _ { 0 } )$的正态分布列

$$\propto \exp ( - \frac { 1 } { 2 } (
\frac { ( x _ { t } - \sqrt { a _ { t } } x _ { t - 1} ) ^ { 2 } } { \beta _ { t } }
+ \frac { ( x _ { t - 1 }- \sqrt { \bar \alpha _ { t - 1 } }x _ { 0} ) ^ { 2 } } { 1 -\bar\alpha_{t-1}}
- \frac { ( x _ { t } - \sqrt { \bar \alpha _ { t } }x _ { 0} ) ^ { 2 } } { 1 -\bar\alpha_{t}}
))$$

化简展开合并同类项,将需要计算的核心目标$x_{t-1}$整理得

$$=\exp(- \frac{1}{2}(
(\frac{\alpha _{t}}{\beta _{t}}+ \frac{1}{1- \bar{\alpha}_{t-1}})x_{t-1}^{2}
-(
\frac{2 \sqrt{\alpha _{t}}}{\beta _{t}}x_{t}
+ \frac{2 \sqrt{\bar\alpha_{t-1}}}{1- \bar{\alpha}_{t-1}}x_{0}
)x_{t-1}

+C(x_{t},x_{0})))$$

又有正态分布的分解公式为

$$\exp(- \frac{(x- \mu)^{2}}{2 \sigma ^{2}})=\exp(- \frac{1}{2}(\frac{1}{\sigma ^{2}}x^{2}- \frac{2 \mu}{\sigma ^{2}}x+ \frac{\mu ^{2}}{\sigma ^{2}}))$$

比较上下两式关系,可得均值与方差(求均值包含对$x_0$的估计)

$$\tilde{\mu}_{t}= \frac{1}{\sqrt{a_{t}}}(x_{t}- \frac{\beta _{t}}{\sqrt{1- \bar{a}_{t}}}{z}_{t})$$

由此,给定$x_t$和一组分布,我们能取得$x_{t-1}$分布的均值和方差,从而进行还原

而其中剩下最后一个关键量为噪声分布$z_t$,无法显式求解,则训练模型预测$x_t$时刻添加的噪声$z_t$

噪声估计

由前向过程提供标签(以噪声的形式),在反向过程中依据标签预测

使用Unet结构和Transformer等进行噪声估计

image

训练流程

随机进行时刻扩散和计算,取随机噪声

学习模型$\epsilon_\theta (X_t,t)$,用于学习t时刻的噪声(其中$X_t$为加噪后图像),取真实值与预测值做损失梯度下降

使用模型学习如何为网络添加噪声

采样流程

随机取出标准正态纯噪声$X_T$

循环依据预测噪声和逆过程的迭代公式对上一时刻进行求解

$$x{t-1}= \frac{1}{\sqrt{\alpha {t}}}(x{t}- \frac{1- \alpha {t}}{\sqrt{1- \overline{\alpha}{t}}}\epsilon {\theta}(x{t},t))+ \sigma {t}z$$

(最后的$\sigma_t z$应该是当前时刻方差的正则化项,即高斯分布重采样,所以在最后步骤中避免加入)

(重参数技巧,解决梯度不能反向传播)

另有$\epsilon_\theta$趋近于服从标准正态分布

百无一用是书生
最后更新于 2023-11-05