DDPM 和 DDIM 采样的实现 为了实现 DDPM(去噪扩散概率模型),首先需要定义一个噪声时间表,该时间表在固定步数(例如 1,000 步)内逐步向数据添加高斯噪声。训练一个神经网络(例如 U-Net)来预测每一步的噪声。在采样过程中,从纯噪声开始,通过应用训练好的模型迭代去噪。每一步都使用预测的噪声来更新样本,遵循马尔可夫链过程(每一步仅取决于前一步的状态)。例如,在 PyTorch 中,采样循环可能涉及从步长 T
反向迭代到 0
,使用模型的预测计算每个反向扩散步长的均值和方差。
对于 DDIM(去噪扩散隐式模型),设置类似,但采样过程经过重塑以去除马尔可夫假设。DDIM 使用非马尔可夫前向过程,通过定义跳过中间步骤的轨迹来实现确定性采样。为此,需要在采样期间修改更新规则:不依赖于完整的马尔可夫链,而是使用步骤的子集(例如 50–100 步),并使用确定性修正项调整噪声预测。例如,可以从原始 DDPM 噪声时间表中每隔 k
步进行采样,并使用当前样本和模型预测的加权组合计算更新,这由超参数 η
控制(设置为 0
时表示完全确定性行为)。
采样的关键差异 主要区别在于采样速度和确定性。DDPM 需要所有步骤(例如 1,000 步)来生成样本,计算量较大。DDIM 解耦了训练和采样过程,通过更少的步骤(例如 50 步)实现更快生成,同时保持质量。例如,DDIM 可以通过利用学习到的噪声预测来近似中间状态,从而跳过步骤,将推理时间减少 10-20 倍。此外,DDIM 支持确定性采样(当 η=0
时),确保相同的噪声输入始终产生相同的输出,这对于重现性非常有用。相比之下,DDPM 的马尔可夫过程本质上是随机的,即使初始噪声固定也是如此。
何时使用哪种方法 当优先考虑样本质量而非速度时,应使用 DDPM,例如为离线应用生成高保真图像。其逐步去噪过程与训练目标紧密对齐,通常能产生更一致的结果。然而,对于实时应用(例如交互式工具),由于其更快的采样速度,DDIM 更可取。例如,使用 DDIM 在 50 步内生成一张 256x256 图像可能在 GPU 上需要 2 秒,而 DDPM 可能需要 20 秒。开发者还可以微调 DDIM 的 η
参数来平衡速度和样本多样性:较高的 η
值会引入随机性,在步数较少的情况下模仿 DDPM 的行为。这两种方法使用相同的训练流程,因此在它们之间切换通常只需要修改采样循环。