跳到主要内容

编码器-解码器 — 压缩、去噪、生成、查异常

这一章讲三件事: 「目标=输入」的训练为什么有意义(答案:瓶颈); 潜空间是什么、怎么从它采样出新图、怎么在它里面变形; 以及 autoencoder 家族的三个变体各修了上一代的什么毛病。 主走查是一张被强噪声淹没的显微粒子图怎么被洗干净——包括那个证明网络没在偷懒的空图测试。

1. 顶层全景

编码器(逐级压细) 解码器(逐级放大)
┌────────────────┐ 潜空间 ┌────────────────┐
│ 64×64 → 32 → 16 │ ──[瓶颈]──▶ │ 16 → 32 → 64×64 │
└────────────────┘ 几十个数 └────────────────┘
入:噪声图 出:干净图

图说:编码器和解码器互为镜像,中间那根细脖子叫"瓶颈"。
整张图的信息必须全部挤过那几十个数——网络别无选择,
只能学会"什么是本质、什么是噪声"。

编码器把输入压成低维的潜表示;解码器从这个表示把输出重建出来。 四个用途,原书列得很清楚:数据变换、重建、从潜空间提取特征、生成新数据1

2. 核心原理

2.1 「目标=输入」为什么不是无意义的循环

训练一个网络「输出=输入」,乍看是在背答案。原书把这个看似荒谬的设定讲得很透: 解码器只能用挤过瓶颈的东西重建——如果瓶颈只有输入的百分之一大, 网络就必须在压缩时丢掉「不重要的部分」,重建时把丢掉的补回来。 补回来的部分是网络「猜」的,猜的依据是它在数据里见过的统计规律。 于是这套结构天然会过滤、去噪、压缩——这正是它最常用的三个方向2

主走查就是「去噪」这条线。原书用仿真造数据:64×64 的显微粒子图, 叠加泊松噪声(低光成像里最常见的噪声,光子计数的统计涨落), 信噪比只有 2 到 3——强噪声,肉眼几乎认不出粒子3。 输入=噪声图,目标=同一张图的干净版。

结构参数:编码器两层各 16 个卷积滤波器,每层跟一个池化把边长减半; 解码器镜像,两层卷积配上采样放大回来;出口一层 sigmoid 保证输出落在 0 和 1 之间4。 损失用 L1(预测与真值差的绝对值,不平方),优化器 Adam,训 150 个 epoch5。 训练数据不落盘:一个 256 张图的缓冲区,每取一张有 10% 的概率被重新仿真替换—— 数据保持新鲜,过拟合没了温床6

结果与残留:噪声被滤干净、粒子轮廓与目标几乎重合; 但目标图周围的高频衍射环只还原出一部分,背景还剩一点噪声—— 瓶颈压掉的主要是高频细节,这既是特性也是局限7

2.2 走查的关键一步:空图测试,证明网络没在偷懒

上面的结果有个暗坑:训练集里每张图的干净版都是同一个粒子。 网络完全可能无视输入、把那个粒子背下来,输出永远画同一只粒子—— 看起来去噪完美,实际什么也没学。这种「用偷懒的固定答案蒙混」有个名字:mode collapse(模式坍缩)8

原书给了个漂亮的检验:喂一张只有噪声、没有粒子的空图进去。

输入:纯噪声(把粒子数量设为 0 仿真出来的图)

▼ 编码器 → 潜空间 → 解码器
输出 A:仍然画着那个粒子 → 网络背了答案,mode collapse,白训
输出 B:也是一片噪声 → 网络真的在"找"输入里的粒子,找不到就不画

实测落在 B:空图进去、空图出来——网络学的是「从输入里找粒子再重建」, 不是「背答案」9

紧接着的泛化测试更狠:拿训练时从没见过的粒子(位置偏心、半径更大)去测。 网络会努力找粒子,但画出来的位置和大小会出错,偏心粒子周围甚至聚出一团假的粒子影—— 它只会画居中的标准粒子。用位置、半径随机化的数据重训一轮,这两个毛病就消了10「训练分布内完美」不等于「学到了任务」,这条经验从这里开始贯穿全书。

2.3 VAE:给潜空间装上统计规律

标准自编码器有个天生短板:编码是确定性(同样输入永远同样输出)的——同一张图永远落到潜空间同一个点; 点与点之间是网络从没见过的空白地带。想从潜空间采样生成新图,多半会掉进空白,解出垃圾11

变分自编码器(VAE) 的改动一句话:编码不再是「一个点」,而是「一个分布」—— 每个输入编码成潜空间里的均值+方差,解码时先从这个分布里抽一个点再解码12。 这一抽,潜空间的每个点附近都逼着网络「会解码」,空白地带被填上。

代价是训练要两头平衡,损失函数由两项拼成13:

