就低误差而言,最好的 XOR 神经网络配置是什么?

人工智能 神经网络 训练 反向传播 异或问题
2021-10-20 17:07:36

我试图了解实现 XOR 门的最佳神经网络是什么。如果神经网络能够以尽可能低的误差产生所有预期结果,我认为它是好的。

看起来我最初选择的随机权重对训练后的最终结果有很大影响。根据我最初选择的随机权重,我的神经网络的准确度(即误差)变化很大。

我从一个 2 x 2 x 1 的神经网络开始,在输入层和隐藏层中有一个偏差,使用 sigmoid 激活函数,学习率为 0.5。在我的初始设置下方,随机选择权重:

在此处输入图像描述

正如人们所期望的那样,最初的性能很差:

Input | Output | Expected | Error
(0,0)   0.8845      0       39.117%
(1,1)   0.1134      0       0.643%
(1,0)   0.7057      1       4.3306%
(0,1)   0.1757      1       33.9735%

然后我继续通过反向传播训练我的网络,输入 XOR 训练集 100,000 次。训练完成后,我的新权重是:

在此处输入图像描述

并且性能提高到:

Input | Output | Expected | Error
(0,0)   0.0103      0       0.0053%
(1,1)   0.0151      0       0.0114%
(1,0)   0.9838      1       0.0131%
(0,1)   0.9899      1       0.0051%

所以我的问题是:

  1. 有没有人想出具有该配置的 XOR 神经网络的最佳权重(即带有偏差的 2 x 2 x 1)?

  2. 为什么我最初选择的随机权重会对我的最终结果产生很大影响?我在上面的例子中很幸运,但是根据我最初选择的随机权重,在训练之后,我得到的错误高达 50%,这非常糟糕。

  3. 我做错了什么或做出了错误的假设吗?


下面是一个我无法训练的重量示例,原因不明。我想我的反向传播训练可能不正确。我没有使用批次,我正在更新从我的训练集中解决的每个数据点的权重。

重量:((-9.2782, -.4981, -9.4674, 4.4052, 2.8539, 3.395), (1.2108, -7.934, -2.7631))

在此处输入图像描述

3个回答

权重的初始化对结果有很大的影响。我不确定 XOR 门的具体情况,但错误可能有一个局部最小值,网络可以在训练期间“卡住”。使用随机梯度下降可以帮助提供一些随机性,从而从这些坑中消除错误。此外,对于 sigmoid 函数,应初始化权重,使激活的输入接近导数最高的部分,以便更好地训练。

2 个没有偏差的感知器(在输出层 +1,得到结果为 1 个数字)。

在此处输入图像描述

我敢打赌,你做错了什么,虽然我不知道是什么。尝试动态改变学习率,尝试以不同的顺序进行训练,......

仔细想想,您似乎正在使用标准的 sigmoid 函数。那么你这样做基本上是错误的。如果输入是无限的,则输入只能为 1 - 或非常大,以便浮点算术在舍入后输出 1。

这是非常错误的,原因有两个:

  • 您正在迫使网络处于具有巨大权重和微小导数的破碎状态。这感觉就像在一个正常的算法上施加了数值不稳定性。只是不要这样做。更好地映射您的布尔值(见下文)。
  • 你正在做你不需要的事情。任何与想要的结果(0 或 1)足够接近的值都可以简单地评估为正确的。当你得到 0.9 而不是 1 时,你就可以停止说“那太完美了”。请记住,您想要的只是一个布尔值。

更好的映射是 false=0.1 和 true=0.9。这不会导致需要无限权重并减少相关问题。

更好的是使用对称激活函数(例如tanh)和对称映射,例如 false=-0.9 和 true=0.9。

还可以考虑使用ReLU