扩散模型 DDPM


type
Post
status
Published
date
Dec 1, 2025
slug
ddpm
summary
tags
category
学术
icon
password

DDPM前向过程

前向扩散指的是将一个复杂分布转换成简单分布的过程 ,即:
在DDPM中,将这个过程定义为马尔可夫链,通过不断地向复杂分布中的样本 添加高斯噪声。这个加噪过程可以表示为 :
其中, ,是超参数。
开始,不断地应用 ,经过足够大的 步加噪之后,最终得到纯噪声
除了迭代地使用 外,还可以使用 一步到位,证明如下(两个高斯变量的线性组合仍然是高斯变量):
一般来说,超参数 的设置满足 ,则 ,则 会只保留纯噪声部分。

DDPM逆向过程

在前向扩散过程中,实现了:
如果能够实现将前向扩散过程反转,也就实现了从简单分布到复杂分布的映射。逆向扩散过程则是将前向过程反转,实现从简单分布随机采样样本,迭代地使用 ,最终生成复杂分布的样本,即:
为了求取 ,使用贝叶斯公式:
然而,公式中 不好求,根据DDPM的马尔科夫假设,可以为 添加条件(可以证明,如果向扩散过程中的 足够小,那么 是高斯分布:
其中, 是高斯分布的均值, 可以用超参数表示:
式中 可以反用公式 :
则:
而在推理的时候, 是未知的,所以使用神经网络进行预测。综上,逆向扩散过程:

DDPM训练方法

DDPM的训练目标是最小化训练数据的负对数似然:
其中 是使用网络估计分布 (变分推断),定义 ,那么VLB是训练数据的负对数似然的上界,最小化VLB就是最小化负对数似然。继续对VLB拆分:
  1. 由于 是纯噪声,所以 是常数
  1. 对于 ,DDPM专门设计了特殊的
  1. 对于 ,是两个正态分布的KL散度,有解析解。在DDPM中,使用了简化之后的损失函数:

DDPM总结

notion image

扩散模型与分数生成模型的联系

对于分数:
又因为:
所以:
因此,扩散模型的噪声估计器和score只相差一个scale: .

分类器引导采样

为了让扩散模型能够进行条件生成,需要建模数据与条件的联合分布,换句话说,需要让模型估计这个联合分布的score:
是一个分类器,训练这样一个分类器去估计这一项:
这样就得到了一个新的score估计器:
为了设置分类器的引导强度,新增一个引导参数 :

无分类器引导采样

在分类器引导采样中,根据贝叶斯公式:
代入分类器引导采样公式中:
即,分类器引导采样中分类器提供的方向等价为 ,这个方向靠近条件的方向,远离无条件方向

思考

进一步思考,这一项的数值大小 标志着数据和条件对齐的程度,这是一个隐式的分类器,能够利用这个特点分类 继续进一步,如果将无条件score估计网络 换成另一个条件 ,即 。则:
这里出现了两个隐式分类器,第一个是衡量数据和条件 的对齐程度,第二个是衡量数据和条件 的对齐程度。如果使用这两个隐式分类器替换之前的隐式分类器,那么就相当于在生成过程中让数据尽可能对齐条件 ,远离 ,这个做法被广泛用于Stable Diffusion中(negative prompt),negative prompt一般被设置为low quality, ugly等想让模型远离提示词。既然都能够同时使用1个正提示词和1个负提示词进行引导,那么也可以实现m个提示词(隐式分类器)进行引导。

无分类器引导中的CFG值

无分类器引导采样中的 一般被称为CFG值,越大表示越向条件靠近(可以提高样本的保真度),越小表示越向非条件靠近(可以提高样本的多样性),可以根据实际需求调节。
BTW,虽然扩散模型可以像cGAN或cVAE那样训练一个conditional model,即 ,这个在条件 较简单的时候(例如只是一个类别标签),一个好的backbone仍然能够实现条件生成。但是当条件变复杂的时候(例如文本,草图等),无分类器引导采样就变得很重要了,这个是目前非常主流的做法。

Reference

  1. 从零开始了解Diffusion Models
  1. https://ayandas.me/blog-tut/2021/12/04/diffusion-prob-models.html
  1. What are Diffusion Models
  1. An introduction to Diffusion Probabilistic Models
 
Loading...