当前位置: 首页 > news >正文

【深度学习】 19. 生成模型:Diffusion Models

Diffusion Models

Diffusion Models 简介

Diffusion 模型是一类通过逐步添加噪声并再逆向还原的方式进行图像生成的深度生成模型。其基本流程包括:

  • 前向过程(Forward Process):将真实图像逐步加噪,最终变为高斯噪声。
  • 反向过程(Reverse Process):学习一个模型从噪声中恢复图像。

这种方法具备以下优点:

  • 稳定的训练过程;
  • 高质量的图像生成效果;
  • 可用于多模态、条件生成等任务。

该方法与之前的 VAE、GAN 等形成鲜明对比,它不直接建模图像分布,而是借助 Markov 链将采样任务转化为连续去噪。

Denoising Diffusion Probabilistic Models (DDPMs)

Overview of DDPM

Denoising Diffusion Probabilistic Models (DDPMs) 包括两个核心阶段:

  • Forward Process:从真实图像逐步加入噪声,破坏其结构,最终变为高斯噪声。
  • Reverse Process:学习一个去噪器(神经网络)从高斯噪声反向恢复图像结构。

Forward Process 定义

Forward 过程是一个马尔可夫过程:

q ( x t ∣ x t − 1 ) = N ( x t ; 1 − β t x t − 1 , β t I ) q(x_t | x_{t-1}) = \mathcal{N}(x_t; \sqrt{1 - \beta_t} x_{t-1}, \beta_t I) q(xtxt1)=N(xt;1βt xt1,βtI)

其中:

  • β t ∈ ( 0 , 1 ) \beta_t \in (0, 1) βt(0,1):是一个小的正数,用于控制每步噪声添加强度。

    从t=0到t=T叫做noise schedule. 通常是一个小的数,确保数据被缩小,并且方差不会爆炸。

    Ho et al.,建议 β 0 \beta_0 β0 = 0.0001 到 β 1000 \beta_{1000} β1000∈0.02.

  • 1 − β t \sqrt{1 - \beta_t} 1βt :控制当前步保留多少上一步的信息。

  • β t I \beta_t I βtI:控制当前步加入多少新噪声。

  • N是正态分布

  • x t x_t xt是输出

  • 1 − β t x t − 1 \sqrt{1 - \beta_t}x_{t-1} 1βt xt1是均值

联合分布可写为:

q ( x 1 : T ∣ x 0 ) = ∏ t = 1 T q ( x t ∣ x t − 1 ) q(x_{1:T} | x_0) = \prod_{t=1}^T q(x_t | x_{t-1}) q(x1:Tx0)=t=1Tq(xtxt1)

Forward Process 中的 Noise Schedule

噪声调度(noise schedule)选择对模型表现影响巨大。Ho 等人建议的线性增长方式如下:

β t ∈ ( 0.0001 , 0.02 ) \beta_t \in (0.0001, 0.02) βt(0.0001,0.02)

为了进一步简化推导,我们定义:

α t = 1 − β t , α ˉ t = ∏ s = 1 t α s \alpha_t = 1 - \beta_t, \quad \bar{\alpha}_t = \prod_{s=1}^t \alpha_s αt=1βt,αˉt=s=1tαs

这将帮助我们将任意时间步 x t x_t xt 直接表示为关于 x 0 x_0 x0 的函数,而不需要按顺序采样。

任意时间步的封闭采样公式(closed form)

通过:
q ( x t ∣ x t − 1 ) = N ( x t ; 1 − β t x t − 1 , β t I ) q(x_t | x_{t-1}) = \mathcal{N}(x_t; \sqrt{1- \beta_t}x_{t-1}, \beta_t I) q(xtxt1)=N(xt;1βt xt1,βtI)
我们有:
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} x_0, (1 - \bar{\alpha}_t) I) q(xtx0)=N(xt;αˉt x0,(1αˉt)I)

这被称为 Diffusion Kernel,意味着我们可以直接从 x 0 x_0 x0 中采样任意时刻的 x t x_t xt

推导封闭形式采样的过程(Proof Sketch)

我们希望推导出一种简洁的表达形式,使得在已知初始数据 x 0 x_0 x0 的情况下,可以直接采样任意时刻 x t x_t xt,而不必逐步迭代。这是 Diffusion 模型高效训练和推理的关键。

定义

我们首先引入两个关键定义:

  • α t = 1 − β t \alpha_t = 1 - \beta_t αt=1βt
  • α ˉ t = ∏ s = 1 t α s \bar{\alpha}_t = \prod_{s=1}^t \alpha_s αˉt=s=1tαs

α ˉ t \bar{\alpha}_t αˉt 表示从时间 0 0 0 t t t 所有 α t \alpha_t αt 的乘积。

Forward Process 的定义

原始的前向扩散过程由下式给出:

q ( x t ∣ x t − 1 ) = N ( x t ; 1 − β t ⋅ x t − 1 , β t I ) q(x_t \mid x_{t-1}) = \mathcal{N}(x_t; \sqrt{1 - \beta_t} \cdot x_{t-1}, \beta_t I) q(xtxt1)=N(xt;1βt xt1,βtI)

利用 α t = 1 − β t \alpha_t = 1 - \beta_t αt=1βt,改写为:

x t = α t x t − 1 + 1 − α t ϵ t − 1 , ϵ t − 1 ∼ N ( 0 , I ) x_t = \sqrt{\alpha_t} x_{t-1} + \sqrt{1 - \alpha_t} \epsilon_{t-1}, \quad \epsilon_{t-1} \sim \mathcal{N}(0, I) xt=αt xt1+1αt ϵt1,ϵt1N(0,I)

