从线性自编码器到去噪自编码器:发展脉络与公式推导
本文按四章梳理自编码器(Autoencoder)家族的发展主线,每章包含定义、数学推导与设计动机。
引言:一条主线
自编码器家族的发展可以概括为一条主线:
不断提高表达力 → 防止过拟合 → 学会真正有用的特征
flowchart LR
A[线性自编码器<br/>单层 + 线性<br/>等价于 PCA] --> B[Deep Autoencoder<br/>多层 + 非线性<br/>表达力更强]
B --> C{训练更易过拟合}
C --> D[Sparse Autoencoder<br/>稀疏约束 → 可解释特征]
C --> E[Denoising Autoencoder<br/>噪声重建 → 鲁棒特征]
| 阶段 | 解决什么问题 | 引入什么 |
|---|---|---|
| 线性自编码器 | 基础降维 | 编码器 / 解码器 / 瓶颈结构 |
| Deep Autoencoder | 只能线性、表达力不足 | 多层结构 + 非线性激活 |
| Sparse Autoencoder | 特征不清晰、不可解释 | 稀疏性约束(L1 / KL 散度) |
| Denoising Autoencoder | 特征不鲁棒、容易过拟合 | 输入噪声 + 重建原版 |
第 1 章 线性自编码器(Linear Autoencoder)
1.1 定义
编码器与解码器都不含激活函数,只有线性变换(矩阵乘法 + 偏置):
$$ z = W_e x,\qquad \hat{x} = W_d z = W_d W_e x $$其中 $x \in \mathbb{R}^d$ 是输入,$W_e \in \mathbb{R}^{k \times d}$ 是编码矩阵,$W_d \in \mathbb{R}^{d \times k}$ 是解码矩阵,$k < d$ 为瓶颈维度。
1.2 推导:为什么等价于 PCA
设数据集 $X \in \mathbb{R}^{d \times n}$($d$ 维特征,$n$ 个样本,每列一个样本),已中心化。训练目标是最小化重建误差:
$$ \min_{W_e, W_d} \; \frac{1}{n} \sum_{i=1}^{n} \|x^{(i)} - W_d W_e x^{(i)}\|^2 = \min_{W} \; \frac{1}{n} \|X - W X\|_F^2 $$其中 $W = W_d W_e$ 是 $d \times d$ 矩阵,且 $\mathrm{rank}(W) \le k$。因为秩受限,最优 $W$ 是一个秩不超过 $k$ 的正交投影。
记协方差矩阵
$$ \Sigma = \frac{1}{n} X X^\top $$对 $\Sigma$ 做特征值分解:$\Sigma = V \Lambda V^\top$,其中特征值按降序排列 $\lambda_1 \ge \lambda_2 \ge \dots \ge \lambda_d$。由 Eckart–Young 定理(或 PCA 的经典结论),最小化重建误差的秩 $k$ 投影由前 $k$ 个最大特征值对应的特征向量张成:
$$ W^{*} = V_k V_k^\top,\qquad V_k = [v_1, v_2, \dots, v_k] $$于是可取 $W_e^{*} = V_k^\top$、$W_d^{*} = V_k$(权重捆绑),编码
$$ z = V_k^\top x $$正是 PCA 的主成分得分。因此:
结论:线性自编码器(MSE 目标、无其他约束)的最优解等价于 PCA。
补充一点:若不要求权重捆绑,最优解并不唯一($W_e$ 可乘以任意 $k \times k$ 可逆矩阵),但张成的子空间唯一,就是 PCA 主子空间。
1.3 局限
线性自编码器只能捕捉数据中的线性相关性。对弯曲、非线性分布(如"S 形曲线"上的数据),线性投影会把重要结构信息丢掉,重建效果差——这正是向深度模型演进的动机。
第 2 章 深度自编码器(Deep Autoencoder)
2.1 定义
编码器和解码器都由多层神经网络堆叠,且层间加入非线性激活函数(ReLU、tanh、sigmoid 等):
$$ \begin{aligned} h_1 &= \sigma(W_1 x + b_1), \\ h_2 &= \sigma(W_2 h_1 + b_2), \\ &\vdots \\ z &= h_L, \qquad \hat{x} = W_d \sigma(\cdots \sigma(W_1 x + b_1) \cdots) + b_d \end{aligned} $$输入 → 层1 → 层2 → 瓶颈(编码 z)→ 层3 → 层4 → 输出
└──────── 编码器 ────────┘ └─────── 解码器 ────────┘
2.2 推导:为什么必须非线性
先看两层纯线性网络:
$$ \hat{x} = W_2 (W_1 x + b_1) + b_2 = (W_2 W_1)\, x + (W_2 b_1 + b_2) $$结果仍然是一个仿射变换。归纳可知,任意多层线性网络的叠加都等价于单个线性层:
$$ W_L \cdots W_2 W_1 = W_{\text{eff}} $$所以"深但线性"没有意义——没有非线性激活,深度就退化为线性自编码器。反之,一旦引入非线性,多层网络就可以逼近任意连续函数(万能逼近定理),从而拟合数据所在的非线性流形。
关系小结:线性自编码器是深度自编码器在"深度 = 1 且 σ 为恒等映射"时的退化特例。
2.3 损失函数:MSE 与 L2 范数的关系
深度自编码器沿用重建误差:
$$ \mathcal{L} = \frac{1}{n} \sum_{i=1}^{n} \|x^{(i)} - \hat{x}^{(i)}\|^2 $$这里的 $\|x - \hat{x}\|^2$ 是误差向量的平方 L2 范数(sum of squares),不是 L2 范数本身:
$$ \|e\|_2^2 = \sum_{j=1}^{d} e_j^2,\qquad \|e\|_2 = \sqrt{\sum_{j=1}^{d} e_j^2} $$二者在优化中等价(开根号是单调变换,不改变极值位置),而平方和求导更简单,所以实际都用平方形式。MSE 就是平方 L2 范数除以样本数。
训练使用反向传播:按链式法则从输出层向输入层逐层计算 $\partial \mathcal{L} / \partial W_l$,再用梯度下降更新参数。
2.4 推导:过拟合与 L2 正则化(权重衰减)
深层模型参数多,容易过拟合——训练集上表现完美、新数据上表现差。L2 正则化在损失函数中加入权重平方和惩罚:
$$ \mathcal{L} = \underbrace{\frac{1}{n} \sum_{i=1}^{n} \|x^{(i)} - \hat{x}^{(i)}\|^2}_{\text{重建误差}} + \lambda \sum_{w} w^2 $$对单个权重求导:
$$ \frac{\partial \mathcal{L}}{\partial w} = \frac{\partial \mathcal{L}_{\text{recon}}}{\partial w} + 2 \lambda w $$梯度下降更新:
$$ w \leftarrow w - \eta \left( \frac{\partial \mathcal{L}_{\text{recon}}}{\partial w} + 2\lambda w \right) = (1 - 2\eta\lambda)\, w - \eta \frac{\partial \mathcal{L}_{\text{recon}}}{\partial w} $$可以看到每步更新都把权重乘以因子 $(1 - 2\eta\lambda)$——这就是权重衰减(weight decay)名字的由来。由于惩罚梯度 $2\lambda w$ 与 $w$ 成正比,权重越小推力越弱,因此 L2 会把权重缩小但几乎不会归零。
第 3 章 稀疏自编码器(Sparse Autoencoder)
3.1 定义
普通自编码器靠窄瓶颈压缩信息;稀疏自编码器换一种思路:隐藏层可以很宽(甚至宽于输入),但强制每个样本只激活少数神经元。损失函数变成:
$$ \mathcal{L} = \underbrace{\frac{1}{n} \sum_{i=1}^{n} \|x^{(i)} - \hat{x}^{(i)}\|^2}_{\text{重建误差}} + \beta \cdot \Omega(\text{activations}) $$$\Omega$ 是稀疏惩罚项,常见两种实现:L1 惩罚与 KL 散度惩罚。
3.2 推导:为什么 L1 产生稀疏解
设惩罚项为激活值的 L1 范数:
$$ \Omega = \sum_{j} |a_j| $$对比 L1 与 L2 的梯度行为(以单个权重 $w$ 为例):
$$ \frac{\partial w^2}{\partial w} = 2w \quad\text{(L2:推力与 $w$ 成正比,越小越推不动)} $$$$ \frac{\partial |w|}{\partial w} = \operatorname{sign}(w) = \pm 1 \quad\text{(L1:恒定推力,能一路推到 0)} $$更严格地,考虑一维优化问题 $\min_w \tfrac{1}{2}(w - u)^2 + \lambda |w|$,其解析解是软阈值(soft-thresholding):
$$ w^{*} = \operatorname{sign}(u) \cdot \max(|u| - \lambda, \; 0) $$当 $|u| \le \lambda$ 时,$w^{*}$ 正好等于 0。这正是 L1 产生稀疏解的数学原因;L2 的对应解 $w^{*} = u/(1+2\lambda)$ 则永远不会为零。
几何直觉:L1 的约束区域是菱形,尖角位于坐标轴上,优化解更容易落在轴上(某个坐标正好为 0);L2 的约束区域是圆,切点通常在圆弧上,各坐标都非零。
补充:L3、L4 等一般 Lp 范数数学上成立,但既不像 L1 那样产生精确稀疏解,也不像 L2 那样有简洁的导数,因此实际正则化几乎不用;偶尔出现的是 L0(非零元素个数)与 L∞(最大值)。
3.3 推导:KL 散度稀疏约束
另一种经典做法(Ng 2001)直接约束平均激活率。设第 $j$ 个隐藏神经元在样本 $x^{(i)}$ 上的激活值为 $a_j^{(i)} \in [0,1]$(如 sigmoid 输出),平均激活率为:
$$ \hat{\rho}_j = \frac{1}{n} \sum_{i=1}^{n} a_j^{(i)} $$设定目标稀疏度 $\rho$(通常很小,如 0.05),用 KL 散度惩罚偏离程度:
$$ \Omega = \sum_{j=1}^{s} \mathrm{KL}(\rho \, \| \, \hat{\rho}_j) = \sum_{j=1}^{s} \left[ \rho \ln \frac{\rho}{\hat{\rho}_j} + (1-\rho) \ln \frac{1-\rho}{1-\hat{\rho}_j} \right] $$KL 散度在 $\hat{\rho}_j = \rho$ 时取最小值 0,且 $\hat{\rho}_j$ 离 $\rho$ 越远惩罚越大,于是把每个神经元的平均激活率拉向很小的 $\rho$——每个神经元只对少数样本"兴奋"。
3.4 稀疏解的意义
稀疏解指解中大部分元素正好为 0、只有少数非零。稀疏自编码器由此获得:
- 可解释性:每个神经元"专门负责一件事"(一个识别横线、一个识别圆角……),可查看其响应模式;
- 特征学习:无监督地学出干净、可分、可解释的特征;
- 压缩与计算:大量 0 可跳过计算、节省存储;
- 更接近大脑:视觉皮层的稀疏编码理论。
与普通自编码器的对比:
| 普通自编码器 | 稀疏自编码器 | |
|---|---|---|
| 约束方式 | 隐藏层维度小(瓶颈) | 隐藏层激活稀疏(维度可大) |
| 压缩来源 | 结构上的信息瓶颈 | 激活上的稀疏约束 |
| 典型应用 | 降维、异常检测 | 特征学习、可解释分析 |
第 4 章 去噪自编码器(Denoising Autoencoder)
4.1 定义
去噪自编码器故意破坏输入,再训练模型从损坏版本还原干净原版:
$$ \mathcal{L}_{\mathrm{DAE}} = \mathbb{E}_{x,\; \tilde{x} \sim q(\tilde{x} \mid x)}\left[ \left\| x - g\big(f(\tilde{x})\big) \right\|^2 \right] $$其中 $q(\tilde{x} \mid x)$ 是加噪分布,$f$ 是编码器,$g$ 是解码器。期望同时覆盖真实数据分布与噪声过程。
4.2 推导:常见噪声模型
(1)掩码噪声(masking noise)——随机把部分输入变量置零:
$$ \tilde{x}_i = m_i \cdot x_i,\qquad m_i \sim \mathrm{Bernoulli}(1 - \nu) $$即 $m_i$ 以概率 $1-\nu$ 取 1、以概率 $\nu$ 取 0。这里的 $\nu$ 就是噪声水平:表示输入变量中被随机置零的比例,取值范围 $0 \le \nu \le 1$。例如 28×28 图片共 784 像素,$\nu = 0.2$ 意味着随机抹掉约 157 个像素。
(2)高斯噪声:
$$ \tilde{x} = x + \varepsilon,\qquad \varepsilon \sim \mathcal{N}(0,\; \sigma^2 I) $$无论哪种噪声,重建目标始终是干净的原版 $x$,因此模型不能"照抄"被破坏的输入,必须从剩余信息中推断整体结构。
4.3 为什么能学到鲁棒特征
直觉上,干净数据都落在低维数据流形(曲面)上,噪声把样本推离流形。去噪自编码器学到的是把偏离流形的点"拉回"流形的能力——这要求它真正理解数据的结构规律,而非记住个别样本。
从数学上看,去噪本身是一种隐式正则化:在噪声很小的极限下(Alain & Bengio, 2014),DAE 的目标等价于普通重建误差加上一个与数据密度梯度相关的惩罚项:
$$ \mathcal{L}_{\mathrm{DAE}} \approx \mathcal{L}_{\mathrm{AE}} + \text{惩罚项(由噪声决定)} $$也就是说,加噪重建与 L2 正则化一样抑制过拟合,但更彻底——它迫使特征对输入扰动不敏感,而不是仅仅让权重变小。
4.4 与 Dropout 的区别及应用
| Dropout | 去噪自编码器的输入置零 | |
|---|---|---|
| 作用位置 | 隐藏层神经元 | 输入层变量 |
| 目的 | 防止神经元共适应(防过拟合) | 制造重建任务,学鲁棒特征 |
实际应用:
- 图像去噪 / 语音增强:把带噪输入还原为干净信号;
- 鲁棒特征学习:学到的特征抗噪,适合无监督预训练;
- 异常检测:正常样本重建误差小、异常样本重建误差大;
- 现代变体:MAE(Masked Autoencoder)——随机遮盖图片大部分区域,从剩余部分重建整张图,本质是"把遮盖当作噪声"。
总结:四种自编码器对比
| 维度 | 线性自编码器 | Deep Autoencoder | Sparse Autoencoder | Denoising Autoencoder |
|---|---|---|---|---|
| 结构 | 单层、线性 | 多层、非线性 | 隐藏层可宽,激活稀疏 | 通常深层 |
| 核心机制 | 线性压缩 | 非线性压缩 | 稀疏激活约束(L1 / KL) | 加噪输入 + 重建原版 |
| 等价 / 近似 | PCA | 无简单等价物 | 特征字典式表示 | 流形学习 / 去噪模型 |
| 学到什么 | 线性结构 | 非线性结构 | 可分、可解释的特征 | 鲁棒、抗噪的特征 |
| 防过拟合手段 | 无 | 正则化(如 L2 权重衰减) | 稀疏惩罚本身即约束 | 噪声是天然正则化 |
| 主要应用 | 简单降维 | 通用特征学习 | 可解释特征提取 | 去噪、鲁棒预训练 |
发展逻辑一句话:从线性到深度是表达力的提升(等价 PCA → 非线性流形),从深度到稀疏/去噪是"学什么特征、怎么学得稳"的演进(可解释特征 → 鲁棒特征)。