machine-learning - 神经网络学习速度快,误报率高

标签 machine-learning neural-network backpropagation supervised-learning

我最近开始实现前馈神经网络,并使用反向传播作为学习方法。我一直在使用http://galaxy.agh.edu.pl/~vlsi/AI/backp_t_en/backprop.html作为指导。

但是,在第一个纪元之后,我的错误为 0。在将网络用于我的真正目的之前,我尝试过简单的网络结构:

  • 4 个二进制输入,1, 1, 0, 0。
  • 2 个隐藏层,每个隐藏层 4 个神经元。
  • 1 个输出神经元,1.0 应该 = 有效输入。

每个训练周期运行测试输入(1,1,0,0),计算输出误差(sigmoid导数*(1.0 - sigmoid)),反向传播误差并最终调整权重。

每个神经元的新权重 = 权重 + Learning_rate * 神经元的误差 * 权重的输入。

每个隐藏神经元的误差 =(所有输出神经元误差之和 * 连接权重) * 神经元的 sigmoid 导数。

问题是,我的学习率必须为 0.0001,才能看到各纪元之间在降低误差方面取得的任何“进展”。在这种情况下,错误开始于 ~30.0 左右。任何更大的学习率和错误都会在第一次通过后导致 0,从而导致误报。

此外,当我使用真实数据(样本中的一组 32 个音频特征 - 每个隐藏层 32 个神经元)尝试该网络时 - 我遇到了同样的问题。任何噪音都会触发误报。这可能是一个输入功能问题,但当我使用高音音符进行测试时,我可以清楚地看到原始数据与低音音符不同。

我是神经网络新手,所以我几乎可以肯定问题出在我的网络上。 任何帮助将不胜感激。

最佳答案

尽管声明您正在使用前馈/反向传播的标准神经网络方法,但您尚未描述如何实际实现它。您提到您正在使用“galaxy”链接作为指南,但我注意到,在“galaxy”页面上,没有提到对节点应用偏差。也许您还没有包含这个重要的组件? Nate Kohl 对应用于 NN 节点的偏差的作用进行了很好的讨论,请参阅 Role of Bias in Neural Networks .

接下来,不要使用两个隐藏层,而是尝试仅使用一个隐藏层。您可能必须增加该层中的节点数量,但是对于大多数实际问题,您应该能够仅使用一个隐藏层就获得良好的解决方案。它很可能会更加稳定,并且肯定会让您更容易地跟踪反向传播所发生的事情。

关于machine-learning - 神经网络学习速度快,误报率高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23010207/

相关文章:

python - Wine 质量数据集的训练准确率无法超过 55%

python - 喀拉斯 : TypeError: 'AddNL' object has no attribute '__getitem__'

machine-learning - 如何加速前馈、基于梯度的反向传播神经网络的学习

machine-learning - 神经网络加权

python - 反向传播麻烦;总成本越来越高,直到无穷大

python - scikit-learn SelectPercentile TFIDF 数据特征缩减

python - Keras + tf.Dataset + 预测

python - Keras:模型的正确性和自定义指标的问题

python - 神经网络输出的非规范化

python - 使用 Sklearn featurehasher