重参数化展开

我们希望将 x t x_t xt 表达为关于 x 0 x_0 x0 和高斯噪声的函数。

从上述公式出发,开始展开:

x t = α t x t − 1 + 1 − α t ϵ t − 1 x_t = \sqrt{\alpha_t} x_{t-1} + \sqrt{1 - \alpha_t} \epsilon_{t-1} xt=αt xt1+1αt ϵt1

x t − 1 x_{t-1} xt1 再展开为:

x t − 1 = α t − 1 x t − 2 + 1 − α t − 1 ϵ t − 2 x_{t-1} = \sqrt{\alpha_{t-1}} x_{t-2} + \sqrt{1 - \alpha_{t-1}} \epsilon_{t-2} xt1=αt1 xt2+1αt1 ϵt2

代入 x t x_t xt 中:

x t = α t α t − 1 x t − 2 + α t ( 1 − α t − 1 ) ϵ t − 2 + 1 − α t ϵ t − 1 x_t = \sqrt{\alpha_t \alpha_{t-1}} x_{t-2} + \sqrt{\alpha_t (1 - \alpha_{t-1})} \epsilon_{t-2} + \sqrt{1 - \alpha_t} \epsilon_{t-1} xt=αtαt1 xt2+αt(1αt1) ϵt2+1αt ϵt1

继续递归展开,我们得到:

x t = α t α t − 1 ⋯ α 1 x 0 + 多项高斯噪声加权和 x_t = \sqrt{\alpha_t \alpha_{t-1} \cdots \alpha_1} x_0 + \text{多项高斯噪声加权和} xt=αtαt1α1 x0+多项高斯噪声加权和

由于高斯变量的加权和仍然服从高斯分布,我们可以将所有噪声项合并成一个等效的高斯变量:

x t = α ˉ t x 0 + 1 − α ˉ t ⋅ ϵ , ϵ ∼ N ( 0 , I ) x_t = \sqrt{\bar{\alpha}_t} x_0 + \sqrt{1 - \bar{\alpha}_t} \cdot \epsilon, \quad \epsilon \sim \mathcal{N}(0, I) xt=αˉt x0+1αˉt ϵ,ϵN(0,I)

得到封闭形式的 Diffusion Kernel

于是我们就得到了一个封闭形式的采样公式:

q ( x t ∣ x 0 ) = N ( x t ; α ˉ t x 0 , ( 1 − α ˉ t ) I ) q(x_t \mid x_0) = \mathcal{N}(x_t; \sqrt{\bar{\alpha}_t} x_0, (1 - \bar{\alpha}_t) I) q(xtx0)=N(xt;αˉt x0,(1αˉt)I)

这一公式说明我们无需一步一步从 x 0 x_0 x0 扩散到 x t x_t xt,而是可以直接采样任意时间步的 x t x_t xt,大大加快了训练过程。

噪声调度策略对比(Noise Schedule Improvements)

问题: Ho 等人的线性调度会快速降低 α ˉ t \bar{\alpha}_t αˉt,导致图像信息太快丢失。

改进方案: Dhariwal 和 Nichol 提出使用余弦函数作为调度:
α ˉ t = f ( t ) f ( 0 ) , f ( t ) = cos ⁡ 2 ( t / T + s 1 + s ⋅ π 2 ) \bar{\alpha}_t = \frac{f(t)}{f(0)}, \quad f(t) = \cos^2\left( \frac{t/T + s}{1 + s} \cdot \frac{\pi}{2} \right) αˉt=f(0)f(t),f(t)=cos2(1+st/T+s2π)

  • Linear 调度: 蓝色曲线,下降较快。
  • Cosine 调度: 橙色曲线,下降更慢,更平滑。

在这里插入图片描述

效果图(下图)显示:

  • 上排(linear)图像更快被完全扰乱。
  • 下排(cosine)保留更多结构,有助于训练稳定性。

在这里插入图片描述

Reverse Process 与其公式推导详解

本节展示了扩散模型中的逆过程(Reverse Process)如何从纯噪声逐步生成数据点,以及其数学表达和推导方式。

概述

Paper review: Denoising Diffusion Probabilistic Models | by Sangyun Lee |  Medium

逆过程图中描述了从高斯噪声 x T ∼ N ( 0 , I ) \mathbf{x}_T \sim \mathcal{N}(\mathbf{0}, \mathbf{I}) xTN(0,I) 开始的逐步采样过程:通过网络 p θ ( x t − 1 ∣ x t ) p_\theta(\mathbf{x}_{t-1}|\mathbf{x}_t) pθ(xt1xt) 不断采样,直到重构出 x 0 \mathbf{x}_0 x0

在已知某一时刻的“噪声状态” x t \mathbf{x}_{t} xt 后,模型 p θ p_{\theta} pθ 预测一个前一时刻(更少噪声)的状态 x t − 1 \mathbf{x}_{t-1} xt1 的条件概率分布。

这个分布是什么意思?
  • 在正向过程中,原始数据 x 0 \mathbf{x}_0 x0 会逐步添加噪声得到 x 1 , x 2 , . . . , x T \mathbf{x}_1, \mathbf{x}_2, ..., \mathbf{x}_T x1,x2,...,xT
  • 而在逆向过程中,我们希望从纯噪声 x T ∼ N ( 0 , I ) \mathbf{x}_T \sim \mathcal{N}(0, I) xTN(0,I) 逐步去噪,一步步得到最终的数据样本 x 0 \mathbf{x}_0 x0
  • 这个“去噪”的每一步,就是由 p θ ( x t − 1 ∣ x t ) p_\theta(\mathbf{x}_{t-1}|\mathbf{x}_t) pθ(xt1xt) 来实现的。它告诉我们:在时刻 t t t 已知 x t \mathbf{x}_{t} xt,该如何采样更少噪声的 x t − 1 \mathbf{x}_{t-1} xt1

