论文笔记(六十三)Understanding Diffusion Models: A Unified Perspective(六)(完结)

Understanding Diffusion Models: A Unified Perspective(六)(完结)

文章概括

引用:

bash 复制代码
@article{luo2022understanding,
  title={Understanding diffusion models: A unified perspective},
  author={Luo, Calvin},
  journal={arXiv preprint arXiv:2208.11970},
  year={2022}
}
markup 复制代码
Luo, C., 2022. Understanding diffusion models: A unified perspective. arXiv preprint arXiv:2208.11970.

原文: https://arxiv.org/abs/2208.11970
代码、数据和视频: https://arxiv.org/abs/2208.11970

系列文章:

请在 《 《 《文章 》 》 》 专栏中查找

指导(Guidance)

到目前为止,我们专注于仅对数据分布 p ( x ) p(x) p(x)进行建模。然而,我们通常还对学习条件分布 p ( x ∣ y ) p(x|y) p(x∣y)感兴趣,这将使我们能够通过条件信息 y y y明确控制生成的数据。这构成了图像超分辨率模型(如级联扩散模型[Cascaded Diffusion Models][18])的基础,同时也是图像-文本模型(如DALL-E 2[19]和Imagen[7])的前沿技术。

一种自然的方式是简单地在每次迭代中将条件信息与时间步信息一起添加。回忆公式32中的联合分布:

p ( x 0 : T ) = p ( x T ) ∏ t = 1 T p θ ( x t − 1 ∣ x t ) p(x_{0:T}) = p(x_T) \prod_{t=1}^T p_\theta(x_{t-1}|x_t) p(x0:T)=p(xT)t=1∏Tpθ(xt−1∣xt)

然后,为了将其转化为一个条件扩散模型,我们可以在每个转换步骤中简单地添加任意条件信息 y y y,表示为:

p ( x 0 : T ∣ y ) = p ( x T ) ∏ t = 1 T p θ ( x t − 1 ∣ x t , y ) p(x_{0:T}|y) = p(x_T) \prod_{t=1}^T p_\theta(x_{t-1}|x_t, y) p(x0:T∣y)=p(xT)t=1∏Tpθ(xt−1∣xt,y)

例如, y y y可以是在图像-文本生成中的文本编码,也可以是用于执行超分辨率的低分辨率图像。因此,我们可以像之前一样,通过预测 x ^ θ ( x t , t , y ) ≈ x 0 \hat{x}\theta(x_t,t,y) \approx x_0 x^θ(xt,t,y)≈x0、 ϵ ^ θ ( x t , t , y ) ≈ ϵ 0 \hat{\epsilon}\theta(x_t,t,y) \approx \epsilon_0 ϵ^θ(xt,t,y)≈ϵ0或 s θ ( x t , t , y ) ≈ ∇ log ⁡ p ( x t ∣ y ) s_\theta(x_t,t,y) \approx \nabla \log p(x_t|y) sθ(xt,t,y)≈∇logp(xt∣y),学习VDM的核心神经网络,以实现每种所需的解释和实现。

这种基础公式的一个警告是,通过这种方式训练的条件扩散模型可能会倾向于忽略或弱化任何给定的条件信息。因此,提出了指导(Guidance)作为一种更明确控制模型对条件信息权重的方法,但代价是样本多样性的降低。两种最流行的指导形式被称为分类器指导(Classifier Guidance)[10, 20]和无分类器指导(Classifier-Free Guidance)[21]。

这段内容主要讲解了如何将扩散模型从无条件生成(直接建模数据分布 p ( x ) p(x) p(x))扩展到条件生成(建模条件分布 p ( x ∣ y ) p(x|y) p(x∣y)),并提到了一种潜在的问题,即条件信息 y y y在训练过程中可能被模型忽略或弱化。


1. 从无条件生成到条件生成

