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


# 既要留住差异，也要让随机起点能用

王德泉 · Coding with AI · Lecture 04


<a id="n16-4ff8ba6220be"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N16.html#n16-4ff8ba6220be)

解码器只在训练所覆盖的表示区域学过怎样生成，任意填入一串数字并不保证有用。VAE一方面让输入的差异通过编码—解码保留下来，另一方面用先验约束把编码产生的表示与采样时的来源接近起来。两个目标一起优化，才能让“复原已有图”和“从随机起点造图”共用这个入口。 上排给出不同椅图及其重建。这里要逐一问：各自的形状、材质和朝向是否保留下来？下排则从新的随机起点出发，问解码后能否得到可用样本。这两项都重要，却不能用其中一项代替另一项。


<a id="n16-44feb6413b37"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N16.html#n16-44feb6413b37)

如果只追求重建，编码器可以把每张椅子放进一处很特殊的位置，解码器记住这些位置；随机生成时却未必抽得到它们。反过来，如果不同输入都被挤进同一处，解码器可能每次都给出一把完整椅子，却丢掉了原输入之间的区别。稳定出图只完成了部分要求。


[课程图解] 不同输入都还原为同一把椅子，意味着输入差异丢失，即使仍能稳定出图。；图中标签与关系：重建路径：保留输入差异 输入 重建 差异丢失 输入 重建 保留 输入 重建 差异丢失 生成路径：从约定的分布取样 随机起点 同一解码器 仍只有一种结果 训练同时塑造表示：输入差异可恢复，采样来源与解码器相容
不同输入都还原为同一把椅子，意味着输入差异丢失，即使仍能稳定出图。


<a id="n16-185b1c811faa"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N16.html#n16-185b1c811faa)

VAE 用两个相互牵制的目标组织训练：让潜变量帮助解释当前输入，同时让编码得到的分布与生成时采用的简单先验保持联系。不是要求每张椅子都对应同一组数，而是让保存差异的编码与可采样的共同空间相协调。取舍过强或过弱，都可能影响实际表现。


[课程图解] 输入差异能否保留，与新起点是否可用，须分别检验。；图中标签与关系：重建路径：保留输入差异 输入 重建 保留 输入 重建 保留 输入 重建 保留 生成路径：从约定的分布取样 随机起点 同一解码器 训练同时塑造表示：输入差异可恢复，采样来源与解码器相容
输入差异能否保留，与新起点是否可用，须分别检验。


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

**“编码器究竟给一个点，还是给一个分布？”** 在常见的高斯 VAE 中，它为当前输入给出一片可能区域，例如区域中心和宽度。训练从这片区域取样，让解码器解释输入；生成时则从共同先验取样。两条路径的起点来源必须分开。


<a id="n16-7c7d392b5782"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N16.html#n16-7c7d392b5782)

随机取样怎样还能学习？可以先从固定标准来源抽一个随机数，再用编码器给出的中心和宽度去平移、缩放它。随机数负责这一次取到了哪里，可学习变换负责整片区域放在哪里、张得多宽。这样的重参数化让重建反馈能沿变换传回编码器；它没有消除随机性，而是把随机来源与可学习部分分开。


<a id="n16-8dc046b5856e"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N16.html#n16-8dc046b5856e)

**只建立本页直觉可到此；下面是选读的数学核对。**


<a id="n16-90ac2fb5babe"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N16.html#n16-90ac2fb5babe)

更深入的数学会用 ELBO 和 KL 散度描述这些关系。注意两种 KL 的对象不同：训练中的近似后验与先验之差，联系编码和生成入口；ELBO 与对数似然之间的缺口，则涉及近似后验与真实后验之差。它们不能仅凭都叫 KL 就互相替代，实验中的可解高斯例子可以逐项核对。


<a id="n16-8f75ed8c51b5"></a>
[区块原文](https://codingai-lec04.pages.dev/course/N16.html#n16-8f75ed8c51b5)

回到画面，两项检查仍然最直接：不同输入的信息留下了吗，新起点是否可用？若某种评分为了兼顾两种答案而偏爱平均，平均出的图又是不是一个完整样本？下一页把这个问题单独拿出来。


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


## 画面怎样推进


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

不同输入重建是否保留差异，与新起点是否可用是两项独立问题。

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


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

若不同椅图都还原为同一把椅子，稳定出图仍未保留输入信息。

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


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

训练需协调数据解释与生成先验入口，最后分别检查两项要求。

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


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


## 继续阅读与实验


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


### 先看起点来自哪里，再分清三种分布


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

重建路径从图像 x 出发：编码器给出 qφ(z|x)，从中取 z 再解码；无输入生成从共同先验 p(z) 出发，取 z 再交给同一解码器。真实后验 pθ(z|x) 则是反问“当前生成模型里，哪些潜来源能解释这张 x”，由先验、解码器与贝叶斯规则决定。q 是共享编码器给出的近似推断，既不等于共同先验，也不保证等于难算的真实后验。


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

先看 LAB07 的固定测试重建，再看同一组标准正态起点的输出。β=0/1 只改 KL 权重：β=0 的重建更低，但编码均值平均半径为 12.323；β=1 为 1.285，付出的重建代价为 16.061→18.638 nats/图。两类入口尺度更接近，先验图仍模糊、重复；这说明了取舍，没有证明完整分布已经覆盖。


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

最后到 LAB02 算三种分布：z∼N(0,1)、x|z∼N(z,0.25)，观察 x=1.5 后，真实后验为 N(1.2,0.2)，第二项是方差。先验没有移动，真实后验被观察改变，选定的 q 还可与它有差距。这样再读 ELBO，才能分清“q 到先验的 KL”和“q 到真实后验的下界缺口”。


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

[继续读：三种分布各回答什么](https://codingai-lec04.pages.dev/lecture.html#ch03-three-distributions) · [看真实图像对照](https://codingai-lec04.pages.dev/lecture.html#ch03-prior-figure) · [核对可解高斯例子](https://codingai-lec04.pages.dev/lecture.html#ch03-gaussian-example)


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


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

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

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


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


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

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

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


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


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

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

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


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


### [LAB 02 · VAE：ELBO 缺口与重参数化](https://deepnote.com/workspace/ise3309jingao-5ba66b0a-4283-4f5a-ae06-3f68d3201e99/project/6f83a923-d155-47be-be58-680db701ff7f/notebook/450ef87bdfb149769de691b69da7a52d?utm_source=openai&utm_medium=mcp&utm_campaign=openaimcp&utm_content=450ef87bdfb149769de691b69da7a52d&utm_term=get_notebook)

用可解的一维高斯例子核对两种KL的对象，以及中心和尺度怎样影响梯度。本册固定生成模型，只优化一个观测的近似后验，不是已训练的图像VAE。

先看：固定模型与记号；ELBO、重参数化及近似后验优化代码


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


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

沿“随机来源—可学习变换—解码反馈”识别每个变量，不把先验约束理解成所有样本取同一坐标。

先看：第23–31页：VAE目标与重参数化

