【问题标题】:Approximating z = y^2 + x^2 with Neural Network用神经网络逼近 z = y^2 + x^2
【发布时间】:2011-04-16 00:37:15
【问题描述】:

预计神经网络能以多快的速度逼近 z = y^2 + x^2 函数? 当我将输入设为负数并且所有权重都变得非常小(*10^-16!如果使用 2x40x1)或全部变为相同数字(如 -0.16 和 0.16,如果使用 2x20x1)时,我的似乎很挣扎。我每个时期使用 2000 个输入示例。

但是,如果所有输入都是正数,它似乎可以学习。这意味着什么?

您认为我应该使用每个 epoch、架构和 epoch 数量来解决这个问题的输入对数是多少?

我正在使用带有 1 个隐藏层的无偏差的反向传播神经网络(我的输入都在 -1 和 +1 之间,并且所需的输出 [0, 1])。

谢谢,

【问题讨论】:

  • 我要做的第一件事是添加另外 1 或 2 个隐藏层,但不会更多。你用的是什么激活函数?
  • 嗨,大卫,我正在使用 tanh。嗯,我没有编程超过 1 层,但我现在会做,看看。我打算用这个网络进行金融市场预测,有点担心如果它不能学习 2D 函数,它如何映射金融市场这样的复杂函数?是的将在另一层中编程。你会为此建议什么架构?它在 280 个 epoch 中的 XOR 学习中表现良好。但是,我没有使用偏见(这会是一个主要问题吗?)。谢谢
  • @Katya,你最后解决了吗?如果有,答案是什么?

标签: neural-network


【解决方案1】:

对于正输入,函数是单调的。一旦你越过原点,情况就不再如此了。

我认为您可能需要允许非零偏差才能开发具有非单调输出的神经网络。

此外,请确保您的实现没有进行有界优化,许多优化算法都包含非负假设。

【讨论】:

  • 嗨 Ben,这是我设计的代码,因此没有“有界优化或非负假设”(至少是有意的!哈哈)。我将在偏差中编码,到目前为止我还没有包含它,因为我不知道如何通过反向传播更新偏差。我该怎么做?所以我会在每个神经元中包含一个额外的输入 1,并在该输入上附加一个随机权重(即偏差) - 但我应该更新这个权重对吗?就像其他重量一样?以我迄今为止所做的方式对其进行编码会很棘手。必须思考。
  • @Katya:我会首先尝试让一些神经元零偏差,一些 +1,一些 -1。
  • 只是为了检查一下:这段代码实际上是为了测试金融市场预测而设计的(我只是想先在二维函数上测试它)。你认为我需要偏见才能做出预期的预测吗? (单调意味着随着 x 增加 y 增加,所以我猜像这样的复杂函数不是单调的,对吧?)。在理想情况下,请在整个反向传播过程中如何调整偏差?
  • 我不认为调整偏差实际上是必要的。要求零偏差的问题是您只能表示线性变换,通过允许非零偏差您允许仿射变换。但是偏差的大小可以在不失一般性的情况下固定,因为所有其他系数都会缩放以适应您选择的任何偏差。所以你只需要用负的、零的、正的偏差来初始化一些节点。但请注意,我是在提出建议,而不是根据经验发表意见。
【解决方案2】:

这取决于算法的目的是什么? 如果您只想重新创建图形,那么过度拟合也没有问题,您应该对其进行训练,直到 delta 误差尽可能小(接近 0.0001)。

出于其他目的,不建议过度拟合训练数据。

更多信息: http://neuralnetworksanddeeplearning.com/chap2.html 要么 https://en.wikipedia.org/wiki/Backpropagation

【讨论】:

    猜你喜欢
    • 2018-09-10
    • 1970-01-01
    • 2019-08-05
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    • 2021-11-03
    • 2017-04-01
    • 2020-12-28
    相关资源
    最近更新 更多