导读:本期聚焦于韩兆瑞创作的《Diffusion模型:预测噪声和预测原图,哪种训练目标效果更好?》,敬请观看详情。Diffusion模型的核心思想是学习一个反向去噪过程,让神经网络逐步把纯噪声还原成清晰图像。在这个框架下,训练目标通常有两种选择:让网络直接预测每一步需要去除的噪声(ε-prediction),或者预测去噪后的干净图像(x0-prediction)。两者的损失函数形式不同,梯度传播路径也不同,进而影响训练稳定性和最终生成质量。DDPM最初采用的是预测噪声,后续许多大规模模型如Stable Diffusion也沿用了这一目标;而预测原图在某些任务中表现出更直观的语义控制能力。本文将从数学推导、代码实现和实际效果三个层面对比这两种训练目标,帮助读者理解为什么预测噪声成为主流,以及什么场景下预测原图更合适。

图像生成领域的Diffusion模型近年来表现抢眼,其核心思路是训练一个神经网络来逆转一个逐步加噪的过程。前向扩散时,我们不断往真实图像上叠加高斯噪声,经过足够多步后图像会变成纯噪声;反向扩散时,网络需要学会从噪声中一步步恢复出清晰图像。在这个过程中,神经网络在每一步接收带噪图像和时间步信息,输出一个预测结果。而这个预测结果应该是什么,直接决定了训练目标的定义。目前最常见的两种选择是预测噪声和预测原图。

Diffusion模型:预测噪声和预测原图,哪种训练目标效果更好?

从直觉上看,预测噪声意味着让网络学会“擦除”每一步添加的噪声,而预测原图则要求网络直接输出干净图像。虽然两者在数学上可以通过重参数化相互转换,但实际训练中的行为和效果差异很大。接下来我们分别拆解这两种训练目标,并讨论为什么预测噪声成为当前主流方案。

预测噪声:从DDPM开始的主流选择

DDPM(Denoising Diffusion Probabilistic Models)奠定了预测噪声目标的基础。在前向扩散过程中,图像\(x_0\)经过\(T\)步逐渐添加高斯噪声,每一步可以表示为\(x_t = \sqrt{\bar{\alpha}_t} x_0 + \sqrt{1-\bar{\alpha}_t} \epsilon\),其中\(\epsilon\)是标准高斯噪声,\(\bar{\alpha}_t\)是累积的信号保留系数。神经网络\(\epsilon_\theta(x_t, t)\)接收带噪图像\(x_t\)和时间步\(t\),目标是预测出实际添加的噪声\(\epsilon\)。训练时使用均方误差损失:\(L = \mathbb{E}_{t, x_0, \epsilon} \left[ \| \epsilon_\theta(x_t, t) - \epsilon \|^2 \right]\)。由于噪声服从简单的高斯分布,网络只需学习一个同维度的映射,这大大降低了优化难度。

下面是一段PyTorch风格的训练循环示例,展示了预测噪声目标的实现细节。代码中通过累积系数\(\bar{\alpha}_t\)生成带噪图像,然后计算预测噪声与实际噪声的MSE损失。

import torch
import torch.nn.functional as F

def train_step_epsilon(model, x_0, optimizer, alpha_bar_t):
    batch_size = x_0.shape[0]
    t = torch.randint(1, T, (batch_size,), device=x_0.device)
    noise = torch.randn_like(x_0)
    alpha_t = alpha_bar_t[t].view(-1, 1, 1, 1)
    x_t = torch.sqrt(alpha_t) * x_0 + torch.sqrt(1 - alpha_t) * noise
    pred_noise = model(x_t, t)
    loss = F.mse_loss(pred_noise, noise)
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
    return loss.item()

预测噪声目标的一大优势是训练稳定。因为在任意时间步\(t\),噪声都来自标准正态分布,网络输出的尺度相对固定,梯度幅度不会剧烈波动。这使得模型可以使用较大的学习率,训练过程更加平滑。同时,生成时使用迭代去噪公式\(x_{t-1} = \frac{1}{\sqrt{\alpha_t}} \left( x_t - \frac{1-\alpha_t}{\sqrt{1-\bar{\alpha}_t}} \epsilon_\theta(x_t, t) \right) + \sigma_t z\),可以逐步还原图像。不过这种目标也有缺点:它不直接提供中间步骤的清晰图像,导致无法方便地进行图像编辑或可视化去噪过程;此外在高噪声步骤中,噪声占比很大,预测误差会被放大,影响最终生成质量。

预测原图:更直观但挑战更大

