
<a id="n18-title"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N18.html#n18-title)


# 同一个潜空间，支持重建、插值与采样

王德泉 · Coding with AI · Lecture 04


<a id="n18-fc6bf1ed5aee"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N18.html#n18-fc6bf1ed5aee)

潜表示首先提供了可操作的生成入口：编码一张图再解码是重建；沿两个表示之间移动并解码是插值；从约定分布抽取起点再解码是采样。三种操作用同一个解码器，却分别观察输入信息、局部路径与采样覆盖。本页椅子是教学示意，具体曲线与量值到LAB02观察。 两把椅子的表示之间，可以选一条路径，逐次观察输出是否平滑变化。图中的三张椅图是在说明这种展示方式，不是已经测得的连续插值轨迹。若一次真实演示确实平滑，它的价值在于：它说明这条特定路径上的表示能被解码，也展示了沿途哪些属性发生变化。但它没有走到的地方，仍然没有被检查。


<a id="n18-5c615f81e875"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N18.html#n18-5c615f81e875)

重建、插值和随机生成对应不同问题。重建从一张已知图像的编码出发，检查输入信息是否保住；插值沿人为选定的路径走，检查这条路径上的连续变化；先验采样按事先规定的分布抽新起点，检查生成入口实际会遇到哪些成功与失败。前两项漂亮，不能代替第三项。


<a id="n18-df2e5c605d9c"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N18.html#n18-df2e5c605d9c)

因此，应在看输出之前约定起点怎么选，并保留所有结果，而不是先生成很多、再挑最好看的六张。眼前的六个位置是在解释这种检查方法，不是某个真实模型的性能统计。真正评价还要交代样本数量、任务条件和失败标准；有限抽样同样没有穷尽整个空间。


[课程图解] 先定起点选择办法，再保存所有结果；不能用挑出的漂亮路径代表生成入口。；图中标签与关系：编码得到一个起点 采样：从约定的分布取新起点 结果 1 结果 2 结果 3 结果 4 结果 5 结果 6
先定起点选择办法，再保存所有结果；不能用挑出的漂亮路径代表生成入口。


<a id="n18-be96ff4de82f"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N18.html#n18-be96ff4de82f)

另一个问题更容易被结构图遮住：模型真的使用了潜变量吗？固定其他输入，只替换、打乱或固定潜变量，再看输出中的任务相关属性是否跟着改变。一个很强的解码器可能从其他条件完成大部分工作，即使架构里画着潜变量，实际依赖也很弱。


[课程图解] 固定其他条件而改变潜变量，再检查任务相关变化，才能追问模型是否依赖这条信息通道。；图中标签与关系：编码得到一个起点 只换潜变量 有变化 几乎不变 同一个解码器，输入变化应进入输出
固定其他条件而改变潜变量，再检查任务相关变化，才能追问模型是否依赖这条信息通道。


<a id="n18-a625e6591888"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N18.html#n18-a625e6591888)

**“换了潜变量，图像有几个像素变了，算不算用了？”** 要看任务想保留或控制什么。若希望改变椅型，只抖动几个噪点没有回答这项要求；若输出几乎不变，也不能立刻认定变量完全无效，还需检查替换范围、其他条件是否已固定结果，以及解码是否有多对一关系。


<a id="n18-af26a759432c"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N18.html#n18-af26a759432c)

有效的解释应能接受这样的干预，而不只是给某个模块命名。下一页把连续潜变量换成离散地址，进一步分清变量的编号与真正送入解码器的内容。


<a id="n18-states"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N18.html#n18-states)


## 画面怎样推进


<a id="n18-b0"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N18.html#n18-b0)

输入可以被编码为一个表示；沿表示空间中的路径改变起点，再用同一解码器得到一串结果，这提供了插值与连续变化的观察入口。一条手选路径只说明走过的区域，不能代表整个空间。

