文章目录
- 前言
- 推导流程
- 训练流程
- 测试流程
前言
在上一节中,我们总结了Classifier Guidance Diffusion,其有两个弊端,一是需要额外训练一个分类头,引入了额外的训练开销。二是要噪声图像通常难以分类,分类头通常难以学习,影响生成图像的质量。
Classifier Free Guidance Diffusion解决了上述两个弊端,不需要引入额外的分类头即可控制图像的生成。
本节所有符号含义与前文一致,请读者阅读完前三篇博文后在查阅此文。
本文仅总结backbone为DDIM情况下的Classifier Free Guidance Diffusion
推导流程
依据前文可知Classifier Guidance Diffusion的前向过程与反向过程与DDPM一致,且有
q
(
x
t
∣
x
t
−
1
,
y
)
=
q
(
x
t
∣
x
t
−
1
)
q(x_t|x_{t-1},y)=q(x_t|x_{t-1})
q(xt∣xt−1,y)=q(xt∣xt−1)
则有 q ( x t ∣ x 0 , y ) = q ( x t ∣ x 0 ) = N ( x t ; α ˉ t x 0 , ( 1 − α ˉ t ) I ) q(x_t|x_{0},y)=q(x_t|x_0)=\mathcal N(x_t;\sqrt{\bar \alpha_t}x_0,(1-\bar\alpha_t)\mathcal I) q(xt∣x0,y)=q(xt∣x0)=N(xt;αˉtx0,(1−αˉt)I)
假设目前有一批基于条件
y
y
y的样本
x
t
x_t
xt,
ϵ
(
x
t
,
t
,
y
)
\epsilon(x_t,t,y)
ϵ(xt,t,y)服从标准正态分布,则样本
x
t
x_t
xt将满足
x
t
=
α
ˉ
t
x
0
+
1
−
α
ˉ
t
ϵ
(
x
t
,
t
,
y
)
(1.0)
x_t=\sqrt{\bar \alpha_t}x_0+\sqrt{1-\bar\alpha_t}\epsilon(x_t,t,y)\tag{1.0}
xt=αˉtx0+1−αˉtϵ(xt,t,y)(1.0)
依据Tweedie方法,我们有
α
ˉ
t
x
0
=
x
t
+
(
1
−
α
ˉ
t
)
∇
x
t
log
p
(
x
t
∣
y
)
\begin{aligned} \sqrt{\bar \alpha_t}x_0=x_t+(1-\bar\alpha_t)\nabla_{x_t}\log p(x_t|y) \end{aligned}
αˉtx0=xt+(1−αˉt)∇xtlogp(xt∣y)
进而有
x
t
=
α
ˉ
t
x
0
−
(
1
−
α
ˉ
t
)
∇
x
t
log
p
(
x
t
∣
y
)
(1.1)
x_t=\sqrt{\bar \alpha_t}x_0-(1-\bar\alpha_t)\nabla_{x_t}\log p(x_t|y)\tag{1.1}
xt=αˉtx0−(1−αˉt)∇xtlogp(xt∣y)(1.1)
结合式1.0与1.1,则有
∇ x t log p ( x t ∣ y ) = − 1 1 − α ˉ t ϵ ( x t , t , y ) (1.2) \nabla_{x_t}\log p(x_t|y)=-\frac{1}{\sqrt{1-\bar\alpha_t}}\epsilon(x_t,t,y)\tag{1.2} ∇xtlogp(xt∣y)=−1−αˉt1ϵ(xt,t,y)(1.2)
依据贝叶斯公式,我们有
log
p
(
x
t
∣
y
)
=
log
p
(
y
∣
x
t
)
+
log
p
(
x
t
)
−
log
p
(
y
)
∇
x
t
log
p
(
y
∣
x
t
)
=
∇
x
t
log
p
(
x
t
∣
y
)
−
∇
x
t
log
p
(
x
t
)
+
∇
x
t
log
p
(
y
)
=
∇
x
t
log
p
(
x
t
∣
y
)
−
∇
x
t
log
p
(
x
t
)
=
−
1
1
−
α
ˉ
t
ϵ
(
x
t
,
t
,
y
)
+
1
1
−
α
ˉ
t
ϵ
(
x
t
,
t
)
(1.3)
\begin{aligned} \log p(x_t|y)&=\log p(y|x_t)+\log p(x_t)-\log p(y)\\ \nabla_{x_t}\log p(y|x_t)&=\nabla_{x_t}\log p(x_t|y)-\nabla_{x_t}\log p(x_t)+\nabla_{x_t}\log p(y)\\ &=\nabla_{x_t}\log p(x_t|y)-\nabla_{x_t}\log p(x_t)\\ &=-\frac{1}{\sqrt{1-\bar\alpha_t}}\epsilon(x_t,t,y)+\frac{1}{\sqrt{1-\bar\alpha_t}}\epsilon(x_t,t) \end{aligned}\tag{1.3}
logp(xt∣y)∇xtlogp(y∣xt)=logp(y∣xt)+logp(xt)−logp(y)=∇xtlogp(xt∣y)−∇xtlogp(xt)+∇xtlogp(y)=∇xtlogp(xt∣y)−∇xtlogp(xt)=−1−αˉt1ϵ(xt,t,y)+1−αˉt1ϵ(xt,t)(1.3)
回顾一下backbone为DDIM的Classifier Guidance Diffusion的采样流程
将式1.3代入,且引入一个超参数
w
w
w,可得
ϵ
^
=
ϵ
θ
(
x
t
)
−
w
1
−
α
ˉ
t
∇
x
t
log
p
(
y
∣
x
t
)
=
ϵ
θ
(
x
t
)
−
w
(
ϵ
θ
(
x
t
,
t
)
−
ϵ
θ
(
x
t
,
t
,
y
)
)
=
(
1
−
w
)
ϵ
θ
(
x
t
,
t
)
+
w
ϵ
θ
(
x
t
,
t
,
y
)
(1.4)
\begin{aligned} \hat \epsilon &= \epsilon_\theta(x_t)-w\sqrt{1-\bar\alpha_t}\nabla_{x_t}\log p(y|x_t)\\ &=\epsilon_\theta(x_t)-w(\epsilon_\theta(x_t,t)-\epsilon_\theta(x_t,t,y))\\ &=(1-w)\epsilon_\theta(x_t,t)+w\epsilon_\theta(x_t,t,y) \end{aligned}\tag{1.4}
ϵ^=ϵθ(xt)−w1−αˉt∇xtlogp(y∣xt)=ϵθ(xt)−w(ϵθ(xt,t)−ϵθ(xt,t,y))=(1−w)ϵθ(xt,t)+wϵθ(xt,t,y)(1.4)
注意到原论文的推导结果为(为了区分,超参数设为 w ^ \hat w w^)
ϵ ^ = ( 1 + w ^ ) ϵ θ ( x t , t , y ) − w ^ ϵ θ ( x t , t ) (1.5) \hat \epsilon = (1+\hat w)\epsilon_\theta(x_t,t,y)-\hat w\epsilon_\theta(x_t,t)\tag{1.5} ϵ^=(1+w^)ϵθ(xt,t,y)−w^ϵθ(xt,t)(1.5)
式1.5和1.4是一致的,均为 ϵ θ ( x t , t , y ) \epsilon_\theta(x_t,t,y) ϵθ(xt,t,y)与 ϵ θ ( x t , t ) \epsilon_\theta(x_t,t) ϵθ(xt,t)的加权和,且权重和为1。
训练流程
依据式1.5,我们需要训练两个神经网络 ϵ θ ( x t , t , y ) \epsilon_\theta(x_t,t,y) ϵθ(xt,t,y)与 ϵ θ ( x t , t ) \epsilon_\theta(x_t,t) ϵθ(xt,t),前者为的输入包含加噪图片 x t x_t xt以及条件 y y y(图像or文字),后者的输入仅包含加噪图像 x t x_t xt。但其实两个神经网络可以共用一个backbone,在训练时,只需要用一定的概率将条件 y y y设置为空即可。
测试流程
Classifier Free Guidance Diffusion的测试流程有两次推断
- 将条件 y y y空置,得到 ϵ θ ( x t , t ) \epsilon_\theta(x_t,t) ϵθ(xt,t)
- 输入条件 y y y,得到 ϵ θ ( x t , t , y ) \epsilon_\theta(x_t,t,y) ϵθ(xt,t,y)
- 利用公式1.5,生成基于条件 y y y的图像
可以看到推断成本多了一倍。