其中:

  • 如果每一步的噪声添加 β t \beta_t βt 足够小,那么 q ( x t − 1 ∣ x t ) q(\mathbf{x}_{t-1}|\mathbf{x}_t) q(xt1xt) 近似高斯分布。
  • 模型 p θ p_\theta pθ 的目标是学习一个去噪函数,使其逼近真实后验 q ( x t − 1 ∣ x t ) q(\mathbf{x}_{t-1}|\mathbf{x}_t) q(xt1xt)

为了便于学习和推导,我们借助 q ( x t − 1 ∣ x t , x 0 ) q(\mathbf{x}_{t-1}|\mathbf{x}_t, \mathbf{x}_0) q(xt1xt,x0),也即条件在原始图像 x 0 \mathbf{x}_0 x0 上。

我们有:

q ( x t − 1 ∣ x t , x 0 ) = N ( x t − 1 ; μ ~ ( x t , x 0 ) , β ~ t I ) q(\mathbf{x}_{t-1}|\mathbf{x}_t, \mathbf{x}_0) = \mathcal{N}(\mathbf{x}_{t-1}; \tilde{\mu}(\mathbf{x}_t, \mathbf{x}_0), \tilde{\beta}_t \mathbf{I}) q(xt1xt,x0)=N(xt1;μ~(xt,x0),β~tI)

其中:

  • μ ~ ( x t , x 0 ) = 1 α ˉ t ( x t − 1 − α t 1 − α ˉ t ϵ t ) \tilde{\mu}(\mathbf{x}_t, \mathbf{x}_0) = \frac{1}{\sqrt{\bar{\alpha}_t}} \left( \mathbf{x}_t - \frac{1 - \alpha_t}{\sqrt{1 - \bar{\alpha}_t}} \boldsymbol{\epsilon}_t \right) μ~(xt,x0)=αˉt 1(xt1αˉt 1αtϵt)

  • β ~ t = 1 − α ˉ t − 1 1 − α ˉ t β t \tilde{\beta}_t = \frac{1 - \bar{\alpha}_{t-1}}{1 - \bar{\alpha}_t} \beta_t β~t=1αˉt1αˉt1βt

推导过程详解

我们希望通过贝叶斯规则,从两个边缘分布 q ( x t ∣ x t − 1 ) q(\mathbf{x}_t|\mathbf{x}_{t-1}) q(xtxt1) q ( x t ∣ x 0 ) q(\mathbf{x}_t|\mathbf{x}_0) q(xtx0) 推出联合分布 q ( x t − 1 ∣ x t , x 0 ) q(\mathbf{x}_{t-1}|\mathbf{x}_t, \mathbf{x}_0) q(xt1xt,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) = \frac{q(\mathbf{x}_t | \mathbf{x}_{t-1}, \mathbf{x}_0) \cdot q(\mathbf{x}_{t-1} | \mathbf{x}_0)}{q(\mathbf{x}_t | \mathbf{x}_0)} q(xt1xt,x0)=q(xtx0)q(xtxt1,x0)q(xt1x0)

由于 x t − 1 → x t → x 0 \mathbf{x}_{t-1} \to \mathbf{x}_t \to \mathbf{x}_0 xt1xtx0 构成马尔可夫链,

一句话:只跟上一个状态有关

在条件概率意义下,当前状态 x t \mathbf{x}_t xt 所携带的关于原始数据 x 0 \mathbf{x}_0 x0 的信息已经“包含在它自己身上了”,因此 下一步 x t − 1 \mathbf{x}_{t-1} xt1 的分布仅依赖于 x t \mathbf{x}_t xt,而不再依赖更早的 x t + 1 , x t + 2 , … \mathbf{x}_{t+1}, \mathbf{x}_{t+2}, \dots xt+1,xt+2, 等。

因此有:
q ( x t ∣ x t − 1 , x 0 ) = q ( x t ∣ x t − 1 ) q(\mathbf{x}_t | \mathbf{x}_{t-1}, \mathbf{x}_0) = q(\mathbf{x}_t | \mathbf{x}_{t-1}) q(xtxt1,x0)=q(xtxt1)

从而有:

q ( x t − 1 ∣ x t , x 0 ) ∝ q ( x t ∣ x t − 1 ) ⋅ q ( x t − 1 ∣ x 0 ) q(\mathbf{x}_{t-1} | \mathbf{x}_t, \mathbf{x}_0) \propto q(\mathbf{x}_t | \mathbf{x}_{t-1}) \cdot q(\mathbf{x}_{t-1} | \mathbf{x}_0) q(xt1xt,x0)q(xtxt1)q(xt1x0)

  • q ( x t − 1 ∣ x t , x 0 ) q(\mathbf{x}_{t-1} | \mathbf{x}_t, \mathbf{x}_0) q(xt1xt,x0):表示在给定 x t \mathbf{x}_t xt 和原始样本 x 0 \mathbf{x}_0 x0 的条件下,变量 x t − 1 \mathbf{x}_{t-1} xt1 的后验分布,是我们希望建模的目标。
  • q ( x t ∣ x t − 1 ) q(\mathbf{x}_t | \mathbf{x}_{t-1}) q(xtxt1):表示扩散的前向过程,在已知 x t − 1 \mathbf{x}_{t-1} xt1 的前提下,如何产生出 x t \mathbf{x}_t xt。这个分布是已知的(高斯分布)。
  • q ( x t − 1 ∣ x 0 ) q(\mathbf{x}_{t-1} | \mathbf{x}_0) q(xt1x0):表示从原始样本 x 0 \mathbf{x}_0 x0 直接扩散到 x t − 1 \mathbf{x}_{t-1} xt1 的分布,也是高斯的,可以通过递推得到。
  • ∝ \propto :表示成比例关系,即我们省略了分母中的归一化项 q ( x t ∣ x 0 ) q(\mathbf{x}_t|\mathbf{x}_0) q(xtx0),这在后续使用时可以恢复为一个高斯分布。

