超详细!!扩散模型基本原理讲解,一文搞懂扩散模型

Denoising Diffusion Probabilistic Models(NIPS 2020)

论文链接:Denoising Diffusion Probabilistic Models

名词解释(先了解文中的几个专业名词1)

非平衡热力学

“nonequilibrium thermodynamics”(非平衡热力学)指的是一门研究物理系统在不处于平衡状态时的行为和规律的科学。在非平衡热力学中,系统不是静态的,而是在持续变化中,例如温度、压力或化学成分在时间和空间上的变化。这种热力学分析常应用于研究复杂系统如何在不同状态之间转换,尤其是那些涉及能量传递和物质转移的过程。

在扩散概率模型的背景下,这种启发可能具体指的是:

  1. 系统状态的演化:模型可能考虑了系统状态如何随时间演变,类似于非平衡热力学中研究的动态系统。

  2. 随机性和熵的增加:非平衡热力学关注系统在不稳定状态下如何向熵增的方向发展,类似的,扩散模型可能在模拟数据生成时引入随机扰动,使得生成的数据逐渐从无序状态向有序状态转变,或者模拟从高噪声状态向清晰状态的转变。

  3. 能量和物质的扩散:非平衡热力学研究能量和物质如何在系统中传播,扩散模型可能借鉴了这一点来模拟数据特征如何在模型中传播或演化。

渐进式有损解压缩方案

渐进式有损解压缩方案:所谓“渐进式”,指的是数据(例如图像或音频)从压缩或低质量状态逐步恢复到高质量状态的过程。在这个过程中,数据质量逐渐提升,每一步都会添加更多的细节。这与我们平时观看在线视频时,视频从模糊到清晰的加载过程相似。“有损”则意味着在这个解压缩过程中,某些原始数据可能会丢失,不会完全恢复原始状态,但通过智能算法优化输出,使得视觉或听觉上的损失最小化。

自回归解码的推广

自回归解码的推广:自回归模型在处理序列数据(如语言或时间序列)时,会根据已知的历史数据预测下一个数据点。在图像处理中,自回归模型可以逐像素或逐块地生成图像内容。在这里,将扩散模型视为自回归解码的推广,意味着扩散模型不仅依赖于先前的状态来生成数据,而且还能通过在生成过程中逐步减少噪声和增加数据的精确度,来模拟或推广传统自回归模型的行为。这种方式允许模型在生成每一步中都具有一定的自由度,从而可以更灵活地处理各种复杂的数据结构和细节。

扩散概率模型的定义:(正文开始)

  • “扩散模型”:这是一种被训练来生成与真实数据匹配的样本的参数化马尔可夫链。马尔可夫链是一种数学模型,用于表示具有“无记忆”性质的随机过程,即下一个状态的概率仅依赖于当前状态而与之前的状态无关。

  • 使用变分推断训练:变分推断是一种统计方法,用于估计和优化模型参数。在这里,它被用来训练模型,使得模型能够生成与实际数据相匹配的样本。

扩散模型的工作原理:

  • 逆向扩散过程:在正向过程中,模型从数据出发,逐步增加噪声,直到信号完全被噪声覆盖。这个过程形成一个马尔可夫链,每一步都会根据定义的规则增加一定的噪声。

  • 学习逆过程的转换:扩散模型的训练目标是学习如何逆转这个噪声增加的过程。这意味着模型需要学习从充满噪声的数据中逐步恢复出原始无噪声的数据。

模型的简化和实现:

  • 高斯噪声:如果在扩散过程中加入的噪声是小量的高斯噪声,那么在逆向过程中模拟这些转换的条件概率分布也可以使用高斯分布来表示。

  • 简化的网络参数化:由于模型结构的简单性(条件高斯过程),这允许模型使用较简单的神经网络架构来实现。

扩散过程:

  1. 扩散模型的定义:

    1. 扩散模型被定义为潜变量模型,表达式为 (x0)=∫(x0:T)dx1:T,这里 (x0:T) 是在给定参数 θ 下从x0 到 xT 的联合分布,而 x1,…,xT 是与数据 x0 维度相同的潜变量。

    2. x0∼q(x0) 表示观测数据 x0 按某个分布 q 采样得到。

  2. 逆过程(Reverse Process):

    1. 联合分布 (x0:T) 被称为逆过程,这是因为在实际应用中,这个过程从一个初始化分布 p(xT) 开始,然后通过一个学习的马尔可夫链逆向生成数据 x0。

    2. 马尔可夫链和高斯转移:这个逆过程定义为一个马尔可夫链,其转移概率为高斯分布,其中 p(xT)=N(xT;0,I) 表示起始状态 xT 是从均值为0,协方差为单位矩阵的高斯分布中采样得到的。这里的 xT 是潜变量序列的终点,整个生成过程将从这一高斯分布开始,逆向向 x0 进行过渡。

  3. 积分操作:

    1. 积分 ∫(x0:T)dx1:T 涵盖了所有从 x1 到 xT 的潜变量,用于计算边缘分布 (x0),这是观测数据 x0 的模型分布,考虑了通过整个潜变量路径对 x0 的所有可能贡献。

