跳到正文
Kwei 个人主页作品集 project library

A PICTURE, IN THREE IDEAS

潜空间、VAE、DiT,和一张画面有什么关系?

跟着一只骑车的橘猫,看懂画面背后的三个角色。

6 分钟图解

今天的主角:一只骑车的橘猫

本文目录05

01 / 潜空间

潜空间:把画面写成一组数

潜变量(latent)是一份数值表示;这些表示所在的空间,叫潜空间。

一张画面,两种表示像素 → 潜变量

你看得见的图像

256 × 256 × 3

高 × 宽 × RGB 通道

VAE
编码器

模型处理的潜变量

32 × 32 × 4

高 × 宽 × 潜变量通道

196,608 → 4,096 个数值原始 DiT 配置示例,其他模型可以不同 [3]
橘猫为 AI 生成教学插画;潜变量网格为原创数值示意。颜色用来显示数值,不代表真实潜变量的外观。点击数值图可放大。

眼前的橘猫由像素显示出来。编码之后,画面变成一组有空间排列、带多个通道的数。生成模型可以在这种紧凑表示上工作,不必每一步都直接处理最终的 RGB 像素。[2]

图里的彩块只是让数值可见。某一层并不专门等于“猫”,某一个数也不天然就是“车轮大小”旋钮。潜变量需要模型共同解释,不能当作一张缩小的照片来阅读。

图中的尺寸,来自哪里?

原始 DiT 实验使用预训练的 Stable Diffusion VAE,将 256 × 256 × 3 的图像编码为 32 × 32 × 4 的潜变量。数值个数从 196,608 变成 4,096,是原来的 1/48。这里比较的是张量元素数,不能理解成文件小了 48 倍,或生成快了 48 倍。[3]

这是一个具体配置。比如 SD3 论文采用了 16 个潜变量通道;不同模型不能一律套用“四通道”。[4]

02 / VAE

VAE:负责在两种表示之间转换

VAE(变分自编码器)有两个主要部分:编码器把图像变成潜变量,解码器把潜变量还原为图像。

已有图像

输入的像素

VAE编码器

编码

像素 → 潜变量

-0.87-0.350.170.691.21-0.96-0.440.080.611.13-1.04-0.520.000.521.04-1.13-0.61-0.080.440.96-1.21-0.69-0.170.350.87-1.30-0.77-0.250.270.791.31-0.86-0.340.180.701.23

潜变量

图像的内部表示

VAE解码器

解码

潜变量 → 像素

重建图像

目标是近似原图

这条路线检验“能不能把已有画面还原好”。没有经过 DiT,也能做编码—解码重建。

切换上方路线,看哪些环节改变。复用同一插画说明输入与输出,不代表无损重建或实际生成测试。文生图路线示意现代文字条件模型,如 SD3 的 MMDiT。[1–4]

重建是把已有图像编码后再解码,结果通常只能近似原图;细小纹理可能在往返中丢失。它不是普通缩放,也不是无损打包。[1][2]

切换到文生图路线会发现:开始时没有原图,模型直接从潜空间噪声生成新的表示,最后使用 VAE 的解码器输出像素。编码器在训练图像处理、图生图等场景里才会用到。

“变分”这两个字,可以怎样理解?

严格说,VAE 编码器通常预测潜变量分布的参数,再从中取得一份潜变量;训练中还会约束这套表示的分布。图上把这些细节缩成了“编码”一步,重点保留它与解码器的分工。[1]

03 / DiT

DiT:让不同位置的信息一起参与生成

DiT 是 Diffusion Transformer,一种生成网络架构。它处理潜变量的分块,预测采样更新所需要的量。

图中只画四块方便理解,实际 token 数量由潜变量尺寸和分块方式决定。Patch 来自潜变量,不是从原图裁下的小照片。点图放大。[3]

Token 是交给 Transformer 处理的一份数值表示。潜变量先分块,再转换为 token;通过注意力机制,不同位置的信息能够相互参考。图里的四块会交换信息,不是各自画好一角,再把四张小照片拼起来。[3]

猫爪与车把、身体与车座之间存在位置关系。这类关系需要生成网络结合条件与学到的规律来处理;使用 DiT 架构本身,并不保证这些位置每次都正确。

DiT 每一步究竟预测什么?

原始 DiT 做的是类别条件生成,预测噪声及相关参数;SD3 使用 MMDiT 与 Rectified Flow,直接预测速度场。它们都需要采样程序依据预测更新潜变量,因此这里统一画成“预测量 → 采样器更新”。[3][4]

文字条件也有自己的编码过程。下方文生图路线以现代文字条件系统为例,不把原始 DiT 的类别标签实验说成文本生成实验。

生成时还要反复调用网络。点击下方按钮,看清“预测”和“更新”是谁完成的。

预测 → 更新 → 再预测手动看一遍 ↓
0.060.581.10-1.07-0.55-0.030.491.01-1.15-0.63-0.110.410.93-1.24-0.72-0.200.320.85-1.32-0.80-0.280.240.761.28-0.89-0.370.150.681.20-0.97-0.450.070.591.11-1.06-0.54

当前潜变量

最开始是一份噪声
更新后仍是数值

DiT

读潜变量、条件与噪声级别

预测量

采样器

依据预测更新潜变量

更新后的潜变量,再送进 DiT ↶

多轮完成,得到最终潜变量 →

VAE 解码器
起点是一份随机潜变量。 此时处理的是噪声数值,并没有一张被遮住的橘猫照片。
流程示意:按钮表示讲解环节,不代表采样次数;彩块不是实际张量读数,插画不是本页模型运行结果。

04 / 画面

那它们会怎样影响画面?

同一张图可能同时受到多个环节影响。先看职责,再选检查方法。

颜色与细节毛色、轮辐、边缘

VAE 的编码与解码会影响重建保真度。用同一张图做一次编码—解码往返,可以观察这一环留下了什么、损失了什么。

构图与关系猫爪有没有握住车把

生成网络、训练数据、条件和采样都会参与。若内容关系已经错了,单换 VAE 不能保证重新安排好猫爪和车把。

计算与成本中间处理多少数值

较紧凑的潜表示能减少部分计算负担;压缩方式、通道数和重建能力又影响保真。不能只看“小了多少”来判断画质。

图里的观察位置用于说明检查思路;画面问题与模块并非一一对应。这里没有运行重建或生成实验。

需要换组件时,先用生成模型配套的 VAE。不同模型的潜变量维度、分布与缩放约定可能不同,不能把 VAE 当作通用滤镜任意互换。[2][3][4]

05 / 总结

总结:这三个词,分别回答三个问题

潜空间

在哪种表示里工作?

在紧凑的数值表示里。

VAE

谁把表示变回画面?

解码器;反方向由编码器完成。

DiT

谁参与生成新的表示?

生成网络预测,采样器据此更新。

看到一张 AI 图片,可以沿着这条线回想:中间用潜变量表示,生成网络与采样器不断更新,最后由解码器变成可见像素。三个词描述的是不同环节;弄清这一点,再讨论换哪个组件、怎样改善画面,就有了具体对象。

放大后可横向或纵向滚动查看,按 Esc 关闭。