拉的方向后果
重建项把编码在潜空间里摊开(每个输入占一块,重建才精细)保真度
KL 散度正则项把所有编码拉向同一个标准形状(高斯)潜空间连续、可采样

原书给了一个好记的比喻:重建是斥力(把表示铺开),KL 是引力(把表示收拢成有序的一团); 两力平衡,潜空间既有结构又连续——在两个编码之间线性滑动,解码出的图像平滑过渡14。 两项的相对大小可调(一个缩放系数 β):正则太强,网络干脆不用潜空间, 生成千篇一律——又一个「平衡靠调」的例子15

项目用 MNIST、二维潜空间(整个数据集压进平面上的两个数),卷积编码 [32, 64] 通道16: 二维的好处是能画——同类的数字在平面上聚成一簇,簇与簇之间平滑过渡。

2.4 WAE:换一把「分布距离」的尺子

Wasserstein 自编码器(WAE) 结构和 VAE 几乎一样,差别只在正则项的量尺: VAE 用 KL 散度,WAE 用 Wasserstein 距离(别名「推土机距离」,来自最优传输理论: 把一种概率分布「搬」成另一种,搬运量×距离总和的最小值)17。 原书的口径:这把尺子「对压缩表示更宽容」,常换来更忠实于数据多样性的重建18。 项目在 Fashion-MNIST 上做图像变形(morphing):取两张图,编码成潜空间两点, 两点间线性插值、逐点解码——中间帧是一系列既像 A 又像 B 的过渡图19

2.5 异常检测:只学「正常」,异常自己现形

autoencoder 的第四个用法最巧。只用正常数据训练,网络学会的是「正常长什么样」; 喂新数据进去看重建误差(输入与输出的差):正常的重建得好、误差低, 异常的没学过、还原不动、误差高。设一条阈值线,过线的标成异常20

主走查扩展到心电(ECG)数据:每条信号是一次心跳的 140 个采样点。 阈值怎么定才不拍脑袋?原书的做法:把正常训练数据的重建误差从小到大排队, 取 95% 分位当阈值——「95% 的正常心跳都能被还原得比这更好」,这条线有统计依据21。 适用场景原书点得很准:异常稀少或没有定义、类别极度不平衡(罕见病、欺诈)—— 这些场景里监督学习根本没有足够的异常样本可学22

3. 作者的判断与证据

  • 有证据的:去噪前后对比图、空图测试输出、偏心粒子的失败与重训成功、 MNIST 潜空间二维图的聚类(同类数字在图上抱成一团)、ECG 误差直方图与阈值线,全是可复跑的实验。
  • 作者的比喻(标注为比喻):KL「引力」/重建「斥力」是帮助记忆的图像,不是数学论断14
  • 结构性判断:VAE 是全书生成建模的第一站,原书在小结里明说, 生成这条线在后面第 9、10 章(GAN、扩散)继续23—— autoencoder 家族是「生成模型」的入门形态,后两章会反复回头对比。

4. 边界与局限

边界说明
瓶颈压掉的不只是噪声高频细节(衍射环)也丢了——去噪和保细节在同一个旋钮上7
标准自编码器不能生成潜空间有空白带;必须 VAE/WAE 这类「填空白」的改造
VAE 重建偏糊KL 与重建的拉扯常以「输出偏软」为代价(原书 4A 项目用 β 调)
训练分布即能力边界偏心粒子测试:分布外退化是常态
异常阈值是统计约定95% 分位不是物理常数;误报/漏报的平衡随场景变

5. 可带走的

  1. 「目标=输入」+ 瓶颈 = 无监督地学「什么是本质」——本章全部魔法的来源;
  2. 去噪是重建的自然副产品:噪声不可压缩,本质可以;
  3. mode collapse 要专门设检验:空图测试是零成本的照妖镜;
  4. 训练分布外必退化,数据多样性(随机位置/半径、缓冲区替换)是唯一的预防针;
  5. VAE 把编码从点改成分布,KL 项负责潜空间连续,β 管「重建 vs 有序」的平衡;
  6. WAE 换尺子:推土机距离量「学到的分布 vs 先验」,重建更保多样性;
  7. 异常检测公式:只学正常 + 重建误差 + 分位数阈值——专治「异常没样本」;
  8. 潜空间的三个用法:看聚类(分析)、采样(生成)、插值(变形)。

6. 原文地图

