我在使用神经网络方面遇到了一些问题。我对隐藏层使用非线性激活函数,对输出层使用线性函数。在隐藏层中添加更多神经元应该增加NN的能力,使其更适合训练数据/减少训练数据的错误。
但是,我看到了不同的现象。添加更多神经元即使在训练集上也会降低神经网络的准确性。
以下是随着神经元数量的增加,平均绝对误差的图表。训练数据的准确性正在下降。可能是什么原因造成的?
我使用matlab的nntool是否将数据随机分成训练,测试和验证集以检查泛化而不是使用交叉验证。
此外,我可以看到很多-ve输出值添加神经元,而我的目标应该是正数。这可能是另一个问题吗?
我无法在这里解释NN的行为。有什么建议?以下是我的数据链接,包括协变量和目标
答案 0 :(得分:0)
我对nntool不熟悉,但我怀疑你的问题与初始权重的选择有关。初始权重选择不佳会导致收敛速度非常慢或根本无法收敛。
例如,请注意,随着隐藏层中神经元数量的增加,可见层中每个神经元的输入数量也会增加(每个隐藏单元一个)。假设您在隐藏层中使用logit(始终为正)并从固定间隔之间的随机均匀分布中选择初始权重。然后随着隐藏单元的数量增加,可见层中每个神经元的输入也将增加,因为有更多的传入连接。由于隐藏单元数量非常多,您的初始解决方案可能会变得非常大,导致收敛性差。
当然,这一切的行为取决于您的激活函数和数据的分布以及它是如何规范化的。我建议您查看Yann LeCun的Efficient Backprop,以获得关于规范化数据和选择初始权重和激活函数的一些很好的建议。