我们假设这两个项都是高斯分布,分别写成:

  • q ( x t ∣ x t − 1 ) = N ( α t x t − 1 , β t I ) q(\mathbf{x}_t|\mathbf{x}_{t-1}) = \mathcal{N}(\sqrt{\alpha_t} \mathbf{x}_{t-1}, \beta_t \mathbf{I}) q(xtxt1)=N(αt xt1,βtI)
  • q ( x t − 1 ∣ x 0 ) = N ( α ˉ t − 1 x 0 , ( 1 − α ˉ t − 1 ) I ) q(\mathbf{x}_{t-1}|\mathbf{x}_0) = \mathcal{N}(\sqrt{\bar{\alpha}_{t-1}} \mathbf{x}_0, (1 - \bar{\alpha}_{t-1}) \mathbf{I}) q(xt1x0)=N(αˉt1 x0,(1αˉt1)I)

为了推导出联合概率的形式,我们用高斯概率密度函数的一般形式:

N ( x ; μ , σ 2 ) ∝ exp ⁡ ( − 1 2 σ 2 ( x − μ ) 2 ) \mathcal{N}(\mathbf{x}; \mu, \sigma^2) \propto \exp\left( -\frac{1}{2\sigma^2} (\mathbf{x} - \mu)^2 \right) N(x;μ,σ2)exp(2σ21(xμ)2)

代入两个高斯项:

第一步:

展开联合分布密度:

q ( x t − 1 ∣ x t , x 0 ) ∝ exp ⁡ ( − 1 2 β t ( x t − α t x t − 1 ) 2 ) ⋅ exp ⁡ ( − 1 2 ( 1 − α ˉ t − 1 ) ( x t − 1 − α ˉ t − 1 x 0 ) 2 ) q(\mathbf{x}_{t-1} | \mathbf{x}_t, \mathbf{x}_0) \propto \exp\left( -\frac{1}{2 \beta_t} (\mathbf{x}_t - \sqrt{\alpha_t} \mathbf{x}_{t-1})^2 \right) \cdot \exp\left( -\frac{1}{2 (1 - \bar{\alpha}_{t-1})} (\mathbf{x}_{t-1} - \sqrt{\bar{\alpha}_{t-1}} \mathbf{x}_0)^2 \right) q(xt1xt,x0)exp(2βt1(xtαt xt1)2)exp(2(1αˉt1)1(xt1αˉt1 x0)2)

第二步:

把两个平方项都展开,得到:

  • ( x t − α t x t − 1 ) 2 = x t 2 − 2 α t x t x t − 1 + α t x t − 1 2 (\mathbf{x}_t - \sqrt{\alpha_t} \mathbf{x}_{t-1})^2 = \mathbf{x}_t^2 - 2 \sqrt{\alpha_t} \mathbf{x}_t \mathbf{x}_{t-1} + \alpha_t \mathbf{x}_{t-1}^2 (xtαt xt1)2=xt22αt xtxt1+αtxt12
  • ( x t − 1 − α ˉ t − 1 x 0 ) 2 = x t − 1 2 − 2 α ˉ t − 1 x t − 1 x 0 + α ˉ t − 1 x 0 2 (\mathbf{x}_{t-1} - \sqrt{\bar{\alpha}_{t-1}} \mathbf{x}_0)^2 = \mathbf{x}_{t-1}^2 - 2 \sqrt{\bar{\alpha}_{t-1}} \mathbf{x}_{t-1} \mathbf{x}_0 + \bar{\alpha}_{t-1} \mathbf{x}_0^2 (xt1αˉt1 x0)2=xt122αˉt1 xt1x0+αˉt1x02

将这两个带入指数中,并合并同类项(即 x t − 1 2 \mathbf{x}_{t-1}^2 xt12, x t − 1 \mathbf{x}_{t-1} xt1, 常数项等),可以合并成一个新的高斯形式:

exp ⁡ ( − 1 2 β ~ t ( x t − 1 − μ ~ ( x t , x 0 ) ) 2 ) \exp\left( -\frac{1}{2 \tilde{\beta}_t} \left(\mathbf{x}_{t-1} - \tilde{\mu}(\mathbf{x}_t, \mathbf{x}_0)\right)^2 \right) exp(2β~t1(xt1μ~(xt,x0))2)

从而得到:

q ( x t − 1 ∣ x t , x 0 ) = N ( x t − 1 ; μ ~ ( x t , x 0 ) , β ~ t I ) q(\mathbf{x}_{t-1} | \mathbf{x}_t, \mathbf{x}_0) = \mathcal{N}(\mathbf{x}_{t-1}; \tilde{\mu}(\mathbf{x}_t, \mathbf{x}_0), \tilde{\beta}_t \mathbf{I}) q(xt1xt,x0)=N(xt1;μ~(xt,x0),β~tI)

其中均值为:

μ ~ ( x t , x 0 ) = α t ( 1 − α ˉ t − 1 ) 1 − α ˉ t x t + α ˉ t − 1 β t 1 − α ˉ t x 0 \tilde{\mu}(\mathbf{x}_t, \mathbf{x}_0) = \frac{\sqrt{\alpha_t}(1 - \bar{\alpha}_{t-1})}{1 - \bar{\alpha}_t} \mathbf{x}_t + \frac{\sqrt{\bar{\alpha}_{t-1}} \beta_t}{1 - \bar{\alpha}_t} \mathbf{x}_0 μ~(xt,x0)=1αˉtαt (1αˉt1)xt+1αˉtαˉt1 βtx0

方差为:

β ~ 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

这些表达式正是我们用于定义逆过程采样时的关键参数,它们说明给定 x t \mathbf{x}_t xt x 0 \mathbf{x}_0 x0 后, x t − 1 \mathbf{x}_{t-1} xt1 的条件分布是高斯的,均值和方差具有闭式形式。

我们有:

x t = α ˉ t x 0 + 1 − α ˉ t ϵ \mathbf{x}_t = \sqrt{\bar{\alpha}_t} \mathbf{x}_0 + \sqrt{1 - \bar{\alpha}_t} \boldsymbol{\epsilon} xt=αˉt x0+1αˉt ϵ

变换得到:

x 0 = 1 α ˉ t ( x t − 1 − α ˉ t ϵ ) \mathbf{x}_0 = \frac{1}{\sqrt{\bar{\alpha}_t}} \left( \mathbf{x}_t - \sqrt{1 - \bar{\alpha}_t} \boldsymbol{\epsilon} \right) x0=αˉt 1(xt1αˉt ϵ)

将其代入 μ ~ ( x t , x 0 ) \tilde{\mu}(\mathbf{x}_t, \mathbf{x}_0) μ~(xt,x0)

μ ~ ( x t , x 0 ) = α t ( 1 − α ˉ t − 1 ) 1 − α ˉ t x t + α ˉ t − 1 β t 1 − α ˉ t x 0 = 1 α ˉ t ( x t − 1 − α t 1 − α ˉ t ϵ t ) \tilde{\mu}(\mathbf{x}_t, \mathbf{x}_0) = \frac{\sqrt{\alpha_t}(1 - \bar{\alpha}_{t-1})}{1 - \bar{\alpha}_t} \mathbf{x}_t + \frac{\sqrt{\bar{\alpha}_{t-1}} \beta_t}{1 - \bar{\alpha}_t} \mathbf{x}_0 = \frac{1}{\sqrt{\bar{\alpha}_t}} \left( \mathbf{x}_t - \frac{1 - \alpha_t}{\sqrt{1 - \bar{\alpha}_t}} \boldsymbol{\epsilon}_t \right) μ~(xt,x0)=1αˉtαt (1αˉt1)xt+1αˉtαˉt1 βtx0=αˉt 1(xt1αˉt 1αtϵt)
最后,我们得到条件高斯分布形式如下:

q ( x t − 1 ∣ x t , x 0 ) = N ( x t − 1 ; μ ~ ( x t , x 0 ) , β ~ t I ) q(\mathbf{x}_{t-1} | \mathbf{x}_t, \mathbf{x}_0) = \mathcal{N}(\mathbf{x}_{t-1}; \tilde{\mu}(\mathbf{x}_t, \mathbf{x}_0), \tilde{\beta}_t \mathbf{I}) q(xt1xt,x0)=N(xt1;μ~(xt,x0),β~tI)
这就是我们在逆过程(Reverse Process)中所使用的构造形式。

Learning Objective

我们可以像训练变分自编码器一样,通过最大化变分下界(Variational Lower Bound, ELBO)来优化扩散模型中的负对数似然目标:

− E q ( x 0 ) [ log ⁡ p θ ( x 0 ) ] ≤ E q ( x 0 : T ) [ log ⁡ p θ ( x 0 : T ) q ( x 1 : T ∣ x 0 ) ] = : L -\mathbb{E}_{q(\mathbf{x}_0)}[\log p_\theta(\mathbf{x}_0)] \leq \mathbb{E}_{q(\mathbf{x}_{0:T})}\left[\log \frac{p_\theta(\mathbf{x}_{0:T})}{q(\mathbf{x}_{1:T}|\mathbf{x}_0)}\right] =: L Eq(x0)[logpθ(x0)]Eq(x0:T)[logq(x1:Tx0)pθ(x0:T)]=:L

根据 Sohl-Dickstein et al. (2015) 和 Ho et al. (2020),该目标可分解为:

L = E q [ D K L ( q ( x T ∣ x 0 ) ∥ p ( x T ) ) ⏟ L T + ∑ t > 1 D K L ( q ( x t − 1 ∣ x t , x 0 ) ∥ p θ ( x t − 1 ∣ x t ) ) ⏟ L t − 1 − log ⁡ p θ ( x 0 ∣ x 1 ) ⏟ L 0 ] L = \mathbb{E}_q \left[ \underbrace{D_{\mathrm{KL}}(q(\mathbf{x}_T|\mathbf{x}_0) \| p(\mathbf{x}_T))}_{L_T} + \sum_{t>1} \underbrace{D_{\mathrm{KL}}(q(\mathbf{x}_{t-1}|\mathbf{x}_t, \mathbf{x}_0) \| p_\theta(\mathbf{x}_{t-1}|\mathbf{x}_t))}_{L_{t-1}} - \underbrace{\log p_\theta(\mathbf{x}_0|\mathbf{x}_1)}_{L_0} \right] L=Eq LT DKL(q(xTx0)p(xT))+t>1Lt1 DKL(q(xt1xt,x0)pθ(xt1xt))L0 logpθ(x0x1)

