生成式模型底层原理通关笔记 _
2026/7/7 7:07:11 网站建设 项目流程
  1. 分数匹配 (Score Matching):高斯加噪下的高维引力场构建
  2. 流匹配 (Flow Matching):追求两点之间直线最短的速度场理论

1. DDPM (Denoising Diffusion Probabilistic Models) —— 概率流的单线传话

🧱 核心底层逻辑:马尔可夫链的微扰

DDPM 的本质是:利用一连串极小的条件高斯分布,去逼近一个复杂的、无法直接求解的图像生成分布。它包含一个将图片变模糊的“前向过程”和一个将噪声变清晰的“反向过程”。


📥 详细的前向过程(Forward Process)

前向过程不含任何需要训练的参数。我们人为设定一个噪声调度表(Noise Schedule):β1,β2,…,βT�1,�2,…,��(通常 T=1000�=1000,βt�� 从 0.00010.0001 线性或余弦递增到 0.020.02)。
定义 αt=1−βt��=1−��。

1. 单步迭代加噪

给定清晰图片 x0�0,每一步在前一步的基础上加上一点高斯噪声:

q(xt|xt−1)=N(xt;√1−βtxt−1,βtI)⟹xt=√αtxt−1+√1−αtϵt−1�(��|��−1)=�(��;1−����−1,���)⟹��=����−1+1−����−1

其中 ϵt−1∼N(0,I)��−1∼�(0,�)。

2. 重大数学技巧:“一步到位”推导

为了在训练时不需要从 11 循环迭代到 t�,我们利用高斯分布的独立可加性进行展开:

xt=√αtxt−1+√1−αtϵt−1��=����−1+1−����−1

把 xt−1=√αt−1xt−2+√1−αt−1ϵt−2 代入进去:把 ��−1=��−1��−2+1−��−1��−2 代入进去:

xt=√αtαt−1xt−2+√αt(1−αt−1)ϵt−2+√1−αtϵt−1��=����−1��−2+��(1−��−1)��−2+1−����−1

因为两个独立高斯分布相加:N(0,σ21I)+N(0,σ22I)=N(0,(σ21+σ22)I)�(0,�12�)+�(0,�22�)=�(0,(�12+�22)�),后面两项可以融合成一个新的高斯分布。
最终推导出了著名的重参数化一键加噪公式

xt=√¯αtx0+√1−¯αtϵ��=�¯��0+1−�¯��

  • 其中 ¯αt=∏ti=1αi�¯�=∏�=1���(所有 α� 的累乘)。ϵ∼N(0,I)�∼�(0,�) 是一整个总的高斯噪声
  • 数据维度 (Shape):x0,ϵ,xt�0,�,�� 都是[Batch, C, H, W]

📉 神经网络结构与 Loss 终极推导

1. U-Net 内部细节
  • 输入:脏图 xt��[B, C, H, W]和当前的时间步 t�(标量)。
  • 时间嵌入 (Time Embedding):时间步 t� 会通过 Transformer 同款的正弦/余弦位置编码(Sinusoidal Position Embedding)变成一个一维向量,然后再通过两层多层感知机(MLP)映射到固定的维度(如 512 维)。
  • 特征注入:在 U-Net 的每一个 Downsample/Upsample 的 Residual Block 中,这个时间向量会通过 Linear 层变换成 Scale 和 Shift 参数,通过类 AdaIN(自适应层归一化)的方式强行注入到图像特征中,指导网络:“现在是第几步去噪”。
2. Loss 函数的数学精简

DDPM 的原始数学目标是最大化变分下界(VLB)。经过复杂的 KL 散度推导后,科学家发现它在数学上等价于:让网络去预测前向公式里那个真正的随机噪声 ϵ�

Lsimple(θ)=Et,x0,ϵ[12∥ϵ−ϵθ(xt,t)∥2]�������(�)=��,�0,�[12‖�−��(��,�)‖2]

  • 代码视角的 Loss
    Loss = MSE_Loss(true_noise, network(x_t, t))。简练、优雅、稳定。

📤 DDPM 完整的采样生成算法(Inference)

推理是从纯噪声 xT∼N(0,I)��∼�(0,�) 倒数到 x0�0。因为去噪方差被设为了固定常数 σ2t=βt��2=��(或 ~βt�~�),网络需要计算均值并扣除噪声。

1. 核心数学回退公式

均值部分 μθ(xt,t)=1√αt(xt−βt√1−¯αtϵθ(xt,t))均值部分 ��(��,�)=1��(��−��1−�¯���(��,�))

