1. 从噪声到数据的魔法:Score-Based Models核心原理
在生成式模型的江湖里,Score-Based Models(基于分数的模型)正以独特的数学美感吸引着越来越多的研究者。与传统生成对抗网络(GAN)和变分自编码器(VAE)不同,这类模型通过直接学习数据分布的梯度场(即分数函数)来实现数据生成,这种看似简单的设计思想背后蕴含着深刻的数学原理。
1.1 分数函数的物理直觉
想象你身处一个多山的地形中,手中拿着显示海拔高度但无坐标的地图。分数函数就像是告诉你"往哪个方向走可以最快到达山顶"的指南针——它不告诉你具体位置,但指明了数据概率密度增长最快的方向。数学上,分数函数定义为对数概率密度的梯度:
$$
\nabla_x \log p(x)
$$
这个定义看似简单,却解决了传统概率模型中的两大难题:
- 不需要计算难以处理的归一化常数(因为梯度操作会消去常数项)
- 可以通过神经网络直接近似,无需严格满足概率公理
1.2 扩散过程的双向视角
Score-Based Models的核心创新在于将扩散过程的正向(加噪)和反向(去噪)统一在一个框架中。正向过程可以看作是将数据点逐渐"推离"流形,而学习到的分数函数则提供了返回数据流形的"导航路线图"。
具体实现时,我们通常采用随机微分方程(SDE)来描述这个过程。以方差爆炸(VE)SDE为例:
$$
dx = \sqrt{2t} dw
$$
对应的反向过程则是:
$$
dx = [-x - t\nabla_x \log p_t(x)]dt + \sqrt{2t} dw
$$
这种表述的美妙之处在于,无论选择何种SDE形式,反向过程都只需要估计分数函数这一项。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 工业级实现的关键技术栈
2.1 网络架构设计实战
在实际工程中,U-Net仍然是Score-Based Models的主流选择,但需要针对分数估计任务进行特殊优化:
python复制class TimeEmbeddedUNet(nn.Module):
def __init__(self):
super().__init__()
# 时间步编码器
self.time_embed = nn.Sequential(
