系列文章目录
【论文精读】GAN:Generative Adversarial Nets 生成对抗网络
【论文精读】DDPM:Denoising Diffusion Probabilistic Models 去噪扩散概率模型
- Classifier Guidance: Diffusion Models Beat GANs on Image Synthesis
- Classifier-Free Guidance: Classifier-Free Diffusion Guidance
一、前言
(一)多元高斯分布
假设存在m个随机向量:
X
(
1
)
,
X
(
2
)
,
.
.
.
,
X
(
m
)
X^{(1)},X^{(2)},...,X^{(m)}
X(1),X(2),...,X(m),每个向量的元素个数都是
p
p
p。如果
X
(
i
)
X^{(i)}
X(i)是独立同分布的高斯向量,则有:
X
(
i
)
∼
N
p
(
μ
,
Σ
)
X^{(i)} \sim N_p(\mu,\Sigma)
X(i)∼Np(μ,Σ)
对应的对数似然函数为:
多元高斯分布协方差矩阵是对称矩阵,也是半正定矩阵,它的转置是它本身。
(二)生成式模型效果的评价
生成式模型的两大目标:Quality真实性,Diversity多样性
客观评测指标一:Inception Score(IS)
核心思想: 基于Inception-V3模型的分类概率来评估生成照片的质量
- p ( y ∣ x ) p(y|x) p(y∣x)是每个图片的所属类别的概率
- p ( y ) p(y) p(y)是对所有所属该类别的条件概率求平均而得
K L _ d i v e r g e n c e = p ( y ∣ x ) ∗ ( l o g ( p ( y ∣ x ) ) − l o g ( p ( y ) ) ) KL\_divergence = p(y|x)* (log(p(y|x))- log(p(y))) KL_divergence=p(y∣x)∗(log(p(y∣x))−log(p(y)))
- 对KL散度对所有类别求和再取平均值,并且取一个e指数,即可得到Inception Score
- 一般生成5000张照片,IS的值在0~1000范围内
- IS值越大越好:
- p ( y ∣ x ) p(y|x) p(y∣x)应该具有低熵即越真实
- p ( y ) p(y) p(y)应该具有高熵即越多样
缺点: 缺乏跟真实照片之间的比较;缺乏类内多样性,例如每个类别只产生一张一模一样的照片,IS一样很高
客观评测指标二:Frechlet Inception Distance(FID)
核心思想: 基于Inception-V3模型的feature vectors来计算真实图片与生成图片之间的距离,用高斯分布来表示,FID就是计算两个分布之间的Wasserstein-2距离
- 将真实图片和预测图片分别经过Inception模型中,得到2048维度的embedding vector
-
μ
1
\mu_1
μ1和
μ
2
\mu_2
μ2分别为均值,C1和C2为协方差,Tr为矩阵的迹,
d
2
d^2
d2即为FID值:
d 2 = ∣ ∣ μ 1 − μ 2 ∣ ∣ 2 + T r ( C 1 + C 2 − 2 ∗ C 1 ∗ C 2 ) d^2 =||\mu_1-\mu_2||^2+Tr(C_1+C_2-2*\sqrt{C_1*C 2)} d2=∣∣μ1−μ2∣∣2+Tr(C1+C2−2∗C1∗C2) - FID值越低,说明预测分布越接近于真实的分布
- FID可以评估类内多样性,比如每个类别只产生一张一模一样的照片,FID会比较高,也就意味着评估效果比较差
其他客观评测指标:Precision与Recall
红色区域代表生成图像的分布,蓝色区域代表真实图像的分布
二、相关背景
(一)扩散模型
- 扩散模型在图像生成领域受到了很多的关注,它的两大优势:①生成效果较好,保真度高;②生成图片的多样性明显高于其他生成模型。
- 但是在扩散模型提出初期,它的生成效果及保真度是没有GAN好的。直到Classifier Guidance: Diffusion Models Beat GANs on Image Synthesis的出现,使得扩散模型在图像生成领域成功击败了GAN模型。这个方法目前已经广泛应用在了DALLE、Stable Diffusion等图像生成的大模型当中,甚至已经开始使用Classifier-Free Guidance: Classifier-Free Diffusion Guidance。
(二)Classifier Guidance
Classifier-Guidance方案最早出自《Diffusion Models Beat GANs on Image Synthesis》,最初就是用来实现按类生成的;后来《More Control for Free! Image Synthesis with Semantic Diffusion Guidance》推广了“Classifier”的概念,使得它也可以按图、按文来生成。Classifier-Guidance方案的训练成本比较低,但是推断成本会高些,而且控制细节上通常没那么到位。
要做可控生成,即条件生成,首先想到我们可以拿类别来作为条件,比如要指定类别猫,就生成猫的图片。也就是说要给定类别 y y y,生成图片 x x x,即 P ( x ∣ y ) P(x|y) P(x∣y)。而一般分类器做的事情正好是反过来,给定图片,预测类别,即 P ( y ∣ x ) P(y|x) P(y∣x)。这刚好是一对逆条件概率,而贝叶斯公式就是处理这类逆概率问题的。推导如下:
- P ( y ) P(y) P(y)是某个类别的先验概率,是一个常数,其梯度为 0,故直接丢掉
- ∇ P ( x ) \nabla P(x) ∇P(x)实际就是 score-base model 中所谓的 score,score-based model 实际可以看作是 diffusion model 的另一种形式,具体可以参考【论文精读】Score-Based Generative Modeling Through Stochastic Differential Equations 通过随机微分方程进行基于分数的生成建模
- ∇ log P ( x ) \nabla\log P(x) ∇logP(x)是原本无条件生成的梯度
- ∇ P ( y ∣ x ) \nabla P(y|x) ∇P(y∣x)相当于是分类器进行图形分类的梯度
因此,我们只要在无条件生成的基础上,加上想要的类别的分类器梯度,作为引导(或者称为条件的梯度修正),就可以导出以类别作为条件的生成。
(三)Classifier-Free Guidance
Classifier-Free Guidance的思想是基于 Classifier Guidance的,它最早出自《Classifier-Free Diffusion Guidance》,后来的DALL·E 2、Imagen等吸引人眼球的模型基本上都是以它为基础做的,Classifier-Free方案本身没什么理论上的技巧,它是条件扩散模型最朴素的方案,出现得晚只是因为重新训练扩散模型的成本较大吧,在数据和算力都比较充裕的前提下,Classifier-Free方案变现出了令人惊叹的细节控制能力。
Classifier-Free Guidance 的核心思想:同时训练无条件生成模型和条件生成模型(实际上这俩是一个模型,只是训练时有概率输入是有条件的,有概率是无条件的),在推理时,同时 forward 带输入条件的生成和无条件的生成吗,然后把俩结果进行线性组合外推,得到最终的条件生成结果。
三、Classifier Guidance
核心思想:引入了一个分类器,通过分类器的这个梯度对采样方法进行一个偏移,从而得到更符合条件的图像。
(一)条件扩散过程
- 定义式一:训练样本不变
- 定义式二:训练样本都是有标签的
- 定义式三:加噪过程不变
- 定义式四:符合马尔可夫性质
在上述定义下,可以通过证明得到 q ^ \hat{q} q^的加噪条件分布、联合分布和边缘分布,在不加 y y y条件的情况下, q ^ \hat{q} q^和 q q q表现相同,并且可以进一步发现逆扩散条件分布也相同。
证明一: q ^ \hat{q} q^的加噪条件分布在不加 y y y条件的情况下与 q q q表现相同
证明二: q ^ \hat{q} q^的联合分布在不加 y y y条件的情况下与 q q q表现相同
证明三: q ^ \hat{q} q^的边缘分布在不加 y y y条件的情况下与 q q q表现相同
由于证明可以得到 q ^ ( x t ) = q ( x t ) \hat{q}(x_t)=q(x_t) q^(xt)=q(xt), q ^ ( x t + 1 ∣ x t ) = q ( x t + 1 ∣ x t ) \hat{q}(x_{t+1}|x_t)=q(x_{t+1}|x_t) q^(xt+1∣xt)=q(xt+1∣xt),进而可以根据贝叶斯公式得到逆过程中有 q ^ ( x t ∣ x t + 1 ) = q ( x t ∣ x t + 1 ) \hat{q}(x_t|x_{t+1})=q(x_t|x_{t+1}) q^(xt∣xt+1)=q(xt∣xt+1)。
证明四:任意时刻所属的类别与后面一个时刻没有关系
证明五:给定y的条件下,扩散过程 q ^ \hat{q} q^的逆条件概率分布
- q ^ ( y ∣ x t + 1 ) \hat{q}(y|x_{t+1}) q^(y∣xt+1)中由于 x t + 1 x_{t+1} xt+1和 y y y都是给定的条件,因此可以看做是一个常量,处理成 Z Z Z
- q ( x t ∣ x t + 1 ) q(x_t|x_{t+1}) q(xt∣xt+1)其实就是我们已经训练好的扩散过程 p θ ( x t ∣ x t + 1 ) p_{\theta}(x_t|x_{t+1}) pθ(xt∣xt+1)
- 还剩下 q ^ ( y ∣ x t ) \hat{q}(y|x_t) q^(y∣xt)未知,因此需要训练一个分类器网络 p ϕ ( y ∣ x t ) p_\phi(y|x_t) pϕ(y∣xt)。
最终即为:
q
^
(
x
t
∣
x
t
+
1
,
y
)
=
p
θ
,
ϕ
(
x
t
∣
x
t
+
1
,
y
)
=
Z
p
θ
(
x
t
∣
x
t
+
1
)
p
ϕ
(
y
∣
x
t
)
\hat{q}(x_t|x_{t+1},y)=p_{\theta,\phi}(x_t|x_{t+1},y)=Zp_{\theta}(x_t|x_{t+1})p_{\phi}(y|x_t)
q^(xt∣xt+1,y)=pθ,ϕ(xt∣xt+1,y)=Zpθ(xt∣xt+1)pϕ(y∣xt)
(二)逆条件扩散过程:DDPM采样过程
根据前面的证明,可以得到:(其中
p
θ
(
x
t
∣
x
t
+
1
)
p_θ(x_t|x_{t+1})
pθ(xt∣xt+1)为DDPM,
p
φ
(
y
∣
x
t
)
p_φ(y|x_t)
pφ(y∣xt)是一个分类器)
p
θ
,
ϕ
(
x
t
∣
x
t
+
1
,
y
)
=
Z
p
θ
(
x
t
∣
x
t
+
1
)
p
ϕ
(
y
∣
x
t
)
p_{\theta,\phi}(x_t|x_{t+1},y)=Zp_{\theta}(x_t|x_{t+1})p_{\phi}(y|x_t)
pθ,ϕ(xt∣xt+1,y)=Zpθ(xt∣xt+1)pϕ(y∣xt)
p
θ
(
x
t
∣
x
t
+
1
)
p_{\theta}(x_t|x_{t+1})
pθ(xt∣xt+1)服从高斯分布
N
(
µ
,
Σ
)
N (µ, Σ)
N(µ,Σ),添加log并展开得到:
由于当前时刻为
t
+
1
t+1
t+1,无法求
p
φ
(
y
∣
x
t
)
p_φ(y|x_t)
pφ(y∣xt),只能进行估计,因为ddpm中的
Σ
Σ
Σ很小,可以使用
x
t
=
µ
x_t =µ
xt=µ的泰勒展开来近似
l
o
g
p
φ
(
y
∣
x
t
)
logp_φ(y|x_t)
logpφ(y∣xt):
于是进一步就有:
结论:
q
^
(
x
t
∣
x
t
+
1
,
y
)
\hat{q}(x_t |x_{t + 1}, y)
q^(xt∣xt+1,y)变成了服从
N
(
µ
+
Σ
g
,
Σ
)
N(µ + Σg, Σ)
N(µ+Σg,Σ)的高斯分布,
μ
μ
μ和
Σ
Σ
Σ可以直接使用DDPM的求法,
g
g
g是分类器的梯度,将分类器的梯度引入采样过程指导类别生成,只需要采样时均值进行一个平移,就可以得到条件扩散,代入DDPM的前向和反向过程就得到了算法1,s为guidance scale,用于控制多样性和类别控制的比例。
(三)逆条件扩散过程:DDIM采样过程
上述条件抽样的推导只适用于随机扩散抽样过程,不能应用于DDIM等确定性抽样方法。为此,使用了来自Song等人的基于分数的条件反射技巧,该技巧利用了扩散模型和分数匹配之间的联系。特别是,如果我们有一个模型图片来预测添加到样本中的噪声,那么可以使用它来推导分数函数:
把它代入
p
(
x
t
)
p
(
y
∣
x
t
)
p(x_t)p(y|x_t)
p(xt)p(y∣xt)的分数函数:
最后,我们可以定义一个新的
ε
\varepsilon
ε预测,它对应于联合分布的分数:
然后,我们可以使用与常规DDIM完全相同的采样过程,但使用修改后的噪声预测图片而不是图片。算法2总结了相应的采样算法。s为guidance scale,用于控制多样性和类别控制的比例。
四、Classifier-Free Guidance
Classifier-Free Guidance的总体思想比较简单,不使用分类器,直接使用模型去学习条件。
初步定义:
沿用前面 DDPM 的几篇文章的结果,
μ
(
x
t
,
y
)
\mu(x_t,y)
μ(xt,y) 一般参数化为:
训练的损失函数就是:
训练算法:
- 给定一个概率,比如0.5
- 根据概率决定是否加入条件
- 然后迭代扩散模型
- 和条件gan一样,条件加入可以是隐式的也可以是显式的
采样过程:
- 给w作为条件因子比例,c作为条件信息
- 然后迭代生成结果
五、对比分析
(一)Classifier Guidance 与 Classifier-Free Guidance的联系
从方法上来看,条件控制生成的方式分两种:事后修改(Classifier-Guidance)和事前训练(Classifier-Free)。
Classifier-Free 方案相当于直接用模型拟合了Classifier Guidance逆扩散过程的 μ ( x t ) + σ t 2 ∇ x t l o g p ( y ∣ x t ) \mu(x_t)+\sigma_t^2\nabla_{x_t}logp(y|x_t) μ(xt)+σt2∇xtlogp(y∣xt)。
(二)Classifier Guidance 与 Classifier-Free Guidance的区别
对于大多数人来说,一个SOTA级别的扩散模型训练成本太大了,而分类器(Classifier)的训练还能接受,所以就想着直接复用别人训练好的无条件扩散模型,用一个分类器来调整生成过程以实现控制生成,这就是事后修改的Classifier-Guidance方案;而对于“财大气粗”的Google、OpenAI等公司来说,它们不缺数据和算力,所以更倾向于往扩散模型的训练过程中就加入条件信号,达到更好的生成效果,这就是事前训练的Classifier-Free方案。
参考:
66、Classifier Guided Diffusion条件扩散模型论文与PyTorch代码详细解读
Classifier Guidance 与 Classifier-Free Guidance
扩散模型:条件生成classifier guidance,classifier-free guidance
生成扩散模型漫谈:条件控制生成结果