ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

从分数函数到扩散模型:生成式AI的核心原理与工程实践

从分数函数到扩散模型:生成式AI的核心原理与工程实践 1. 项目概述从噪声到图像的两种哲学最近几年生成式AI的火爆程度有目共睹从DALL·E 2到Stable Diffusion这些模型生成的高质量、高创意图像不断刷新我们的认知。在这些明星模型背后有两类核心的生成范式扮演着关键角色基于分数的生成模型和扩散模型。很多刚入门的朋友可能会被这两个名词搞晕觉得它们似乎是两种不同的东西但又经常被放在一起讨论甚至在一些文章里被混用。我自己在研究和工程实践中也花了不少时间去梳理这两者的脉络。简单来说你可以把它们理解为实现同一个宏伟目标——从一片混沌的噪声中一步步构建出结构清晰的图像——的两种不同“哲学”和“数学语言”。它们紧密相连甚至可以说现代主流的扩散模型其理论基石之一就是基于分数的生成模型。今天我就结合自己的理解来系统性地总结一下这两者的区别、联系以及它们是如何一步步走到一起并最终引爆AIGC革命的。无论你是研究者希望深入理论还是工程师想弄明白Stable Diffusion到底在干什么这篇文章都会给你一个清晰的框架。2. 核心理念拆解两种视角下的生成之旅要理解它们的区别与联系我们得先回到生成模型的根本任务上学习一个复杂的数据分布比如所有猫图片的分布然后从中采样出新样本。基于分数的模型和扩散模型为这个任务提供了两种优雅的解决方案。2.1 基于分数的模型学习“梯度场”基于分数的模型其核心思想非常直观。想象一下我们有一片高低起伏的山地数据样本比如真实的猫图片就像散落在这片山地上的一个个小村庄它们位于山谷概率密度高的区域。而山地之外广袤的平原则对应着概率密度极低的区域。那么“分数”在这里指的是什么它就是概率密度函数对数梯度的简称即score function∇ₓ log p(x)。这个梯度指向哪里呢它就指向概率密度增长最快的方向。在我们山地的比喻里score function 就像在每个点测量出的“最陡的上坡方向”。如果你站在一个随机点一张噪声图这个梯度会告诉你朝着哪个方向走你能最快地“上山”接近真实数据分布所在的“山谷”。基于分数的生成模型的目标就是训练一个神经网络称为分数网络来估计这个真实的 score function即 sθ(x) ≈ ∇ₓ log p(x)。一旦我们有了这个“指南针”生成过程就变成了一个“登山”的逆过程——朗之万动力学采样。我们从随机噪声平原上的随机点开始反复执行以下步骤1用分数网络查询当前位置的“上坡方向”2朝着这个方向走一小步这会使样本更接近数据3再加上一点随机噪声避免陷入局部最优。如此迭代数百甚至数千步最终就能“漫步”到一个数据分布的高概率区域即生成一张逼真的图片。注意这里的“分数”是数学上的梯度与考试分数无关。它的物理意义是数据空间中的“力场”或“方向场”引导噪声向数据演化。2.2 扩散模型学习“去噪过程”扩散模型则采用了另一种视角它更像是一个物理过程的模拟扩散。这个过程分为前向和反向两部分。前向过程是一个固定的、逐步加噪的过程。我们有一张清晰的原始图片 x₀在前向过程的每一步我们都给它添加一点点高斯噪声。经过足够多的步骤 T 后原始图片就彻底变成了一张纯高斯噪声 x_T ~ N(0, I)。这个过程是确定的不需要学习。反向过程才是模型需要学习的核心。它的目标是逆转前向过程给定第 t 步的带噪图片 x_t去预测第 t-1 步的、噪声更少的图片 x_{t-1}。这本质上是在学习一个条件分布 p(x_{t-1} | x_t)。最初的DDPM模型是直接让神经网络预测这个去噪后的图像或者预测所添加的噪声。那么扩散模型是如何生成新图像的呢很简单我们从一张纯高斯噪声 x_T 开始然后调用我们学好的反向过程模型一步步地预测并减去噪声经过 T 步之后就得到了一张全新的、清晰的图像 x₀。2.3 两种哲学的联系桥梁看到这里你可能会觉得这是两种完全不同的方法。但神奇的是它们在数学上是相通的。这个桥梁就是Tweedie’s formula和分数匹配理论。在扩散模型的前向加噪过程中在已知原始数据 x₀ 的情况下第 t 步的加噪数据 x_t 的分布是已知的高斯分布。Tweedie’s formula 告诉我们这个高斯分布的后验均值与它的分数函数对数概率密度的梯度有直接关系。具体来说最优的去噪方向恰恰就依赖于这个分数函数。这意味着什么意味着扩散模型反向过程里要预测的“去噪方向”或“噪声”本质上等价于预测带噪数据分布在某一步的分数函数。也就是说扩散模型可以被视为在多个噪声尺度不同的 t上训练了一系列分数估计器。因此一个更统一的观点是基于分数的模型提供了扩散模型的理论解释和一般化框架。DDPM这类扩散模型可以看作是基于分数的生成模型在“前向过程为固定线性高斯扩散”这一特定设定下的一个特例和一种非常成功的参数化实现方式。而基于分数的模型框架更通用它不限定前向加噪的方式可以是任何噪声扰动其核心目标始终是学习数据分布的分数函数。3. 技术演进与关键突破详解理解了基本理念我们来看看它们是如何在实践中发展并融合的。这个历程中有几个里程碑式的关键突破。3.1 分数匹配的挑战与解决方案早期直接估计分数函数 ∇ₓ log p(x) 非常困难因为我们需要先知道真实的数据分布 p(x)而这正是我们不知道的。分数匹配是一种无需知道 p(x) 就能估计其分数函数的方法但它通常需要对整个数据集进行计算计算成本高昂且在高维数据上不稳定。2019年宋飏博士等人的工作《Generative Modeling by Estimating Gradients of the Data Distribution》带来了根本性突破。他们提出了噪声条件分数网络和退火朗之万动力学采样。噪声条件分数网络他们意识到直接估计干净数据的分数函数很难因为数据可能集中在低维流形上分数函数在这些区域之外是未定义的。解决方案是用多个不同尺度的高斯噪声去扰动原始数据。这样扰动后的数据分布会“铺满”整个空间使得分数函数处处有定义。他们训练一个单一的、条件化的神经网络 sθ(x, σ)其中 σ 是噪声尺度来同时估计所有噪声尺度下的分数函数。退火朗之万动力学采样在采样时他们采用从大到小一系列递减的噪声尺度 {σ₁ σ₂ … σₙ}。首先在大噪声尺度 σ₁ 下开始朗之万采样此时数据分布平滑容易探索模式然后逐渐切换到更小的噪声尺度逐步精细化样本。这个过程就像先用粗笔勾勒轮廓再用细笔刻画细节极大地提高了生成样本的质量和多样性。这项工作奠定了现代基于分数的生成模型的基础也清晰地展示了其强大的生成能力。3.2 DDPM扩散模型的具体化与工程化几乎在同一时期2020年的《Denoising Diffusion Probabilistic Models》提出了DDPM。它将扩散过程具体化为一个固定的、线性的噪声调度方案并做出了一个关键的参数化选择让神经网络 εθ 直接预测添加到图像中的噪声。这个选择非常巧妙它使得训练目标简化为一个简单的均方误差损失L E[||ε - εθ(√ᾱ_t x₀ √(1-ᾱ_t) ε, t)||²]。其中 ε 是真实噪声εθ 是网络预测的噪声。这个损失函数稳定、易于优化。更重要的是DDPM揭示了其与分数函数的关联预测的噪声 εθ 与分数函数成正比即 εθ(x_t, t) ∝ -∇_{x_t} log p(x_t)。因此DDPM可以看作是一个在离散时间步、特定噪声调度下训练的分数匹配模型。DDPM以其相对简单的实现和出色的效果迅速成为扩散模型的主流范式。3.3 连接与统一SDE视角2021年《Score-Based Generative Modeling through Stochastic Differential Equations》这项工作完成了最后的理论统一。它将之前的离散时间步的噪声扰动过程推广到连续的随机微分方程框架。前向SDE将加噪过程描述为一个连续时间的随机过程。当时间从0到T数据逐渐演变为纯噪声。反向SDE存在一个对应的反向SDE描述从噪声生成数据的过程。而这个反向SDE的漂移项核心正是数据分布的分数函数∇ₓ log p(x)。这个框架极其优美和强大统一视角它表明无论是之前的退火朗之万动力学还是DDPM都可以被视为这个连续SDE框架在不同离散化方案下的特例。灵活性它允许设计不同的前向SDE如方差爆炸型、方差保持型从而得到不同的生成模型。确定性采样通过推导可以从反向SDE得到一个对应的概率流常微分方程。沿ODE采样是确定性的这意味着对于同一个初始噪声会生成完全相同的图像这有利于编辑、插值等任务。至此基于分数的模型和扩散模型在理论上被完全统一到一个框架下。我们现在常说的“扩散模型”通常指的就是这个以分数函数为核心、通过SDE/ODE描述的统一生成模型家族。4. 实操要点与模型解析理论之后我们来看看在实际构建和使用这些模型时需要关注哪些核心要点。这里我以Stable Diffusion这类潜在扩散模型为例因为它结合了多个关键思想。4.1 核心组件与训练目标一个现代扩散模型通常包含以下几个核心部分噪声调度器定义前向过程中噪声如何随时间步 t 从0到T增加。常见的调度器有线性、余弦、Sigmoid等。调度器的选择直接影响训练稳定性和采样质量。例如余弦调度在开始和结束时变化平缓中间变化较快通常能获得更好的效果。实操心得不要盲目使用论文中的默认调度器。对于你的特定数据集如人脸、风景、动漫可能需要进行简单的调度器实验。通常可以从余弦调度开始它比较鲁棒。U-Net 噪声预测器这是模型的主体。它是一个U型结构的卷积神经网络负责在给定带噪潜在特征z_t和时间步嵌入t的条件下预测添加到其中的噪声ε。U-Net中的跳跃连接对于保留图像细节至关重要。此外注意力机制的引入尤其是交叉注意力是实现文生图等条件生成的关键。条件编码器对于文生图模型需要一个文本编码器如CLIP的文本编码器或T5将文本提示词y编码成嵌入向量。这个条件向量会通过交叉注意力机制注入到U-Net中指导生成过程。训练损失核心损失是噪声预测的均方误差即L E[||ε - εθ(z_t, t, c(y))||²]其中c(y)是条件嵌入。训练时我们会随机采样时间步t、随机采样真实数据z₀或x₀、随机添加噪声得到z_t然后让网络预测噪声。4.2 采样算法详解训练好模型后采样推理是从噪声生成图像的过程。有多种采样算法它们在速度和质量之间进行权衡。采样器类型原理简介优点缺点典型代表原始DDPM采样严格按照训练时的反向扩散过程逐步去噪步数多如1000步。生成质量高理论保障强。速度极慢计算成本高。DDPM SamplerDDIM采样将扩散过程视为非马尔科夫的允许在子序列时间步上进行确定性采样。大幅加速20-50步可达不错效果确定性采样便于插值。极低步数下质量可能下降。DDIM SamplerPLMS/Heun属于高阶ODE求解器利用多个历史点的信息估计下一步。在相同步数下通常比DDIM质量更高。计算稍复杂内存占用略高。PNDM, DPM-SolverLCM/LoRA通过蒸馏技术或特定微调让模型学会在极少数步数4-8步内生成。极致速度适合实时应用。需要额外的训练过程可能损失部分多样性或细节。LCM-LoRA选择建议对于追求最高质量的静态图像生成可以使用DDIM或PLMS步数设置在20-50。对于需要实时反馈的应用如交互式绘图则应考虑LCM等快速采样器。新手可以从DDIM20-30步开始这是一个很好的平衡点。4.3 潜在扩散与计算优化直接在像素空间如256x256x3进行扩散计算量巨大。Stable Diffusion的核心创新之一是引入了潜在扩散模型。编码器-解码器首先用一个预训练好的自编码器如VAE。编码器E将高分辨率图像x压缩到一个更低维的潜在空间z E(x)。解码器D负责将潜在表示z重建回图像x ≈ D(z)。在潜在空间扩散扩散过程加噪/去噪不再在像素空间进行而是在这个低维的潜在空间z中进行。由于潜在空间维度小得多例如64x64x4训练和推理的计算效率得到数十倍的提升。最终解码采样完成后得到去噪的潜在表示z₀再用解码器D将其转换回高像素图像。这种方法在几乎不损失视觉质量的前提下极大地降低了资源门槛是扩散模型能够普及的关键。5. 常见问题与实战排坑指南在实际研究和项目开发中会遇到各种各样的问题。这里我总结了一些典型问题和解决方案。5.1 训练过程中的不稳定与失败训练扩散模型是一个复杂的过程新手常会遇到训练损失震荡、生成结果全灰或全噪声的情况。损失NaN或爆炸检查梯度最常见的原因是梯度爆炸。解决方案是使用梯度裁剪。在训练循环中在loss.backward()之后optimizer.step()之前加入torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm1.0)。检查输入数据确保输入图像的像素值被正确归一化到[-1, 1]或[0, 1]与模型期望的保持一致。一个错误的归一化会打乱整个学习过程。降低学习率尝试使用更小的学习率例如从1e-4降到5e-5并使用学习率warmup策略。生成图像模糊或缺乏细节U-Net容量不足模型太小无法捕捉数据集的复杂分布。尝试增加U-Net的通道基数如从64增加到128或深度。噪声调度器问题末端噪声太小β_T接近0可能导致模型在最后几步学习困难。尝试使用余弦调度器它通常能保留更多高频细节。训练不充分扩散模型需要很长的训练时间。确保训练步数足够通常数十万到百万步。监控损失曲线确保其已经充分下降并趋于平缓。模式崩溃与多样性不足生成的图像看起来都差不多。检查条件信息泄露在无条件或类别条件生成中确保训练时条件标签是随机丢弃的Classifier-Free Guidance中的dropout。对于文生图检查文本编码是否过于强势导致模型忽略潜在变量的随机性。调整CFG尺度Classifier-Free Guidance尺度过高会以提高保真度为代价牺牲多样性。尝试降低guidance_scale如从7.5降到5.0。5.2 采样生成时的典型问题即使模型训练好了采样阶段参数设置不当也会导致糟糕的结果。图像出现重复的网格状伪影或纹理VAE解码问题这是Stable Diffusion等潜在扩散模型中最常见的问题之一。伪影通常来自VAE解码器。解决方案是使用--no-half-vae参数在FP32精度下运行VAE解码或者寻找/训练更好的VAE模型。采样步数太少当使用DDIM等加速采样器且步数设置过低如10步时可能导致去噪不充分产生结构性错误。适当增加采样步数。生成内容与提示词不符提示词工程扩散模型对提示词非常敏感。尝试使用更具体、更具描述性的词语并使用加权语法如(best quality:1.2), (masterpiece:1.1), a cute cat。负面提示词同样重要用于排除不想要的特征如blurry, ugly, deformed。CFG尺度CFG尺度是控制提示词跟随强度的关键参数。太低则跟随弱太高则图像饱和、颜色怪异。通常范围在5.0-15.0之间需要针对不同模型微调。生成速度太慢启用xFormers如果使用PyTorch安装并启用xFormers库可以显著优化注意力计算提升速度并降低显存。使用更快的采样器如前所述从DDPM切换到DDIM或DPM-Solver可以用1/10的步数达到类似效果。考虑模型蒸馏如果需要极速推理可以寻找或自己训练LCM潜在一致性模型版本的LoRA实现4-8步生成。5.3 高级概念与技巧辨析Classifier-Free Guidance vs. Classifier GuidanceClassifier Guidance早期技术需要额外训练一个分类器p(y|x_t)在采样时用分类器的梯度来调整生成方向以符合条件y。它效果强但需要训练两个模型且容易导致样本质量下降。Classifier-Free Guidance当前主流。它在训练时随机丢弃条件以一定概率将条件置空从而让同一个模型同时学会有条件生成和无条件生成。在采样时通过外插有条件输出和无条件输出的方向来放大条件的影响。CFG更简单、更稳定是文生图模型的核心技术。其公式为ε_guided ε_uncond guidance_scale * (ε_cond - ε_uncond)。LoRA与模型微调全参数微调更新整个U-Net的所有参数效果好但成本高易过拟合产出模型体积大。LoRA一种参数高效微调技术。它不在原始权重W上直接更新而是注入一个低秩分解的适配器ΔW A * B。训练时只更新A和B这两个小矩阵原始权重冻结。优点训练快快66%以上显存要求低产出的模型文件极小几MB到几百MB易于分享和组合。缺点控制能力可能略弱于全微调但对于风格迁移、主体定制等任务已完全足够。对于个人开发者和研究者LoRA是首选的微调方案。从基于分数的模型提供的深刻理论洞察到扩散模型给出的高效工程实践这条技术路径完美地诠释了理论与应用结合的力量。我个人最深的一个体会是理解“分数函数”这个核心概念是解开一切疑惑的钥匙。它不仅仅是数学上的梯度更是数据空间的“创造之力”引导着随机噪声一步步蜕变为有意义的作品。在实际操作中不要被复杂的数学符号吓倒多动手训练几个小模型调整一下采样步数和CFG尺度观察生成结果的变化这种直观感受往往比读十篇论文更能帮助你理解其中的精妙。
返回列表