自编码器学习过程的核心在于让输出 $\hat{x}$ 尽可能接近原始输入 $x$。但我们如何量化这种“接近度”呢?损失函数在此处发挥作用。损失函数,又称成本函数或误差函数,用于衡量自编码器重建结果与原始输入之间的差异。在训练期间,自编码器会调整其内部参数(权重和偏置)以减少此损失,从而提高其准确重建输入的能力。损失函数的选择并非随意。它很大程度上取决于您处理的数据类型以及您对其分布的假设。接下来,我们介绍用于训练自编码器的最常用损失函数。digraph G { rankdir=LR; node [shape=box, style="filled", fillcolor="#e9ecef", fontname="sans-serif"]; edge [fontname="sans-serif"]; X [label="输入 (x)", shape=oval, fillcolor="#a5d8ff"]; X_hat [label="重建 (x̂)", shape=oval, fillcolor="#a5d8ff"]; Encoder [label="编码器网络"]; Decoder [label="解码器网络"]; LatentSpace [label="潜在空间 (z)", fillcolor="#b2f2bb"]; Loss [label="损失函数\n L(x, x̂)", shape=ellipse, fillcolor="#ffc9c9"]; X -> Encoder; Encoder -> LatentSpace; LatentSpace -> Decoder; Decoder -> X_hat; X -> Loss [style=dashed, arrowhead=none, dir=both, label="比较"]; X_hat -> Loss [style=dashed]; subgraph cluster_autoencoder { label = "自编码器模型"; style = "rounded,dashed"; bgcolor = "#f8f9fa"; Encoder; LatentSpace; Decoder; } }损失函数评估原始输入 $x$ 与自编码器重建结果 $\hat{x}$ 之间的差异。此评估用于指导训练过程。均方误差 (MSE)如章前介绍所述,均方误差 (MSE) 是一种广泛使用的损失函数,特别适用于处理连续输入数据,例如灰度或彩色图像的像素值(通常归一化到 $[0, 1]$ 或 $[-1, 1]$ 等范围),或一般实值特征。对于包含 $N$ 个样本的数据集,MSE 的计算公式为: $$MSE = \frac{1}{N} \sum_{i=1}^{N} (x_i - \hat{x}_i)^2$$ 如果输入 $x_i$ 是一个向量(例如,展平的图像或表格数据集中的一行),则平方差 $(x_i - \hat{x}i)^2$ 会变为该向量所有维度上平方差的总和。对于一个 $H \times W$ 像素的图像,单张图像的损失为 $\frac{1}{H \times W} \sum{j=1}^{H \times W} (x_j - \hat{x}_j)^2$,其中 $x_j$ 是单个像素值。MSE的特点:对异常值的敏感性: 因为误差是平方的,MSE 对较大误差的惩罚比对较小误差的惩罚要大得多。少数具有很大重建误差的像素可能会主导损失值。如果特别不希望出现大误差,这可能有利,但也可能使模型对噪声数据或异常值过于敏感。平滑性: MSE 是一个可微分函数,这对于反向传播等基于梯度的优化方法很重要。典型应用场景: 重建具有连续像素强度的图像,或目标值为连续值的任何回归类任务。它通常会导致重建结果显得略微模糊,因为模型会尝试平均各种可能性以减少平方误差。二进制交叉熵 (BCE)当您的输入数据是二值的(例如,像素为 0 或 1 的黑白图像),或者当像素值归一化到 $[0, 1]$ 范围并可解释为概率时(例如,像素为“亮”的概率),二进制交叉熵 (BCE) 通常是更合适的选择。对于单个数据点 $x$(可以是单个像素或整个输入向量)及其重建 $\hat{x}$,BCE 损失通常定义为: $$L(x, \hat{x}) = - \sum_j [x_j \log(\hat{x}_j) + (1-x_j) \log(1-\hat{x}_j)]$$ 此求和涵盖输入 $x$ 的所有单个分量 $j$(例如,图像中的所有像素)。一批 $N$ 个样本的总损失将是这些单独损失的平均值。BCE 的要点:输出激活: 为了有效使用 BCE,解码器的输出层应采用 sigmoid 激活函数。这确保了重建值 $\hat{x}_j$ 限制在 0 到 1 之间,使其可以被解释为概率。解释: BCE 衡量两个概率分布之间的差异。在此背景下,它指的是真实分布(其中 $x_j$ 为 0 或 1)和预测分布(由 $\hat{x}_j$ 给出)。特性:如果 $x_j = 1$,损失变为 $-\log(\hat{x}_j)$。为了减少损失,$\hat{x}_j$ 必须接近 1。如果 $x_j = 0$,损失变为 $-\log(1-\hat{x}_j)$。为了减少损失,$\hat{x}_j$ 必须接近 0。典型应用场景: 重建二值图像,或像素强度归一化到 $[0,1]$ 并被视为概率的图像数据。它也是伯努利输出分布的标准损失。平均绝对误差 (MAE) / L1 损失另一种适用于连续数据的选择是平均绝对误差 (MAE),也称为 L1 损失: $$MAE = \frac{1}{N} \sum_{i=1}^{N} |x_i - \hat{x}_i|$$ 与 MSE 类似,如果 $x_i$ 是一个向量,此函数会在所有维度上求和。MAE 的特点:对异常值的影响较小: 与 MSE 相比,MAE 对异常值敏感度较低,因为它不计算误差的平方。较大误差受到线性惩罚。重建结果可能不够清晰: 尽管其性能可靠,但 MAE 有时可能导致重建结果不如使用 MSE 训练的结果清晰或更模糊,尽管这取决于具体情况。对于标准自编码器图像重建任务,它不如 MSE 常用,但在特定情况下,尤其是在已知存在异常值问题时,它是一个可行的选择。选择合适的损失函数损失函数的选择主要取决于输入数据的性质:对于实值、连续数据(例如,传感器读数、归一化图像像素强度): MSE 是常见的默认选择。对于二值数据或表示概率的数据(例如,像素归一化到 $[0,1]$ 且解码器具有 sigmoid 输出): 通常更倾向于使用 BCE。如果您的数据存在明显异常值且您想减少其影响: 可以考虑使用 MAE 作为 MSE 的替代方案。另外,值得注意的是,损失函数的选择隐含地决定了自编码器优先学习数据的哪些方面。如果损失函数对某些类型的误差给予重罚,自编码器将更努力地避免这些误差,这反过来会影响其在瓶颈层学习到的特征。例如,MSE 的平均化倾向如果管理不当,可能会平滑掉高频细节,而 BCE 可能更擅长保留概率上的区别。最终目标是选择一个与您针对特定任务定义的“良好”重建结果相符的损失函数。这种审慎的选择对于训练一个不仅能很好地重建数据,还能学习到有意义且有用的潜在表示的自编码器十分重要。