解析扩散模型:反向过程的奥秘是什么?

很早之前就新建了一个专栏从0开始弃坑扩散模型,但发了一篇文章就没有继续这一系列,在这个AIGC的时代,于是我准备重启这个专栏。
整个专栏的学习顺序可以见这篇汇总文章

这是本专栏的第三章

在这里插入图片描述

引言

在反向过程,模型会训练一个神经网络,例如(UNet)。UNet逆转每一步加噪声的操作,从而使纯噪声图像逐步恢复为数据集中的真实图像。
这里许多文章给了很麻烦的损失函数计算,给了很多劝退的步骤。我们学习扩散模型的目标不是改进扩散模型,而是使用扩散模型的结构,就算看懂了也没有必要,因为要去改进扩散模型,你就要去创建和研究更多的数学公式。这些人的文章对初学者造成了极大的负担!!!差评。
正向过程也称为扩散过程,反向过程是逆扩散过程。这里提一下,因为看很多人的文章讲法不一。

  • 训练时候正向反向都是有的,但只有反向才计算损失的。
  • 推理时候只有反向过程,在推理时候,就从标准正态分布中采样得到的任意噪声图像转换成与训练数据相似的图像,从而实现图像生成的目标。

概率角度

好了,步入正题。
我们从概率的角度来理解反向过程:扩散模型全称在前面提过和概率有关,所以前面的公式可以变成 q ( x t ∣ x t − 1 ) q(\mathbf{x}_{t} | \mathbf{x}_{t-1}) q(xtxt1),这就是一个条件概率,它的意思是说已知 x t − 1 x_{t-1} xt1求解 x t x_{t} xt的概率即正态分布,那么逆一下,反向过程的概率公式就是 q ( x t − 1 ∣ x t ) q(\mathbf{x}_{t-1} | \mathbf{x}_{t}) q(xt1xt),我们求的是这玩意,这里,聪明的别人已经想到了使用贝叶斯公式求解: q ( x t − 1 ∣ x t ) = q ( x t ∣ x t − 1 ) q ( x t − 1 ) q ( x t ) q(\mathbf{x}_{t-1} | \mathbf{x}_{t})=q(\mathbf{x}_{t} | \mathbf{x}_{t-1})\frac{q(\mathbf{x}_{t-1})}{q(\mathbf{x}_{t})} q(xt1xt)=q(xtxt1)q(xtq(xt1,然后等式两边同时引用 x 0 x_0 x0添加约束条件,这样这个贝叶斯公式就都有约束条件了。
q ( x t − 1 ∣ x t , x 0 ) = q ( x t ∣ x t − 1 , x 0 ) q ( x t − 1 ∣ x 0 ) q ( x t ∣ x 0 ) q(\mathbf{x}_{t-1} | \mathbf{x}_{t},\mathbf{x}_{0})=q(\mathbf{x}_{t} | \mathbf{x}_{t-1},\mathbf{x}_{0})\frac{q(\mathbf{x}_{t-1}|\mathbf{x}_{0})}{q(\mathbf{x}_{t}|\mathbf{x}_{0})} q(xt1xt,x0)=q(xtxt1,x0)q(xtx0)q(xt1x0),这个等式是否有道理?我们可以使用条件概率公式 q ( A ∣ B ) = q ( A , B ) q ( B ) q(\mathbf{A} | \mathbf{B})=\frac{q(\mathbf{A,B})}{q(\mathbf{B})} q(AB)=q(B)q(A,B)验证:
q ( x t ∣ x t − 1 , x 0 ) q ( x t − 1 ∣ , x 0 ) q ( x t ∣ , x 0 ) = q ( X t , X t − 1 , X 0 ) q ( X t − 1 , X 0 ) q ( X t − 1 , X 0 ) q ( X 0 ) q ( X t , X 0 ) q ( X 0 ) = q ( X t , X t − 1 , X 0 ) q ( X t , X 0 ) = q ( X t − 1 ∣ X t , X 0 ) q(\mathbf{x}_{t} | \mathbf{x}_{t-1},\mathbf{x}_{0})\frac{q(\mathbf{x}_{t-1}|,\mathbf{x}_{0})}{q(\mathbf{x}_{t}|,\mathbf{x}_{0})}\\=\frac{q(X_t , X_{t-1}, X_0)}{q(X_{t-1}, X_0)} \frac{\frac{q(X_{t-1} , X_0)}{q( X_0)}}{\frac{q(X_{t} , X_0)}{q( X_0)}} = \frac{q(X_t ,X_{t-1}, X_0)}{q(X_t , X_0)} = q(X_{t-1} | X_t, X_0) q(xtxt1,x0)q(xt,x0)q(xt1,x0)=q(Xt1,X0)q(Xt,Xt1,X0)q(X0)q(Xt,X0)q(X0)q(Xt1,X0)=q(Xt,X0)q(Xt,Xt1,X0)=q(Xt1Xt,X0)
其中已知的有

  • q ( x t ∣ x t − 1 , x 0 ) q(\mathbf{x}_{t} | \mathbf{x}_{t-1},\mathbf{x}_{0}) q(xtxt1,x0)这个公式表示已知 x t − 1 x_{t-1} xt1 x 0 x_{0} x0去计算 x t x_{t} xt,这里 x 0 x_0 x0的存在是为了解释后面,这里的计算用不到 x 0 x_0 x0的,上面正向过程提到有 x t − 1 x_{t-1} xt1就可以计算 x t x_{t} xt
  • q ( x t ∣ x 0 ) q(x_t|x_0) q(xtx0)的意思是已知 x 0 x_{0} x0去求 x t x_{t} xt,这个公式在前面通过不断迭代也是已知的。
  • q ( x t − 1 ∣ x 0 ) q(x_{t-1}|x_0) q(xt1x0)这个把上面的 x t x_{t} xt换成 x t − 1 x_{t-1} xt1,公式就又出来了
  • 此外,这里的概率和正态分布是可以联系起来的,举最简单的例子, q ( x t ∣ x 0 ) = N ( x t ; α ˉ t x 0 , 1 − α ˉ t I ) q(x_t|x_0)=\mathcal{N}(x_t;\sqrt{\bar{\alpha}_t}\mathbf{x}_{0}, 1-\bar{\alpha}_tI) q(xtx0)=N(xt;αˉt x0,1αˉtI),这里有 x t x_t xt说明是条件概率,有说明这个正态分布是和 x t x_t xt有关的,没有就说明这是一个没有啥关系的正态分布。此外等式的后面是标准差,所以表示成 N \mathcal{N} N后要平方成方差。
    通过这个就可以求解 q ( x t − 1 ∣ x t , x 0 ) q(\mathbf{x}_{t-1} | \mathbf{x}_{t},\mathbf{x}_{0}) q(xt1xt,x0),怎么推导没必要学。。。我们求解的这个是上一时刻的图像,注意这是图像,它肯定是一个正态分布,有自己的均值和方差,这都是可以计算出来的。
    别人求出来的结果是这样的:
    均值: μ ~ t = 1 α t ( x t − 1 − α t 1 − α ˉ t z t ) \tilde{\mu}_t = \frac{1}{\sqrt{\alpha_t}}(\mathbf{x}_t -\frac{1 - \alpha_t}{\sqrt{1-\bar{\alpha}_t}}z_t) μ~t=αt 1(xt1αˉt 1αtzt),方差: β ~ t = 1 − α ˉ t − 1 1 − α ˉ t ⋅ β t \tilde{\beta}_t=\frac{1-\bar{\alpha}_{t-1}}{1 - \bar{\alpha}_{t}} \cdot \beta_t β~t=1αˉt1αˉt1βt
    根据前面正向过程的内容, α ˉ t \bar{\alpha}_{t} αˉt等是实验设定的常数,所以方差是常数,可以计算。而均值呢, z t z_t zt是未知的,注意它不一定是正向过程里添加的标准正态分布的噪声。我们在训练时候自己知道是正向时候的噪声,但是在真实复原时候,我们是不知道这个噪声的,所以我们要去拟合出来。
    这个时候,这个问题就变成了:我们为了求这时候的图像,就要求出均值,进一步要求噪声。
    所以我们要去学习出这个噪声是什么,网络的训练目标就是让预测的噪声和真实噪声相似。学习到这个噪声是什么了,那么就能求出均值,求出图像了。
    我们设预测的噪声为 ϵ θ ( x t , t ) \epsilon_\theta(\mathbf{x}_{t}, t) ϵθ(xt,t),就是上面的z,其中 θ \theta θ是一个可学习参数, ϵ θ \epsilon_\theta ϵθ是一个神经网络,让它和生成 x t x_t xt的噪声 ϵ t \epsilon_t ϵt的均方误差最小就行了,最终的损失函数就是: L = ∣ ∣ ϵ t − ϵ θ ( x t , t ) ∣ ∣ 2 L=||\epsilon_t - \epsilon_\theta(\mathbf{x}_{t}, t)||^2 L=∣∣ϵtϵθ(xt,t)2
    得到了预测噪声,那么 x t − 1 = 1 α t ( x t − 1 − α t 1 − α t ε θ ( x t , t ) ) + σ t z x_{t-1} = \frac{1}{\sqrt{\alpha_t}} \left( x_t - \frac{1-\alpha_t}{\sqrt{1-\alpha_t}} \varepsilon_{\theta}(x_t, t) \right) + \sigma_t z xt1=αt 1(xt1αt 1αtεθ(xt,t))+σtz,z是标准正态分布。
  • 27
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 26
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

染念

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

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

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

打赏作者

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

抵扣说明:

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

余额充值