1. 扩散模型引导
-
一个问题:我想只生成亚洲人脸,怎么办:
- 训练集只用亚洲人
- 跑很多次总能跑出一个
- 条件生成(条件生成也能降低
fid)
-
如何给扩散模型引入条件?
-
classifier guidance只是个采样策略,不用重新训练
2. 公式推导
-
需要解决:
-
其中
是条件,可以是文本、类别等等。 -
使用贝叶斯:
- 如何求上面的分布:
- 分母是
y的分布,是个常数。 - 分子的两个都是假设出来的,我们都不知道。
- 分母是
2.1 三个已知
- 虽然两个分子我们不知道,但是我们希望可以直接使用一个训练好的
DDPM,因此前向过程是跟DDPM一样的:(这个思想跟DDIM是一样的)-
- 此外,训练图像的分布也是不变的:
-
- 马尔可夫性质:
-
2.2 分布推导
1)解决:
-
根据贝叶斯,结合前向求逆向:
-
-
为了让分子的第一项与已知条件靠拢,应该想办法将
y引入(通过积分的方式引入):
-
分子第二项仍然用全概率公式:
-
这里的第二项怎么求:
-
- 算了两次都发现:两次计算的正向的式子都跟
DDPM是一样的,这也是合理的。
- 算了两次都发现:两次计算的正向的式子都跟
-
继续计算:
-
2)解决:
2.3 综合
-
条件采样可以变成: -
- 这里的z相当于是一个
normalize factor,正则化因子,让概率分布和为1。
- 这里的z相当于是一个
-
现在就需要两个模型,一个预测
,一个预测 :- 用
预测 - 用
预测 分类器
- 用
-
当在
t+1时刻,我们没有 ,此时DDPM还在求他,因此分类器项无法求得确切的值,因此无法通过准确的数学计算得到,只能通过预估得到。 -
处理方法:
- 对于DDPM项(高斯分布
):
- 对于DDPM项(高斯分布
-
- 对于分类器项:因为扩散模型的方差都很小(每次注入噪声很少,因此可以合理认为
, 在 ),我们把 当作一个变量的话,就可以在 处进行泰勒展开( 是梯度):
-
-
两项汇总:
-
-
因此
-
因此
,其中:
-
在DDPM中可以根据预测的噪声计算 - 是分类器的梯度(这也就是条件部分,条件就蕴含在分类器梯度里) - 对于分类器项:因为扩散模型的方差都很小(每次注入噪声很少,因此可以合理认为
3. 泛用采样
-
一个问题:对于偏移项
, 是采样方差,但是在比如DDIM等模型中, ,此时方法不适用了。 -
引入一个概念:分数(score)
-
对于一个分布
,其分数就是他的梯度: -
在DDPM中模型预测的是一个分布,在score based模型中他们认为扩散模型在预测score。
-
在DDPM中 -
- -
对于
的分数值:- 一个很巧的事:
- 上面倒数第一个等式和倒数第三个等式很像:
- 上面式子中
是抽样得到的,如果把他改成预测得到的噪声 就可以得到预测出的分数: - 而我们需要预测的分数是:
-
- 根据(3-1)可以知道分数:
- 因此:
- 因此这里只需要将DDPM预测出来的噪音做一个微小的偏移,然后就可以使用DDIM采样了。
- 一个很巧的事:
-
4. 采样算法
4.1 采样算法1


-
4.2 采样算法2


- 预测处噪声然后做一个偏移,然后用DDIM采样。
5. 分类器训练
- 训练数据与扩散模型相同
- 分类器训练的数据是有噪音的,强度随机。
6. classifier-free guidance
-
核心思想:用一个模型把条件的和非条件的放到一个模型里一起训练。
-
, 直接用右边的模型,然后采样的时候就看你加不加y;如果不加y,他也有一个非条件的生成方式。(他这个没有什么技术可言,完全就是让模型去硬学,原因是现在我们有大数据,大模型,更好的显卡,支持模型可以用这种简单粗暴的方式去训练)
-
-
从DDPM到classifier-free guidance的时候diffusion模型已经有了很多改变
- 比如这里时间采样的方式不再是离散的
1...T,变成了连续的一个随机变量 - 算法2的采样方式变成了某种方差的1-v次方再乘以之前的方差的v次方
-
变成了
- 比如这里时间采样的方式不再是离散的


-
- 从数据集拿出一张图片和对应的分类
- 以
的概率将类别变成空(用这种方式将条件和非条件放到一起训练,只是多了这一步而已) - 采样一个时间步
- 采样随机噪音
- 一步到位加噪得到


- 用加权的方式获得噪声:条件模型和非条件模型预测的结果做加权(当c取空时,预测的噪声就是非条件模型预测的噪声)