另一种训练目标是让网络直接预测去噪后的原图,即\(x_0^\theta(x_t, t)\)。损失函数变为\(L = \mathbb{E}_{t, x_0, \epsilon} \left[ \| x_0^\theta(x_t, t) - x_0 \|^2 \right]\)。这种目标在概念上非常直观:我们希望网络在每个时间步都能输出一张清晰图像,这样在生成过程中可以直接观察中间结果,也便于引入感知损失或对抗损失来提升图像质量。从数学上看,一旦网络输出了\(x_0\)的预测值,可以通过公式\(\epsilon_\theta = \frac{x_t - \sqrt{\bar{\alpha}_t} x_0^\theta}{\sqrt{1-\bar{\alpha}_t}}\)转换回噪声预测,因此两种目标在理论上是等价的。

预测原图的训练代码与预测噪声类似,只是损失函数计算的对象不同。以下示例展示了如何训练一个输出原图的网络。

def train_step_x0(model, x_0, optimizer, alpha_bar_t):
    batch_size = x_0.shape[0]
    t = torch.randint(1, T, (batch_size,), device=x_0.device)
    noise = torch.randn_like(x_0)
    alpha_t = alpha_bar_t[t].view(-1, 1, 1, 1)
    x_t = torch.sqrt(alpha_t) * x_0 + torch.sqrt(1 - alpha_t) * noise
    pred_x0 = model(x_t, t)
    loss = F.mse_loss(pred_x0, x_0)
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
    return loss.item()

然而,预测原图在实际训练中面临更多困难。当时间步\(t\)较大时,带噪图像\(x_t\)中噪声占据主导地位,图像内容几乎被完全掩盖,此时要求网络直接恢复出清晰原图是一项极具挑战的任务。损失函数的梯度在这些高噪声步骤会变得非常大,容易导致训练不稳定,甚至出现梯度爆炸。同时,由于原图分布远比高斯噪声复杂,网络需要学习更复杂的映射,收敛速度通常慢于预测噪声。因此,虽然预测原图在图像编辑、超分辨率等需要中间可视化或语义控制的场景中具有优势,但大多数大规模生成模型并没有直接采用它。

两种训练目标对比:为什么预测噪声成为主流?

从数学关系上看,预测噪声和预测原图之间存在一个与时间步相关的缩放因子。将预测原图的损失对网络参数的梯度展开,可以发现它等价于预测噪声损失的梯度乘以一个与\(\bar{\alpha}_t\)有关的权重。具体来说,对\(x_0\)预测的MSE损失相当于对噪声预测的MSE损失施加了一个\( \frac{1-\bar{\alpha}_t}{\bar{\alpha}_t} \)的加权。当\(t\)较小时,\(\bar{\alpha}_t\)接近1,权重较小;当\(t\)较大时,权重非常大,这导致高噪声步骤的梯度主导训练,从而使得优化不稳定。预测噪声目标则天然具有均匀的梯度尺度,因为噪声本身不随\(t\)改变分布,这种隐式的梯度均衡是它训练稳定的重要原因。

实际模型的选择也印证了这一点。DDPM及其后续变体(如Improved DDPM、ADM)均采用预测噪声。Stable Diffusion、DALL·E 2等大规模文本到图像模型同样基于噪声预测目标,并结合Classifier-Free Guidance技术进一步提升生成质量。这些成功案例表明,预测噪声在经过充分调优后能够取得极佳的图像生成效果,并且在训练超大规模模型时稳定性至关重要。而预测原图虽然在早期一些工作中被使用过,但后来大多被噪声预测或混合目标取代。此外,还有研究者提出了v-prediction(预测速度场)作为折中方案,它同时利用了噪声和原图的信息,在部分任务上表现出更好的数值稳定性。

那么在实际项目中应该如何选择呢?如果目标是训练一个高质量的图像生成模型,建议优先采用预测噪声,因为它经过了大量实践验证,训练稳定,生态工具完善。如果任务需要模型在去噪中间步骤输出有意义的清晰图像(例如图像编辑、超分辨率、医学影像重建等),预测原图可能更有优势,但需要注意以下几点:使用较小的学习率,对损失函数按时间步进行加权(如使用SNR加权),或者采用混合目标在训练初期使用噪声预测、后期切换为原图预测。此外,也可以考虑使用v-prediction作为折中,它在某些数据集上能同时获得两者的优点。总的来说,两种训练目标并非互斥,理解它们的本质差异有助于我们在具体任务中做出更合理的设计。

Diffusion模型预测噪声预测原图修改时间:2026-09-23 20:39:51

免责声明:已尽一切努力确保本网站所含信息的准确性。网站作品多为原创整理与精心创作,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们进行处理Email:chomcom@qq.com。
引用或转载本作品时,请注明当前出处:https://www.ipipp.com/html/0923/61042.html,基于非商业用途的前提下,欢迎转载或二创本作品。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。