1.1 无条件生成建模 扩散模型在无条件生成建模中专注于直接建模数据分布 p ( x ) p(x) p(x)。联合分布形式(回忆公式 32): p ( x 0 : T ) = p ( x T ) ∏ t = 1 T p θ ( x t − 1 ∣ x t ) . p(x_{0:T}) = p(x_T) \prod_{t=1}^T p_\theta(x_{t-1} | x_t). p(x0:T)=p(xT)t=1∏Tpθ(xt−1∣xt).

  1. x 0 : T x_{0:T} x0:T:表示数据从初始噪声 x T x_T xT 到去噪还原 x 0 x_0 x0 的一系列中间步骤。
  2. p θ ( x t − 1 ∣ x t ) p_\theta(x_{t-1} | x_t) pθ(xt−1∣xt):表示从时间 t t t 的噪声分布 x t x_t xt 逐步还原到 t − 1 t-1 t−1 的噪声分布 x t − 1 x_{t-1} xt−1。
  3. p ( x T ) p(x_T) p(xT):初始噪声的分布,通常为标准高斯分布。

1.2 条件生成建模 我们希望生成样本不仅符合 p ( x ) p(x) p(x),还能够通过条件信息 y y y 控制生成过程,即建模条件分布 p ( x ∣ y ) p(x|y) p(x∣y)。 为了实现条件生成,只需在无条件模型的每个步骤中添加条件信息 y y y:
p ( x 0 : T ∣ y ) = p ( x T ) ∏ t = 1 T p θ ( x t − 1 ∣ x t , y ) . p(x_{0:T} | y) = p(x_T) \prod_{t=1}^T p_\theta(x_{t-1} | x_t, y). p(x0:T∣y)=p(xT)t=1∏Tpθ(xt−1∣xt,y).

公式含义

  1. p ( x T ) p(x_T) p(xT):与无条件模型相同,初始噪声的分布仍然为标准高斯分布。
  2. p θ ( x t − 1 ∣ x t , y ) p_\theta(x_{t-1} | x_t, y) pθ(xt−1∣xt,y):条件扩散模型的核心,用于学习在给定条件 y y y 下从 x t x_t xt 转换到 x t − 1 x_{t-1} xt−1 的概率。

如何引入条件信息 y y y 条件信息 y y y 的形式是任意的,比如:

  • 在图像-文本生成任务中, y y y 是文本编码。
  • 在图像超分辨率任务中, y y y 是低分辨率图像。

模型通过神经网络参数化 p θ ( x t − 1 ∣ x t , y ) p_\theta(x_{t-1} | x_t, y) pθ(xt−1∣xt,y),可以在每次迭代中引入 y y y,如:

  1. 预测 x ^ θ ( x t , t , y ) ≈ x 0 \hat{x}_\theta(x_t, t, y) \approx x_0 x^θ(xt,t,y)≈x0:从条件 y y y 中还原出原始数据 x 0 x_0 x0。
  2. 预测 ϵ ^ θ ( x t , t , y ) ≈ ϵ 0 \hat{\epsilon}_\theta(x_t, t, y) \approx \epsilon_0 ϵ^θ(xt,t,y)≈ϵ0:预测初始噪声。
  3. 预测 s θ ( x t , t , y ) ≈ ∇ log ⁡ p ( x t ∣ y ) s_\theta(x_t, t, y) \approx \nabla \log p(x_t | y) sθ(xt,t,y)≈∇logp(xt∣y):学习条件得分函数。

2. 条件扩散模型忽略条件信息的问题

2.1 问题来源 条件扩散模型的训练目标类似于无条件模型,只是多了条件 y y y: E p ( x 0 : T , y ) [ ∥ s θ ( x t , t , y ) − ∇ log ⁡ p ( x t ∣ y ) ∥ 2 2 ] . \mathbb{E}{p(x{0:T}, y)} \left[ \| s_\theta(x_t, t, y) - \nabla \log p(x_t | y) \|_2^2 \right]. Ep(x0:T,y)[∥sθ(xt,t,y)−∇logp(xt∣y)∥22].

  1. 损失函数关注的是得分函数 s θ ( x t , t , y ) s_\theta(x_t, t, y) sθ(xt,t,y) 对于数据 x t x_t xt 的预测精度。
  2. 目标是让模型通过学习条件分布 p ( x t ∣ y ) p(x_t | y) p(xt∣y) 更好地指导采样。