公式 (1): 扩散模型的逆过程定义
  • (x0:T) 表示从最后一个时间步 xT 到第一个时间步 x0 的联合概率分布。

  • 逆过程 的定义是从 p(xT)=N(xT;0,I) 开始,逐步逆向生成数据,其中每一步都是一个条件高斯分布 (xt−1∣xt)=N(xt−1;μθ(xt,t),Σθ(xt,t)),意味着在给定下一个时间步的数据后,当前时间步的数据分布为高斯分布,其均值和协方差由模型参数决定。

公式 (2): 扩散模型的前向过程定义
  • 前向过程 或 扩散过程q(x1:Tx0) 描述了数据从原始状态 x0 开始逐步加入高斯噪声的过程。每一步 q(xtxt−1)=N(xt;1−βtxt−1,βtI) 表示在给定前一时间步的数据后,当前时间步的数据由前一时间步数据经过缩放和加入一定量的高斯噪声得到。

  • βt 是预设的方差调度,决定了每一步加入的噪声量。

公式 (3): 训练目标的定义
  • 训练过程 通过最小化变分下界来进行,即最小化负对数似然的期望 E[−log(x0)] 的上界。

  • 这个上界由 (x0:T) 和 q(x1:Tx0) 之间的对数似然比计算,包括 p(xT) 和所有时间步的 (xt−1∣xt) 与 q(xtxt−1) 之间的对数似然比之和。

最小化KL散度

通过变分推断,我们不仅想要使模型生成的数据尽可能贴近真实数据,还希望近似后验分布 q 尽可能接近真实后验分布 p。这通过最小化两者之间的KL散度来实现。KL散度是一种衡量两个概率分布差异的方法,最小化KL散度有助于确保近似分布的准确性。

公式 (4): 前向过程的抽样方程
  • 公式提供了在任意时间步 t 使用闭式解抽样 xt 的方法,其中 αt=1−βtαˉt=∏s=1tαs,表示从 x0 到 xt 的累积缩放因子。

  • q(xtx0)=N(xt;αˉtx0,(1−αˉt)I) 描述了给定 x0 时 xt 的高斯分布,其均值由 x0 缩放得到,方差由噪声累积得到。

扩散模型的数据生成路径

扩散模型通常包含两个主要过程:前向过程(也称为扩散过程)和逆向过程。

  1. 前向过程(扩散过程)

  • 在前向过程中,模型从真实数据 x0 开始,逐渐向数据中加入噪声。

  • 这个过程通常是预设的,通过一系列的高斯噪声增加步骤实现。在每一步 t,数据 xt−1 被转换为 xt,通过添加一个小量的高斯噪声,如下式: xt=1−βtxt−1+βtϵ, 其中 ϵ 是从标准正态分布 N(0,I) 抽取的噪声,βt 是控制噪声量的参数。

  • 经过多个步骤后,数据变得越来越噪声化,直到达到一个几乎完全随机的噪声状态 xT

  1. 逆向过程(生成过程)

  • 逆向过程的目标是学习如何从噪声状态 xT 逆向重构出原始数据 x0。

  • 这一过程是通过学习每一步的逆向转换来实现的,即如何从 xt 重构出 xt−1。理想情况下,这些逆向步骤完全逆转了前向过程中噪声的添加。

  • 逆向模型通常是通过优化如ELBO所述的损失函数来训练的,它需要预测每一步的逆变换,这些逆变换通常用参数化的神经网络来模拟。

“生成数据路径”是通过模拟数据的噪声化过程和学习如何逆向这一过程来生成的。在实际应用中,这意味着扩散模型不仅需要能够理解数据如何逐渐变得无序,还要能够掌握如何从无序状态中恢复出有序、清晰的数据。这种从极度噪声状态到清晰状态的转变使扩散模型在生成图像、音频等复杂数据时非常有用,特别是在质量和细节保持方面表现出色。

初始化xT

在扩散模型的逆过程中,初始化 xT 是整个数据生成过程的关键起点。在前向过程(扩散过程)中,数据从清晰状态 x0 逐渐被噪声覆盖,直到变为高度噪声化的状态 xT。而在逆过程中,模型的任务是从这个高噪声状态 xT 开始,逐步还原出原始的清晰数据 x0。以下是初始化 xT 的具体步骤和考虑因素:

  1. 随机采样:

    1. 在逆过程的开始,xT 通常是从一个预定义的高斯分布 N(0,I) 中随机采样得到的。这个分布通常被设计为与前向过程中 xT 的最终噪声分布相匹配。

    2. 选择 N(0,I) 通常是因为在多步噪声添加之后,数据趋向于这个分布,尤其是当每一步噪声都是独立同分布时。

  2. 高斯分布的理由:

    1. 采用高斯分布作为初始化的理由是其数学属性的简洁性和在自然及工程问题中的普遍适用性。高斯噪声的添加与去除在数学上相对易于处理,同时高斯分布也是许多自然过程的结果,如中心极限定理所述。

    2. 高斯分布在扩散模型中的使用,使得各种统计推断和计算(如期望、方差等)更加直接。

