【问题标题】:Validation Set in Backpropogation in a Neural Network神经网络中反向传播的验证集
【发布时间】:2014-05-20 04:18:59
【问题描述】:

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

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

目前为止如有错误请指正。

我的问题是我们比较的是什么错误?我们只是比较输出层的误差吗?还是我们在比较每个节点的错误?如果是这样,我们如何准确定义网络的整体误差,只需将所有误差相加即可?

【问题讨论】:

    标签: machine-learning neural-network backpropagation


    【解决方案1】:

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

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

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


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

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

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

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

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

    由于验证样本的数量只有训练样本的 1/3,我是否每个 epoch 运行 3 次验证?

    为什么我们要遍历验证集?我们是否计算验证错误以获取权重更新?不,我们只使用训练集进行所有更新。验证只是为了了解我们经过训练的模型如何在训练数据之外进行泛化。将其视为使用测试集运行的测试之前的测试。现在,在每个 epoch 中运行 3 次验证集是否有意义?不,它没有。

    我使用最后计算的权重进行在线学习正确吗?

    是的。随着新样本的加入,错误计算和权重更新发生。

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

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

    【讨论】:

    • 我们是只对批处理方法使用均方误差还是两者都使用?如果两者兼而有之,那么使用 epoch 中的最后一个错误是否更有意义,因为每次迭代时错误应该越来越低。另外,如果我们有超过 1 个输出,我们只是取输出层中误差的总和,还是应该是某种加权总和?谢谢
    • 出于绘图目的,我们仅对批处理方法采用均方误差。对于在线学习,绘制 MSE 没有意义。
    • 感谢您的所有帮助。我有几个实施问题。假设我有 60% 的训练、20% 的验证和 20% 的测试集。对于每个 epoch,我运行 60 个训练集样本,同时调整每个样本的权重,并计算每个验证样本的误差。由于验证样本的数量只有训练样本的 1/3,我是否每个 epoch 运行 3 次验证?为了澄清,我使用最后计算的权重进行在线学习对吗?此外,如果输入数据被标准化并按顺序排序,并且我们使用的是 sigmoid 激活
    • 例如,当输入接近 0 或 1 时,误差应该更高,因此最后一个误差会高于平均误差。但是,如果我们将它与验证集中的最后一个错误进行比较,这应该没关系,对吧?最后,当我们使用测试集来计算最终模型的误差时,我们是使用 mse 还是使用哪个真的太重要了?再次感谢
    • 更新了答案以回答您的新问题。虽然我不明白你试图说什么关于排序输入和 sigmoid 激活。
    猜你喜欢
    • 2015-03-03
    • 2012-02-21
    • 2011-01-05
    • 1970-01-01
    • 1970-01-01
    • 2018-05-17
    • 2013-04-26
    • 2016-09-19
    相关资源
    最近更新 更多