主题原书章原文位置
编码器-解码器定义与用途Understanding Encoder-Decoderstext/35-fm-understanding-encoder-decoders.txt:5(搜「low-dimensional latent representation」)
瓶颈的必要性Understanding Encoder-Decoderstext/35-fm-understanding-encoder-decoders.txt:13(搜「bottleneck of the latent space」)
潜空间聚类与生成Understanding Encoder-Decoderstext/35-fm-understanding-encoder-decoders.txt:17(搜「distinct clusters」)
泊松噪声与信噪比Implementing a Denoising Encoder-Decodertext/36-fm-implementing-a-denoising-encoder-decoder.txt:60(搜「SNR of 2 to 3」)
网络结构(减半/放大)Implementing a Denoising Encoder-Decodertext/36-fm-implementing-a-denoising-encoder-decoder.txt:143(搜「by a factor of 2」)
L1 + Adam + 150 epochsImplementing a Denoising Encoder-Decodertext/36-fm-implementing-a-denoising-encoder-decoder.txt:155(搜「L1 loss」) · text/36-fm-implementing-a-denoising-encoder-decoder.txt:163(搜「150 epochs」)
缓冲区与替换率Implementing a Denoising Encoder-Decodertext/36-fm-implementing-a-denoising-encoder-decoder.txt:128(搜「replace rate」)
衍射环残留Implementing a Denoising Encoder-Decodertext/36-fm-implementing-a-denoising-encoder-decoder.txt:186(搜「diffraction rings」)
mode collapse 与空图测试Implementing a Denoising Encoder-Decodertext/36-fm-implementing-a-denoising-encoder-decoder.txt:196(搜「mode collapse」) · text/36-fm-implementing-a-denoising-encoder-decoder.txt:216(搜「absence of a particle in the output」)
偏心粒子失败与重训Implementing a Denoising Encoder-Decodertext/36-fm-implementing-a-denoising-encoder-decoder.txt:254(搜「clusters of particles」) · text/36-fm-implementing-a-denoising-encoder-decoder.txt:282(搜「much better approximations」)
标准自编码器确定性短板Project 4A: Generating Images with Variational Autoencoderstext/37-fm-project-4a-generating-images-with-variational-au.txt:9(搜「strictly deterministic」)
编码成分布+采样Project 4A: Generating Images with Variational Autoencoderstext/37-fm-project-4a-generating-images-with-variational-au.txt:15(搜「mean and a variance」)
KL 散度正则Project 4A: Generating Images with Variational Autoencoderstext/37-fm-project-4a-generating-images-with-variational-au.txt:21(搜「Kullback」)
斥力/引力比喻Project 4A: Generating Images with Variational Autoencoderstext/37-fm-project-4a-generating-images-with-variational-au.txt:23(搜「repulsive force」)
β 缩放Project 4A: Generating Images with Variational Autoencoderstext/37-fm-project-4a-generating-images-with-variational-au.txt:25(搜「relative magnitude between the two loss terms」)
二维潜空间配置Project 4A: Generating Images with Variational Autoencoderstext/37-fm-project-4a-generating-images-with-variational-au.txt:66(搜「latent_dim=2」)
Wasserstein/推土机距离Project 4B: Morphing Images with Wasserstein Autoencoderstext/38-fm-project-4b-morphing-images-with-wasserstein-auto.txt:5(搜「Earth mover」)
WAE 更宽容Project 4B: Morphing Images with Wasserstein Autoencoderstext/38-fm-project-4b-morphing-images-with-wasserstein-auto.txt:17(搜「more refined perspective」)
潜空间插值变形Project 4B: Morphing Images with Wasserstein Autoencoderstext/38-fm-project-4b-morphing-images-with-wasserstein-auto.txt:200(搜「linearly interpolating」)
异常检测只学正常Project 4C: Detecting Anomalies in ECG Datatext/39-fm-project-4c-detecting-anomalies-in-ecg-data.txt:7(搜「trained exclusively on normal data」)
95 分位阈值Project 4C: Detecting Anomalies in ECG Datatext/39-fm-project-4c-detecting-anomalies-in-ecg-data.txt:177(搜「95th percentile」)
VAE 是生成建模第一站Summarytext/40-fm-summary.txt:7(搜「first foray」)
自编码器谱系Seminal Works and Further Readingtext/41-fm-seminal-works-and-further-reading.txt:3(搜「Helmholtz Free Energy」) · text/41-fm-seminal-works-and-further-reading.txt:9(搜「Auto-Encoding Variational Bayes」) · text/41-fm-seminal-works-and-further-reading.txt:11(搜「Wasserstein Auto-Encoders」)

