生成式模型底层原理通关笔记 _
分数匹配 (Score Matching)高斯加噪下的高维引力场构建流匹配 (Flow Matching)追求两点之间直线最短的速度场理论1. DDPM (Denoising Diffusion Probabilistic Models) —— 概率流的单线传话 核心底层逻辑马尔可夫链的微扰DDPM 的本质是利用一连串极小的条件高斯分布去逼近一个复杂的、无法直接求解的图像生成分布。它包含一个将图片变模糊的“前向过程”和一个将噪声变清晰的“反向过程”。 详细的前向过程Forward Process前向过程不含任何需要训练的参数。我们人为设定一个噪声调度表Noise Scheduleβ1,β2,…,βT1,2,…,通常 T10001000βt 从 0.00010.0001 线性或余弦递增到 0.020.02。定义 αt1−βt1−。1. 单步迭代加噪给定清晰图片 x00每一步在前一步的基础上加上一点高斯噪声q(xt|xt−1)N(xt;√1−βtxt−1,βtI)⟹xt√αtxt−1√1−αtϵt−1(|−1)(;1−−1,)⟹−11−−1其中 ϵt−1∼N(0,I)−1∼(0,)。2. 重大数学技巧“一步到位”推导为了在训练时不需要从 11 循环迭代到 t我们利用高斯分布的独立可加性进行展开xt√αtxt−1√1−αtϵt−1−11−−1把 xt−1√αt−1xt−2√1−αt−1ϵt−2 代入进去把 −1−1−21−−1−2 代入进去xt√αtαt−1xt−2√αt(1−αt−1)ϵt−2√1−αtϵt−1−1−2(1−−1)−21−−1因为两个独立高斯分布相加N(0,σ21I)N(0,σ22I)N(0,(σ21σ22)I)(0,12)(0,22)(0,(1222))后面两项可以融合成一个新的高斯分布。最终推导出了著名的重参数化一键加噪公式xt√¯αtx0√1−¯αtϵ¯01−¯其中 ¯αt∏ti1αi¯∏1所有 α 的累乘。ϵ∼N(0,I)∼(0,) 是一整个总的高斯噪声。数据维度 (Shape)x0,ϵ,xt0,, 都是[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]代码视角的 LossLoss MSE_Loss(true_noise, network(x_t, t))。简练、优雅、稳定。 DDPM 完整的采样生成算法Inference推理是从纯噪声 xT∼N(0,I)∼(0,) 倒数到 x00。因为去噪方差被设为了固定常数 σ2tβt2或 ~βt~网络需要计算均值并扣除噪声。1. 核心数学回退公式均值部分 μθ(xt,t)1√αt(xt−βt√1−¯αtϵθ(xt,t))均值部分 (,)1(−1−¯(,))xt−1μθ(xt,t)σtz−1(,)核心去噪项从现在的脏图 xt 中减去放大了一定比例的垃圾噪声 ϵθ把图里的噪声硬生生扣掉。缩放恢复项除以 √αt把前向压缩的像素数值整体等比例放大恢复。灵魂抖动项σtzz∼N(0,I)∼(0,)每一步算完均值后重新洒上一撮微小的随机噪声增加生成的多样性当 t11 时 z00。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 0z 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]) * z2. DDIM (Denoising Diffusion Implicit Models) —— 确定性的非马尔可夫跳跃 核心底层革命打破“必须看前一步”的魔咒DDPM 慢在反向分布 p(xt−1|xt)(−1|) 必须小步挪动。DDIM 的作者做了一个非常天才的数学证明前向加噪的一键到位概率 q(xt|x0)(|0) 保持不变这意味着 DDPM 训练出来的 U-Net 可以完全不改直接拿来用。但是我们可以把反向条件概率修改为同时依赖 xt 和最初的原图 x00q(xt−1|xt,x0)(−1|,0)。因为引进了 x00去噪轨迹变成了一条隐式的确定性通道不再局限于马尔可夫链的单线传话。 核心操作细节隔空反推与重新勾兑我们在任意指定的第 t 步采样时手里只有当前图 xt 和网络预测的噪声 ϵθ(xt,t)(,)。1. 第一步隔空反推“临时原图” ^x0^0既然 xt√¯αtx0√1−¯αtϵ¯01−¯我们把公式移项用 AI 预测的噪声直接反推出原图的估计值^x0xt−√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^01−¯−1−2(,)σt 是关键阀门。当 σt√1−¯αt−11−¯αt√1−¯αt¯αt−11−¯−11−¯1−¯¯−1 时此公式完全等价于 DDPM。当σt00时DDIM 核心模式后面的随机抖动 ϵrand 直接清零用当前预测的噪声方向直接顶替鸠占鹊巢了下一步的噪声方向仅仅通过公式系数来调整噪声的分量权重。 DDIM 的跳步采样算法Sub-sampling因为公式支持跨步我们不需要走完 1000 步。我们可以自己定义一个子序列比如[1000, 950, 900, ..., 50]总共只走 20 步。以下是 σt00完全确定性流下的 DDIM 采样伪代码# DDIM 极速确定性采样算法x sample_standard_noise([Batch, C, H, W]) # 步骤 0由初始随机种子固定的一堆沙子# 自定义跳步序列例如从 1000 开始每步跨 50 直至 0time_steps [1000, 950, 900, 850, ..., 50, 0]for i in range(len(time_steps) - 1):t time_steps[i]t_next time_steps[i1] # 想要一步跨到的下一个稍微清爽一点的台阶alpha_bar_t alpha_bar_schedule[t]alpha_bar_next alpha_bar_schedule[t_next]# 1. 喂给 DDPM 训练好的网络拿到当前步的预测噪声pred_noise network(x, t)# 2. 核心数学解构隔空脑补原图 x0_hatx0_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_noisex 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]图片 x00我们从噪声池中随机选一个标准差 σ。然后采样一个标准高斯噪声 ϵ∼N(0,I)∼(0,)。将它们混合得到脏图 ~x~~xx0σϵ~0此时条件概率分布p(~x|x0)(~|0) 是一个以 x00 为均值、σ22 为方差的完美高斯分布p(~x|x0)1(√2πσ)dexp(−∥~x−x0∥22σ2)(~|0)1(2)exp(−‖~−0‖222)2. 上帝视角标准答案的推导我们对这个已知的高斯分布求条件分数对 ~x~ 求导∇~xlogp(~x|x0)∇~x(−∥~x−x0∥22σ2)−~x−x0σ2∇~log(~|0)∇~(−‖~−0‖222)−~−02因为 ~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()2Loss 公式可以进一步简化为12∥σsθ(~x,σ)ϵ∥212‖(~,)‖2这就和 DDPM 的预测噪声形式在数学上完全等价了) 详细的推理/生成细节Langevin Dynamics训练完成后神经网络 sθ(x,σ)(,) 变成了一个全能指南针。我们从纯高斯噪声 xT∼N(0,I)∼(0,) 开始使用退火朗之万动力学Annealed Langevin Dynamics倒数生成。假设我们从噪声最大级别 σ11 逐步降低到最小级别 σ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当两层循环结束图片小球就顺着平滑的概率山坡稳稳地停在了真实图片的聚集地 x00。4. 流匹配 (Flow Matching) —— 速度场的终极艺术 核心痛点与数学破局扩散模型和分数匹配都在和“高斯分布”死磕导致粒子在空间中移动的轨迹是一条极其弯曲的几何曲线。流匹配的降维打击抛弃复杂的概率图层演变直接回归经典的连续介质力学Continuity Equation。我们直接定义一个时间 t∈[0,1]∈[0,1]定义一个生成速度场Vector Fieldvθ(x,t)(,)。AI 的目标不是预测噪声也不是预测斜坡而是精准预测像素点在时间 t 时的移动速度向量。 详细的前向与训练细节Conditional Flow Matching1. 前向过程最优传输直线插值流匹配最强悍的形态是最优传输流匹配OT-Flow Matching。给定真实图片 x00[C, H, W]和纯高斯噪声 x11[C, H, W]。注意这里的流向是从 x000时刻直线传送到 x111时刻。我们定义任意中间时间 t 的直路线为xt(1−t)x0tx1(1−)01这在数学上对应了一个精确的条件概率路径pt(x|x0)N(x;(1−t)x0,t2I)(|0)(;(1−)0,2)2. 上帝视角真实速度的推导根据常微分方程ODE的定义速度是位移对时间的导数。我们直接对上面的直线公式关于 t 求导ut(x|x0,x1)dxtdtddt[(1−t)x0tx1]x1−x0(|0,1)[(1−)01]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−x01−0。) 详细的推理/生成细节ODE Vector Field Sampling生成阶段时间反向流动我们从 t11纯噪声 x11出发一滴随机沙子都不加使用纯确定性的常微分方程求解器ODE Solver直接向 t00 踩油门。由于轨迹被大幅度拉直我们可以使用最直观的欧拉法Euler Method只需要极少的步数例如 N1010 步