由于 q ( x t − 1 ∣ x t , x 0 ) q(\mathbf{x}_{t-1}|\mathbf{x}_t, \mathbf{x}_0) q(xt1xt,x0) p θ ( x t − 1 ∣ x t ) p_\theta(\mathbf{x}_{t-1}|\mathbf{x}_t) pθ(xt1xt) 都是高斯分布,因此 KL 散度有解析表达式。

对于 L t − 1 L_{t-1} Lt1

L t − 1 = D K L ( q ( x t − 1 ∣ x t , x 0 ) ∥ p θ ( x t − 1 ∣ x t ) ) L_{t-1} = D_{\mathrm{KL}}(q(\mathbf{x}_{t-1}|\mathbf{x}_t, \mathbf{x}_0) \| p_\theta(\mathbf{x}_{t-1}|\mathbf{x}_t)) Lt1=DKL(q(xt1xt,x0)pθ(xt1xt))

代入两个分布的参数后有:

= E x 0 ∼ q ( x 0 ) , ϵ ∼ N ( 0 , I ) [ 1 2 ∥ Σ θ ( x t , t ) ∥ 2 ∥ μ ~ t ( x t , x 0 ) − μ θ ( x t , t ) ∥ 2 ] + C = \mathbb{E}_{\mathbf{x}_0 \sim q(\mathbf{x}_0), \boldsymbol{\epsilon} \sim \mathcal{N}(0, \mathbf{I})} \left[ \frac{1}{2 \|\Sigma_\theta(\mathbf{x}_t, t)\|^2} \left\| \widetilde{\boldsymbol{\mu}}_t(\mathbf{x}_t, \mathbf{x}_0) - \boldsymbol{\mu}_\theta(\mathbf{x}_t, t) \right\|^2 \right] + C =Ex0q(x0),ϵN(0,I)[2∥Σθ(xt,t)21μ t(xt,x0)μθ(xt,t)2]+C

其中,

  • μ ~ t \widetilde{\boldsymbol{\mu}}_t μ t q ( x t − 1 ∣ x t , x 0 ) q(\mathbf{x}_{t-1}|\mathbf{x}_t, \mathbf{x}_0) q(xt1xt,x0) 的均值
  • μ θ \boldsymbol{\mu}_\theta μθ 为网络预测的 p θ p_\theta pθ 的均值

学习目标简化

我们回顾图中给出的:

μ ~ t ( x t , x 0 ) = 1 α ˉ t ( x t − 1 − α t 1 − α ˉ t ϵ ) \widetilde{\boldsymbol{\mu}}_t(\mathbf{x}_t, \mathbf{x}_0) = \frac{1}{\sqrt{\bar{\alpha}_t}} \left( \mathbf{x}_t - \frac{1 - \alpha_t}{\sqrt{1 - \bar{\alpha}_t}} \boldsymbol{\epsilon} \right) μ t(xt,x0)=αˉt 1(xt1αˉt 1αtϵ)

μ θ ( x t , x 0 ) = 1 α ˉ t ( x t − 1 − α t 1 − α ˉ t ϵ θ ( x t , t ) ) \boldsymbol{\mu}_\theta(\mathbf{x}_t, \mathbf{x}_0) = \frac{1}{\sqrt{\bar{\alpha}_t}} \left( \mathbf{x}_t - \frac{1 - \alpha_t}{\sqrt{1 - \bar{\alpha}_t}} \boldsymbol{\epsilon}_\theta(\mathbf{x}_t, t) \right) μθ(xt,x0)=αˉt 1(xt1αˉt 1αtϵθ(xt,t))

于是 L t − 1 L_{t-1} Lt1 变成:

L t − 1 = D K L ( q ( x t − 1 ∣ x t , x 0 ) ∥ p θ ( x t − 1 ∣ x t ) ) L_{t-1} = D_{\mathrm{KL}}(q(\mathbf{x}_{t-1}|\mathbf{x}_t, \mathbf{x}_0) \| p_\theta(\mathbf{x}_{t-1}|\mathbf{x}_t)) Lt1=DKL(q(xt1xt,x0)pθ(xt1xt))

= E x 0 ∼ q ( x 0 ) , ϵ ∼ N ( 0 , I ) [ 1 2 ∥ Σ θ ( x t , t ) ∥ 2 ∥ μ ~ t ( x t , x 0 ) − μ θ ( x t , t ) ∥ 2 ] + C = \mathbb{E}_{\mathbf{x}_0 \sim q(\mathbf{x}_0), \boldsymbol{\epsilon} \sim \mathcal{N}(0, \mathbf{I})} \left[ \frac{1}{2 \|\Sigma_\theta(\mathbf{x}_t, t)\|^2} \left\| \widetilde{\boldsymbol{\mu}}_t(\mathbf{x}_t, \mathbf{x}_0) - \boldsymbol{\mu}_\theta(\mathbf{x}_t, t) \right\|^2 \right] + C =Ex0q(x0),ϵN(0,I)[2∥Σθ(xt,t)21μ t(xt,x0)μθ(xt,t)2]+C

代入上式:

