Diffusion 笔记

syan 发布于 2022-09-29 4905 次阅读


Diffusion

CLIP + VQGN + Diffusion = DALLE2

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

基于规律进行扩散过程

GAN

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

表现博弈对抗生成过程

cons

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

损失难以观测

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

多样性降低

Diffusion

DDPM 原文

Source目标存在稳定分布

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

网络训练去噪过程

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

基于时刻进行迭代

(噪声作为标签)

加噪过程

αt=1βt 对于每个时刻,新增噪音,保持相同的扩散幅度,有βt从起始时刻起逐渐增大

通过xt=αtxt1+1αtz1 对图像进行迭代,由αt控制上一时刻保留的幅度,从而控制整体扩散幅度

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

设计α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 }$$

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

可得快速迭代公式

xt=α¯tx0+1α¯tzt

其中α¯t为迭代累乘项,而zt仍为标准分布

去噪过程

image

构建一个分布的还原思想P(Xt1|Xt)

贝叶斯公式,实现逆过程

$$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(xt|xt1,x0)=αtxt1+1αtz,使用贝叶斯求逆向去噪过程

又已知q(xt|x0),q(xt1|x0)均可由快速迭代公式前向取得,因此逆向过程的目标也是可求的

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

$$\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(xt1|xt,x0)的正态分布列

exp(12((xtatxt1)2βt+(xt1α¯t1x0)21α¯t1(xtα¯tx0)21α¯t))

化简展开合并同类项,将需要计算的核心目标xt1整理得

$$=\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((xμ)22σ2)=exp(12(1σ2x22μσ2x+μ2σ2))

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

μ~t=1at(xtβt1a¯tzt)

由此,给定xt和一组分布,我们能取得xt1分布的均值和方差,从而进行还原

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

噪声估计

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

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

image

训练流程

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

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

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

采样流程

随机取出标准正态纯噪声XT

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

$$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$$

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

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

另有ϵθ趋近于服从标准正态分布

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