由于基于 diffusion 的图像生成模型多样性过高(不可控,而且容易出现很多真实性很差的图片,FID 指标太高),可能的一种解决办法就是 conditional generation,即将 $$p(x)\rightarrow p(x|y)$$,让一个 DDPM 变为一个 conditional DDPM。
条件生成模型是只指在条件 y(condition)下,根据条件生成内容 x,概率表示为 p(x∣y),
Classifier Guidance
注意我们对 guidance 的要求是:
- 不影响训练过程,即我们只在采样过程做文章
- 尝试用一种高效的方法进行指导采样,而不是最后接一个简单的分类器,让模型生成很多图片最终选一个最好的图片
我们用 q^ 表述加入条件的采样过程,注意我们不改变前向过程(不改变 p,也就没有 p^),则我们需要对采样过程修改:
q(xt−1∣xt)→q^(xt−1∣xt,y)=q^(y∣xt)q^(xt−1∣xt)q^(y∣xt−1,xt)
看上去我们三个概率值都不知道,无法进行下一步求解。但是注意我们需要的是一个 training-free 的模型,我们规定:
q^(xt+1∣xt,y)=q(xt+1∣xt)q^(x0)=q(x0)q^(x1:T∣x0,y)=t=1∏Tq(xt∣xt−1,y)
新的采样方式是:
q^(xt−1∣xt)=q^(xt∣xt−1)====q^(xt)q^(xt∣xt−1)q^(xt−1)∫yq^(xt,y∣xt−1)dy∫yq^(xt∣xt−1,y)q^(y∣xt−1)dyq(xt∣xt−1)∫yq^(y∣xt−1)dyq(xt∣xt−1)
接下来求 q^(xt):
q^(xt)==q^(x1:t∣x0)====∫x0:t−1q^(x0:t)dx0:t−1∫x0:t−1q^(x0)q^(x1:t∣x0)dx0:t−1∫yq^(x1:t,y∣x0)dy=∫yq^(y∣x0)q^(x1:t∣x0,y)dy∫yq^(y∣x0)i=1∏tq^(xt∣xt−1,y)dy∫yq^(y∣x0)i=1∏tq(xt∣xt−1)dy∫yq^(y∣x0)q(x1:t∣x0)dy=q(x1:t∣x0)
很神奇 q^(x1:t∣x0)=q(x1:t∣x0),那么接下来:
q^(xt)===∫x0:t−1q^(x0)q^(x1:t∣x0)dx0:t−1∫x0:t−1q(x0)q(x1:t∣x0)dx0:t−1∫x0:t−1q(x0:t)dx0:t−1=q(xt)
最后:
q^(y∣xt−1,xt)===q^(xt∣xt−1)q^(xt∣xt−1,y)q^(y∣xt−1)q^(xt∣xt−1)q^(xt∣xt−1)q^(y∣xt−1)q^(y∣xt−1)
则最终的优化终极目标:
q^(xt−1∣xt,y)=q^(y∣xt)q^(xt−1∣xt)q^(y∣xt−1,xt)=C×q(xt−1∣xt)×q^(y∣xt−1)
其中 C=1/q^(y∣xt−1) 是一个归一化常数,重点的采样是在 q(xt−1∣xt) 和 q^(y∣xt−1) 部分,其中 q(xt−1∣xt) 就是 DDPM 部分的逆向采样, q^(y∣xt−1) 部分就是一个分类器,因此如果需要模型预测两个部分,一个模型就是 DDPM,预测 qθ(xt−1∣xt),另一个模型需要一个分类器,预测 $$
Classifier Free Guidance
论文链接:Classifier-Free Diffusion Guidance