生成式模型底层原理通关笔记 26/07/06 09:2897013140862:48 ~ 104:41

📅 2026/7/10 12:10:00
生成式模型底层原理通关笔记 26/07/06 09:2897013140862:48 ~ 104:41
DDPM (Denoising Diffusion Probabilistic Models) —— 概率流的单线传话 核心底层逻辑马尔可夫链的微扰DDPM 的本质是利用一连串极小的条件高斯分布去逼近一个复杂的、无法直接求解的图像生成分布。它包含一个将图片变模糊的“前向过程”和一个将噪声变清晰的“反向过程”。 详细的前向过程Forward Process前向过程不含任何需要训练的参数。我们人为设定一个噪声调度表Noise Schedule通常从线性或余弦递增到。定义。单步迭代加噪给定清晰图片每一步在前一步的基础上加上一点高斯噪声其中。重大数学技巧“一步到位”推导为了在训练时不需要从循环迭代到我们利用高斯分布的独立可加性进行展开把代入进去因为两个独立高斯分布相加后面两项可以融合成一个新的高斯分布。最终推导出了著名的重参数化一键加噪公式其中所有的累乘。是一整个总的高斯噪声。数据维度 (Shape)都是 [Batch, C, H, W]。 神经网络结构与 Loss 终极推导U-Net 内部细节输入脏图[B, C, H, W] 和当前的时间步标量。时间嵌入 (Time Embedding)时间步会通过 Transformer 同款的正弦/余弦位置编码Sinusoidal Position Embedding变成一个一维向量然后再通过两层多层感知机MLP映射到固定的维度如 512 维。特征注入在 U-Net 的每一个 Downsample/Upsample 的 Residual Block 中这个时间向量会通过 Linear 层变换成 Scale 和 Shift 参数通过类 AdaIN自适应层归一化的方式强行注入到图像特征中指导网络“现在是第几步去噪”。Loss 函数的数学精简DDPM 的原始数学目标是最大化变分下界VLB。经过复杂的 KL 散度推导后科学家发现它在数学上等价于让网络去预测前向公式里那个真正的随机噪声。代码视角的 LossLoss MSE_Loss(true_noise, network(x_t, t))。简练、优雅、稳定。 DDPM 完整的采样生成算法Inference推理是从纯噪声倒数到。因为去噪方差被设为了固定常数或网络需要计算均值并扣除噪声。核心数学回退公式均值部分核心去噪项从现在的脏图中减去放大了一定比例的垃圾噪声把图里的噪声硬生生扣掉。缩放恢复项除以把前向压缩的像素数值整体等比例放大恢复。灵魂抖动项每一步算完均值后重新洒上一撮微小的随机噪声增加生成的多样性当时。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]) * zDDIM (Denoising Diffusion Implicit Models) —— 确定性的非马尔可夫跳跃 核心底层革命打破“必须看前一步”的魔咒DDPM 慢在反向分布必须小步挪动。DDIM 的作者做了一个非常天才的数学证明前向加噪的一键到位概率保持不变这意味着 DDPM 训练出来的 U-Net 可以完全不改直接拿来用。但是我们可以把反向条件概率修改为同时依赖和最初的原图。因为引进了去噪轨迹变成了一条隐式的确定性通道不再局限于马尔可夫链的单线传话。 核心操作细节隔空反推与重新勾兑我们在任意指定的第步采样时手里只有当前图和网络预测的噪声。第一步隔空反推“临时原图”既然我们把公式移项用 AI 预测的噪声直接反推出原图的估计值第二步重新勾兑出第步或任意想跳到的前一步现在我们手里有纯原图成分和指向噪声成分的方向。DDIM 重新写出了通往任意前一步的配方公式是关键阀门。当时此公式完全等价于 DDPM。当时DDIM 核心模式后面的随机抖动直接清零用当前预测的噪声方向直接顶替鸠占鹊巢了下一步的噪声方向仅仅通过公式系数来调整噪声的分量权重。 DDIM 的跳步采样算法Sub-sampling因为公式支持跨步我们不需要走完 1000 步。我们可以自己定义一个子序列比如 [1000, 950, 900, …, 50]总共只走 20 步。以下是完全确定性流下的 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_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 的模型来跑反向轨迹依赖 马尔可夫链必须死绑在上 非马尔可夫链通过估算强行打通时空跨度采样步数 固定 1000 步左右无法跳跃 自定义子序列20~50 步即可极速成画随机项系数固定常数每一步回退都故意加上高斯抖动 设为 0彻底抹除随机性变为确定性 ODE 轨迹输入相同噪声的结果 每次生成的图片由于一路上都在随机抖动完全不同 生成的图片百分之百唯一确定路径被死死锁死3. 分数匹配 (Score Matching) —— 引力场与能量模型的救赎 核心痛点与数学破局早期的生成模型喜欢研究“概率密度函数”。但要让一个函数在数学上合法它的总概率积分必须等于 1。这就强制在分母上加一个归一化常数配分函数其中在高维图片空间里这个积分根本算不出来。分数匹配的降维打击科学家对概率函数取对数再对图片求导。这个导数被定义为“分数Score”。因为里面不含求导后直接变成 0 消失了从此摆脱了分母的诅咒。 详细的前向与训练细节Denoising Score Matching由于真实图片分布是离散的样本点无法直接求导。我们使用去噪分数匹配DSM人为制造连续分布。前向过程数据搞破坏给定一张清晰的 [C, H, W] 图片我们从噪声池中随机选一个标准差。然后采样一个标准高斯噪声。将它们混合得到脏图此时条件概率分布是一个以为均值、为方差的完美高斯分布上帝视角标准答案的推导我们对这个已知的高斯分布求条件分数对求导因为所以代入得到这就是上帝视角的标准答案它在空间上的维度是 [C, H, W]本质就是加进去的噪声取反再除以标准差。神经网络结构与 Loss 计算网络输入脏图[Batch, C, H, W] 和当前的噪声标量。网络结构通常是一个带有时间/噪声嵌入Noise Embedding的 U-Net。会通过正弦位置编码Sinusoidal Embedding转成向量像魔术棒一样注入到 U-Net 的每一个残差块中用来提醒网络“你现在面对的是哪个级别的迷雾”。损失函数包含所有系数的真实公式(通常设置权重平衡系数Loss 公式可以进一步简化为这就和 DDPM 的预测噪声形式在数学上完全等价了) 详细的推理/生成细节Langevin Dynamics训练完成后神经网络变成了一个全能指南针。我们从纯高斯噪声开始使用退火朗之万动力学Annealed Langevin Dynamics倒数生成。假设我们从噪声最大级别逐步降低到最小级别在每个噪声级别下迭代步伪代码级详细算法流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当两层循环结束图片小球就顺着平滑的概率山坡稳稳地停在了真实图片的聚集地。流匹配 (Flow Matching) —— 速度场的终极艺术 核心痛点与数学破局扩散模型和分数匹配都在和“高斯分布”死磕导致粒子在空间中移动的轨迹是一条极其弯曲的几何曲线。流匹配的降维打击抛弃复杂的概率图层演变直接回归经典的连续介质力学Continuity Equation。我们直接定义一个时间定义一个生成速度场Vector Field。AI 的目标不是预测噪声也不是预测斜坡而是精准预测像素点在时间时的移动速度向量。 详细的前向与训练细节Conditional Flow Matching前向过程最优传输直线插值流匹配最强悍的形态是最优传输流匹配OT-Flow Matching。给定真实图片[C, H, W] 和纯高斯噪声[C, H, W]。注意这里的流向是从0时刻直线传送到1时刻。我们定义任意中间时间的直路线为这在数学上对应了一个精确的条件概率路径上帝视角真实速度的推导根据常微分方程ODE的定义速度是位移对时间的导数。我们直接对上面的直线公式关于求导看清楚这个惊天细节了吗 真实的条件速度是一个常数与时间毫无关系 它就是一个死死指向终点的横截面直线向量 [C, H, W]。神经网络结构与 Loss 计算网络输入混合糊图[Batch, C, H, W] 和时间标量。网络结构现代流匹配通常采用 Diffusion Transformer (DiT) 架构如 SD3 和 Flux。它把图片切成 Patch 变成 Token把时间做 Embedding 后作为 Modulation 信号去控制 Transformer Block 里的 LayerNorm 层非常适合学习直线的长距离依赖。损失函数Flow Matching 真实核心公式(大白话AI 看着时刻的混淆图拼命去猜测那个由上帝手工拔河拉出来的直线速度。) 详细的推理/生成细节ODE Vector Field Sampling生成阶段时间反向流动我们从纯噪声出发一滴随机沙子都不加使用纯确定性的常微分方程求解器ODE Solver直接向踩油门。由于轨迹被大幅度拉直我们可以使用最直观的欧拉法Euler Method只需要极少的步数例如步欧拉法极速生成流算法x sample_pure_noise([C, H, W]) # 从 t 1.0 的噪声海出生N 10 # 总步数dt 1.0 / N # 每一步的时间跨度for step in range(N):# 1. 计算当前所处的时间点从 1.0 倒扣到 0.0t_current 1.0 - step * dt# 2. 喂给 DiT 速度网络求得当前位置的宏观速度场Shape: [C, H, W] # 刚出发时网络预测的是“所有猫的平均速度”随着走动速度会坍缩聚焦向某一只具体的猫 pred_velocity network(x, t_current) # 3. 顺着速度方向笔直向前滑行因为反向所以是减法 x x - dt * pred_velocity 为什么它能做到 4~10 步成画的终极秘密你之前提到的直觉非常致命“随着不断的走速度方向越来越倾向到具体的某一个上”。在数学上如果模型训练完后我们使用 Rectified Flow流直化第一次生成的配对是。我们用这组已经配对好、终点完全锁定的数据重新算 Loss 训练一次。这时候在的荒漠起点上速度向量场不再是模糊的“合力”而是从一开始就被彻底掰直、精准指向那只特定黑猫的完美直线。既然路线变成了真正的几何直线欧拉法开车的步长 dt 就可以设得极大比如 0.25走 4 步小球也能瞬间精准漂移进的终点站。 三大门派硬核全量对比表维度 DDPM (概率门派) Score Matching (分数门派) Flow Matching (流匹配门派)网络核心输出 噪声矩阵分数向量速度向量前向插值轨迹(纯直线)标准答案 (Target) 随机高斯噪声条件分数条件速度(时空常数)推理数学本质 随机马尔可夫链采样 朗之万动力学随机随机微分 (SDE) 确定性常微分方程流 (ODE)商业大模型代表 Stable Diffusion 1.5 / 2.1 早期 SMLD / 理论奠基 Stable Diffusion 3 / Flux / Sora5. VAE (Variational Autoencoder) —— 隐空间的降维与正则化 核心底层逻辑克服算力黑洞与数据编织在像素空间如直接训练扩散模型需要处理接近 80 万个数字显存极易炸裂。VAE 的本质就是一个高级的特征压缩器。普通的自编码器AE只管压缩和还原导致隐空间Latent Space四分五裂。如果扩散模型在没有规律的隐空间里洒沙子反向去噪时就会彻底迷路。VAE 巧妙地解决了这个问题它不把图片压缩成一个死板的固定向量而是压缩成一个“连续的概率分布均值和方差”。并通过引入 KL 散度强行将整个隐空间塑造成规整的、服从标准高斯分布的“绿洲”。 详细的训练细节Training前向重参数化压缩Encoding给定一张清晰像素图像。特征提取通过 Encoder 网络的密集卷积层将空间尺寸缩小 8 倍通道数增加输出两个同尺寸的特征矩阵均值和 方差对数尺寸均为 [4, 64, 64]。重参数化魔术 (Reparameterization Trick)为了从该分布中采样出隐向量且保证梯度可导引入独立随机噪声。此时随机性被剥离到了身上和保持可导隐向量[4, 64, 64] 成功诞生。后向重构Decoding将输入 Decoder 网络通过多层转置卷积反向放大重新拼凑出像素图像。工业级全量损失函数Loss 推导现代大模型如 Stable Diffusion用的 VAE 引入了四项联合拔河的 Loss通常称为 VQ-GAN 风格的 VAE来彻底解决传统 VAE 还原图片模糊磨皮的致命缺陷(像素级重构误差)计算和的 L1/L2 距离。约束大体轮廓、颜色别跑偏。(KL 散度正则项)衡量当前分布与标准高斯分布的距离。强迫隐空间靠拢标准高斯分布公式为(感知损失 Perceptual Loss)将和丢进预训练好的分类网络如 VGG提取中间层高频纹理特征并计算 MSE。从人类视觉肉眼层面迫使边缘和线条变锐利。(对抗损失 Adversarial Loss)引入一个 GAN 判别器判别器拼命挑刺看哪里像假图VAE 为了骗过只能疯狂内卷逼出最真实的局部皮肤毛孔、发丝等超高频真实细节。 详细的推理细节Inference在整体大模型生成流水线中VAE 推理只在最开头若图像图生成或最结尾文生图大功告成时调用。纯文生图时扩散模型直接在隐空间里画好了一个完全去噪的纯净潜在向量[4, 64, 64]。VAE 推理操作直接将塞进训练好的 VAE Decoder 中。解码器瞬间施展反向放大魔术将 [4, 64, 64] 升维释放吐出 [3, 512, 512] 让人类肉眼极度震撼的高清画作。LDM (Latent Diffusion Models) —— 隐空间里的扩散风暴 核心底层逻辑战场的时空转移潜在扩散模型LDM将扩散模型的战场从广袤、充满冗余像素的“像素空间”彻底搬到了 VAE 压缩好的规整“隐空间Latent Space”里。 详细的训练细节Training前向潜在加噪准备清晰图像。调用训练好且冻结参数Frozen的 VAE Encoder 将其打碎成特征替身随机抽取时间步并生成隐空间高斯噪声尺寸也是 [4, 64, 64]。利用重参数化在隐空间注入噪声得到糊掉的潜在向量网络训练与代码级 Loss 计算核心去噪网络通常是 U-Net 或 DiT在隐空间内开辟。损失函数 (Loss)LDM 真实单步训练伪代码流程for pixels, _ in dataloader: # pixels: [B, 3, 512, 512]with torch.no_grad():# 1. 用冻结的 VAE 压缩图像到隐空间moments vae_encoder(pixels)mean, logvar split(moments)# 重参数化采样出 z0std torch.exp(0.5 * logvar)eps_vae torch.randn_like(mean)z0 mean std * eps_vae # z0: [B, 4, 64, 64]# 2. 扩散模型前向潜在加噪 t torch.randint(1, 1001, (B,)) # 随机时间步 noise_latent torch.randn_like(z0) # 潜在噪声 alpha_bar alpha_bar_schedule[t].view(B, 1, 1, 1) zt torch.sqrt(alpha_bar) * z0 torch.sqrt(1 - alpha_bar) * noise_latent # zt: [B, 4, 64, 64] # 3. 核心 U-Net 预测潜在噪声 pred_noise_latent unet_model(zt, t) # 输入 4x64x64输出 4x64x64 # 4. 像素级的潜在 Loss 计算并反向传播 loss MSE_Loss(noise_latent, pred_noise_latent) loss.backward() optimizer.step() 详细的推理细节InferenceLDM 推理极速生成伪代码流程步骤 1凭空在隐空间中初始化一个纯高斯沙盒z torch.randn([1, 4, 64, 64])步骤 2在低维隐空间进行反向去噪迭代 (以 DDIM 为例)for t in range(1000, 0, -50): # 跨步采样只走 20 步pred_noise unet_model(z, t) # U-Net 预测隐空间噪声# DDIM 乾坤大挪移解构 z0_hat (z - sqrt(1 - alpha_bar[t]) * pred_noise) / sqrt(alpha_bar[t]) pred_dir_z sqrt(1 - alpha_bar[t-50]) * pred_noise # 重新勾兑出前一步更清爽的潜在向量 z sqrt(alpha_bar[t-50]) * z0_hat pred_dir_x步骤 3大功告成走出隐空间。调用 VAE Decoder 将 z 升维放大with torch.no_grad():final_image vae_decoder(z) # 还原出 [1, 3, 512, 512] 的高清真实照片Conditional Diffusion Models —— 有条件生成的控制艺术 核心底层逻辑给混沌世界套上缰绳如果没有引导潜在扩散模型LDM只能从一堆随机的隐空间噪声中“开盲盒”。条件生成的本质将人类的控制信号比如文本提示词、线稿、深度图转化为一种“引力场Score”或“特定的速度向量Velocity”强行校正和勒令隐空间粒子的演变轨迹使其向符合语义的特定山峰收敛。在真实工业界如 Stable Diffusion 3、Flux控制的核心秘密在于两块信息的跨界注入Cross-Attention 和 控制力的夸张放大Classifier-Free Guidance。 第一阶段全链路大串联之——信息跨界注入训练阶段在开始推理之前模型必须在训练中学会听懂人话。我们以最顶级的 DiT (Diffusion Transformer) 架构下的条件流匹配 (Flow Matching) 为例看所有组件如何打配合。数据的多维并进每个训练批次服务器同时输入三个完全不同的信号原始图像人类能看懂的高清猫咪图。文本控制一只精致的机械猫一串人类字符串。时间标量当前传送的进度。2. 时空转换VAE 与 CLIP 的双向降维图像降维丢进已经训练好且冻结参数的 VAE Encoder通过重参数化抽样变成隐向量。像素级的信息被过滤图像大体结构和语义被锁进隐空间。文本降维提示词丢进预训练好的文本编码器如 CLIP 或 T5。文字被拆成 Token经过多层 Self-Attention吐出文本嵌入矩阵Text Embeddings。文字的逻辑内涵被映射成了高维几何空间里的坐标向量。3. 直线传送的搞破坏前向流匹配在隐空间中计算机随机生成一个和尺寸一模一样的标准高斯噪声。根据流匹配的线性插值公式拼出时刻的潜在糊图上帝视角的完美直线速度方向死死固定为。交叉注意力机制Cross-Attention的劫持注入网络DiT把切成一个个小方块Patches变成隐向量 Token 序列。在 DiT 内部的交叉注意力层里图像 Token 扮演 Query (Q)文本向量扮演 Key (K) 和 Value (V)物理意义图像的每一个潜在像素点Q都在疯狂地去寻找和它最匹配的文本单词K并把这个单词代表的色彩和语义V直接吸收到自己的身体里。5. CFG 信号空投劫持关键补丁为了让网络不仅懂条件生成还懂瞎编无条件生成在训练时有 10% 的概率我们把文本向量强行替换成全零的空向量。最终算出条件流匹配损失函数网络通过反向传播学到了在任何时刻看着眼前的潜在糊图结合文本去猜测通往终点的直线速度场Vector Field的能力。 第二阶段全链路大串联之——无中生有的极致生成推理全链路细节现在模型训练大功告成你坐在电脑前在界面上输入了 “一只精致的机械猫”把 CFG Scale控制听话程度的滑块设为 7.5点击生成。以下是电脑在后台发生的、环环相扣的全链路惊天演绎 链路第一步信号整备与噪声海诞生文本提示词通过 CLIP 转化成机械猫。同时电脑自动准备好一个全零的空文本向量。计算机的随机数发生器爆发在一张空白的隐空间画布上泼下一堆纯高斯噪声。我们叫它尺寸是 [1, 4, 64, 64]。这里面是一片虚无。 链路第二步时空倒流的确定性常微分方程ODE极速反向迭代我们让时间从纯噪声倒数到完美图像潜变量。假设我们使用欧拉法Euler Method只走 20 步每一步的跨度。我们来看其中某一步比如当前在第 15 步时间手里的潜在矩阵是模型内部发生的双路脑内拔河CFG 细节第一路AI 的盲盒直觉无条件预测我们把当前的、时间 0.75 以及空向量喂给网络。网络不看人话只看这堆还有点乱的特征凭借记忆预测出一个盲盒速度特点这个速度指向的并不是具体的机械猫而是指向“全宇宙所有可能的、符合宏观规律的图片的混沌合力方向也就是走向真实分布的泛泛方向”。第二路AI 倾听人话条件预测我们把当前的、时间 0.75 以及真实文本机械猫喂给同一个网络。网络结合交叉注意力预测出一个有文本指导的速度机械猫特点这个速度包含了机械猫的特征但可能还夹杂着其他随机图片的杂质。第三路CFG 灵魂外推向量提纯与夸张放大利用减法将条件预测减去无条件预测强行过滤掉 AI 脑海里那些漫无目的的杂音和胡思乱想提纯出纯度 100% 的“机械猫的速度向量”接着我们把这个纯净的方向乘以你的控制滑块参数再加回无条件的直觉速度上得到最终的组合迭代速度大步滑行顺着这个被高度净化、且夸张放大了 7.5 倍的“机械猫终极速度矢量”图像粒子在隐空间中笔直地向前滑行一小步来到的新台阶 链路第三步群星坍缩隐空间大功告成随着 20 步循环在低维隐空间中以电光石火的速度疯狂纠偏、迭代前 5 步纯噪声的混沌合力被打破隐空间像素矩阵被强制划分出宏观结构猫头在中央、背景在四周。第 10 步不确定性开始像漏斗一样急剧收窄其他可能性如狗、山水在 CFG 的高强度压迫下概率直接坍缩清零。速度方向开始百分之百聚焦到“一只精致的机械猫”这唯一的命运曲线上。第 20 步 ()循环结束网络输出的速度变成了全 0说明到了抛物线的平坦终点无需再修正。我们手里紧紧握着的是一个完全去噪、在低维空间充斥着机械猫全部高浓缩语义信息的潜在向量。 链路第四步VAE 解码释放高清像素震撼面世此时电脑屏幕上依然是一片空白因为人类肉眼看不懂隐空间的 4 通道矩阵。全链路最后也是最爽快的一记终结技爆发我们把这个精致的、在隐空间捏好的[4, 64, 64] 塞进 VAE Decoder解码器。解码器展开庞大的转置卷积与上采样神经网络将 4 通道特征图纵向拆解、横向放大 8 倍。四大金刚 Loss 里的 感知损失和 对抗损失GAN 判别器 在训练时赋予 VAE Decoder 的超强炫技能力瞬间展现——它将低维语义原液完美重构把模糊和妥协的平均值滤掉喷涌出大量线条锐利、对比度极强的高频像素细节金属的冷冽反光、细腻的机械齿轮缝隙、猫咪的精致胡须。最终一幅的高清完美机械猫画作瞬间定格在你的屏幕上。 包含 CFG 与全链路串联的工业级推理核心伪代码现代 LDM (DiT Flow Matching CFG) 完整生成链路伪代码import torchdef generate_image_pipeline(prompt, cfg_scale7.5, steps20):# ─── 链路第一步文本与空信号的高维几何映射 ───# 1. 文本通过 Frozen CLIP Encoder 变成 77x1024 的条件语义嵌入text_embed clip_text_encoder(prompt) # Shape: [1, 77, 1024]# 2. 准备完全等长的空文本嵌入作为“直觉/盲盒”对比线null_embed clip_text_encoder(“”) # Shape: [1, 77, 1024]# ─── 链路第二步隐空间噪声海的诞生 ─── # 凭空生成 4 通道低维潜在高斯随机矩阵 z torch.randn([1, 4, 64, 64]) # Shape: [1, 4, 64, 64] # ─── 链路第三步时空倒流的 ODE 极速直线修正流 (流匹配反向迭代) ─── dt 1.0 / steps # 步长 dt 0.05 for i in range(steps): # 算当前步的时间 (从 1.0 笔直倒扣到 0.0) t_current 1.0 - i * dt # 标量如 0.75 # 拼接 Batch 实现条件与无条件并行前向压榨 GPU 吞吐量 batch_z torch.cat([z, z], dim0) # Shape: [2, 4, 64, 64] batch_time torch.tensor([t_current, t_current]).to(z.device) batch_context torch.cat([null_embed, text_embed], dim0) # [2, 77, 1024] with torch.no_grad(): # 核心网络 (DiT) 通过 Cross-Attention 让像素 Token 去死死吸附文本向量 # 输出速度场预测矩阵 (Vector Field Output) batch_velocity dit_transformer_model(batch_z, batch_time, batch_context) # 剥离出两条平行宇宙的预测速度 v_uncond, v_cond torch.chunk(batch_velocity, chunks2, dim0) # 各自为 [1, 4, 64, 64] # 【CFG 核心脑内拔河】: 提纯出百分之百和文本强相关的速度分量 pure_text_velocity v_cond - v_uncond # 夸张放大 cfg_scale 倍并融合回大方向决定本步最终的最优传输速度向量 v_final v_uncond cfg_scale * pure_text_velocity # Shape: [1, 4, 64, 64] # 常微分方程欧拉法大步滑行 (因为时间是倒流反向生成故用减法) z z - dt * v_final # 更新后的 z 依旧是 [1, 4, 64, 64] # 当循环走出z 已经成为了完全清爽、凝聚了机械猫全部宏观组织逻辑的纯净潜在状态 z0 # ─── 链路第四步VAE 解码器神魔级重构突破模糊降维升维释放 ─── with torch.no_grad(): # 利用包含感知损失和对抗 GAN 训练出来的强悍 Decoder 释放像素细节 pixel_output vae_decoder(z) # Shape: [1, 3, 512, 512] # 将 [-1, 1] 映射回 [0, 255] 图像通道并保存 final_image post_process_to_rgb(pixel_output) return final_image 全链路四大硬核组件知识点终极串联图【人类输入】 Prompt: “机械猫” CFG Scale: 7.5 初始随机种子 (Seed)│ │ │▼ │ ▼【文本大本营】 CLIP 提炼出几何特征矩阵 c(y) │ 高斯沙盒 z1 [4, 64, 64]│ │ │▼ (Q-K-V 交叉注意力劫持) │ ▼【核心去噪战场】 DiT 吸收语义 ──► 【同时跑两路】 ──► CFG 向量减法提纯 ──► 乘以 7.5 放大 ──► 用 ODE 欧拉法纯确定性(隐空间 Latent) 直线滑行 20 步│▼【完美潜在原液】 完全干净的 z0 [4, 64, 64]│▼【高清大功告成】 高清像素图片 [3, 512, 512] ◄─── VAE Decoder 升维放大 ◄─── 依靠感知损失/GAN对抗逼出超高频微观纹理网络架构图像 Token 化与 2D RoPE 的相位旋转Patchify Embedding这个阶段的目标是把 VAE 压出来的隐空间画布变成 Transformer 能够认得、且带有完整二维空间几何感知的一维 Token 序列。 微观特征流向与 Shape 演变① 图像切片 (Patchify)输入输入我们手里有一张变糊的隐空间画布维度是 [Batch, 4, 64, 64]。切块机制我们设置切片大小。我们拿一个像素大小的滑窗在的图像上无重叠地移动。Shape 变化横向能切出个纵向也能切出个总共能切出个小方块Patches。平坦化每一个小方块内部有个数字。我们直接把它们拉平成一维。此时图像在数学上变成了 [Batch, 1024, 16] 的矩阵。② 线性升维投影网络操作用一个全连接层Linear把那 16 维的底层像素数字投影到 Transformer 内部标准的隐藏维度隐藏大小通常大模型。Shape 结果此时主干特征矩阵诞生维度是 [Batch, 1024, 1152]。这 1024 就代表 1024 个图像 Token。 2D RoPE (二维旋转位置编码) 的绝对技术细节这 1024 个 Token 排成一排网络根本不知道谁在猫头的左边谁在猫耳的右边。主流大模型如 Flux、SD3使用的 2D RoPE 并不是把位置编码死板地加在输入上而是在 每一个 Block 计算注意力Attention时直接动态旋转和的特征角度。 数学与工程细节网格坐标映射每一个 Token 都有一个专属的二维网格坐标。比如左上角第一个方块的坐标是右下角最后一个方块的坐标是。隐藏维度对半拆分将图像 Token 的 1152 个隐藏通道一分为二。前 576 维被划归为 X 轴水平 控制区后 576 维被划归为 Y 轴垂直 控制区。复数空间旋转在这 576 维的 X 轴控制区里每两个通道组成一个二维平面。我们根据该方块的横坐标乘以一个特定的频率转动该平面的特征向量角度旋转。在后 576 维的 Y 轴控制区里同样每两个通道一组根据该方块的纵坐标转动其对应的特征角度旋转。效果经过这轮旋转当两个图像 Token比如左眼和右眼计算内积Dot Product时它们天然地带有了它们在二维画面上的相对几何距离信息。不管推理时图片怎么拉大或裁剪空间相对结构永远锁死绝不画畸变。2. 全局画风控制台AdaLN-Zero (自适应层归一化) 细节在数据进入注意力机制计算之前必须套上“当前时间步现在应该抹除多少噪声”和“文本大体在说什么”的全局环境缰绳。AdaLN-Zero 扮演了全局调音台的角色。 6个控制推子的动态计算与洗脑机制① 条件向量大合流我们将时间步标量经过正弦编码后加上文本编码器CLIP提取出来的全局文本单向量Pooled Text Embedding融合成一个环境向量维度是 [Batch, 1152]。② 调音台参数爆发 (MLP)