4

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

然而,在第一个时代之后,我的错误是 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 个神经元)尝试这个网络时 -我遇到了同样的问题到了任何噪音都会触发误报的地步。可能这可能是输入功能问题,但当我使用高音进行测试时,我可以清楚地看到原始数据与低音不同。

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

4

2 回答 2

0

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

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

于 2014-07-22T05:12:07.657 回答
0

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

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

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

于 2018-04-30T06:59:52.513 回答