1

我在使用神经网络时遇到了一些问题。我对隐藏层使用非线性激活函数,对输出层使用线性函数。在隐藏层中添加更多的神经元应该会增加 NN 的能力,并使其更适合训练数据/训练数据的错误更少。

但是,我看到了不同的现象。即使在训练集上,添加更多神经元也会降低神经网络的准确性。 在此处输入图像描述

这是随着神经元数量增加的平均绝对误差图。训练数据的准确性正在下降。这可能是什么原因?

是不是我使用的 matlab 的 nntool 将数据随机拆分为训练、测试和验证集以检查泛化而不是使用交叉验证。

我还可以看到很多 -ve 输出值添加了神经元,而我的目标应该是正数。会不会是另一个问题?

我无法在这里解释 NN 的行为。有什么建议么?这是指向我的数据的链接,其中包含协变量和目标

https://www.dropbox.com/s/0wcj2y6x6jd2vzm/data.mat

4

1 回答 1

0

我对 nntool 不熟悉,但我怀疑您的问题与初始权重的选择有关。初始权重选择不佳会导致收敛速度非常慢或根本无法收敛。

例如,请注意,随着隐藏层中神经元数量的增加,可见层中每个神经元的输入数量也会增加(每个隐藏单元一个)。假设您在隐藏层中使用 logit(始终为正),并从固定间隔之间的随机均匀分布中选择初始权重。然后随着隐藏单元数量的增加,可见层中每个神经元的输入也会增加,因为有更多的传入连接。如果隐藏单元数量非常多,您的初始解决方案可能会变得非常大并导致收敛性差。

当然,这一切的表现取决于您的激活函数和数据的分布以及数据的标准化方式。我建议查看Yann LeCun 的Efficient Backprop,以获得有关规范化数据和选择初始权重和激活函数的一些极好的建议。

于 2013-09-04T18:41:43.830 回答