神经网络的正确性

时间:2009-05-07 16:07:09

标签: artificial-intelligence neural-network

我已经向其他AI人询问了这个问题,但我并没有给出满意的答案。

对于之前编程过人工神经网络的其他人,你如何测试其正确性?

我想,另一种说法是,如何调试神经网络背后的代码?

9 个答案:

答案 0 :(得分:12)

对于神经网络,通常发生的事情是您正在使用未经训练的神经网络,并且您正在使用给定的数据集进行训练,以便它以您期望的方式进行响应。这是交易;通常情况下,您可以根据自己的投入对其进行一定程度的培养。一般来说(这也是一般情况;你的里程可能会有所不同),你不能让神经网络始终提供正确的答案;相反,您正在获得正确答案的估计,在置信范围内。你知道这种信心取决于你如何训练网络。

如果你不能确定他们得出的结论是否可以证实是正确的,那么问题就出现了为什么你会想要使用神经网络;答案是神经网络可以在线性时间内获得某些类别问题(特别是NP完全问题)的高可信度答案,而NP-Complete问题的可验证正确解决方案只能在多项式时间内得出。通俗地说,神经网络可以“解决”正常计算无法解决的问题;但你只有一定的百分比才能确信你有正确的答案。您可以通过培训方案确定这种信心,通常可以确保您至少有99.9%的信心。

答案 1 :(得分:8)

在大多数“软计算”中,正确性是一个有趣的概念。我能告诉你的最好的结果是:“当神经网络始终满足其设计参数时,它是正确的。”您可以通过对数据进行训练,然后使用其他数据进行验证,并在中间使用反馈循环来告知您神经网络是否正常运行。

这当然仅适用于足够大的神经网络,其中无法直接证明正确性。如果您正在尝试构建学习XOR或类似事件的神经网络,则可以通过分析证明神经网络是正确的,但对于该类问题,很少需要aNN。

答案 2 :(得分:3)

你在这里开辟了比你想象中更大的虫子。

顺便提一下,NN可能被认为是通用函数逼近器,它可以帮助你思考这些东西。

无论如何,就你的问题而言,NN并没有什么特别之处,这个问题适用于任何类型的学习算法。

您对结果的信心将取决于您拥有的训练数据的数量和质量(通常难以确定)。

如果你真的对这些东西感兴趣,你可能想要了解过度训练和整体方法(套袋,助力等)的问题。

真正的问题是,您通常对您已经看过的给定输入的答案的“正确性”(cf quality)不感兴趣,而是关心在输入上预测答案的质量你还没有见过。这是一个更加困难的问题。然后,典型的方法是“阻止”你的一些训练数据(即你知道“正确”答案的东西),并根据这些数据测试训练有素的系统。当你开始考虑你可能没有足够的数据,或者它可能有偏见等时,它会变得微妙。所以有许多研究人员基本上把所有的时间花在思考这些问题上!

答案 3 :(得分:2)

我参与过有测试数据和训练数据的项目,所以你知道NN没有看到的一组输入的预期输出。

分析任何分类器结果的一种常用方法是使用ROC曲线;可以在Interpreting Diagnostic Tests

找到分类器和ROC曲线统计数据的介绍

答案 4 :(得分:1)

我是这个领域的完全业余爱好者,但是你不使用你知道正确的预定数据集吗?

答案 5 :(得分:1)

我不相信有一个正确的答案,但有充分证明的概率或统计方法可以提供保证。统计方法通常称为Resampling

我可以推荐的一种方法是Jackknife

答案 6 :(得分:0)

我的老师总是说他的经验法则是用NN训练NN 80%的数据并用其他20%的数据进行验证。当然,请确保数据集尽可能全面。

答案 7 :(得分:0)

如果你想知道网络的反向传播是否正确,有一种简单的方法。

由于您计算了错误格局的派生,因此您可以在数字上检查您的实现是否正确。您将根据特定权重计算误差的导数∂E/∂w。你可以证明

∂E/∂w=(E(w + e) - E(w - e))/(2 * e)+ O(e ^ 2)。

(Bishop,机器学习和模式识别,第246页)

基本上,您评估重量左侧的误差,将其评估到重量的右侧,如果数值梯度与分析梯度相同,则进行检查。

(这是一个实现:http://github.com/bayerj/arac/raw/9f5b225d6293974f8adfc5f20dfc6439cc1bed35/src/cpp/utilities/utilities.cpp

答案 8 :(得分:0)

对我来说,可能只有一个值需要额外的努力来验证反向传播的梯度。我认为拜耳的答案实际上是常用和建议的。您需要为此编写额外的代码,但所有代码都是前向传播矩阵乘法,易于编写和验证。

还有一些其他问题会阻止您获得最佳答案,例如:

  • NN的成本函数不是凹的,因此您的梯度下降不能保证找到全局最优值。
  • 过度/不足
  • 不选择"权利"特征/模型

但是我认为它们超出了编程bug的范围。