我的自动编码器什么时候开始过拟合?

机器算法验证 神经网络 过拟合 无监督学习 自动编码器 随机梯度下降
2022-03-31 04:35:07

我正在使用隐藏层的自动编码器神经网络进行异常检测。这是一个无人监督的设置,因为我没有以前的异常示例。输入数据具有模式但也变化很大,因此在本质上是部分随机的。1

为了便于理解,我训练了一个(完整的)自动编码器,其维度为 input =、 hidden =、 output =,并且在隐藏层和输出层中使用 sigmoid 函数。我的训练数据具有维度(500 个变量,5000 个样本)。我使用种算法,学习率,小批量大小,以及 Keras/TensorFlow 中的标准算法参数:500500500X[0,1]5000×50030.0164

  1. 标准随机梯度下降 (SGD)
  2. 和学习率衰减的高级/扩展 SGD0.9108
  3. 亚当优化器(,学习率衰减β1=0.9β2=0.9990

下图显示了相应的误差曲线。就我而言,两者都在不断下降(亚当除外),所以我会说“继续训练”。另一方面,我直觉地知道我不应该训练这么长时间,因为一定有一些过度拟合发生。那么我怎么知道什么时候停止训练,你会如何解释下面的结果呢?我是否正确,只使用 Adam 并使用 250 个 epoch(即使它在训练/验证集之间存在很大偏差)?

在此处输入图像描述

2个回答

正如验证所讲述的算法的泛化。从你的图表来看,ADAM 工作得非常好,但反应有偏差。但可以肯定的是,那里没有过度拟合的迹象。

对于偏差检查,您可以尝试k-fold方法,并检查算法对每个折叠的响应。然后你可以发现,这是不可约的错误还是别的什么。

@Sycorax 答案是最接近答案的答案。

通常,过度拟合被描述为模型训练误差下降而验证误差上升,这意味着模型正在学习不会泛化到训练集之外的模式。

对于自动编码器,您正在训练模型以重现输入。在极端情况下,您的模型可能只是输出 = 输入,验证和训练损失均为 0。

但这不是您想要从自动编码器中获取异常检测的结果。您希望模型学习输入应该是什么样子的抽象表示,因此模型开发了在出现输入时自行生成实例的能力。

模型“认为它应该是什么样子”与输入之间的距离或误差告诉我们输入是否“异常”。

评估它的最佳方法是向模型展示有效和无效的实例并监控重建错误。如果在两个集合上趋于相同,则您的模型很可能正在学习恒等函数并且需要进行修改。