如何知道反向传播能否成功训练?

时间:2012-01-19 16:28:57

标签: artificial-intelligence backpropagation

我有一个AI项目,它使用Backpropagation神经网络。

训练约1小时,并且训练了来自所有100个输入的60-70个输入。我的意思是,在反向传播的条件下,60-70输入是正确的。 (受过训练的输入数量在60到70之间)。

目前,已经完成了10000多个时期,每个时代花了将近0.5秒。

如果长时间离开它,如何知道神经网络是否可以成功训练? (或者它不能更好地训练?)

1 个答案:

答案 0 :(得分:7)

查看我对此问题的回答:whats is the difference between train, validation and test set, in neural networks?

您应该使用3组数据:

  • 培训
  • 验证
  • 测试

验证数据集告诉您何时应停止(正如我在另一个答案中所述):

  

验证数据集用于最小化过度拟合。你不是   用这个数据集调整网络的权重,你就是这样   验证培训数据集的准确性是否有所提高   实际上,相对于没有的数据集,准确度会提高   之前已经向网络展示过,或者至少网络没有展示过   对其进行培训(即验证数据集)。 如果准确度超过   训练数据集增加,但准确性超过验证   数据集保持不变或减少,那么你就是过度拟合了   神经网络,你应该停止训练。

一种好的验证方法是使用10-fold (k-fold) cross-validation。此外,还有一些特定的“策略”可用于将数据集拆分为培训,验证和测试。这本身就是一门科学,所以你也应该阅读它。

更新

关于你对错误的评论,我会指出一些资源,可以让你更好地理解神经网络(它有点数学,但请参阅下面的更多信息):

  1. http://www.colinfahey.com/neural_network_with_back_propagation_learning/neural_network_with_back_propagation_learning_en.html
  2. http://www.willamette.edu/~gorr/classes/cs449/linear2.html
  3. Section 5.9 of Colin Fahey article最能说明这一点:

    向后错误传播公式:
    神经网络输出的误差值使用以下公式计算:

    Error = (Output - Desired);  // Derived from: Output = Desired + Error;
    

    根据神经元体的输出和输出误差(由连接到神经元体的链路指定)调整神经元体中的误差累积。 每个输出错误值以下列方式对错误累加器有所贡献:

    ErrorAccumulator += Output * (1 - Output) * OutputError;