xt−1=μθ(xt,t)+σtz��−1=��(��,�)+���

  • 核心去噪项:从现在的脏图 xt�� 中减去放大了一定比例的垃圾噪声 ϵθ��,把图里的噪声硬生生扣掉。
  • 缩放恢复项:除以 √αt��,把前向压缩的像素数值整体等比例放大恢复。
  • 灵魂抖动项:σtz���(z∼N(0,I)�∼�(0,�)),每一步算完均值后重新洒上一撮微小的随机噪声,增加生成的多样性(当 t=1�=1 时 z=0�=0)。
2. 采样伪代码流程
# DDPM 推理算法流程
x = sample_standard_noise([Batch, C, H, W]) # 步骤 0:纯噪声出生
for t in range(1000, 0, -1): # 从 1000 倒数到 1
# 1. 网络看一眼当前的图,猜出里面藏了多少噪声
predicted_noise = network(x, t)
# 2. 如果 t > 1,采样一个全新的随机高斯噪声作为“灵魂抖动”;t = 1 时 z = 0
z = sample_standard_noise([Batch, C, H, W]) if t > 1 else 0
# 3. DDPM 核心单步回退计算
alpha = 1 - beta[t]
alpha_bar = alpha_bar_schedule[t]
# 计算均值部分 (对应去噪与缩放)
noise_scale = beta[t] / sqrt(1 - alpha_bar)
x_mean = (1 / sqrt(alpha)) * (x - noise_scale * predicted_noise)
# 最终更新:均值 + 随机方差抖动
x = x_mean + sqrt(beta[t]) * z


2. DDIM (Denoising Diffusion Implicit Models) —— 确定性的非马尔可夫跳跃

🧱 核心底层革命:打破“必须看前一步”的魔咒

DDPM 慢在反向分布 p(xt−1|xt)�(��−1|��) 必须小步挪动。DDIM 的作者做了一个非常天才的数学证明:
前向加噪的一键到位概率 q(xt|x0)�(��|�0) 保持不变(这意味着 DDPM 训练出来的 U-Net 可以完全不改,直接拿来用)。但是,我们可以把反向条件概率修改为同时依赖 xt�� 和最初的原图 x0�0:q(xt−1|xt,x0)�(��−1|��,�0)。

因为引进了 x0�0,去噪轨迹变成了一条隐式的确定性通道,不再局限于马尔可夫链的单线传话。


📥 核心操作细节:隔空反推与重新勾兑

我们在任意指定的第 t� 步采样时,手里只有当前图 xt�� 和网络预测的噪声 ϵθ(xt,t)��(��,�)。

1. 第一步:隔空反推“临时原图” ^x0�^0

既然 xt=√¯αtx0+√1−¯αtϵ��=�¯��0+1−�¯��,我们把公式移项,用 AI 预测的噪声直接反推出原图的估计值:

^x0=xt−√1−¯αtϵθ(xt,t)√¯αt�^0=��−1−�¯���(��,�)�¯�

2. 第二步:重新勾兑出第 t−1�−1 步(或任意想跳到的前一步 tnext�����)

现在我们手里有 ^x0�^0(纯原图成分)和 ϵθ(xt,t)��(��,�)(指向噪声成分的方向)。DDIM 重新写出了通往任意前一步的配方公式:

xt−1=√¯αt−1^x0+√1−¯αt−1−σ2tϵθ(xt,t)+σtϵrand��−1=�¯�−1�^0+1−�¯�−1−��2��(��,�)+�������

  • σt�� 是关键阀门。当 σt=√1−¯αt−11−¯αt√1−¯αt¯αt−1��=1−�¯�−11−�¯�1−�¯��¯�−1 时,此公式完全等价于 DDPM
  • σt=0��=0时(DDIM 核心模式),后面的随机抖动 ϵrand����� 直接清零!用当前预测的噪声方向直接顶替(鸠占鹊巢)了下一步的噪声方向,仅仅通过公式系数来调整噪声的分量权重。

📤 DDIM 的跳步采样算法(Sub-sampling)

因为公式支持跨步,我们不需要走完 1000 步。我们可以自己定义一个子序列,比如[1000, 950, 900, ..., 50],总共只走 20 步。

以下是 σt=0��=0(完全确定性流)下的 DDIM 采样伪代码:

# DDIM 极速确定性采样算法
x = sample_standard_noise([Batch, C, H, W]) # 步骤 0:由初始随机种子固定的一堆沙子
# 自定义跳步序列,例如从 1000 开始,每步跨 50 直至 0
time_steps = [1000, 950, 900, 850, ..., 50, 0]
for i in range(len(time_steps) - 1):
t = time_steps[i]
t_next = time_steps[i+1] # 想要一步跨到的下一个稍微清爽一点的台阶
alpha_bar_t = alpha_bar_schedule[t]
alpha_bar_next = alpha_bar_schedule[t_next]
# 1. 喂给 DDPM 训练好的网络,拿到当前步的预测噪声
pred_noise = network(x, t)
# 2. 核心数学解构:隔空脑补原图 x0_hat
x0_hat = (x - sqrt(1 - alpha_bar_t) * pred_noise) / sqrt(alpha_bar_t)
# 3. 核心数学重构:利用 t_next 的配方比例,强行重新勾兑出下一幅图
# 此时预测噪声直接“鸠占鹊巢”,充当了 t_next 步的噪声分量
pred_dir_x = sqrt(1 - alpha_bar_next) * pred_noise
x = sqrt(alpha_bar_next) * x0_hat + pred_dir_x # 零随机性,轨迹完全固定