= E x 0 , ϵ [ 1 2 ∥ Σ θ ( x t , t ) ∥ 2 ∥ 1 α ˉ t ( x t − 1 − α t 1 − α ˉ t ϵ ) − 1 α ˉ t ( x t − 1 − α t 1 − α ˉ t ϵ θ ( x t , t ) ) ∥ 2 ] + C = \mathbb{E}_{\mathbf{x}_0, \boldsymbol{\epsilon}} \left[ \frac{1}{2 \|\Sigma_\theta(\mathbf{x}_t, t)\|^2} \left\| \frac{1}{\sqrt{\bar{\alpha}_t}} \left( \mathbf{x}_t - \frac{1 - \alpha_t}{\sqrt{1 - \bar{\alpha}_t}} \boldsymbol{\epsilon} \right)- \frac{1}{\sqrt{\bar{\alpha}_t}} \left( \mathbf{x}_t - \frac{1 - \alpha_t}{\sqrt{1 - \bar{\alpha}_t}} \boldsymbol{\epsilon}_\theta(\mathbf{x}_t, t) \right) \right\|^2 \right] + C =Ex0,ϵ[2∥Σθ(xt,t)21 αˉt 1(xt1αˉt 1αtϵ)αˉt 1(xt1αˉt 1αtϵθ(xt,t)) 2]+C

化简得到:

= E x 0 , ϵ [ ( 1 − α t ) 2 2 α t ( 1 − α ˉ t ) ∥ Σ θ ( x t , t ) ∥ 2 ∥ ϵ − ϵ θ ( x t , t ) ∥ 2 ] + C = \mathbb{E}_{\mathbf{x}_0, \boldsymbol{\epsilon}} \left[ \frac{(1 - \alpha_t)^2}{2\alpha_t(1 - \bar{\alpha}_t)\|\Sigma_\theta(\mathbf{x}_t, t)\|^2} \left\| \boldsymbol{\epsilon} - \boldsymbol{\epsilon}_\theta(\mathbf{x}_t, t) \right\|^2 \right] + C =Ex0,ϵ[2αt(1αˉt)Σθ(xt,t)2(1αt)2ϵϵθ(xt,t)2]+C

进一步设定 Σ θ ( x t , t ) = σ t 2 I \Sigma_\theta(\mathbf{x}_t, t) = \sigma_t^2 \mathbf{I} Σθ(xt,t)=σt2I,其中 σ t 2 = β t \sigma_t^2 = \beta_t σt2=βt,并且忽略掉前面的部分,得到简化的损失:

L t simple = E t ∼ [ 1 , T ] , x 0 , ϵ [ ∥ ϵ − ϵ θ ( α ˉ t x 0 + 1 − α ˉ t ϵ , t ) ∥ 2 ] + C L_t^{\text{simple}} = \mathbb{E}_{t \sim [1, T], \mathbf{x}_0, \boldsymbol{\epsilon}} \left[ \left\| \boldsymbol{\epsilon} - \boldsymbol{\epsilon}_\theta\left(\sqrt{\bar{\alpha}_t} \mathbf{x}_0 + \sqrt{1 - \bar{\alpha}_t} \boldsymbol{\epsilon}, t\right) \right\|^2 \right] +C Ltsimple=Et[1,T],x0,ϵ[ ϵϵθ(αˉt x0+1αˉt ϵ,t) 2]+C

算法

Algorithm 1 Training

  1. repeat
  2. x 0 ∼ q ( x 0 ) \mathbf{x}_0 \sim q(\mathbf{x}_0) x0q(x0)
  3. t ∼ Uniform ( { 1 , … , T } ) t \sim \text{Uniform}(\{1, \dots, T\}) tUniform({1,,T})
  4. ϵ ∼ N ( 0 , I ) \boldsymbol{\epsilon} \sim \mathcal{N}(0, \mathbf{I}) ϵN(0,I)
  5. Take gradient descent step on
       ∇ θ ∥ ϵ − ϵ θ ( α ˉ t x 0 + 1 − α ˉ t ϵ , t ) ∥ 2 \nabla_\theta \left\| \boldsymbol{\epsilon} - \boldsymbol{\epsilon}_\theta(\sqrt{\bar{\alpha}_t} \mathbf{x}_0 + \sqrt{1 - \bar{\alpha}_t} \boldsymbol{\epsilon}, t) \right\|^2 θ ϵϵθ(αˉt x0+1αˉt ϵ,t) 2
  6. until converged

Algorithm 2 Sampling

1.  x T ∼ N ( 0 , I ) \mathbf{x}_T \sim \mathcal{N}(0, \mathbf{I}) xTN(0,I)
2. for t = T , … , 1 t = T, \dots, 1 t=T,,1 do
3.  z ∼ N ( 0 , I ) \mathbf{z} \sim \mathcal{N}(0, \mathbf{I}) zN(0,I) if t > 1 t > 1 t>1, else z = 0 \mathbf{z} = 0 z=0
4.  x t − 1 = 1 α t ( x t − 1 − α t 1 − α ˉ t ϵ θ ( x t , t ) ) + σ t z \mathbf{x}_{t-1} = \frac{1}{\sqrt{\alpha_t}} \left( \mathbf{x}_t - \frac{1 - \alpha_t}{\sqrt{1 - \bar{\alpha}_t}} \boldsymbol{\epsilon}_\theta(\mathbf{x}_t, t) \right) + \sigma_t \mathbf{z} xt1=αt 1(xt1αˉt 1αtϵθ(xt,t))+σtz
5. end for
6. return x 0 \mathbf{x}_0 x0

网络结构(Network Architectures)

扩散模型(Diffusion Models)通常采用 U-Net 架构来构建噪声预测网络 ϵ θ ( x t , t ) \boldsymbol{\epsilon}_\theta(\mathbf{x}_t, t) ϵθ(xt,t),该架构中包含 ResNet 残差块和自注意力(self-attention)层。

时间信息的表示通常采用正弦位置编码(sinusoidal positional embeddings)或随机傅里叶特征(random Fourier features),这些时间表示会被输入到残差块中,方式可以是简单的空间加法(spatial addition),也可以是通过自适应分组归一化(adaptive group normalization)完成。