问题: 在很多情况下,模型可以选择忽略 y y y,只关注数据分布 p ( x ) p(x) p(x),也能在损失函数上取得较低值。这是因为:

  • 在 y y y 的影响很弱时,模型可以退化为无条件扩散模型,只预测 p ( x t ) p(x_t) p(xt) 的得分函数,而不使用 y y y。
  • 如果 y y y 与 x t x_t xt 的关系较复杂,而简单的无条件预测已经足够降低损失,模型倾向于忽略 y y y。

2.2 为什么模型可能忽略 y y y 这个现象称为"条件退化问题"(Conditional Degradation Problem),其主要原因包括:

  1. 目标函数对条件信息的依赖较弱

    • 损失函数中没有显式地对条件信息 y y y 强化约束,模型更容易忽略 y y y。
    • 在高维数据空间中, p ( x t ) p(x_t) p(xt) 的特征可能已经足够显著,使得条件信息 y y y 显得无足轻重。
  2. 训练数据中条件信息的质量和多样性不足

    • 如果 y y y 的分布较简单或信息量不足,模型可能会学习到"忽略 y y y"更容易优化。
  3. 无条件预测较为简单

    • 如果无条件生成已经能够很好地降低损失,模型可能会放弃更复杂的条件生成。

3. 示例:条件扩散中的问题

3.1 图像超分辨率中的条件扩散 任务:给定低分辨率图像 y y y,生成对应的高分辨率图像 x x x。

条件扩散公式: p ( x 0 : T ∣ y ) = p ( x T ) ∏ t = 1 T p θ ( x t − 1 ∣ x t , y ) . p(x_{0:T} | y) = p(x_T) \prod_{t=1}^T p_\theta(x_{t-1} | x_t, y). p(x0:T∣y)=p(xT)t=1∏Tpθ(xt−1∣xt,y). 模型可能的问题:

  • 如果模型发现低分辨率图像 y y y 信息不足以显著影响生成结果,它可能退化为无条件生成,仅根据 p ( x ) p(x) p(x) 生成高分辨率图像。
  • 结果是生成的图像可能与 y y y 无关,仅符合高分辨率图像的分布。

3.2 图像-文本生成中的条件扩散 任务:给定文本描述 y y y,生成对应的图像 x x x。

条件扩散公式: p ( x 0 : T ∣ y ) = p ( x T ) ∏ t = 1 T p θ ( x t − 1 ∣ x t , y ) . p(x_{0:T} | y) = p(x_T) \prod_{t=1}^T p_\theta(x_{t-1} | x_t, y). p(x0:T∣y)=p(xT)t=1∏Tpθ(xt−1∣xt,y). 模型可能的问题:

  • 如果文本 y y y 的语义信息较模糊,模型可能倾向于生成一个与 p ( x ) p(x) p(x) 相符的"通用图像"。
  • 比如,输入"猫在沙发上",但生成的结果可能是一只猫,而无关沙发。

4. 解决条件信息弱化问题

为了解决模型倾向于忽略条件信息的问题,可以采取以下方法:

  1. 加强条件信息的权重

    • 在训练中通过损失函数显式强调 ( y ) 的影响,比如引入条件正则化项:
      E p ( x 0 : T , y ) [ ∥ s θ ( x t , t , y ) − ∇ log ⁡ p ( x t ∣ y ) ∥ 2 2 + λ ∥ f ( y ) − g ( x t ) ∥ 2 2 ] , \mathbb{E}{p(x{0:T}, y)} \left[ \| s_\theta(x_t, t, y) - \nabla \log p(x_t | y) \|_2^2 + \lambda \| f(y) - g(x_t) \|_2^2 \right], Ep(x0:T,y)[∥sθ(xt,t,y)−∇logp(xt∣y)∥22+λ∥f(y)−g(xt)∥22],
      其中 f ( y ) f(y) f(y) 和 g ( x t ) g(x_t) g(xt) 表示条件和数据的特征提取函数。
  2. 改进条件编码方式

    • 增加条件编码的质量,比如在图像-文本任务中引入更强大的文本编码器(如预训练的 CLIP 模型)。
  3. 增加条件数据多样性

    • 确保训练数据中条件 y y y 的分布足够广泛,覆盖各种可能的情况。
  4. 使用交叉注意力机制

    • 在神经网络中引入交叉注意力层,使条件信息 y y y 更加显著地影响生成过程。

