Classifier guidance与Classifier-free guidance的原理和公式推导
(Double童发发——学习笔记二)Classifier guidance与Classifier-free guidance的原理和公式推导
文章目录
- (Double童发发——学习笔记二)Classifier guidance与Classifier-free guidance的原理和公式推导
- 1. 原理
- 2. 代码
- 参考
1. 原理
Classifier Guidance与Classifier-Free Guidance方法的目标是一样的,即把一个非条件生成模型变成一个条件生成模型:
P(x)→P(x∣y)P(x)\rightarrow P(x|y)P(x)→P(x∣y)
比如,在DDPM中的逆向过程为:
q(xt−1∣xt,x0)=N(xt−1;μ~t(xt,x0),β~tI),whereμ~t(xt,x0):=αˉt−1βt1−αˉtx0+αt(1−αˉt−1)1−αˉtxtandβ~t:=1−αˉt−11−αˉtβt\begin{aligned}q(\mathbf{x}_{t-1}|\mathbf{x}_t,\mathbf{x}_0)&=\mathcal{N}(\mathbf{x}_{t-1};\tilde{\boldsymbol{\mu}}_{t}(\mathbf{x}_{t},\mathbf{x}_{0}),\tilde{\beta}_{t}\mathbf{I}),\\\mathrm{where}\quad\tilde{\mu}_{t}(\mathbf{x}_{t},\mathbf{x}_{0})&:=\frac{\sqrt{\bar{\alpha}_{t-1}}\beta_t}{1-\bar{\alpha}_t}\mathbf{x}_0+\frac{\sqrt{\alpha_t}(1-\bar{\alpha}_{t-1})}{1-\bar{\alpha}_t}\mathbf{x}_t\quad\mathrm{and}\quad\tilde{\beta}_t:=\frac{1-\bar{\alpha}_{t-1}}{1-\bar{\alpha}_t}\beta_t\end{aligned}q(xt−1∣xt,x0)whereμ~t(xt,x0)=N(xt−1;μ~t(xt,x0),β~tI),:=1−αˉtαˉt−1βtx0+1−αˉtαt(1−αˉt−1)xtandβ~t:=1−αˉt1−αˉt−1βt
如果我们加上一个条件yyy,如文本,做文生图任务:
q(xt−1∣xt,x0,y)q(x_{t-1}|x_{t},x_{0},y)q(xt−1∣xt,x0,y)
这个过程可以用贝叶斯公式,全概率公式等等进行推导,但是比较复杂。可以通过score function直观地解释(因为score和ϵ\epsilonϵ的等价关系,可见论文Understanding Diffusion Models: A Unified Perspective),用贝叶斯定理将条件生成概率进行对数分解:
这就是Classifier Guidance。从上式可以看到,Classifier Guidance条件生成只需额外添加一个classifier的梯度来引导。从成本上看,Classifier Guidance 需要训练噪声数据版本的classifier网络,推理时每一步都需要额外计算classifier的梯度。
Diffusion Models Beat GANs on Image Synthesis通过详细的数学推导,总结DDPM和DDIM对应的classifier guidance diffusion算法如下:
我们通常会在这个classifier的梯度前加上一个权重系数 ω\omegaω 来调控这个分类器对整个生成过程的影响,也就是说这个 ω\omegaω 的值越大,生成结果与条件yyy更符合,但是生成图像的多样性就会下降;相反,如果取一个更小的 ω\omegaω 的值,就会导致生成的结果与条件yyy的偏离性更大,但是多样性更丰富。接着上面推导Classifier-Free Guidance:
Classifier-Free Guidance中需要训练两个模型,第一个就是带条件的模型预测带条件的噪声,还需要一个模型预测不带条件的噪声(这里替换回了ϵ\epsilonϵ),这是不需要分类器的代价。但实际上,这两个模型共用一套参数,在训练时,50%的概率将y→ϕy\rightarrow\phiy→ϕ。通过这种方式可以同时训练一个参数θ\thetaθ,同时实现条件生成和非条件生成。
严谨的公式推导可以看知乎的文章:
Classifier-Free Guidance的核心是通过一个隐式分类器来替代显示分类器,而无需直接计算显式分类器及其梯度。根据贝叶斯公式,分类器的梯度可以用条件生成概率和无条件生成概率表示:
把上面的分类器梯度代入到Classifier Guidance的分类器梯度中可得:
由上可知,新的生成过程不再依赖显示的classifier,因而解决了Classifier Guidance的问题。
总的来说,训练时,Classifier-Free Guidance需要训练两个模型,一个是无条件生成模型,另一个是条件生成模型。但这两个模型可以用同一个模型表示,训练时只需要以一定概率将条件置空即可。
推理时,最终结果可以由条件生成和无条件生成的线性外推获得,生成效果可以引导系数可以调节,控制生成样本的逼真性和多样性的平衡。
2. 代码
if self.do_classifier_free_guidance:noise_pred_uncond, noise_pred_text = noise_pred.chunk(2)noise_pred = noise_pred_uncond + self.guidance_scale *(noise_pred_text - noise_pred_uncond) #这个公式就是上面我们推导出来的公式
参考
【AI知识分享】十分钟速通扩散模型中Classifier guidance与Classifier-free guidance的原理和公式推导_哔哩哔哩_bilibili
通俗理解Classifier Guidance 和 Classifier-Free Guidance 的扩散模型 - 知乎