Footnotes

  1. 出处:「Understanding Encoder-Decoders」第 5 段(text/35-fm-understanding-encoder-decoders.txt:5,搜「low-dimensional latent representation」)。

  2. 出处:「Understanding Encoder-Decoders」第 13 段(text/35-fm-understanding-encoder-decoders.txt:13,搜「bottleneck of the latent space」)。

  3. 出处:「Implementing a Denoising Encoder-Decoder」第 60 段(text/36-fm-implementing-a-denoising-encoder-decoder.txt:60,搜「SNR of 2 to 3」)。

  4. 出处:「Implementing a Denoising Encoder-Decoder」第 143 段(text/36-fm-implementing-a-denoising-encoder-decoder.txt:143,搜「by a factor of 2」)、第 145 段(text/36-fm-implementing-a-denoising-encoder-decoder.txt:145,搜「sigmoid activation」)。

  5. 出处:「Implementing a Denoising Encoder-Decoder」第 155 段(text/36-fm-implementing-a-denoising-encoder-decoder.txt:155,搜「L1 loss」)、第 163 段(text/36-fm-implementing-a-denoising-encoder-decoder.txt:163,搜「150 epochs」)。

  6. 出处:「Implementing a Denoising Encoder-Decoder」第 118 段(text/36-fm-implementing-a-denoising-encoder-decoder.txt:118,搜「buffer size」)、第 120 段(text/36-fm-implementing-a-denoising-encoder-decoder.txt:120,搜「preventing overfitting」)。

  7. 出处:「Implementing a Denoising Encoder-Decoder」第 186 段(text/36-fm-implementing-a-denoising-encoder-decoder.txt:186,搜「diffraction rings」)。 2

  8. 出处:「Implementing a Denoising Encoder-Decoder」第 196 段(text/36-fm-implementing-a-denoising-encoder-decoder.txt:196,搜「mode collapse」)。

  9. 出处:「Implementing a Denoising Encoder-Decoder」第 216 段(text/36-fm-implementing-a-denoising-encoder-decoder.txt:216,搜「absence of a particle in the output」)。

  10. 出处:「Implementing a Denoising Encoder-Decoder」第 254 段(text/36-fm-implementing-a-denoising-encoder-decoder.txt:254,搜「clusters of particles」)、第 282 段(text/36-fm-implementing-a-denoising-encoder-decoder.txt:282,搜「much better approximations」)。

  11. 出处:「Project 4A: Generating Images with Variational Autoencoders」第 9 段(text/37-fm-project-4a-generating-images-with-variational-au.txt:9,搜「strictly deterministic」)。

  12. 出处:「Project 4A: Generating Images with Variational Autoencoders」第 15 段(text/37-fm-project-4a-generating-images-with-variational-au.txt:15,搜「mean and a variance」)。

  13. 出处:「Project 4A: Generating Images with Variational Autoencoders」第 19 段(text/37-fm-project-4a-generating-images-with-variational-au.txt:19,搜「reconstruction term」)、第 21 段(text/37-fm-project-4a-generating-images-with-variational-au.txt:21,搜「Kullback」)。

  14. 出处:「Project 4A: Generating Images with Variational Autoencoders」第 23 段(text/37-fm-project-4a-generating-images-with-variational-au.txt:23,搜「repulsive force」)。 2

  15. 出处:「Project 4A: Generating Images with Variational Autoencoders」第 25 段(text/37-fm-project-4a-generating-images-with-variational-au.txt:25,搜「relative magnitude between the two loss terms」)、第 77 段(text/37-fm-project-4a-generating-images-with-variational-au.txt:77,搜「beta parameter」)。

  16. 出处:「Project 4A: Generating Images with Variational Autoencoders」第 66 段(text/37-fm-project-4a-generating-images-with-variational-au.txt:66,搜「latent_dim=2」)。

  17. 出处:「Project 4B: Morphing Images with Wasserstein Autoencoders」第 5 段(text/38-fm-project-4b-morphing-images-with-wasserstein-auto.txt:5,搜「Earth mover」)。

  18. 出处:「Project 4B: Morphing Images with Wasserstein Autoencoders」第 17 段(text/38-fm-project-4b-morphing-images-with-wasserstein-auto.txt:17,搜「more refined perspective」)。

  19. 出处:「Project 4B: Morphing Images with Wasserstein Autoencoders」第 168 段(text/38-fm-project-4b-morphing-images-with-wasserstein-auto.txt:168,搜「smooth transition in the latent space」)、第 200 段(text/38-fm-project-4b-morphing-images-with-wasserstein-auto.txt:200,搜「linearly interpolating」)。

  20. 出处:「Project 4C: Detecting Anomalies in ECG Data」第 7 段(text/39-fm-project-4c-detecting-anomalies-in-ecg-data.txt:7,搜「trained exclusively on normal data」)。

  21. 出处:「Project 4C: Detecting Anomalies in ECG Data」第 177 段(text/39-fm-project-4c-detecting-anomalies-in-ecg-data.txt:177,搜「95th percentile」)。

  22. 出处:「Project 4C: Detecting Anomalies in ECG Data」第 11 段(text/39-fm-project-4c-detecting-anomalies-in-ecg-data.txt:11,搜「rare or not well defined」)。

  23. 出处:「Summary」第 7 段(text/40-fm-summary.txt:7,搜「first foray」)。