【问题标题】:Why doesn't my Feed-Forward NN work with varying inputs?为什么我的前馈神经网络不适用于不同的输入?
【发布时间】:2019-11-04 06:04:44
【问题描述】:

我决定在不使用任何库的情况下创建前馈神经网络。我对这个主题还很陌生,完全是自学的。

我的神经网络使用反向传播来设置权重,所有层之间的激活函数(输入-隐藏1-输出)是一个 Sigmoid 函数。 假设我尝试用我的 NN 解决一个基本问题,例如 XOr 逻辑门问题。每当我使用完整的训练集(1 和 0 的所有可能组合)时,我的 NN 都无法以能够产生所需输出的方式设置权重。似乎它总是停在中间。 (在所有情况下输出约为 0.5) 另一方面,当我只迭代一种类型的输入(比如 0 和 1)时,它会很快学习。

我的成本函数、节点数、隐藏层是否有问题?我会很感激一些指导的话!

【问题讨论】:

  • 由于这不是关于特定语言或编程,而是更多关于机器学习本身,这个问题可能更适合stats.stackexchange.com

标签: c# neural-network backpropagation feed-forward


【解决方案1】:

XOR 不能用一个隐藏层来解决。因为您不能仅用一行来分隔标签(0 和 1)。您可以用两条线将它们分开,然后使用 AND 门(另一个隐藏层)找到它们的公共区域。 请参阅此帖子以进行澄清:https://medium.com/@jayeshbahire/the-xor-problem-in-neural-networks-50006411840b

【讨论】:

  • 这是不正确的,一个神经网络可以用一个隐藏层来学习,甚至在你链接的文章中也这么说
  • 我在发布这个问题之前阅读了同一篇文章。它没有具体说明需要一个以上的隐藏层。它甚至使用 3 层的神经网络图片。此外,《Introduction to Neural Networks for C#, Second Edition》一书也用 1 个隐藏层解决了这个问题。
【解决方案2】:

XOR 问题不是线性可分的,并且使单层感知器不适合。但是,在您的网络中添加隐藏层使网络能够捕获非线性特征,这使它变得很好。

网络性能不佳的最可能原因是学习问题的初始阶段曲折。所以增加迭代将解决问题。

另外一种可能的尝试是通过 XOR 的平滑非线性,因此偏差的作用与平移参数一样重要,与权重一样重要(您没有提到)

【讨论】:

  • 我尝试增加迭代次数,但没有奏效。我也使用偏见,因此也可以被划掉。
  • 我认为,“似乎它总是停在中间。(在所有情况下输出为 ~0.5)”,从这个语句中,weights * input 给出零,这可能是由于输入数据为 0 而发生的.您是否使用批量训练和所有损失的平均值?
  • 大约是 0.5,并不是那么多,所以输入绝对不是 0。“所有损失的平均值”是什么意思?
猜你喜欢
  • 2018-10-20
  • 2015-12-23
  • 1970-01-01
  • 2018-01-05
  • 1970-01-01
  • 2019-06-22
  • 2015-01-10
  • 1970-01-01
  • 2020-04-16
相关资源
最近更新 更多