前馈神经网络:对许多 类 使用具有多个输出神经元的单个网络

FeedForward Neural Network: Using a single Network with multiple output neurons for many classes

我目前正在研究 MNIST 手写数字class化。

我构建了一个具有以下结构的前馈网络:

所有神经元都有Sigmoid激活函数。

上报的class是输出值最大的输出神经元对应的那个

我的问题是:

我问一下,因为目前网络卡在 ~75% 的成功率。由于实际上“10 classifiers”共享隐藏层的相同神经元 - 我不确定 - 它会降低网络学习能力吗?

** 编辑:**

由于其他人可能会参考此线程,我想说实话并更新 75% 的成功率是在 ~1500 个 epoch 之后。现在我已经进行了将近 3000 个 epoch,它的成功率约为 85% - 所以它工作得很好

简而言之,是的,这是使用具有多个输出的单个网络的好方法。第一个隐藏层描述了特征 space 中的决策边界(超平面),多个数字可以从一些相同的超平面中受益。虽然您可以为每个数字创建一个 ANN,但这种一对多的方法并不一定会产生更好的结果,并且需要训练 10 倍数量的 ANN(每个 ANN 都可能被训练多次以试图避免局部最小值) .如果您有数百或数千位数字,那么它可能更有意义。

对于这个问题,单个隐藏层中的 1000 个神经元似乎很多。我认为您可能会通过减少手写数字并添加第二个隐藏层来获得更好的结果。这将使您能够在输入特征 space 中对更复杂的组合边界进行建模。例如,也许可以尝试 784x20x20x10 网络。

如果您尝试使用不同的网络结构,通常最好从较少数量的层和神经元开始,然后增加复杂性。这不仅可以减少训练时间,还可以立即避免过度拟合数据(你没有提到你的准确性是针对训练集还是验证集)。

是的,您当然可以使用具有多个输出的单个网络。不需要创建单独的网络,您的方法绝不会降低网络学习能力。 MNIST 是适合深度学习的手写数据库。因此,如果您使用深度学习算法,添加多层是一个很好的解决方案。否则,不建议使用简单的基于 BPN 的模型添加多层,因为您会 运行 进入局部最小值。您可以在 Theano 上查找深度学习教程。 话虽这么说,您可以尝试简单的逻辑回归 "deeplearning.net/tutorial/logreg.html" 并且它达到了相当不错的准确性。