在神经网络中的反向传播中验证集

时间:2014-05-20 04:19:00

标签: machine-learning neural-network backpropagation

我有一个神经网络模型,到目前为止我正在运行训练集,计算错误和调整权重。

据我了解,在为每个训练集示例执行此操作后,我需要从验证集向前运行一个示例并计算错误。当验证设置错误停止减少但训练集错误仍在减少时,是时候停止,因为过度拟合开始发生。停止后,我们使用测试集来计算网络中的错误数量。

如果到目前为止有任何错误,请纠正我。

我的问题是我们比较的错误是什么?我们只是比较输出层的错误吗?或者我们是否比较每个节点的错误?如果是这样,我们究竟如何定义网络的整体错误,只是总结所有错误?

1 个答案:

答案 0 :(得分:2)

  

我的问题是我们比较的错误是什么?

我们只在输出层上比较错误。因此,如果您绘制错误与时期图,您将有两条曲线。由于您有更多的纪元,训练错误的线会下降。但是,验证错误的行在开始上升之前会下降到某个点。这表示过度拟合,您希望找到验证错误最低的最后一个点。

请注意,在谈论epochs时,您正在谈论每个单独的样本。对于批处理方法,通常在对数据集进行一次迭代(训练或验证)后绘制这些错误。因此,图中的每个点都是该时期的平均误差或均方误差。


  

另外,如果我们有超过1个输出,我们只是取输出层中的错误总和,还是应该是某种加权和?

多输出情况很有趣。基本上我们试图找到停止训练重量的早期停止点。在多输出网络的最后一层,使用不同的误差导数训练权重,并且可能具有不同的最佳早期停止点。如果你认为是这种情况,你可能想要单独绘制它们。否则,简单的误差总和就足够了。加权总和意味着你需要优化输出而不是另一个输出,即使这导致其他人超过/不在训练。

如果您正在考虑实施单独的早期停止点,则可以使用MSE的总和来获取依赖于所有误差导数的所有内部权重的停止点。对于最后一层的权重,使用它们相应的MSE来获得它们各自的停止点。

  

假设我有60%的培训,20%的验证和20%的测试集。对于每个时期,我会在调整每个样本的权重的同时运行60个训练集样本,并计算每个验证样本的误差。

进行权重更新的另一种方法是计算每个样本的更新,然后在时期结束时应用所有更新的平均值。如果您的训练数据有噪音/异常值/错误分类的样本,这很好。例如,夫妻异常值将无法大规模扭曲权重,因为他们的“坏”更新将与其他“好”更新平均。

  

由于验证样本只有训练样本的1/3,我是否会为每个时期进行3次验证?

为什么我们迭代验证集?我们是否计算验证中的错误以获得重量更新?不。我们只使用培训集进行所有更新。验证仅用于了解我们训练的模型如何在训练数据之外进行推广。在测试集运行测试之前,将其视为测试。现在,在每个时代中运行验证集3次是否有意义?不,它没有。

  

我使用最后计算出的在线学习权重是否正确?

是。当新样本进入时,会发生错误计算和权重更新。

  

当我们使用测试集来计算我们的最终模型的误差时,我们是否使用mse或者它是否真的与我们使用的太重要了?

如果您的模型正在生成实值输出,则使用MSE。如果您的系统正在尝试解决分类问题,请使用分类错误。即10%的分类错误,意味着测试期间10%的测试集被您的模型错误分类。