
1. 从噪声到图像扩散模型的核心思想与直觉最近几年如果你关注AI生成图像一定绕不开“扩散模型”这个词。从DALL-E 2、Stable Diffusion到Midjourney这些能根据一句话就画出精美图片的AI其核心引擎几乎都是扩散模型。但很多人可能觉得这个概念很玄乎什么“前向加噪”、“反向去噪”、“基于分数的生成”听起来像天书。今天我就从一个从业者的角度掰开揉碎了讲讲扩散模型到底是怎么一回事以及它背后那个同样重要但可能更“数学”的视角——基于分数的生成模型。我们不讲复杂的公式推导而是用最直观的类比和实操中的思考让你理解这个“从噪声中创造世界”的魔法。简单来说扩散模型的核心思想非常反直觉它先学会如何系统地“毁掉”一张图片加噪然后再学会如何从一片混沌的噪声中一步步“重建”出清晰的图片去噪。这个过程就像一位雕塑家他不是直接雕刻出一个完美的雕像而是先拿一块完美的雕像把它砸成一块粗糙的石头然后反复观察“从石头到雕像”每一步需要削去哪部分多余的石料最终他学会了如何从任何一块石头开始雕刻出他想要的任何雕像。这里的“噪声”就是那块粗糙的石头“去噪”的过程就是雕刻。模型在训练时看了无数张“雕像变石头”又“石头变雕像”的过程最终掌握了“雕刻”生成的能力。而“基于分数的生成模型”则是从另一个数学角度来描述这个“雕刻”过程它不直接预测“干净”的图片而是预测在当前这个“粗糙石头”状态下往哪个方向“雕刻”即梯度方向能更快地得到“雕像”。这个“方向”在数学上就被称为“分数”Score。理解了这两种视角你就能真正明白现代生成式AI的基石是如何运作的。2. 前向扩散如何优雅地“毁掉”一张图片要理解生成我们先得理解破坏。扩散模型的第一步称为前向扩散过程或前向过程。这是一个固定的、没有任何可学习参数的马尔可夫链过程。它的任务很明确在有限的步骤内比如1000步将一张清晰的原始图片x0逐步变成一张完全随机的、各向同性的高斯噪声xT。2.1 加噪的数学描述一个可控的退化过程这个过程不是一步到位的而是循序渐进的。每一步我们都在当前图片xt上添加一点点来自标准高斯分布均值为0方差为1的噪声ε。关键的控制参数是一个预定义的方差调度表βt它随着步数t从1到T逐渐增大例如从0.0001到0.02。βt决定了每一步添加的噪声强度。每一步的加噪公式可以写为xt sqrt(1 - βt) * x{t-1} sqrt(βt) * ε其中ε ~ N(0, I)I是单位矩阵。这个公式设计得很巧妙。sqrt(1 - βt)是对上一状态x{t-1}的保留系数sqrt(βt)是新增噪声的权重。由于βt很小所以sqrt(1 - βt)接近1sqrt(βt)接近0这意味着每一步图片的主体信息都被大量保留只混入一点点噪声。经过成百上千步这样微小的扰动累积最终图片xT就会完全失去原始结构变成纯噪声。注意这个调度表βt的设计是经验性的但至关重要。如果初始β太大图片信息丢失太快模型学习难度大如果整体β太小则需要更多步数才能达到纯噪声计算成本高。常见的线性调度、余弦调度等都是实践中摸索出来的有效方案。2.2 一个实用的技巧任意步长的直接采样在训练时我们并不需要真的模拟从第1步到第1000步的完整链式过程。得益于高斯分布的性质我们可以直接计算出从原始图片x0到任意中间步骤t的噪声图片xt的闭合形式xt sqrt(ᾱt) * x0 sqrt(1 - ᾱt) * ε其中αt 1 - βtᾱt Π_{s1}^{t} αs。这个公式是扩散模型训练效率的关键。它允许我们在训练时随机采样一个时间步t然后直接用这个公式算出对应的xt。这里的ε就是我们希望模型去预测的“目标噪声”。这意味着我们的训练数据对(xt, t, ε)是即时生成的无需预计算和存储庞大的中间状态序列极大地节省了存储和计算开销。实操心得在代码实现中我们通常会预计算好所有t对应的sqrt(ᾱt)和sqrt(1 - ᾱt)并存储为数组。在每次训练迭代时随机抽取一个批次的时间步t通过索引直接拿到对应的系数然后利用这个公式快速构造出加噪后的图片xt作为输入将对应的噪声ε作为训练目标。这是扩散模型训练代码的核心片段之一。3. 反向生成教会模型“去噪”的艺术前向过程是固定的破坏而反向过程才是模型要学习的核心——生成。如果我们能学会从xT倒退回x0那么我们就拥有了从噪声生成图片的能力。然而直接学习反向转移概率p(x{t-1} | xt)非常困难因为它依赖于未知的数据分布。扩散模型的巧妙之处在于它不直接学习这个复杂的分布而是学习一个更简单的目标去预测添加到图片中的噪声。具体来说我们训练一个神经网络通常是U-Net输入是噪声图片xt和时间步t输出是对添加到x0上产生xt的噪声ε的预测。3.1 训练目标最小化噪声预测的误差训练目标函数非常简单就是均方误差MSEL E_{x0, t, ε} [ || ε - ε_θ(xt, t) ||^2 ]其中ε_θ是我们的噪声预测模型参数为θ。模型的目标是无论看到哪个时间步的噪声图片xt都能尽可能准确地猜出当初是加了什么样的噪声ε才变成现在这个样子的。你可能会问预测噪声有什么用这就要回到我们之前推导的任意步采样公式xt sqrt(ᾱt) * x0 sqrt(1 - ᾱt) * ε如果我们预测出了噪声ε_θ而xt和系数sqrt(ᾱt)、sqrt(1 - ᾱt)都是已知的那么我们就可以反推出当前步对原始图片x0的估计x0_estimate (xt - sqrt(1 - ᾱt) * ε_θ) / sqrt(ᾱt)有了对x0的估计再结合一些数学推导利用贝叶斯定理和重参数化技巧我们就可以计算出反向过程中从xt到x{t-1}的均值和方差。这样模型就间接地学会了反向扩散的路径。3.2 采样过程从噪声中迭代“洗出”图像训练好模型后生成采样新图像的过程就是一个迭代的去噪过程从标准高斯分布中采样一个随机噪声xT ~ N(0, I)。从t T开始逐步循环到t 1 a. 将当前噪声图像xt和时间步t输入训练好的噪声预测模型ε_θ得到预测的噪声。 b. 利用预测的噪声根据反向扩散的公式涉及预测的x0_estimate和固定的方差调度计算出前一步的、更清晰的图像x{t-1}。当t 0时x0就是最终生成的图像。这个过程就像用滤镜一点点洗去照片上的污渍或者从模糊的毛玻璃后面逐渐看清景象。早期的步数t较大主要去除粗粒度的噪声确定图像的大致布局和轮廓后期的步数t较小则专注于修复细节让图像变得清晰锐利。踩坑实录采样步数T的选择是个权衡。更多的步数如1000步通常能产生质量更高、更一致的图像但生成速度极慢。在实际应用中尤其是像Stable Diffusion这样的文本到图像模型往往会采用更高效的采样器如DDIM、DPM-Solver它们通过不同的数学近似可以用50-100步就达到接近1000步的采样质量极大地提升了实用价值。在选择采样器时需要根据你对速度和质量的需求进行权衡测试。4. 分数视角另一种理解生成过程的数学语言现在我们来谈谈“基于分数的生成模型”。这其实是描述同一类生成模型的另一个数学框架它提供了更深刻的理论见解并且直接引出了更强大的生成模型家族。4.1 什么是“分数”Score在概率论中一个概率分布p(x)的分数函数Score Function定义为其对数概率密度的梯度score ∇_x log p(x)这个梯度指向什么方向呢它指向概率密度增长最快的方向。想象你站在一个高低起伏的数据概率分布“山丘”上∇_x log p(x)就像是指向最近山顶的最陡峭的上坡方向。对于数据分布而言高分数的区域对应着真实数据点密集的区域山顶低分数或分数指向混乱的区域对应着低概率区域山谷或山脚。4.2 分数与扩散模型的联系在扩散模型的前向过程中随着噪声不断加入数据xt的分布变得越来越简单趋向于高斯分布。一个关键的发现是去噪模型所预测的噪声ε与当前噪声数据xt的条件分数函数∇_{xt} log p(xt)存在着线性关系。具体来说可以推导出∇_{xt} log p(xt) - ε / sqrt(1 - ᾱt)这意味着当我们训练一个扩散模型去预测噪声ε_θ时我们实际上也在隐式地学习数据在任意噪声水平下的分数函数预测噪声等价于预测指向更高概率数据区域的方向即分数。4.3 分数匹配与朗之万动力学采样基于分数的生成模型的核心思想就是直接学习这个分数函数s_θ(x) ≈ ∇_x log p(x)这个过程称为分数匹配。一旦我们有了一个训练好的分数估计网络s_θ(x)我们就可以使用一种叫做朗之万动力学的迭代算法来从分布中采样新数据x_{i1} x_i γ * s_θ(x_i) sqrt(2γ) * z其中z ~ N(0, I)γ是步长。你可以这样理解在每一步我们沿着分数函数指引的方向朝向数据密集区走一小步γ * s_θ(x_i)同时添加一个很小的随机噪声sqrt(2γ) * z来探索并避免陷入局部模式。反复迭代这个过程最终样本x就会收敛到高概率的数据区域即生成出符合真实数据分布的样本。为什么这个视角重要它将扩散模型的去噪过程统一到了一个更广泛的“基于分数的生成”框架下。反向扩散可以看作是一种特定形式的朗之万动力学。更重要的是这个框架自然地与随机微分方程SDE联系起来从而诞生了“扩散模型即SDE求解器”这一更宏大、更统一的理论允许我们设计更灵活、更高效的前向和反向过程。5. 从理论到实践Stable Diffusion的突破与启示理解了基础原理我们再看如今大火的Stable Diffusion就能明白它的创新之处。原始的扩散模型如DDPM直接在像素空间操作处理高分辨率图像计算成本极高。Stable Diffusion的核心突破是引入了潜在空间。5.1 潜在扩散在压缩的语义空间中工作Stable Diffusion包含三个核心组件变分自编码器VAE的编码器将一张512x512的RGB图像压缩到一个更小的潜在空间例如64x64x4这个潜在表示保留了图像最主要的语义信息但维度大大降低。U-Net扩散模型在潜在空间中进行前向加噪和反向去噪训练。这是计算量最大的部分因为工作在低维潜在空间所以效率比像素空间高得多。VAE的解码器将去噪后的潜在表示重新解码回高像素的RGB图像。这样做的好处是显而易见的在64x64的潜在空间里进行1000步的扩散过程其计算量远小于在512x512的像素空间中进行。模型学习的本质是在一个高度压缩的、语义丰富的“概念空间”里学习生成和去噪。5.2 条件控制用文本引导生成过程Stable Diffusion的另一个革命性特性是条件生成。通过引入一个文本编码器如CLIP的文本编码器将输入的文字提示prompt编码成一系列特征向量。在U-Net的扩散过程中通过交叉注意力机制将这些文本特征注入到U-Net的中间层。具体来说在U-Net的每个残差块中除了图像潜在特征和时间步嵌入还加入了文本特征。交叉注意力机制让图像特征可以去“查询”文本特征从而在去噪的每一步都让生成过程受到文本描述的约束和引导。这就是为什么我们可以通过“一只戴着礼帽的柯基犬在月球上冲浪”这样的描述生成出符合语意的奇幻图像。实操心得与常见问题Prompt工程文本描述的质量极大影响输出。使用具体的名词、形容词并遵循“主体细节风格画质”的结构往往更有效。例如“masterpiece, best quality, a cute corgi wearing a top hat, surfing on the moon, cinematic lighting”就比“狗在月亮上”好得多。负面提示词这是Stable Diffusion一个极其强大的功能。在负面提示词框中输入“blurry, ugly, deformed, text”可以告诉模型在生成过程中主动远离这些概念显著提升图像质量。采样器选择对于快速创意探索Euler A或DPM 2M Karras是不错的选择20-30步即可。对于追求最高质量可以使用DDIM或DPM SDE需要40-80步。不同采样器对同一组参数的产出差异可能很大需要实验。CFG Scale分类器自由引导尺度。这个参数控制文本提示对生成过程的约束强度。太低7则图像可能忽略提示太高15则图像可能颜色过饱和、构图僵硬。通常7.5-12是一个安全范围。6. 超越图像扩散模型的广阔疆域扩散模型的思想远不止于生成静态图片。其“从噪声中迭代生成结构化数据”的范式具有很强的通用性正在席卷其他模态。音频生成像AudioLDM、Stable Audio等模型将音频信号或频谱图视为“图像”用扩散模型生成音乐、语音或音效。文本提示可以是“轻快的爵士钢琴曲”或“雨声和远处的雷声”。视频生成这是当前最前沿也最挑战的领域。模型需要同时保证单帧质量和帧间连贯性。Sora、Stable Video Diffusion等模型通过扩展U-Net结构加入时间注意力层或在潜在视频序列上应用扩散已经能生成长达数秒、连贯的小视频。难点在于对物理世界动态和长期依赖关系的建模。3D生成将扩散模型应用于3D表示如神经辐射场NeRF、3D高斯泼溅Gaussian Splatting的参数。通过多视角图片或文本描述直接生成连贯的三维模型这对游戏、影视和工业设计有巨大意义。相关热搜词“把实体设备生成三维模型”、“contextcapture是先生成正射影还是三维模型”都反映了业界对高效3D内容生成的迫切需求。分子设计与材料科学将分子结构表示为图或3D点云用扩散模型生成具有特定性质如药效、导电性的新分子结构加速药物发现和新材料研发。代码生成虽然大型语言模型LLM在此领域占主导但也有研究探索用扩散模型在抽象语法树AST空间生成代码。个人体会扩散模型的成功本质上是“迭代式精细化生成”范式的成功。与GAN的一次性生成或自回归模型的逐令牌生成相比扩散模型通过多步迭代将复杂的生成任务分解为一系列简单的去噪子任务降低了每一步的学习难度从而获得了极高的生成质量和稳定性。它的瓶颈也很明显——采样速度慢。因此当前的研究热点除了扩展应用领域更集中在加速采样如一致性模型、流匹配和提升控制精度如更细粒度的条件注入、Adapter技术上。对于开发者而言理解其核心原理能帮助你更好地调参、解决问题甚至设计新的模型结构。它不再是一个黑箱魔法而是一个强大且可塑的工具。