【问题标题】:Neural Network can't learn XOR神经网络无法学习异或
【发布时间】:2014-05-29 14:07:03
【问题描述】:

我创建了一个神经网络,结构如下:

Input1 - Input2 - 输入层。

N0 - N1 - 隐藏层。每个节点 3 个权重(一个用于偏差)。

N2 - 输出层。 3 个权重(一个用于偏差)。

我正在尝试使用以下测试数据来训练它的 XOR 函数:

  • 0 1 - 期望结果:1
  • 1 0 - 期望结果:1
  • 0 0 - 期望结果:0
  • 1 1 - 期望结果:0

训练后,测试的均方误差(当寻找 1 个结果时){0, 1} = 0,我想这很好。然而,测试的均方误差(当寻找 0 结果时){1, 1} = 0.5,这肯定需要为零。在学习阶段,我注意到真实结果的 MSE 在前几个时期内下降到零,而错误结果的 MSE 徘徊在 0.5 左右。

我正在使用反向传播来训练网络,使用 sigmoid 函数。问题是,当我在训练后测试任何组合时,我总是得到 1.0 结果 输出。 - 网络似乎学习得非常快,即使学习率非常低。

如果有帮助,这里是生成的权重:

N0-W0 = 0.5, N0-W1 = -0.999, N0-W2 = 0.304(偏差)-隐藏层

N1-W0 = 0.674,N1-W1 = -0.893,N1-W2 = 0.516(偏差)-隐藏层

N2-W0 = -0.243,N2-W1 = 0.955,N3-W2 = 0.369(偏差)-输出节点

谢谢。

【问题讨论】:

  • 给你的思考练习:你在网络中有 3x2 + 3 = 9 个权重(如果我理解正确的话)。把它们想象成你正在解决的 9 个未知数。并将您的 4 个训练输入视为可用于求解未知数的 4 个方程。现在,求解具有 9 个未知数的 4 个方程组是否有意义?当你尝试这样做时会发生什么?
  • 如果你使用的是 sigmoid 函数,让权重超过 1 并超过 -1,这样 sigmoid 函数的结果可以更精确。为了表现良好,我的一些 NN 需要非常高(数百)或非常低的权重。

标签: neural-network xor backpropagation


【解决方案1】:

这些步骤可以帮助您解决问题:

  1. 更改激活函数。这是我使用 relu 作为激活函数回答的类似问题:Neural network XOR gate not learning

  2. 增加 epoch 的数量。

  3. 将你的学习率改成更大的合适值,这样你可以更快地达到收敛。您可以在此处找到更多信息: How to determine the learning rate and the variance in a gradient descent algorithm?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-25
    • 2020-01-16
    • 2016-07-11
    • 2014-06-07
    • 2021-09-15
    • 1970-01-01
    • 2016-10-24
    相关资源
    最近更新 更多