0%

DiffusionModel原理学习笔记

去噪自动编码器

Diffusion model 是一种深度生成模型(无监督生成模型),它属于:
机器学习 -> 无监督学习 -> 概率模型 -> 生成模型

分类图

概率模型是为了求得数据的后验概率P(YX)P(Y|X)或者联合验概率P(X,Y)P(X,Y)
对于监督学习而言,判别模型主要是求后验概率,也就是通过输入的特征X去求标签信息Y。生成模型主要是未了求得联合概率,对于X,求出X与不同标签之间的联合概率,取最大的那个标签作为预测结果。

隐空间和隐变量 (latent space/hidden variables)

间接

a 直接到 b 比较困难,所以可以通过间接变量 c 来实现。

基本算法

autoencoder

diffusion

X0X_0 是原始的输入图像,XTX_T 是 total noise

在从右往左的过程中的每一步都会给样本增加一个小的满足高斯分布的噪声,整个过程为一个一阶马尔可夫过程,这是一个正向扩散过程,如果把它反过来,也就是从左往右看上图,那么就是一个反向扩散过程。

正向分布的时候添加的噪声都是符合高斯分布的,那么这些噪声合并后仍然是处于高斯分布的。但是当我们逆推这一过程的时候,除非我们拥有整体数据集合,不然我们是没有办法直接求解的,通常来说我们会训练一个模型 pθp_θ来预测反向扩散过程的条件概率 q(xt1xt)q(x_{t-1}|x_t).
通过这个模型,我们输入 XtX_ttt 可以预测出 Xt1X_{t-1} 的条件概率分布(如果正向扩散每步增加的噪声够小,它可以被视为高斯分布)的均值 μθ(xt,t)μ_θ(x_t,t)和方差 θ(xt,t)\sum_θ(x_t,t),基于预测值,我们可以从 xt1x_{t-1}的高斯分布 pθ(xt1xt)p_θ(x_{t-1}|x_t)中采样出 Xt1X_{t-1} 的值,从而得到 xt1x_{t-1} 的一个可能的取值,后面以此类推,我们就可以逐步去噪生成一张图片.

这个模型在 DDPM 中是 U-net 网络 PixelCNN++.

简单来说,这里的反向传播,或者说是 decoder,又或者说是生成器,其实就是在简单的拟合正向部分的逆过程的每一小步.

当然,训练我们的噪声预测器需要大量的数据集,不过这仍然不值得担心,因为正向传播的每一步我们都是在给图像逐步加噪,我们可以轻松地获取从0到T每个过程的所有样本.
UNet
上面这张图非常清晰的展现了 U-net 的训练.

欢迎关注我的其它发布渠道