总结

  1. 条件扩散模型通过引入条件信息 y y y,在每次迭代中将无条件生成扩展为条件生成。
  2. 条件信息可能被忽略的原因包括目标函数弱化对 y y y 的依赖、数据分布的复杂性以及模型训练中的简化偏好。
  3. 可以通过加强条件编码、调整损失函数和改进训练数据等方法解决这一问题。

分类器指导

让我们从扩散模型的基于分数(score-based)形式开始,其中我们的目标是在任意噪声水平 t t t下学习条件模型的分数 ∇ log ⁡ p ( x t ∣ y ) \nabla\log p(x_t|y) ∇logp(xt∣y)。回顾一下, ∇ \nabla ∇是 ∇ x t \nabla_{x_t} ∇xt的简写,为了简洁起见采用此形式。根据贝叶斯公式,我们可以推导出以下等价形式:

∇ log ⁡ p ( x t ∣ y ) = ∇ log ⁡ ( p ( x t ) p ( y ∣ x t ) p ( y ) ) ( 163 ) = ∇ log ⁡ p ( x t ) + ∇ log ⁡ p ( y ∣ x t ) − ∇ log ⁡ p ( y ) ( 164 ) = ∇ log ⁡ p ( x t ) ⏟ unconditional score + ∇ log ⁡ p ( y ∣ x t ) ⏟ adversarial gradient ( 165 ) \begin{aligned} \nabla \log p(x_t|y) &= \nabla \log \left(\frac{p(x_t)p(y|x_t)}{p(y)}\right) \quad & (163) \\ &= \nabla \log p(x_t) + \nabla \log p(y|x_t) - \nabla \log p(y) \quad & (164) \\ &= \underbrace{\nabla \log p(x_t)}{\text{unconditional score}} + \underbrace{\nabla \log p(y|x_t)}{\text{adversarial gradient}} \quad & (165) \end{aligned} ∇logp(xt∣y)=∇log(p(y)p(xt)p(y∣xt))=∇logp(xt)+∇logp(y∣xt)−∇logp(y)=unconditional score ∇logp(xt)+adversarial gradient ∇logp(y∣xt)(163)(164)(165)

我们利用了一个事实,即 log ⁡ p ( y ) \log p(y) logp(y)关于 x t x_t xt的梯度为零。

我们最终推导的结果可以理解为学习一个无条件的分数函数,并将其与分类器 p ( y ∣ x t ) p(y|x_t) p(y∣xt)的对抗梯度相结合。因此,在分类器引导(Classifier Guidance)中,无条件扩散模型的分数函数按照之前的推导进行学习,同时训练一个分类器,该分类器接收任意带噪的 x t x_t xt并尝试预测条件信息 y y y。然后,在采样过程中,用于退火Langevin动态的整体条件分数函数被计算为无条件分数函数与带噪分类器的对抗梯度之和。

为了引入细粒度控制,以鼓励或阻止模型考虑条件信息 ,分类器引导通过一个超参数 γ \gamma γ对带噪分类器的对抗梯度进行缩放。在分类器引导下学习的分数函数可以总结如下:

∇ log ⁡ p ( x t ∣ y ) = ∇ log ⁡ p ( x t ) + γ ∇ log ⁡ p ( y ∣ x t ) ( 166 ) \nabla\log p(x_t|y) = \nabla\log p(x_t) + \gamma\nabla\log p(y|x_t) \quad (166) ∇logp(xt∣y)=∇logp(xt)+γ∇logp(y∣xt)(166)

