在上一章中,我们讨论了前向扩散过程,这是一种通过在T个时间步中迭代添加高斯噪声来系统地破坏数据$x_0$的方法:$$ x_0 \rightarrow x_1 \rightarrow x_2 \rightarrow \dots \rightarrow x_T $$在此过程结束时,$x_T$基本上与纯高斯噪声无法区分。我们现在的目标是生成模型:我们想生成新的数据样本,使其看起来像是来自原始数据分布$q(x_0)$。为了实现此目的,我们需要找出如何逆转加噪过程。设想从一个简单分布(如标准高斯分布$\mathcal{N}(0, I)$)中抽样得到的$x_T$开始。如果我们可以某种方式逆转前向过程的每一步,从$t=T$向后移动到$t=1$,我们可能将这个初始噪声样本$x_T$转换成一个真实的数据样本$x_0$:$$ x_T \rightarrow x_{T-1} \rightarrow x_{T-2} \rightarrow \dots \rightarrow x_0 $$这种逆转定义了扩散模型的生成路径。digraph G { rankdir=LR; node [shape=box, style=rounded, fontname="sans-serif", color="#495057", fontcolor="#495057"]; edge [fontname="sans-serif", color="#495057", fontcolor="#495057"]; subgraph cluster_forward { label = "前向过程 (加噪)"; style=dashed; color="#adb5bd"; bgcolor="#f8f9fa"; x0 [label="x_0 (数据)", color="#1c7ed6", fontcolor="#1c7ed6"]; xt_minus_1_f [label="...", shape=plaintext]; xt_f [label="x_t"]; xt_plus_1_f [label="...", shape=plaintext]; xT_f [label="x_T (噪声)", color="#fa5252", fontcolor="#fa5252"]; x0 -> xt_minus_1_f [label=" q(x_1|x_0)", fontsize=10]; xt_minus_1_f -> xt_f [label=" q(x_t|x_{t-1})", fontsize=10]; xt_f -> xt_plus_1_f [label=" q(x_{t+1}|x_t)", fontsize=10]; xt_plus_1_f -> xT_f []; } subgraph cluster_reverse { label = "逆向过程 (生成)"; style=dashed; color="#adb5bd"; bgcolor="#f8f9fa"; x0_r [label="x_0 (生成数据)", color="#1c7ed6", fontcolor="#1c7ed6"]; xt_minus_1_r [label="x_{t-1}"]; xt_r [label="...", shape=plaintext]; xt_plus_1_r [label="x_{t+1}"]; xT_r [label="x_T (初始噪声)", color="#fa5252", fontcolor="#fa5252"]; xT_r -> xt_plus_1_r [label=" p_θ(x_{T-1}|x_T)", fontsize=10]; xt_plus_1_r -> xt_r [label=" p_θ(x_t|x_{t+1})", fontsize=10]; xt_r -> xt_minus_1_r [label=" p_θ(x_{t-1}|x_t)", fontsize=10]; xt_minus_1_r -> x0_r [label=" p_θ(x_0|x_1)", fontsize=10]; } }图示了前向(加噪)和逆向(生成)过程,它们是向相反方向移动的马尔可夫链。前向过程由转移概率$q(x_t | x_{t-1})$定义,它指定了如何通过添加受控量的噪声从$x_{t-1}$得到$x_t$。逆向过程的核心目标是学习相反的转移:概率分布$p(x_{t-1} | x_t)$。这个分布告诉我们,给定时间步$t$的一个带噪声样本$x_t$,在前一个时间步$t-1$上,可能的“更少噪声”样本$x_{t-1}$的分布是怎样的。如果我们能成功建模所有相关时间步$t$(从$T$到$1$)的逆向转移概率$p(x_{t-1} | x_t)$,我们就可以实现生成过程:从纯噪声开始:抽样$x_T \sim \mathcal{N}(0, I)$。迭代去噪:对于$t = T, T-1, \dots, 1$:抽样$x_{t-1} \sim p(x_{t-1} | x_t)$。最终样本$x_0$就是生成结果。因此,构建扩散模型的主要难题在于有效地估计或参数化这些逆向条件概率$p(x_{t-1} | x_t)$。前向过程$q(x_t | x_{t-1})$设计得在数学上很方便(即添加高斯噪声)。正如我们将在接下来的章节中看到,真实的逆向转移$q(x_{t-1} | x_t, x_0)$(注意对$x_0$的条件依赖)是已知的,但计算所需的$q(x_{t-1} | x_t)$需要知道完整的数据分布,而这正是我们试图学习的目标。这种难处理性促使我们使用强大的函数逼近器,特别是神经网络,来学习一个逼近真实逆向转移的模型$p_\theta(x_{t-1} | x_t)$。我们的目标已明确:学习一个模型,它能够根据当前状态$x_t$预测前一个状态$x_{t-1}$,使我们能够沿着链从噪声向数据逆向推演。接下来的章节将详细说明我们如何构建和训练一个神经网络来执行此任务。