趋近智
一旦您设计好了编码器和解码器的基本结构,并确定了潜在空间的维度,下一步重要环节就是选择一个合适的损失函数。损失函数,也称为成本函数或目标函数,量化了自编码器的重构结果与原始输入之间的差异。在训练过程中,自编码器的权重会进行调整以最小化此损失,从而有效地学习产生越来越好的重构,并因此获得更具意义的潜在表示。
损失函数的选择并非随意;它主要取决于您处理的数据的类型和特点,以及重构的期望属性。我们来看看最常见的几种选择。
当您的输入数据包含连续的实数值时,例如图像中的像素强度(归一化后)或表格数据集中的测量值,均方误差 (MSE) 是一个非常常用且有效的选择。
MSE 衡量原始输入值与重构值之间的平均平方差。对于一个具有 个特征的单个数据实例(例如,表格数据中的 个像素或 列),如果 是原始输入的第 个特征,而 是重构输出的第 个特征,MSE 的计算方式如下:
一个 个数据实例批次的总损失将是这些单个 MSE 值的平均值。
为何选择 MSE?
使用 MSE 时,如果目标值是无界的或归一化到像 (-1, 1) 这样的范围(在这种情况下,如果输入也类似缩放,输出层也可以使用 tanh 激活),解码器的输出层通常使用线性激活函数。如果您的连续数据被归一化到 [0,1] 范围内,也可以将 sigmoid 激活与 MSE 一起使用,尽管在那种特定的 [0,1] 场景中,为了概率解释,二进制交叉熵通常更受青睐。
对于连续数据,另一个选择是平均绝对误差 (MAE)。它衡量原始值和重构值之间的平均绝对差:
MSE 对比 MAE 与 MSE 相比,MAE 通常对异常值不那么敏感。如果您的数据集中包含您不希望过度影响训练过程的显著异常值,MAE 可能是更好的选择。然而,MSE 对大误差更强的惩罚有时能使重构结果在良好数据的平均表现上更接近原始值。选择通常归结为经验测试或特定领域的要求。
以下图表显示了与 MAE 相比,MSE 如何对更大的误差施加更大的惩罚。
此图表显示了 MSE 和 MAE 所归属的损失值,它是单个预测值与其目标(为简化起见假定为 0)之间误差的函数。请注意,MSE 的增长是二次方的,而 MAE 则是线性的。
当您的输入数据是二进制的(例如,像素为 0 或 1 的黑白图像),或者可以被解释为概率(例如,严格在 0 和 1 之间归一化的像素强度)时,二进制交叉熵 (BCE) 通常是更受青睐的损失函数。
二进制交叉熵,也称为对数损失,衡量两个概率分布之间的差异。在自编码器背景下,它比较原始二进制/概率输入数据的分布与重构输出的分布,后者通常通过 sigmoid 激活函数以确保其值也在 0 和 1 之间。
对于一个具有 个特征的单个数据实例,其中 是原始值,而 是第 个特征的重构概率,BCE 损失为:
为何选择 BCE?
BCE 的重要注意事项:
如前所述,损失函数的选择与解码器输出层中使用的激活函数紧密关联:
tanh 激活。tanh 的输出值就在此范围。不匹配的损失函数和输出激活会导致糟糕的训练表现或无意义的结果。例如,将 BCE 与产生 [0,1] 之外值的线性输出层一起使用,会引发错误或导致模型错误地学习。
大多数深度学习框架都能方便地指定您选择的损失函数。
在 TensorFlow/Keras 中: 您可以将字符串标识符或类实例传递给模型的 compile 方法:
# 对于 MSE
model.compile(optimizer='adam', loss='mean_squared_error')
# 或者
# model.compile(optimizer='adam', loss=tf.keras.losses.MeanSquaredError())
# 对于 BCE
model.compile(optimizer='adam', loss='binary_crossentropy')
# 或者
# model.compile(optimizer='adam', loss=tf.keras.losses.BinaryCrossentropy())
在 PyTorch 中: 您实例化损失函数类,然后在训练循环中调用它:
# 对于 MSE
criterion = torch.nn.MSELoss()
# ... 在训练循环中:
# loss = criterion(reconstructions, original_inputs)
# 对于 BCE
criterion = torch.nn.BCELoss()
# ... 在训练循环中(确保重构是 sigmoid 输出):
# loss = criterion(reconstructions, original_inputs)
分析您的输入数据:
根据数据类型和归一化进行选择:
tanh 输出激活。与输出层激活保持一致:
tanh 或有时 sigmoid。选择正确的损失函数是构建一个有效自编码器的根本步骤。它直接影响模型学习的内容以及它在重构这一主要任务上的表现,进而影响您将从瓶颈层提取的特征质量。在即将到来的实践环节中,您将看到其中一种的实际应用。
这部分内容有帮助吗?
MeanSquaredError和BinaryCrossentropy以及它们在TensorFlow/Keras模型中的使用。MSELoss和BCELoss,这些对于训练自动编码器是必不可少的。© 2026 ApX Machine Learning用心打造