直观来看,当 γ = 0 \gamma=0 γ=0时,条件扩散模型完全忽略条件信息的学习,而当 γ \gamma γ值较大时,条件扩散模型会学习生成严格符合条件信息的样本。这种情况以牺牲样本多样性为代价,因为模型仅会生成那些即使在有噪声的情况下也能轻松再现所提供条件信息的数据。

条件引导(Classifier Guidance)的一个显著缺点是它依赖于单独训练的分类器。由于分类器必须处理任意噪声输入,而大多数现有的预训练分类模型并未针对这种情况进行优化,因此分类器必须与扩散模型同时进行特定的训练。

无分类器引导(Classifier-Free Guidance)

无分类器引导(Classifier-Free Guidance)中,作者摒弃了单独训练分类器模型的方法,而是选择了无条件扩散模型和条件扩散模型。为了推导无分类器引导下的得分函数,我们可以首先重排公式165,得到:

∇ log ⁡ p ( y ∣ x t ) = ∇ log ⁡ p ( x t ∣ y ) − ∇ log ⁡ p ( x t ) ( 167 ) \nabla \log p(y|x_t) = \nabla \log p(x_t|y) - \nabla \log p(x_t) \quad (167) ∇logp(y∣xt)=∇logp(xt∣y)−∇logp(xt)(167)

然后,将其代入公式166,我们得到:

∇ log ⁡ p ( x t ∣ y ) = ∇ log ⁡ p ( x t ) + γ ( ∇ log ⁡ p ( x t ∣ y ) − ∇ log ⁡ p ( x t ) ) (168) = ∇ log ⁡ p ( x t ) + γ ∇ log ⁡ p ( x t ∣ y ) − γ ∇ log ⁡ p ( x t ) (169) = γ ∇ log ⁡ p ( x t ∣ y ) ⏟ conditional score + ( 1 − γ ) ∇ log ⁡ p ( x t ) ⏟ unconditional score (170) \begin{aligned} \nabla \log p(x_t|y) &= \nabla \log p(x_t) + \gamma \left(\nabla \log p(x_t|y) - \nabla \log p(x_t)\right) \quad &\text{(168)} \\ &= \nabla \log p(x_t) + \gamma \nabla \log p(x_t|y) - \gamma \nabla \log p(x_t) \quad &\text{(169)} \\ &= \underbrace{\gamma \nabla \log p(x_t|y)}\text{conditional score} + \underbrace{(1 - \gamma)\nabla \log p(x_t)}\text{unconditional score} \quad &\text{(170)} \end{aligned} ∇logp(xt∣y)=∇logp(xt)+γ(∇logp(xt∣y)−∇logp(xt))=∇logp(xt)+γ∇logp(xt∣y)−γ∇logp(xt)=conditional score γ∇logp(xt∣y)+unconditional score (1−γ)∇logp(xt)(168)(169)(170)

再一次, γ \gamma γ是一个控制学习的条件模型对条件信息关注程度的参数。当 γ = 0 \gamma=0 γ=0时,学习的条件模型完全忽略条件信息并学习一个无条件扩散模型。当 γ = 1 \gamma=1 γ=1时,模型明确地学习不带引导的普通条件分布。当 γ > 1 \gamma>1 γ>1时,扩散模型不仅优先考虑条件得分函数,还会朝远离无条件得分函数的方向移动。换句话说,它降低了生成不使用条件信息的样本的概率,更倾向于生成明确使用条件信息的样本。这也会导致样本多样性下降,但以生成准确匹配条件信息的样本为代价。

由于学习两个独立的扩散模型代价较高,我们可以将条件扩散模型和无条件扩散模型合并为一个单一的条件模型;通过将条件信息替换为固定的常量值(例如零),可以查询无条件扩散模型。这本质上是在条件信息上随机执行dropout操作。无分类器引导(Classifier-Free Guidance)的优雅之处在于,它让我们能够更灵活地控制条件生成过程,同时不需要额外训练多个扩散模型,仅需训练一个单一的扩散模型即可。

