diffusion model起源于 Denoising Diffusion Probabilistic Models (DDPM)文章:
快速理解Diffusion Model基本思想
Diffusion Model是一种生成模型(Generative Model)。从实用角度来说,比如我们希望找到一个完美的“图像”生成模型,那么向这个模型中输入一个随机噪声,便能输出一个非常真实的图像。【生成模型有很多,经典的包括GAN,VAE,详见引用1】
接下来以图像生成举例子:
DDPM的核心思想是找到一个模型,向输入包含噪声的数据,它便可以输出/预估出对应的噪声。这样当我们需要完成生成任务时,只需要向中输入一个相应的噪声(这里假设噪声由数据和噪声组成,即),模型便可以预估出噪声,那么基于,我们也就变相实现生成的任务。这是理想情况下的一步实现,但是实际很难找到这个理想模型,因此DDPM定义了一个马尔科夫链,也就是说模型每次只需要预估出其中的一部分噪声,那么迭代足够多次(所以Diffusion Model这么慢)便可以去除足够多的噪声,进而获得最终的。这一想法对应到下图:
的过程称之为“前向扩散过程(Forward diffusion Process)”,简单理解目标在于训练出模型。
的过程称之为“逆转扩散过程(Reverse diffusion Process)”,简单理解目标在于使用模型生成一张图。
当然以上是最简单的理解,实际上DDPM由严谨的公式推导组成,建议阅读引用1-3
注意:
- 前向扩散过程核心公式:
- 为什么stable diffusion通常是unet结构,可能的解答:
不过也有人做了纯transformer结构的diffussion model:
快速理解Diffusion Model如何训练/推理
前向扩散过程怎么实现:
输入:由 真实图片、噪声、迭代次数 (决定了噪声强度)共同决定的噪声图
输出:预估噪声
如何实现一次逆转扩散过程:
输入:噪声、迭代次数 (决定了噪声强度)共同决定的噪声图s
输出: 时刻下的复原图
为了得到理想的生成图,逆转扩散过程需要进行多次
stable difussion的实现
Diffusion Model是不可控的,用户不能决定生成什么,因此stable difussion的目标就是实现一个text-to-image model,也就是文本生成图像。
普通的diffusion model架构可以理解为:
首先需要一个预训练模型将文本处理成text embedding,然后将text embedding嵌入到上述模型中(基于注意力机制)
Stable diffussion来源于latent diffusion model (LDM),如下图(其实就是上图的复杂版本):