从物理方程到AI生成:手把手图解SDE如何统一DDPM、NCSN等扩散模型

张开发
2026/4/17 22:19:55 15 分钟阅读

分享文章

从物理方程到AI生成:手把手图解SDE如何统一DDPM、NCSN等扩散模型
从物理方程到AI生成图解SDE如何统一扩散模型家族在咖啡厅里我经常看到算法工程师们对着扩散模型的数学推导皱眉——那些随机微分方程SDE符号像天书般令人望而生畏。但当我用物理实验室的弹簧振子演示噪声如何影响运动轨迹时他们的眼睛突然亮了起来。这就是本文要做的用弹簧振子的动力学类比带你建立SDE的物理直觉看它如何成为DDPM、NCSN等扩散模型的元语言。1. 弹簧振子里的SDE直觉想象一个浸在糖浆中的弹簧振子图1。它的运动受两种力支配确定性力弹簧的恢复力f(x)-kx像扩散模型中的漂移项把系统拉回平衡位置随机力糖浆分子碰撞产生的布朗力g(t)dw对应扩散模型的噪声调度# 弹簧振子的SDE模拟 def spring_sde(x, t, k1.0, gamma0.1): drift -k * x # 确定性漂移 diffusion gamma * np.sqrt(dt) * np.random.randn() # 随机扩散 return drift * dt diffusion这个简单例子揭示了SDE的核心构件漂移系数f(x,t)决定系统演化的确定性趋势扩散系数g(t)控制噪声注入的强度提示在DDPM中f(x,t)对应逐步加噪的确定性过程g(t)则是噪声调度表2. 扩散模型的三种方言与SDE普通话扩散模型家族看似流派众多实则都在用不同方言描述同一物理过程模型类型漂移系数f(x,t)扩散系数g(t)噪声调度策略DDPM线性衰减的确定性加噪时间依赖的方差表固定步长的离散调度NCSN多尺度噪声注入几何级数噪声序列退火式连续调度SDE统一视角连续时间依赖的漂移自适应扩散强度任意可微调度函数关键突破当我们将离散的加噪步骤无限细分所有扩散模型都收敛到同一个连续SDE描述。就像牛顿力学和爱因斯坦相对论在低速下的统一。3. 逆向SDE噪声雕塑家的秘密工具真正的魔法发生在逆向过程。根据Anderson定理任何SDE都存在对应的逆向方程dx [f(x,t) - g(t)²∇log p_t(x)]dt g(t)dw这个方程中神秘的∇log p_t(x)正是分数函数score function它像GPS一样指引噪声雕塑的方向前向过程逐步将数据x0溶解到噪声中x_t x_0 ∫_0^t f(x,s)ds ∫_0^t g(s)dw_s逆向过程沿着分数指引重建数据dx [f(x,t) - g(t)²s_θ(x,t)]dt g(t)dw注意这里的s_θ(x,t)是学习的分数网络替代真实但不可计算的∇log p_t(x)4. 实践指南用SDE框架调参在Stable Diffusion的实际调参中SDE视角带来独特优势噪声调度设计以VP-SDE为例def variance_preserving_schedule(t, beta_min0.1, beta_max20): beta_t beta_min t*(beta_max - beta_min) return { drift: -0.5 * beta_t, diffusion: np.sqrt(beta_t) }训练技巧对时间t采用重要性采样侧重关键过渡阶段使用EMA稳定分数网络训练结合PC采样器加速推理# PC采样器伪代码 def predictor_corrector_sampling(sde, score_fn, steps1000): x sde.prior_sampling() for i in range(steps): # 预测步朗之万动力学 x x sde.drift(x) sde.diffusion() * noise # 校正步分数匹配 x x 0.1 * score_fn(x) return x当我第一次用SDE框架重新实现DDPM时发现原本分散的trick现在有了统一的理论解释——就像找到所有钥匙的万能锁匠。不过要小心太执着于数学完美可能让你错过工程上的简单有效方案。

更多文章