总结

让我们回顾一下在研究过程中的发现。首先,我们将变分扩散模型(VDM)推导为一种马尔科夫分层变分自编码器(HVAE)的特殊情况,其中三个关键假设使得证据下界(ELBO)的计算和优化变得可行且可扩展。接着,我们证明了优化VDM归结为学习一个神经网络来预测以下三种潜在目标之一:从任意噪声化的图像中恢复原始源图像,从任意噪声化图像中预测原始噪声,或在任意噪声水平下的噪声化图像的得分函数。然后,我们深入探讨了学习得分函数的意义,并将其与基于得分的生成建模(Score-based Generative Modeling)的视角明确关联起来。最后,我们探讨了如何使用扩散模型来学习条件分布。

总之,扩散模型作为生成模型表现出了令人难以置信的能力;实际上,它们为当前最先进的基于文本条件的图像生成模型(如Imagen和DALL-E 2)提供了支持。此外,这些模型背后的数学理论极其优雅。然而,仍有一些需要考虑的缺点:

  • 这很可能并非我们人类自然建模和生成数据的方式;我们并不是通过将样本生成为随机噪声后迭代去噪的方式进行数据建模。
  • VDM无法生成可解释的潜变量(Latents)。而VAE通过对编码器的优化,有望学习一个具有结构化的潜变量空间,而在VDM中,每个时间步的编码器已经是一个线性高斯模型,无法灵活优化。因此,中间的潜变量仅限于原始输入的噪声版本。
  • 潜变量被限制为与原始输入相同的维度,这进一步增加了学习有意义、压缩的潜在结构的难度。
  • 采样是一个代价高昂的过程,因为在这两种方法下都需要运行多个去噪步骤。请记住,其中一个限制是必须选择足够大的时间步数 T T T,以确保最终的潜变量完全是高斯噪声;在采样过程中,我们必须遍历所有这些时间步以生成样本。

最后,扩散模型的成功凸显了分层变分自编码器(HVAE)作为生成模型的强大能力。我们已经表明,当我们将其推广到无限的潜变量层次时,即使编码器是简单的,潜变量维度是固定的,并且假设了马尔科夫转换,我们仍然能够学习到强大的数据模型。这表明,在一般的、深层的HVAE中,通过学习复杂的编码器和语义上有意义的潜变量空间,可能会实现进一步的性能提升。

致谢:我想感谢Josh Dillon、Yang Song、Durk Kingma、Ben Poole、Jonathan Ho、Yiding Jiang、Ting Chen、Jeremy Cohen和Chen Sun,他们审阅了本文的草稿并提供了许多有帮助的修改建议和评论。非常感谢!

相关推荐
想成为配环境大佬7 小时前
MaskGAE论文阅读
论文阅读
梦云澜14 小时前
论文阅读(十三):复杂表型关联的贝叶斯、基于系统的多层次分析:从解释到决策
论文阅读·人工智能·深度学习
墨绿色的摆渡人2 天前
论文阅读的附录(八):Understanding Diffusion Models: A Unified Perspective(五):逐步加噪评分匹配
论文阅读
HollowKnightZ2 天前
论文阅读笔记:MambaOut: Do We Really Need Mamba for Vision?
论文阅读·笔记
梦云澜2 天前
论文阅读(四):混合贝叶斯和混合回归方法推断基因网络的比较
论文阅读·人工智能·深度学习
好评笔记2 天前
多模态论文笔记——TECO
论文阅读·人工智能·深度学习·机器学习·面试·大模型·aigc
m0_743106462 天前
【论文笔记】Fast3R:前向并行muti-view重建方法
论文阅读·深度学习·计算机视觉·3d·几何学
好悬给我拽开线3 天前
【论文阅读】HumanPlus: Humanoid Shadowing and Imitation from Humans
论文阅读
好评笔记3 天前
多模态论文笔记——VDT
论文阅读·深度学习·机器学习·大模型·aigc·transformer·面试八股