基于分数模型(Score Model)的classifier-guidance及classifier-free guidance的推导

基于分数模型(Score Model)的classifier-guidance及classifier-free guidance的推导

基于分数模型的 classifier-guidance 和 classifier-free guidance 方法都是用来指导生成模型生成更符合特定条件的数据点。分数模型是一种能够估计数据分布梯度的模型,在扩散模型中尤为常见。对于 classifier-guidance,我们利用一个预训练的分类器来评估生成样本的概率密度,并据此调整生成过程中的梯度方向,以引导模型生成更符合所期望类别的样本。而 classifier-free guidance 则是在不依赖外部分类器的情况下,通过让模型同时考虑条件输入和无条件输入的情况,动态地调整生成过程中的梯度方向,以达到同样的目的。这两种方法都是通过微调分数模型的梯度来实现对生成结果的控制,从而获得更高质量的生成样本。

前置知识

两种方法都是将非条件生成的模型 P ( x ) P(x) P(x)转变为条件生成模型 P ( x ∣ y ) P(x|y) P(xy)
例如,在DDPM中,我们的训练目标是利用已知的 x t , x 0 x_t,x_0 xt,x0来预测t-1时刻的噪声,即 P ( x t − 1 ∣ x t , x 0 ) P(x_{t-1}|x_t,x_0) P(xt1xt,x0),当我们想做文生图时,就需要加入额外的指令条件 y y y,上述的训练目标也就变成了 P ( x t − 1 ∣ x t , x 0 , y ) P(x_{t-1}|x_t,x_0,y) P(xt1xt,x0,y)
上述的概率表达式可以通过全概率公式的复杂操作推导出,但是过程比较复杂,这里我们直接引入分数的概念,利用分数模型的操作对两种方法进行推导,其中分数Score指的是 ∇ x log ⁡ P ( x ) \nabla x\log P(x) xlogP(x)

推导过程

将非条件生成的模型 P ( x ) P(x) P(x)转变为条件生成模型 P ( x ∣ y ) P(x|y) P(xy)后,现在的优化目标变为:

∇ x log ⁡ P ( x ∣ y ) = ∇ x log ⁡ P ( y ∣ x ) P ( x ) P ( y ) = ∇ x log ⁡ [ P ( y ∣ x ) P ( x ) ] − ∇ x log ⁡ P ( y ) = ∇ x log ⁡ P ( y ∣ x ) + ∇ x log ⁡ P ( x ) \begin{align*} \nabla x\log P(x|y) &= \nabla x\log \frac{P(y|x)P(x)}{P(y)} \\ &= \nabla x\log[P(y|x)P(x)]- \nabla x\log P(y)\\ &= \nabla x\log P(y|x) + \nabla x\log P(x) \end{align*} xlogP(xy)=xlogP(y)P(yx)P(x)=xlog[P(yx)P(x)]xlogP(y)=xlogP(yx)+xlogP(x)
其中, ∇ x log ⁡ P ( y ∣ x ) \nabla x\log P(y|x) xlogP(yx)代表已知图像x的情况下求其在指定标签y下的概率,其实就是分类器; ∇ x log ⁡ P ( x ) \nabla x\log P(x) xlogP(x)代表无条件生成模型的分数,这就是classifier-guidance的推导及通俗理解,也就是基于分类器的生成。这里还可以在条件生成的过程中利用系数 w w w来控制生成样本的质量和多样性:
w ∇ x log ⁡ P ( y ∣ x ) + ∇ x log ⁡ P ( x ) w\nabla x\log P(y|x) + \nabla x\log P(x) wxlogP(yx)+xlogP(x)
当增大 w w w时,生成样本会更符合我们预设的类别,质量目标更容易达成但是多样性会降低;反之,则会质量降低但是多样性更好
上述公式还可以进一步推导出classifier-free guidance
w ∇ x log ⁡ P ( x ∣ y ) = w ∇ x log ⁡ P ( y ∣ x ) + ∇ x log ⁡ P ( x ) = w ∇ x log ⁡ P ( x ∣ y ) P ( y ) P ( x ) + ∇ x log ⁡ P ( x ) = w ∇ x log ⁡ [ P ( x ∣ y ) − P ( x ) ] + ∇ x log ⁡ P ( x ) = w [ ∇ x log ⁡ P ( x ∣ y ) − ∇ x log ⁡ P ( x ) ] + ∇ x log ⁡ P ( x ) \begin{align*} w \nabla x\log P(x|y) &= w\nabla x\log P(y|x) + \nabla x\log P(x) \\ &=w \nabla x\log \frac{P(x|y)P(y)}{P(x)}+ \nabla x\log P(x)\\ &= w \nabla x\log [P(x|y)-P(x)]+ \nabla x\log P(x)\\ &=w [\nabla x\log P(x|y)-\nabla x\log P(x)]+\nabla x\log P(x) \end{align*} wxlogP(xy)=wxlogP(yx)+xlogP(x)=wxlogP(x)P(xy)P(y)+xlogP(x)=wxlog[P(xy)P(x)]+xlogP(x)=w[xlogP(xy)xlogP(x)]+xlogP(x)
可以看到,公式其实是由带条件的去噪模型 ∇ x log ⁡ P ( x ∣ y ) \nabla x\log P(x|y) xlogP(xy)和不带条件的去噪模型 ∇ x log ⁡ P ( x ) \nabla x\log P(x) xlogP(x)组成的,不带条件的模型可以设置为条件为空,所以两个模型可以统一为一个模型,这也是classifier-free guidance方法最终只训练一个共享模型的原因

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Marlowee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值