笔记

Diffusion-Model

2026-06-09

一个重要的思想,一张图片可以看成是一个高维空间中的一个点,真实图片只集中在这个空间中很小的一部分。我们就是要学习,如何让概率密度只集中在真实图片区域。

一句话讲一下扩散模型:扩散模型就是先把真实图片一步步加噪声,然后再训练模型学会一步步去噪,最终能够从随机噪声生成高质量图片、视频、音频等内容的生成模型。

图片生成这一类任务,机器需要大量脑补。影像生成的问题,是有一个输入,它的输出不是确定的,而是一个分布。 如果一个图片的所有像素同时生成,每个像素的风格可能不一样,生成的图的质量会差。

  • 现在的生成模型是如何生成图片的?

不是凭空画图,而是先从一个分布随机采样出一个全是噪声的图,然后模型根据提示词逐步去噪,得到图片。让模型学会去噪比让模型学会一下子生成真实图片更简单。

  • 生成图片的模型到底在学什么?

图像模型在学真实图片的概率分布。比如学习生成猫咪,猫咪的像素不是随便堆积的,而是有规律的,假如模型学到了这个分布。

那么从这个分布里面采样,生成图片的图片就是合理的图片。任务目标就是学一个模型分布 Pθ(X)P_θ(X) ,让他尽可能接近图片真实分布Pdata(X)P_{data}(X),从这个分布采样就能得到想要的图片。

图像生成的最终目标就是,模型学到的分布要和真实的分布尽可能接近。

图片的分布到底是什么?一个很高维空间的概率密度函数。

  • 我有一个问题,假如我们知道了某类图片的真实分布,那从这个分布里面采样是什么意思?随机选取一些像素点吗?那这些像素点又如何变成一张图片的呢?

采样是指从分布中得到一个 N 维向量。这个向量按照图片尺寸 reshape 一下就能得到图片。

文生图就是学习条件分布。

  • 其他图片生成模型

VAE,flow-based:训练一个encoder 输入图片,输出一个向量;需要生图的时候,把这个 encoder 反着用。generative adversarial Network :只有 decoder。

  • 扩散模型的输入输出

输入当前带噪声的图片,和时间步T;输出噪声预测。如果有文字条件,输入还会多文字条件。

  • stable diffusion 的结构

text encoder 负责将文字编码成向量;中间有个 generation model (一般是 diffusion model)负责输入带噪声的图片和文字的 encoder ,输出一个中间产物;decoder 负责把中间产物还原成原始图片。三个模块分开训练,然后组合一块。

  • DDPM

训练过程:输入一个清晰的原图,再取样一个噪音。 原图和噪音前面有系数,得到一个带噪音的图;然后和随机生成的整数 T 一块送入 noise predictor,预测出噪音长什么样;

推理时:先有一个全是噪音的图片(服从高斯分布的随机变量),再输入当前时间步T(一个整数),然后送入 noise predictor 预测出一个噪声,然后开始的原图减去这个预测出来的噪音得到一个比较清晰的图片。再随机采样出来一个噪音加上这个比较清晰的图片。 重复这个过程直到得到原图 X0;

这里面噪音或者原图前面都有系数。

推理是从 T 到 1,从后往前。

也不是直接相减。按系数相减,而且还有放缩。

  • DDPM 的优化过程

最开始是最大似然估计,让模型能生成训练集的真实图片的概率最大。是所有概率相乘,最大化这个值,通常取对数化成加法。但是这个算不了,经过一系列转化得到一个下界,这个下界就是 ELBO;ELBO 展开,经过一系列转化,又能变成 学习每一步反向去噪分布。

ELBO:evidence lower bound 证据下界。我们想优化某一个具体的值太难,于是构造一个下界,我们的目标变成让这个下界尽可能大。

  • DDPM论文公式推导

论文核心:定义一个前向加噪过程,训练神经网络学会去噪。经过复杂的转换,最后训练目标为简化为预测噪声的均方误差。

训练时的损失函数是什么?真实图片X0,随机取样一个噪声σ,再随机挑选一个时间步 t,把噪声加到真实图片上,得到 Xt; Xt 和 t 输入我们想训练的神经网络,网络预测出一个噪声,这个预测出来的噪声和随机取样的真实噪声 做均方误差就是损失函数;

推理的时候,从纯噪声出发,输入 Xt 和 t,模型预测得到当前噪声,然后用反向采样公式得到 Xt-1;这个反向采样公式不是简单地相减,有系数和放缩在里面。 反向采样公式是不是要学习一下。这里面去噪这一步是很难的。

前向加噪的公式;
# 前向加噪得到每一步的Xt都服从正态分布,但不是标准正态分布。
为什么训练时,可以一步得到任意噪声图?闭式前向公式推理;
ELBO 的推导,也太复杂了;以及展开成一堆 KL 散度;

待解决问题:

为什么从噪声去噪就能生成图片?”