U-Net 结构如下图所示:

  • 蓝色箭头:卷积(conv 3×3, ReLU)
  • 灰色箭头:复制与拼接(copy and crop)
  • 红色箭头:最大池化(max pool 2×2)
  • 浅绿色箭头:上采样卷积(up-conv 2×2)
  • 深绿色箭头:1×1 卷积(conv 1×1)

参考文献:
Ronneberger et al., “U-Net: Convolutional Networks for Biomedical Image Segmentation”, MICCAI 2015

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

生成模型比较(Comparing Generative Models)

这张图总结了三类主流的生成模型:GAN、VAE 和 Diffusion Models 的训练流程及核心机制。

在这里插入图片描述

GAN(生成对抗网络)

  • 目标:通过对抗训练生成与真实数据相似的样本。
  • 结构
    • 生成器 G ( z ) G(z) G(z):输入随机噪声 z z z,输出生成样本 x ′ \mathbf{x}' x
    • 判别器 D ( x ) D(\mathbf{x}) D(x):判断输入样本是否真实(0/1标签)。
    • 损失设计:生成器和判别器相互博弈,通过最小最大优化来提升生成质量。
  • 关键点:训练不稳定、易模式崩溃,但图像质量高。

VAE(变分自编码器)

  • 目标:最大化变分下界(Evidence Lower Bound, ELBO)。
  • 结构
    • 编码器 q ϕ ( z ∣ x ) q_\phi(\mathbf{z}|\mathbf{x}) qϕ(zx):将数据编码为潜变量 z z z
    • 解码器 p θ ( x ∣ z ) p_\theta(\mathbf{x}|\mathbf{z}) pθ(xz):从潜变量还原出原始数据 x ′ \mathbf{x}' x
  • 关键点:优化目标可导、稳定,但生成图像较模糊。

Diffusion Models(扩散模型)

  • 目标:通过逐步加噪并反向去噪实现数据生成。
  • 结构
    • 前向过程:从 x 0 \mathbf{x}_0 x0 开始逐步加入高斯噪声,得到一系列噪声状态 x 1 , x 2 , . . . , z \mathbf{x}_1, \mathbf{x}_2, ..., \mathbf{z} x1,x2,...,z
    • 反向过程:学习一个去噪网络,从 z \mathbf{z} z 开始逐步还原出数据。
  • 关键点:训练稳定、样本多样性高,但采样速度较慢。

这三种模型分别代表了当前生成模型研究的三个主要方向,各有优劣,实际应用中可根据需求选择。

生成式学习三难困境(The Generative Learning Trilemma)

这张图展示了生成模型面临的“三难困境”,即很难同时在以下三个方面都表现优异:

在这里插入图片描述

  1. 高质量样本(High Quality Samples)
  2. 快速采样(Fast Sampling)
  3. 模式覆盖 / 多样性(Mode Coverage / Diversity)

不同类型的生成模型在这三方面的表现各有偏重:

  • GANs(生成对抗网络)

    • 优势:生成样本质量高采样速度快(一次前向传播即可生成图像)。
    • 劣势:模式崩溃(mode collapse),样本多样性不足。
  • Diffusion Models(扩散模型)

    • 优势:高质量多样性好(采样分布更接近真实分布)。
    • 劣势:采样慢,因为需要多步反向去噪。
  • VAEs(变分自编码器)

    • 优势:模式覆盖广,具有理论上的最大似然支持。
    • 劣势:生成样本质量相对较低。

研究进展

  • Dharaiwal 和 Nichol (2021)
    • 发现扩散模型在样本质量和多样性方面优于 GAN,但推理(采样)时间远远长于 GAN。
    • 提出加速扩散模型采样的研究是当前的活跃方向,已有大量进展。

该图引用了 ICLR 2022 的论文:
Xiao et al., “Tackling the Generative Learning Trilemma with Denoising Diffusion GANs”

这项工作尝试结合 GAN 与 Diffusion 的优势,来解决这三难困境。

相关文章:

  • 81、使用DTU控制水下灯光控制
  • ZLG ZCANPro,ECU刷新,bug分享
  • 刚出炉热乎的。UniApp X 封装 uni.request
  • 鸿蒙OS在UniApp中集成Three.js:打造跨平台3D可视化应用#三方框架 #Uniapp
  • 一键净化Excel数据:高性能Python脚本实现多核并行清理
  • uni-app学习笔记二十--pages.json页面路由pages设置
  • 五、单元测试-概述入门
  • 【Python Cookbook】文件与 IO(二)
  • Langchaine4j 流式输出 (6)
  • Vim 支持多种编程语言编辑器
  • NLP学习路线图(十五):TF-IDF(词频-逆文档频率)
  • Python Django完整教程与代码示例
  • 计算机网络(5)——数据链路层
  • 超标量处理器设计6-指令解码
  • Chorme如何对于youtube视频进行画中画背景播放?
  • wordpress免费主题网站
  • 利用 Python 爬虫获取淘宝商品详情
  • Java数据结构——八大排序
  • 04.MySQL数据类型详解
  • 网络攻防技术一:绪论
  • 幼儿园微网站建设栏目/域名注册
  • 什么网站有教做变蛋的/线上卖货平台有哪些
  • 郑州市建设工程信息网站/自动seo网站源码
  • 广西钦州有人帮做网站的公司吗/快速排名优化推广价格
  • 网站建设的网站/互联网推广是什么工作内容
  • 最好的网站建设免费的/视频推广渠道有哪些