【问题标题】:FeedForward Neural Network: Using a single Network with multiple output neurons for many classes前馈神经网络:对多个类别使用具有多个输出神经元的单个网络
【发布时间】:2015-06-05 16:13:18
【问题描述】:

我目前正在研究 MNIST 手写数字分类。

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

  • 输入: 28x28 = 784 个输入
  • 隐藏层:具有 1000 个神经元的单个隐藏层
  • 输出层: 10 个神经元

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

报告的类是输出神经元对应的输出值最大的类

我的问题是:

  • 创建具有多个输出的单个网络是一种好方法吗? IE。我应该改为为每个数字创建一个单独的网络吗?

我问这个问题,因为目前网络的成功率约为 75%。由于实际上“10 个分类器”共享隐藏层的相同神经元——我不确定——这是否会降低网络学习能力?

** 编辑:**

由于其他人可能会参考此线程,我想说实话并更新 75% 的成功率是在大约 1500 个 epoch 之后。现在我已经完成了近 3000 个 epoch,并且成功率约为 85% - 所以效果很好

【问题讨论】:

  • 你应该为输出使用 softmax 层,而不是 sigmoid。
  • 什么是“softmax”层?你说“softmax”时是指线性吗?
  • 不,当我说 softmax 时,我指的是 softmax:en.wikipedia.org/wiki/Softmax_function
  • 查看我发布的链接。既不应该使用 liner,也不应该使用 sigmoid,而应该使用 soft-max,这是用于多类分类的。
  • @AndreasMueller 如果他/她不进行多类分类,那么使用 softmax 比仅选择最大的 sigmoid 输出值有什么好处吗?

标签: machine-learning neural-network backpropagation feed-forward


【解决方案1】:

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

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

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

【讨论】:

  • 这里要添加的关键词是“功能”。我们使用特征的原因是使用每个像素作为输入既是过度杀伤又是不必要的噪音。每个成功的方法都有某种降维(诱导数据抽象),例如CNN。这不仅仅是只是添加更多层。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-12
    • 1970-01-01
    • 2017-11-16
    • 2018-10-20
    • 2019-06-22
    • 2012-01-16
    • 1970-01-01
    相关资源
    最近更新 更多