先明确 “扩散模型里的 x 到底是什么?”——x 是 “数据的原始 / 映射后表示”

扩散模型中,x 是 “单个数据样本的具体数值表示”,它的形态完全取决于 “你要处理的数据类型” 和 “是否经过编码”。对图像来说,分两种情况:

1. 传统扩散模型(DDPM/ADM):x 就是 “归一化后的像素向量”,不需要额外编码

传统模型不做任何 “降维编码”,直接把图像当成 “高维向量” 来处理,具体步骤:

  • 原始图像:比如一张 512×512 的 RGB 图像,像素值范围是 [0,255](每个通道);
  • 归一化:把像素值从 [0,255] 映射到 [0,1] 或 [-1,1](比如除以 255)—— 这一步不是 “编码”,只是 “数值缩放”,目的是让噪声(通常是均值 0、方差 1 的高斯噪声)和像素值范围匹配,避免加噪后数值溢出;
  • 向量展平(可选):模型内部会把 2D 的 “512×512×3” 像素矩阵,变成 1D 的 “786432 维向量”(512×512×3=786432)—— 这一步也不是 “编码”,只是 “维度形状转换”,本质还是像素值的集合。

所以,传统扩散模型里的x = 归一化后的图像像素向量(可以是 2D 矩阵形态,也可以是 1D 向量形态,模型会处理形状适配)。比如:x₀就是 “一张归一化后的猫图像的像素向量”,x₁就是 “这张猫图像加噪 1 步后的像素向量”,以此类推。

加噪在什么维度?——“加噪维度 = x 的维度”,直接对 x 的每个数值维度加噪

扩散模型的 “加噪”,本质是对 “x 的每个数值维度,独立添加高斯噪声”—— 因为 x 的维度就是 “数据样本的最小表示单元”,对图像来说,这个单元要么是 “像素通道”(传统模型),要么是 “latent 通道”(LDM)。

我们用具体例子拆解,更直观:

例子 1:传统模型(DDPM)处理 512×512×3 的 RGB 图像
  • x 的维度:512(高)×512(宽)×3(RGB 通道)= 786432 个 “数值维度”—— 每个维度对应 “图像某个位置、某个通道的像素值”(比如 “(100,200) 位置的 R 通道像素值”“(100,200) 位置的 G 通道像素值” 等);
  • 加噪操作:给这 786432 个维度,每个维度都加一个 “服从 N (0, σ_t²) 的高斯噪声”(σ_t 是第 t 步的噪声标准差,提前定义好);
  • 注意:虽然是 “独立加噪”,但加噪后的 x_t 服从 “786432 维的联合正态分布”—— 因为 x₀本身是有语义的(比如猫的图像),x_t 的各维度之间依然存在相关性(比如 “猫眼睛区域的像素” 加噪后,还是会和周围像素有微弱关联),这也是后续去噪能恢复语义的关键。

要彻底搞懂 t=0 时的 p (x₀),核心是突破两个认知误区:

  1. 不要把 p (x₀) 理解成 “单个像素的概率”,而是 “所有像素联合起来的概率密度”(比如 512×512×3 的图像,是 786432 个像素 “共同取值” 的概率密度);
  2. 不要把 p (x₀) 理解成 “这张猫图在数据集中出现的‘次数占比’”,而是 “这张猫图(及和它相似的猫图)在‘所有可能的像素组合’中,属于‘真实自然图像’的‘密集程度’”—— 概率密度的核心是 “密集程度”,不是 “出现次数”。

我们用 “密码本类比”+“像素相关性拆解”,一步步把 p (x₀) 讲透:

第一步:先理解 “像素向量的联合概率密度”—— 不是单个像素,是 “像素组合”

一张 512×512×3 的图像,本质是一个 “786432 维的向量”—— 每个维度对应一个像素的取值(比如 (100,200) 位置的 R 通道值、(100,200) 位置的 G 通道值……)。“联合概率密度” 的意思是:这 786432 个像素 “同时取某个值组合” 的概率密度