[返回这一课堂停点](https://codingai-lec04.pages.dev/classroom/N18.html?step=b0)


<a id="n18-b1"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N18.html#n18-b1)

生成时可以从约定的分布取得新起点，再交给同一解码器产生候选。预先约定采样办法并保留全部结果，才能检查这个生成入口实际覆盖哪些变化、出现哪些失败。

[返回这一课堂停点](https://codingai-lec04.pages.dev/classroom/N18.html?step=b1)


<a id="n18-b2"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N18.html#n18-b2)

固定解码器和其他条件，只改变潜变量，观察输出是否出现任务相关变化；这检查解码器有没有利用该变化。几乎不变值得进一步检查，像素变化也不自动等于有用信息。

[返回这一课堂停点](https://codingai-lec04.pages.dev/classroom/N18.html?step=b2)


<a id="n18-materials"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N18.html#n18-materials)


## 继续阅读与实验


<a id="n18-learning-unit-001"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N18.html#n18-learning-unit-001)


### 同一解码器，三种操作分别检验什么？


<a id="n18-learning-unit-002"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N18.html#n18-learning-unit-002)

拿 LAB07 的测试数字作具体对象。重建把一张数字 x 编码为 μ(x)，再显示 decoder(μ)；后验抽样仍固定这张 x，但改变 ε，由 q(z|x) 得到不同 z。两者都借助真实输入，不是无输入生成，decoder(μ) 也不等于所有后验输出的平均。


<a id="n18-learning-unit-003"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N18.html#n18-learning-unit-003)

插值先编码数字 3 与 8，指定 z(α)=(1−α)μ₃+αμ₈，再显示 11 个位置的结果。中点是潜向量的中点，未必等于两张输出图片逐像素平均；平滑只说明这条路径上的响应。先验采样则取消端点输入，用预先固定的 25 个标准正态 z；保存图展示其中前十个，包含模糊和重复。


<a id="n18-learning-unit-004"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N18.html#n18-learning-unit-004)

自检：清晰重建加平滑插值，是否证明先验入口好用？不能，两项展示都从输入图得到起点。先比较初始化与训练后的同输入、同先验起点，再读失败样本。还应分清解码器输出的灰度图是 Bernoulli 概率，按它逐像素再抽 0/1 才是完整观测；原始数据灰度与二值训练输入是另外两行。均匀潜网格也不是高斯采样。


<a id="n18-learning-unit-005"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N18.html#n18-learning-unit-005)

[继续读：四种潜空间展示的输入来源](https://codingai-lec04.pages.dev/lecture.html#ch03-three-demonstrations) · [LAB07：操作与结果对照](https://codingai-lec04.pages.dev/course/notebooks/lab07.html)


<a id="n18-chapter-reading"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N18.html#n18-chapter-reading)


### [CLS 03 · 潜变量：从重建到生成](https://codingai-lec04.pages.dev/lecture.html#ch03)

按连续正文理解这条方法的训练信号、使用过程与算例；数学与实践在相关问题旁展开。

先看：第3章，从对象和问题开始


<a id="n18-lab07-practice"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N18.html#n18-lab07-practice)


### [LAB 07 · 图像 VAE：重建与可用起点](https://codingai-lec04.pages.dev/course/notebooks/6567b1168915486c8de4ab9cfea54a8e.html)

先比较原图与重建，再看同一先验起点。只改变 KL 权重，读取重建与编码区域的权衡。

先看：先看保存结果与读图解释


<a id="n18-lab02-practice"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N18.html#n18-lab02-practice)


### [LAB 02 · VAE：ELBO 缺口与重参数化](https://codingai-lec04.pages.dev/course/notebooks/450ef87bdfb149769de691b69da7a52d.html)

先读本册保存结果，再按实现顺序核对一个算例；最后只改一个变量。

先看：先看保存结果与读图解释


<a id="n18-material-1"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N18.html#n18-material-1)


### [Variational Autoencoder](https://mit-6s978.github.io/assets/pdfs/lec2_vae.pdf#page=32)

把展示分成重建、选定插值和先验采样三类，再为“任务使用了潜变量”提出一次可反驳的干预。

先看：第32–48页：重建与生成；回看第23–31页的潜变量关系

