从生成手段上看,条件控制生成有两种:事后修改 (Classifier-Guidance) 和事前训练 (Classifier-Free)。
利用已经训练好的生成模型,通过一个分类器来调控生成过程,这就是事后修改的方法,因为从头到位训练一个生成模型训练成本太大了。而对于大公司来说,不缺算力,所以一般采用的是在训练过程中加入训练信号,达到更好 的训练生成效果,这就是 Classifier-Free 方案。
条件输入
生成模型最关键的就是对于 p(xt−1∣xt) 的建模,而条件生成就是以条件 y 作为条件输入,而这时的条件概率分布就可以写为 p(xt−1∣xt,y)。为了重用已经训练好的无条件生成模型 p(xt−1,xt),我们利用贝叶斯定理:
p(xt−1∣y)=p(y)p(xt−1)p(y∣xt−1)
补上 xt 条件:
p(xt−1∣xt,y)=p(y∣xt)p(xt−1∣xt)p(y∣xt−1,xt)
注意到 xt 是 xt−1 加噪声得到的,我们假定对条件概率 p(y∣xt−1) 添加条件 xt 是不影响分类结果的,即 p(y∣xt−1,xt)=p(y∣xt−1)。从而
p(xt−1∣xt,y)=p(y∣xt)p(xt−1∣xt)p(y∣xt−1)=p(xt−1∣xt)elogp(y∣xt−1)−logp(y∣xt)
近似分布
我们利用泰勒展开近似的求解差值:
logp(y∣xt−1)−logp(y∣xt)≈(xt−1−xt)⋅∇xtlogp(y∣xt)
而对于条件概率分布 p(xt−1∣xt) 有:
p(xt−1∣xt)=N(xt−1;μ(xt),σt2I)∝e−∥xt−1−μ(xt)∥2/2σt2
于是我们可以进一步得到
p(xt−1∣xt,y)∝e−∥xt−1−μ(xt)∥2/2σt2+(xt−1−xt)⋅∇xtlogp(y∣xt)∝e−∥xt−1−μ(xt)−σt2∇xtlogp(y∣xt))∥2/2σt2
所以 p(xt−1∣xt,y) 可以近似为 N(xt−1;μ(xt)+σt2∇xtlogp(y∣xt),σt2I)
xt−1=μ(xt)+新增项 σt2∇xtlogp(y∣xt)+σtε,ε∼N(0,I)