举个极端简化的例子:假设我们有一张 2×2 的灰度图(只有 4 个像素,每个像素取值 0-255),那么 “像素向量 x₀” 就是 (100, 150, 200, 250) 这样的 4 个数值组合。

  • 单个像素的概率:比如 “第一个像素取 100” 的概率,这是 “边缘概率”,和其他像素无关;
  • 联合概率密度 p (x₀):比如 “第一个像素取 100、第二个取 150、第三个取 200、第四个取 250” 这个 “组合” 的概率密度 —— 它描述的是 “4 个像素协同取值” 的可能性,而不是单个像素。

回到真实的 512×512 图像:p (x₀) 描述的是 “786432 个像素同时取‘构成猫图像’的那些值” 的概率密度 —— 这才是 “联合” 的核心。

第二步:为什么 “猫的像素向量” p (x₀) 高?—— 因为像素间有 “强语义相关性”

自然图像的像素不是 “随机乱取” 的,而是存在严格的 “语义相关性”—— 比如 “猫的图像” 中:

  • 眼睛区域的像素:R 通道值通常在 50-100(深色),G/B 通道值也会围绕这个范围,且左右眼的像素取值会高度对称;
  • 毛发区域的像素:如果是橘猫,R 通道值会在 200-250、G 通道在 100-150、B 通道在 50 以下,且相邻毛发像素的取值会渐变(不会突然从橘色跳到蓝色);
  • 背景区域的像素:如果是草地背景,G 通道值会在 150-200,相邻像素取值也会平滑过渡。

这些 “相关性” 就像 “像素间的约定”—— 只有满足这些约定的像素组合,才是 “真实的猫图像”。而 p (x₀) 的本质,就是 “衡量某个像素组合满足这些‘语义约定’的程度”:

  • 满足约定的组合(比如真实的猫图像):它们属于 “自然图像分布的密集区域”—— 周围有很多相似的组合(比如稍微调整猫的姿势、毛色,像素组合会变,但依然满足约定),所以概率密度 p (x₀) 高;
  • 不满足约定的组合(比如猫的眼睛是蓝色、毛发是紫色、背景是乱码):它们属于 “自然图像分布的稀疏区域”—— 周围几乎没有相似的真实图像,所以概率密度 p (x₀) 低。

类比理解:就像一本 “自然图像密码本”,只有满足 “语义相关性” 的密码(像素组合)才是 “有效密码”,p (x₀) 就是 “这个密码在密码本中的‘常见程度’”—— 有效密码的常见程度高(p (x₀) 高),无效密码的常见程度低(p (x₀) 低)。

第三步:为什么 “随机像素组合” p (x₀) 低?—— 因为它破坏了所有 “语义相关性”

“随机像素组合”(比如全黑块 + 全白块 + 彩色噪点)的问题,在于它完全打破了像素间的 “语义相关性”:

  • 可能出现 “左眼是黑色、右眼是亮蓝色” 的组合(违背对称相关性);
  • 可能出现 “毛发像素突然从橘色跳到紫色” 的组合(违背渐变相关性);
  • 可能出现 “背景像素一会儿是草地绿、一会儿是天空蓝、一会儿是红色” 的组合(违背背景一致性)。

这些组合在 “自然图像密码本” 中是 “无效密码”—— 几乎没有任何真实图像会是这样的像素组合,所以它们周围 “没有任何相似的真实图像”,属于 “自然图像分布的空白区域”,概率密度 p (x₀) 自然接近零。

再举个更直观的例子:

  • 你随手画一只猫,哪怕画得很丑,它的像素组合也满足 “眼睛在上方、身体在中间、四肢在下方” 的语义相关性,p (x₀) 会比随机组合高;
  • 如果你用颜料随意泼洒在纸上,得到的像素组合没有任何语义相关性,p (x₀) 会极低。
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