VAE 与世界模型学习总结
1. VAE 是什么
VAE(Variational Autoencoder,变分自编码器)是一种概率生成模型。
它的核心目标有两个:
- 把高维输入压缩成低维潜在表示
- 从潜在表示中重建原始数据,并且让潜在空间具有良好的分布结构
可以把它理解为:
- 编码器负责"压缩"
- 解码器负责"还原"
- 概率建模负责让潜在空间可采样、可生成
2. VAE 的整体结构
VAE 的基本流程可以写成:
x \\rightarrow Encoder \\rightarrow (\\mu, \\log \\sigma\^2) \\rightarrow z \\rightarrow Decoder \\rightarrow \\hat{x}
其中:
- (x):输入数据,例如一张图像
- (\mu):潜变量分布的均值
- (\log \sigma^2):潜变量分布的对数方差
- (z):从该分布采样得到的潜变量
- (\hat{x}):解码器重建出来的数据
3. VAE 的核心思想
普通自编码器是:
x \\rightarrow z \\rightarrow \\hat{x}
这里的 (z) 是一个确定值。
而 VAE 不直接输出一个固定的 (z),而是输出一个分布:
q_\\phi(z\|x)=\\mathcal{N}(\\mu(x),\\sigma\^2(x))
这表示:
- 对于每个输入 (x)
- 编码器会预测一个高斯分布
- 再从这个高斯分布中采样出潜变量 (z)
因此,VAE 学到的不是单个点,而是一个"潜在空间中的区域"。
4. 高斯分布可以有维度吗
可以。
4.1 一维高斯
z \\sim \\mathcal{N}(\\mu,\\sigma\^2)
表示一个数在数轴上随机。
4.2 多维高斯
\\mathbf{z} \\sim \\mathcal{N}(\\boldsymbol{\\mu}, \\boldsymbol{\\Sigma})
表示一个向量在高维空间中随机。
如果 latent dim = 32,那么:
z \\in \\mathbb{R}\^{32}
这时用到的是 32 维高斯分布 。
也就是说,VAE 会输出:
- 32 个均值
- 32 个方差
每个维度对应潜变量中的一个分量。
5. 均值和方差是怎么来的
这是一个特别关键的问题。
5.1 不是手工计算出来的
(\mu) 和 (\sigma) 不是手工算的,也不是固定写死的参数。
5.2 它们是编码器网络的输出
编码器本质上是一个函数:
Encoder(x) \\rightarrow (\\mu(x), \\log \\sigma\^2(x))
也就是说:
- 输入一张图像 (x)
- 经过卷积层、全连接层等网络结构
- 输出一个均值向量和一个方差向量
如果潜变量维度是 32,那么:
\\mu(x) \\in \\mathbb{R}\^{32}, \\quad \\log \\sigma\^2(x) \\in \\mathbb{R}\^{32}
所以:
- 网络参数是可学习的权重 (W,b)
- (\mu(x))、(\sigma(x)) 是网络对当前输入的计算结果
这两者不要混淆。
6. 重参数化技巧
由于 VAE 需要从高斯分布中采样,但随机采样本身不方便反向传播,所以使用重参数化技巧:
z = \\mu + \\sigma \\odot \\epsilon,\\quad \\epsilon \\sim \\mathcal{N}(0,I)
这一步的含义是:
- 先从标准正态分布中采样一个噪声 (\epsilon)
- 再根据 (\mu) 和 (\sigma) 对它进行平移和缩放
- 得到目标分布中的样本 (z)
这样模型就仍然可以进行梯度反传。
7. z 的形状是什么
如果输入图像是:
x \\in \\mathbb{R}\^{64 \\times 64 \\times 3}
那么它一共有:
64 \\times 64 \\times 3 = 12288
个像素值。
假设潜变量维度设为 32,那么:
z \\in \\mathbb{R}\^{32}
所以:
- 原图像是 12288 维
- 潜变量是 32 维
因此,(z) 通常不是图像大小的张量,而是一个低维向量。
有些更现代的模型会使用空间潜变量,例如:
z \\in \\mathbb{R}\^{8 \\times 8 \\times 16}
但即使这样,它也通常仍然远小于原图像尺寸。
8. 解码器怎么把 z 还原成图像
解码器做的事情可以写成:
\\hat{x} = Decoder(z)
如果:
z \\in \\mathbb{R}\^{32}
目标图像大小是:
\\hat{x} \\in \\mathbb{R}\^{64 \\times 64 \\times 3}
那么解码器通常会这样处理:
- 先通过全连接层把 32 维向量映射成更大的隐藏表示
- reshape 成一个小的特征图
- 通过上采样或反卷积逐步放大
- 最终输出完整图像
例如:
text
z (32)
→ FC
→ 4×4×64
→ 8×8×64
→ 16×16×32
→ 32×32×16
→ 64×64×3
因此,VAE 不是通过"公式反求"来还原图像,而是通过一个神经网络来学习生成图像。
9. Decoder 是否需要输入 x
不需要。
正确流程是:
9.1 重建当前图像
x_t \\rightarrow z_t \\rightarrow \\hat{x}_t
也就是:
\\hat{x}_t = Decoder(z_t)
9.2 预测未来图像
z_{t+1} \\rightarrow \\hat{x}_{t+1}
也就是:
\\hat{x}*{t+1} = Decoder(z* {t+1})
所以:
- Decoder 的输入是潜变量 (z)
- 它不需要再加原图 (x)
- 原图只在训练时用来和重建结果做比较
10. VAE 的损失函数
VAE 的总损失由两部分组成:
\\mathcal{L} = \\mathcal{L}*{rec} + \\mathcal{L}* {KL}
10.1 重建损失
用于约束重建图像和原图接近:
\\mathcal{L}_{rec} = \|\|x - \\hat{x}\|\|\^2
或在某些任务中使用 BCE。
10.2 KL 散度
用于约束编码器输出的分布接近标准正态分布:
D_{KL} = -\\frac{1}{2} \\sum_{i=1}\^{d} \\left(1 + \\log \\sigma_i\^2 - \\mu_i\^2 - \\sigma_i\^2\\right)
这表示:
- 均值不要偏离 0 太远
- 方差不要偏离 1 太远
这样潜在空间会更加平滑和规整,更适合采样生成。
11. 世界模型是什么
世界模型(World Model)的核心思想是:
不直接在像素空间做预测,而是在潜在空间中建模世界的动态变化。
通常包含三个模块:
| 模块 | 作用 |
|---|---|
| VAE | 把图像压缩为潜变量 |
| 时序模型(RNN / RSSM 等) | 预测潜状态如何随时间变化 |
| Controller | 根据状态做动作决策 |
12. 世界模型中 VAE 的作用
在世界模型里,VAE 负责:
x_t \\rightarrow z_t
也就是:
- 输入当前时刻的图像观测 (x_t)
- 输出当前时刻的潜变量表示 (z_t)
这里的 (z_t) 可以理解为:
当前图像的低维压缩语义表示
例如:
- 场景结构
- 物体位置
- 视觉特征
- 与决策相关的信息
13. 世界模型预测未来的完整流程
Step 1:获得当前观测
x_t
Step 2:用 VAE 编码
x_t \\rightarrow z_t
Step 3:结合动作和历史记忆进行时序预测
(z_t, a_t, h_t) \\rightarrow z_{t+1}, h_{t+1}
其中:
- (a_t):当前动作
- (h_t):时序模型的隐藏状态
Step 4:可选地解码成未来图像
z_{t+1} \\rightarrow \\hat{x}_{t+1}
Step 5:循环进行多步预测
z_t \\rightarrow z_{t+1} \\rightarrow z_{t+2} \\rightarrow \\cdots
因此,世界模型可以在潜在空间中"想象未来"。
14. 世界模型中的核心逻辑
可以用一句话概括:
- VAE 负责看世界
- RNN / RSSM 负责想未来
- Decoder 负责把想象还原成画面
其完整链路可以写成:
x_t \\rightarrow z_t \\rightarrow z_{t+1} \\rightarrow z_{t+2} \\rightarrow \\cdots \\rightarrow \\hat{x}_{未来}
15. 你前面几个关键问题的统一总结
15.1 图像输入给 VAE 的是什么
输入的是整张图像,不是单个像素。
15.2 VAE 是对像素建高斯吗
不是。
VAE 是对"整张图像对应的潜变量"建高斯分布。
15.3 如果 latent dim = 32
那么对应的是一个 32 维高斯分布,也就是 32 个均值和 32 个方差。
15.4 这些均值和方差怎么来
它们不是手算的,而是编码器网络对输入图像的输出。
15.5 z 还是不是图像大小
通常不是。
z 是低维潜变量,例如 (\mathbb{R}^{32})。
15.6 怎么从 z 还原图像
把 z 输入解码器,由解码器通过神经网络一步步生成图像。
15.7 Decoder 是否还需要原图
不需要。
Decoder 只需要 z。
15.8 世界模型怎么预测未来
先把当前图像编码成 z,再用时序模型预测未来 z,最后用解码器把未来 z 变成未来图像。
16. 最终一句话总结
VAE 的本质是:
把输入图像编码成一个潜在高斯分布,从中采样得到低维潜变量,再通过解码器重建图像。
世界模型的本质是:
先用 VAE 把图像变成潜状态,再在潜空间中预测未来,最后按需还原成图像。
17. 建议继续学习的下一步
如果你接下来想继续深入,建议按这个顺序:
- KL 散度为什么能约束潜空间接近标准正态
- 为什么 VAE 往往比普通 AE 更适合生成
- RNN、RSSM、Dreamer 这些世界模型的时序部分到底怎么工作
- 空间 latent 和向量 latent 的区别
- 世界模型中的 reward model 和 policy/controller 如何训练