【问题标题】:Neural network learning fast, false positives神经网络学习速度快,误报
【发布时间】:2014-05-25 11:14:24
【问题描述】:

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

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

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

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

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

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

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

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

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

【问题讨论】:

  • 0.0001 对于学习率来说不一定太低;有时你只需要一个小的学习率来取得进步。如果您还没有这样做,请尝试对数据进行归一化,因为这通常可以增加学习率的大小。

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    嗯 0.0001 对我来说听起来很合理。您可能会调整其他常数或使用不同的随机集为初始神经网络权重播种。

    如果你的训练数据没问题,那么在你得到正确的神经网络之前,做一千次或更多次刺激是完全正常的。

    有许多技术可以更快地获得最终结果。 例如,您可以使用 TanH 或 Relu 作为激活函数 您也可以在 x 个时期内从 0.001 减少到 0.0001,或者根据错误率减少。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-15
      • 2018-10-05
      • 1970-01-01
      • 2016-07-11
      • 1970-01-01
      • 2016-05-25
      • 2019-03-15
      • 2011-08-17
      相关资源
      最近更新 更多