我有一个AI项目,使用了反向传播神经网络。
它已经训练了大约一个小时,从全部100个输入中训练了60到70个输入。我的意思是,在反向传播的条件下,60到70个输入是正确的。(训练的输入数量在60到70之间波动)。
目前,已经完成了超过10000个周期,每个周期大约需要0.5秒。
如果我让它长时间运行,如何知道这个神经网络是否能成功训练?(或者它是否无法进一步训练?)
回答:
查看我对这个问题的回答:在神经网络中,训练集、验证集和测试集有什么区别?
你应该使用三组数据:
- 训练集
- 验证集
- 测试集
验证数据集可以告诉你何时应该停止训练(正如我在另一个回答中所说):
验证数据集用于最小化过拟合。你不会用这个数据集调整网络的权重,你只是在验证训练数据集上的准确性提高是否真的在未展示给网络的数据集上也提高了准确性,或者至少网络没有在其上训练过(即验证数据集)。如果训练数据集上的准确性提高了,但验证数据集上的准确性保持不变或下降,那么你就在过拟合神经网络,你应该停止训练。
一个好的验证方法是使用10折(k折)交叉验证。此外,还有特定的“策略”来将你的数据集分割成训练、验证和测试集。这本身就是一门科学,所以你也应该阅读相关内容。
更新
关于你对错误的评论,我会推荐一些资源,这些资源可以帮助你更好地理解神经网络(这有点数学密集,但请看下面的更多信息):
- http://www.colinfahey.com/neural_network_with_back_propagation_learning/neural_network_with_back_propagation_learning_en.html
- http://www.willamette.edu/~gorr/classes/cs449/linear2.html
科林·法希文章的第5.9节对此描述得最好:
反向误差传播公式:
使用以下公式计算神经网络输出的误差值:
Error = (Output - Desired); // 源自:Output = Desired + Error;
神经元体内的误差累积根据神经元体的输出和输出误差(由连接到神经元体的链接指定)进行调整。每个输出误差值以以下方式贡献给误差累加器:
ErrorAccumulator += Output * (1 - Output) * OutputError;