逆过程的实现
  • 逆向生成:

    • xT 开始,模型使用一系列学习到的逆向步骤 (xt−1∣xt),这些步骤是通过训练过程中优化的神经网络来实现的。

    • 每一步都试图逐渐减少噪声并恢复数据的更早状态,直至恢复到接近初始清晰状态 x0。

  • 训练和优化:

    • 在训练过程中,模型需要学习逆向步骤的参数(如神经网络权重),使得逆过程能够有效地从噪声数据中恢复出原始数据。

    • 这通常涉及到最小化逆过程生成数据与真实数据之间的差异,例如通过最小化重建误差或使用变分下界等方法。

总结来说,逆过程中初始化 xT 的选择对整个扩散模型的性能至关重要,因为它决定了模型生成的起点。高斯分布作为初始化的选择不仅因为其数学和计算上的便利,也因为它能够有效地与多步噪声过程相匹配,为逆向重建提供了合适的起点。

训练目标关系和一致性
  • 理论上,在训练结束后,如果前向过程被完美模拟,那么最终的 xT 应该与从N(0,I) 中随机采样的 xT 在统计特性上是相同的。这意味着理论上训练完成的模型能够生成的 xT,与你直接从 N(0,I) 中采样得到的 xT 在分布上是无法区分的。

  • 实际应用中,这种理想状态可能有所偏差,因为模型的训练可能不会完全完美,但目标是使得这两种 xT 尽可能地接近。

总优化函数

  1. KL散度项 DKL(q(xTx0)∥p(xT))

  • 目的:这一项比较了在给定原始数据 x0 的情况下,模型在最后一个时间步预测的 xT 的分布 q(xTx0) 与目标分布 p(xT) 之间的差异。

  • 功能:这项主要确保模型能够从原始数据 x0 生成一个噪声级别非常高的数据 xT,同时使这个生成过程尽可能接近理论上的噪声添加过程。

  1. 累积的KL散度项 t1DKL(q(xt−1∣xt,x0)∥(xt−1∣xt))

  • 目的:这部分涵盖了从时间tt−1 的所有时间步的逆过程中,模型预测的逆向过程 q(xt−1∣xt,x0) 与理论上的逆过程 (xt−1∣xt) 之间的KL散度。

  • 功能:这一系列的KL散度确保模型在每个逆向步骤中都能精确地从 xt 重建 xt−1,从而能够逐步从噪声数据中恢复出更接近原始数据的状态。

  1. 负对数似然项 −log(x0∣x1)

  • 目的:这一项表示在给定第一步生成的数据 x1 的条件下,模型对实际原始数据 x0 的似然对数的负值。

  • 功能:此项负责直接评估模型从 x1(仅次于 x0 的噪声级别)恢复 x0 的能力。理想情况下,这应该是非常高的似然,因为 x1 与 x0 非常相似,噪声较少。

公式整体目标是优化扩散模型的参数 θ,使得整个从高噪声数据 xT 逆向重构回原始数据 x0 的过程尽可能准确。这通过最小化所有逆向步骤的KL散度和提高 x0 的生成似然来实现。这种方法使得模型能够有效地学习如何逐步去除噪声,并精确地恢复出清晰的原始数据。

简化训练目标

调整扩散模型中参数 θ,使模型能够更准确地从带噪声的数据重构出原始数据。下面是对这个算法的逐步解释:

算法步骤

  1. 重复以下步骤直到收敛:

    1. 这通常意味着算法会在多次迭代后,当模型的性能不再显著提高或达到预设的终止条件时停止。

  2. 从数据分布中抽取样本 x0:

    1. x0∼q(x0) 表示从真实数据分布 q 中随机抽取一个初始样本 x0。

  3. 随机选择一个时间步 t

    1. t∼Uniform({1,…,T}) 表示从整个时间序列的可用步骤中随机选择一个时间点 t。这里 T 是扩散过程中的总时间步数。

  4. 从标准正态分布中抽取噪声 ϵ

    1. ϵN(0,I) 表示生成一个与数据维度相匹配的噪声向量,这个向量的每个分量都是独立同分布的,遵循均值为0,方差为1的正态分布。

  5. 执行梯度下降步骤:

    1. 在这一步中,算法对模型参数 θ 进行更新,目的是最小化重建误差,即:

      1.   ∇θ∥∥ϵϵθ(αˉtx0+1−αˉ,t)∥∥2

    2. 这里,ϵθ 表示模型在参数 θ 下,根据给定的噪声 ϵ 和时间步 t 重建的噪声。目标是使模型能够尽可能准确地从噪声化数据重建出原始数据 x0。

  6. 重复直到收敛:

    1. 这个过程会持续进行,直到模型参数的更新不再导致性能的显著提升,或其他预设的停止条件被满足。

现有最新的扩散模型DELL.E.2:https://3dvar.com/Ramesh2022Hierarchical.pdf

猜你喜欢

转载自blog.csdn.net/m0_58969377/article/details/138078508