diffuser DDIM step计算流程

输入参数:当前时间步的采样x_t,时间步 t,模型预测量(取决于使用哪一种预测类型)

1、得到上一个去噪时间步

这里的上一个时间步是按照当前时间步的数值减去扩散时间步除以去噪时间步得到的间隔数

而输入的当前时间步是step的输入参数,是通过scheduler的time_spacing指定产生的一个数值从大到小的列表

2、得到\alpha _t\alpha _{t-1}\beta _t

3、计算预测值\hat{x_0}\hat{\epsilon }

这里有三种计算方式,与训练的模型的结果类型有关:

  • 模型直接预测\hat{x_0}

        \hat{\epsilon }=\frac{x_t-\sqrt{\alpha}\cdot\hat x_0 }{\sqrt{\beta}}

  • 模型直接预测\hat{\epsilon }

        \hat{x_0}=\frac{x_t-\sqrt{\beta}\cdot\hat \varepsilon }{\sqrt{\alpha}}

  • 模型预测速度 v

        \hat{x_0}= \sqrt{\alpha}\cdot x_t-\sqrt{\beta}\cdot v

        \hat{\epsilon }= \sqrt{\alpha}\cdot v+\sqrt{\beta}\cdot \hat x_t

4、对\hat{x_0}进行clip

5、计算方差\sigma _t

stddevt = \eta \cdot \sqrt{\sigma _t}

6、计算 "direction pointing to x_t"

也就是计算上式中的第二项,根号系数没什么可说的,后面乘上的就是与模型有关的 \hat{\epsilon }由上面步骤得到

7、计算前两项和

12式第一项括号中的部分在第三步得到,直接乘根号再与第二项相加即可

8、是否引入最后一项random noise

如果eta不为零

stddevt = \eta \cdot \sqrt{\sigma _t}该式不为零,即乘上一个噪声加到第7步结果上

step函数计算完毕

在训练时使用v_prediction要用get_v得到监督v值

训练过程中,通过在 0 到最大正向扩散步骤 T 之间进行随机采样加噪,不仅能够使模型学会对各种噪声水平进行准确的预测,还能确保在逆向过程中,无论处于哪一段噪声水平,模型都能有效地还原出干净数据。

正向扩散有闭合形式,直接指定t即可计算扩散后的样本x_t

速度v可视为x0与noise的线性组合,这种重新参数化使得目标函数从单纯去噪转化为了对“变化率”或“方向”的预测,这在一些实践中能够提升模型性能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值