💾 扩散两大大门派全细节对比备忘

维度DDPM (概率单线流)DDIM (隐式确定流)
训练过程正常加噪训练(一键加噪法)完全不需要训练!直接抢 DDPM 的模型来跑
反向轨迹依赖马尔可夫链(xt−1��−1 必须死绑在 xt�� 上)非马尔可夫链(通过估算 ^x0�^0 强行打通时空跨度)
采样步数固定 1000 步左右,无法跳跃自定义子序列(20~50 步即可极速成画)
随机项系数 σt��固定常数(每一步回退都故意加上高斯抖动)设为 0(彻底抹除随机性,变为确定性 ODE 轨迹)
输入相同噪声的结果每次生成的图片由于一路上都在随机抖动,完全不同生成的图片百分之百唯一确定,路径被死死锁死

3. 分数匹配 (Score Matching) —— 引力场与能量模型的救赎

🧱 核心痛点与数学破局

早期的生成模型喜欢研究“概率密度函数” p(x)�(�)。但要让一个函数在数学上合法,它的总概率积分必须等于 1。这就强制在分母上加一个归一化常数(配分函数) Zθ��:

pθ(x)=~pθ(x)Zθ其中Zθ=∫~pθ(x)dx��(�)=�~�(�)��其中��=∫�~�(�)��

在高维图片空间里,这个积分根本算不出来。

分数匹配的降维打击:科学家对概率函数取对数,再对图片 x� 求导。这个导数 ∇xlogp(x)∇�log⁡�(�) 被定义为“分数(Score)”。

∇xlogpθ(x)=∇xlog~pθ(x)−∇xlogZθ∇�log⁡��(�)=∇�log⁡�~�(�)−∇�log⁡��

因为 Zθ�� 里面不含 x�,求导后直接变成 0 消失了!从此摆脱了分母的诅咒。


📥 详细的前向与训练细节(Denoising Score Matching)

由于真实图片分布 pdata(x)�����(�) 是离散的样本点,无法直接求导。我们使用去噪分数匹配(DSM),人为制造连续分布。

1. 前向过程(数据搞破坏)

给定一张清晰的[C, H, W]图片 x0�0,我们从噪声池中随机选一个标准差 σ�。然后采样一个标准高斯噪声 ϵ∼N(0,I)�∼�(0,�)。
将它们混合得到脏图 ~x�~:

~x=x0+σϵ�~=�0+��

此时,条件概率分布p(~x|x0)�(�~|�0) 是一个以 x0�0 为均值、σ2�2 为方差的完美高斯分布:

p(~x|x0)=1(√2πσ)dexp(−∥~x−x0∥22σ2)�(�~|�0)=1(2��)�exp⁡(−‖�~−�0‖22�2)

2. 上帝视角标准答案的推导

我们对这个已知的高斯分布求条件分数(对 ~x�~ 求导):

∇~xlogp(~x|x0)=∇~x(−∥~x−x0∥22σ2)=−~x−x0σ2∇�~log⁡�(�~|�0)=∇�~(−‖�~−�0‖22�2)=−�~−�0�2

因为 ~x−x0=σϵ�~−�0=��,所以代入得到:

∇~xlogp(~x|x0)=−σϵσ2=−ϵσ∇�~log⁡�(�~|�0)=−���2=−��

这就是上帝视角的标准答案!它在空间上的维度是[C, H, W],本质就是加进去的噪声取反,再除以标准差。

3. 神经网络结构与 Loss 计算
  • 网络输入:脏图 ~x�~[Batch, C, H, W]和当前的噪声标量 σ�。
  • 网络结构:通常是一个带有时间/噪声嵌入(Noise Embedding)的 U-Net。σ� 会通过正弦位置编码(Sinusoidal Embedding)转成向量,像魔术棒一样注入到 U-Net 的每一个残差块中,用来提醒网络:“你现在面对的是哪个级别的迷雾”。
  • 损失函数(包含所有系数的真实公式)

LDSM(θ)=Ex0,ϵ,σ[12λ(σ)∥∥sθ(~x,σ)+ϵσ∥∥2]����(�)=��0,�,�[12�(�)‖��(�~,�)+��‖2]

(通常设置权重平衡系数 λ(σ)=σ2�(�)=�2,Loss 公式可以进一步简化为:12∥σsθ(~x,σ)+ϵ∥212‖���(�~,�)+�‖2,这就和 DDPM 的预测噪声形式在数学上完全等价了!)


