自动编码器(Autoencoder) 起源于 1980 年代至 1990 年代,旨在通过无监督学习对数据进行特征提取或降维。其基本思想是通过编码器将高维输入压缩到低维隐藏空间 $z$,再通过解码器从 $z$ 重建原始输入 $\hat{x}$,通过最小化重建误差学习数据的主要结构与特征。尽管训练时输入和输出相同,网络并非简单记忆每个样本,而是通过中间的瓶颈层(隐藏层维度小于输入维度)和正则化,提取更具代表性的特征。
假设你想给朋友描述一幅画。当你面对画布时,只能用有限的语言(相当于低维向量 $z$)来概括这幅画的内容,然后你的朋友则根据你这有限的描述去“重画”这幅画。这两步如下:
如果你描述得够准确、够精炼,你朋友重画出来的作品就能和原画大致一致。自动编码器也在做类似的事情:它需要学会如何“精炼”表示数据,并尽可能原样“重构”回来。
给定一个数据样本 $x$,例如一张图片或一个向量,自动编码器的目标是学到以下映射:
$$ \begin{aligned} &\text{Encoder } f: x \rightarrow z \quad (z \in \mathbb{R}^{d_z}),\\ &\text{Decoder } g: z \rightarrow \hat{x} \quad (\hat{x} \in \mathbb{R}^{d_x}), \end{aligned} $$
使得 $\hat{x} \approx x$。通常来说,$d_z \ll d_x$,也就是说 隐空间(特征空间) 的维度远小于原数据空间,用来捕捉主要特征,并舍弃冗余信息。
为了让网络真的“学会”编码(压缩)的过程而不仅仅是简单地记忆数据,网络内部往往会设置瓶颈(bottleneck)——例如隐藏层的维度远小于输入维度,或者通过添加噪声、正则项等限制网络的重建能力,迫使网络关注输入数据的主要结构。
对于图像数据处理,卷积神经网络(CNN)是一种比多层感知机(MLP)更适合用于构建自动编码器(AE)的架构,因为它能够有效捕获图像的空间结构特性。基于 CNN 的自动编码器由两个主要部分组成:编码器和解码器。
编码器通过一系列卷积层(通常结合池化层)将输入图像 $x$ 转换为低维的潜在表示 $z$。这一过程可以用下式表示,
$$ z = f_\theta(x) = \text{Conv}(\text{Conv}(...(\text{Conv}(x))...)), $$
其中 $f_\theta$ 表示由卷积操作顺序组成的编码器函数。
解码器则从潜在表示 $z$ 恢复出接近原始输入的重建图像 $\hat{x}$。这一过程通过转置卷积层(或称反卷积层)或上采样层逐步还原空间维度完成,可以用下式表示,
$$ \hat{x} = g_\phi(z) = \text{Deconv}(\text{Deconv}(...(\text{Deconv}(z))...)), $$
其中 $g_\phi$ 表示由转置卷积操作顺序组成的解码器函数。
为了确保重建的图像 $\hat{x}$ 尽可能接近原始输入 $x$,网络通过最小化重建损失来优化参数。常用的损失函数是均方误差(MSE),其表达式为
$$ \mathcal{L}(\theta, \phi) = | x - \hat{x} |^2 = | x - g_\phi(f_\theta(x)) |^2. $$
在像素值归离散量化到 $[0, 255]$ 的场景下,交叉熵损失也可用,但是运算量会大很多。