📤 详细的推理/生成细节(Langevin Dynamics)

训练完成后,神经网络 sθ(x,σ)��(�,�) 变成了一个全能指南针。我们从纯高斯噪声 xT∼N(0,I)��∼�(0,�) 开始,使用退火朗之万动力学(Annealed Langevin Dynamics)倒数生成。

假设我们从噪声最大级别 σ1�1 逐步降低到最小级别 σL��,在每个噪声级别下迭代 M� 步:

# 伪代码级详细算法流
x = sample_pure_noise([C, H, W]) # 步骤 0:随机出生
for sigma in [sigma_1, sigma_2, ..., sigma_L]: # 从大噪到小噪
step_size = epsilon_step * (sigma / sigma_L)**2 # 根据当前噪声动态调整步长
for m in range(M): # 在当前迷雾级别下修正 M 步
# 1. 网络观测,输出引力场(Shape: [C, H, W])
score = network(x, sigma)
# 2. 采样一撮全新的微弱高斯噪声,用于注入灵魂(Shape: [C, H, W])
z = sample_standard_noise([C, H, W])
# 3. 朗之万核心更新公式
# 确定性降噪项:顺着引力走;随机探索项:揉入微小随机沙子防止死板
x = x + 0.5 * step_size * score + sqrt(step_size) * z

当两层循环结束,图片小球就顺着平滑的概率山坡,稳稳地停在了真实图片的聚集地 x0�0。



4. 流匹配 (Flow Matching) —— 速度场的终极艺术

🧱 核心痛点与数学破局

扩散模型和分数匹配都在和“高斯分布”死磕,导致粒子在空间中移动的轨迹是一条极其弯曲的几何曲线

流匹配的降维打击:抛弃复杂的概率图层演变,直接回归经典的连续介质力学(Continuity Equation)。我们直接定义一个时间 t∈[0,1]�∈[0,1],定义一个生成速度场(Vector Field)vθ(x,t)��(�,�)。AI 的目标不是预测噪声,也不是预测斜坡,而是精准预测像素点在时间 t� 时的移动速度向量


📥 详细的前向与训练细节(Conditional Flow Matching)

1. 前向过程(最优传输直线插值)

流匹配最强悍的形态是最优传输流匹配(OT-Flow Matching)
给定真实图片 x0�0[C, H, W]和纯高斯噪声 x1�1[C, H, W]。注意,这里的流向是从 x0�0(0时刻)直线传送到 x1�1(1时刻)。
我们定义任意中间时间 t� 的直路线为:

xt=(1−t)x0+tx1��=(1−�)�0+��1

这在数学上对应了一个精确的条件概率路径:

pt(x|x0)=N(x;(1−t)x0,t2I)��(�|�0)=�(�;(1−�)�0,�2�)

2. 上帝视角真实速度的推导

根据常微分方程(ODE)的定义,速度是位移对时间的导数。我们直接对上面的直线公式关于 t� 求导:

ut(x|x0,x1)=dxtdt=ddt[(1−t)x0+tx1]=x1−x0��(�|�0,�1)=�����=���[(1−�)�0+��1]=�1−�0

看清楚这个惊天细节了吗?!真实的条件速度 ut��是一个常数,与时间 t� 毫无关系!它就是一个死死指向终点的横截面直线向量[C, H, W]

3. 神经网络结构与 Loss 计算
  • 网络输入:混合糊图 xt��[Batch, C, H, W]和时间标量 t∈[0,1]�∈[0,1]。
  • 网络结构:现代流匹配通常采用Diffusion Transformer (DiT)架构(如 SD3 和 Flux)。它把图片切成 Patch 变成 Token,把时间 t� 做 Embedding 后作为 Modulation 信号去控制 Transformer Block 里的 LayerNorm 层,非常适合学习直线的长距离依赖。
  • 损失函数(Flow Matching 真实核心公式)

LCFM(θ)=Et∼U(0,1),x0,x1[12∥∥vθ(xt,t)−(x1−x0)∥2]����(�)=��∼�(0,1),�0,�1[12‖��(��,�)−(�1−�0)‖2]

(大白话:AI 看着 t� 时刻的混淆图 xt��,拼命去猜测那个由上帝手工拔河拉出来的直线速度 x1−x0�1−�0。)


📤 详细的推理/生成细节(ODE Vector Field Sampling)

生成阶段,时间反向流动,我们从 t=1�=1(纯噪声 x1�1)出发,一滴随机沙子都不加,使用纯确定性的常微分方程求解器(ODE Solver)直接向 t=0�=0 踩油门。

由于轨迹被大幅度拉直,我们可以使用最直观的欧拉法(Euler Method),只需要极少的步数(例如 N=10�=10 步):

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询