2 个神经元的 ANN 可以解决 XOR 问题吗?
Can an ANN of 2 neurons solve XOR?
我知道一个2层3个神经元的人工神经网络(ANN)可以解决XOR
Input1----Neuron1\
\ / \
/ \ +------->Neuron3
/ \ /
Input2----Neuron2/
但是要缩小这个 ANN,只需要 2 个神经元(Neuron1 接受 2 个输入,Neuron2 只接受 1 个输入)就可以解决 XOR 问题吗?
Input1
\
\ Neuron1------->Neuron2
/
Input2/
The artificial neuron receives one or more inputs...
https://en.wikipedia.org/wiki/Artificial_neuron
假定偏置输入“1”在两个图中始终存在。
Side notes:
Single neuron can solve xor but with additional input x1*x2 or x1+x2
https://www.quora.com/Why-cant-the-XOR-problem-be-solved-by-a-one-layer-perceptron/answer/Razvan-Popovici/log
The ANN form in second diagram may solve XOR with additional input like above to Neuron1 or Neuron2?
不可能。
首先,您需要与异或输入的输入数量相等。能够建模 any 二元运算的最小 ANN 将包含两个输入。第二张图只显示了一个输入,一个输出。
其次,这可能是最直接的反驳,异或函数的输出不是加法或乘法关系,而是可以使用它们的组合来建模。神经元通常使用没有 stationary points 的 sigmoid 或线等函数建模,因此一层神经元可以粗略地近似加法或乘法关系。
这意味着至少需要两层处理才能产生异或运算。
这个问题提出了一个有趣的 ANN 话题。它们 well-suited 可以识别 模糊 关系,但往往需要 至少 与解决问题的任何数学过程一样多的网络复杂性没有模糊误差范围的问题。在需要识别看起来大部分像你正在识别的东西的地方使用人工神经网络,在你需要精确知道某物是否匹配的地方使用数学一组具体特征。
了解 ANN 和数学之间的区别可以将两者结合到更强大的计算管道中,例如使用 ANN 识别图像中可能的圆圈,使用数学确定它们的精确来源,并使用第二个ANN 将这些起源与已知对象的配置进行比较。
不,那是不可能的,除非(也许)你开始使用一些相当奇怪、不寻常的激活函数。
我们先忽略神经元2,假设神经元1是输出节点。让 x0
表示偏差值(总是 x0 = 1
),x1
和 x2
表示示例的输入值,让 y
表示所需的输出,并让 w1, w2, w3
表示从 x's
到神经元 1 的权重。对于 XOR 问题,我们有以下四个示例:
x0 = 1, x1 = 0, x2 = 0, y = 0
x0 = 1, x1 = 1, x2 = 0, y = 1
x0 = 1, x1 = 0, x2 = 1, y = 1
x0 = 1, x1 = 1, x2 = 1, y = 0
让f(.)
表示神经元1的激活函数。然后,假设我们可以以某种方式训练我们的权重来解决异或问题,我们有以下四个方程:
f(w0 + x1*w1 + x2*w2) = f(w0) = 0
f(w0 + x1*w1 + x2*w2) = f(w0 + w1) = 1
f(w0 + x1*w1 + x2*w2) = f(w0 + w2) = 1
f(w0 + x1*w1 + x2*w2) = f(w0 + w1 + w2) = 0
现在,主要问题是通常使用的激活函数(ReLU、sigmoid、tanh、恒等函数...也许其他)是非递减的。这意味着如果你给它一个更大的输入,你也会得到一个更大的输出:f(a + b) >= f(a)
if b >= 0
。如果你看一下上面的四个等式,你会发现这是一个问题。比较第二个和第三个等式与第一个等式告诉我们 w1
和 w2
需要为正,因为与 f(w0)
相比它们需要增加输出。但是,第四个等式将无法解决,因为它会给出更大的输出,而不是 0
.
我认为(但实际上并没有尝试验证,也许我遗漏了什么)如果你使用一个先上升然后再下降的激活函数是可能的。想想像 f(x) = -(x^2)
这样的东西,加上一些额外的术语来将它从原点移开。我认为这种激活函数在神经网络中并不常用。我怀疑它们在训练时表现得不太好,而且从生物学的角度来看也不合理(请记住,神经网络至少受到生物学的启发)。
现在,在您的问题中,您还从神经元 1 到神经元 2 添加了一个额外的 link,我在上面的讨论中忽略了这一点。这里的问题仍然是一样的。神经元 1 的激活水平总是高于(或至少与)第二种和第三种情况。神经元 2 通常会再次具有非递减的激活函数,因此无法改变这一点(除非你在隐藏神经元 1 和输出神经元 2 之间放置一个负权重,在这种情况下你翻转问题并预测太高的第一种情况的价值)
编辑:请注意,这与 Aaron 的回答有关,本质上也是关于非递减激活函数的问题,只是使用了更正式的语言。也给他点个赞吧!
当然可以。但在用两个神经元解决 XOR 问题之前,我想讨论一下线性可分性。如果只有一个超平面可以作为决策边界,则问题是线性可分的。 (超平面只是一个用来区分 类 的平面。对于 N 维问题,即具有 N 个特征作为输入的问题,超平面将是 N-1 维平面。)所以对于 2 输入 XOR 问题超平面将是一个 "line" 的一维平面。
现在进入问题,XOR 不是线性可分的。因此我们不能直接解决两个神经元的 XOR 问题。下图显示无论我们以多少种方式在 2D space 中画一条线,我们都无法区分一侧的输出与另一侧的输出。例如,对于第一个 (0,1) 和 (1,0),两个输入都进行 XOR 以给出 1。但对于输入 (1,1),输出为 0,但我们无法将其分开,不幸的是它们落入同侧
所以这里我们有两种解决方法:
- 使用隐藏层。但是会增加两个以上的神经元数量。
- 另一种选择是增加维度。
让我们举例说明增加维度如何解决这个问题,同时保持神经元数量为 2。
打个比方,我们可以将 XOR 视为从 OR 中减去 AND,如下所示,
如果你注意到上图,第一个神经元将在将 "v=(-1.5)+(x1*1)+(x2*1)" 传递给某个激活函数后模拟逻辑与,输出将被视为 0 或 1,具体取决于 v 分别为负或正(我我没有深入细节......希望你明白了)。下一个神经元将以同样的方式模仿逻辑或。
因此对于前三种情况 table AND 神经元将保持关闭状态。但是对于最后一个(实际上 OR 不同于 XOR 的地方),AND 神经元将被打开,为 OR 神经元提供一个大的负值,这将使总和变为负数,因为它大到足以使总和成为负数.所以最后第二个神经元的激活函数将其解释为0。
通过这种方式,我们可以用2个神经元进行XOR。
以下两张图也是我收集的你问题的解答:
只用两个神经元就可以解决异或问题
看看下面的模型。
这个模型轻松解决了这个问题。
第一个代表逻辑与,另一个代表逻辑或。隐藏神经元的阈值 +1.5 确保它仅在两个输入单元都打开时才会打开。输出神经元的值 +0.5 确保它仅在接收到大于 +0.5 的净正输入时才会打开。从隐藏神经元到输出神经元的权重 -2 确保当两个输入神经元都打开时输出神经元不会打开(参考文献 2)。
参考。 1:Hazem M El-Bakry,用于解决高复杂性问题的模块化神经网络 (link)
参考。 2:D. E. Rumelhart、G. E. Hinton 和 R. J. Williams,通过错误反向传播学习表示,并行分布式处理:认知微观结构的探索,卷。 1,剑桥,马萨诸塞州:麻省理工学院出版社,第 318-362 页,1986 年。
问题可以分为两部分。
第一部分
a b c
------
0 0 0
0 1 1
1 0 0
1 1 0
第二部分
a b d
------
0 0 0
0 1 0
1 0 1
1 1 0
第一部分可以用一个神经元解决。
第二部分也可以用一个神经元来解决。
第一部分和第二部分相加得到异或。
c = sigmoid(a * 6.0178 + b * -6.6000 + -2.9996)
d = sigmoid(a * -6.5906 + b *5.9016 + -3.1123 )
-------------------------------------------- --------------
sigmoid(0.0 * 6.0178 + 0 * -6.6000 + -2.9996)+ sigmoid(0.0 * -6.5906 + 0 *5.9016 + -3.1123 ) = 0.0900
sigmoid(1.0 * 6.0178 + 0 * -6.6000 + -2.9996)+ sigmoid(1.0 * -6.5906 + 0 *5.9016 + -3.1123 ) = 0.9534
sigmoid(0.0 * 6.0178 + 1 * -6.6000 + -2.9996)+ sigmoid(0.0 * -6.5906 + 1 *5.9016 + -3.1123 ) = 0.9422
sigmoid(1.0 * 6.0178 + 1 * -6.6000 + -2.9996)+ sigmoid(1.0 * -6.5906 + 1 *5.9016 + -3.1123 ) = 0.0489
我知道一个2层3个神经元的人工神经网络(ANN)可以解决XOR
Input1----Neuron1\
\ / \
/ \ +------->Neuron3
/ \ /
Input2----Neuron2/
但是要缩小这个 ANN,只需要 2 个神经元(Neuron1 接受 2 个输入,Neuron2 只接受 1 个输入)就可以解决 XOR 问题吗?
Input1
\
\ Neuron1------->Neuron2
/
Input2/
The artificial neuron receives one or more inputs... https://en.wikipedia.org/wiki/Artificial_neuron
假定偏置输入“1”在两个图中始终存在。
Side notes:
Single neuron can solve xor but with additional input x1*x2 or x1+x2 https://www.quora.com/Why-cant-the-XOR-problem-be-solved-by-a-one-layer-perceptron/answer/Razvan-Popovici/log
The ANN form in second diagram may solve XOR with additional input like above to Neuron1 or Neuron2?
不可能。
首先,您需要与异或输入的输入数量相等。能够建模 any 二元运算的最小 ANN 将包含两个输入。第二张图只显示了一个输入,一个输出。
其次,这可能是最直接的反驳,异或函数的输出不是加法或乘法关系,而是可以使用它们的组合来建模。神经元通常使用没有 stationary points 的 sigmoid 或线等函数建模,因此一层神经元可以粗略地近似加法或乘法关系。
这意味着至少需要两层处理才能产生异或运算。
这个问题提出了一个有趣的 ANN 话题。它们 well-suited 可以识别 模糊 关系,但往往需要 至少 与解决问题的任何数学过程一样多的网络复杂性没有模糊误差范围的问题。在需要识别看起来大部分像你正在识别的东西的地方使用人工神经网络,在你需要精确知道某物是否匹配的地方使用数学一组具体特征。
了解 ANN 和数学之间的区别可以将两者结合到更强大的计算管道中,例如使用 ANN 识别图像中可能的圆圈,使用数学确定它们的精确来源,并使用第二个ANN 将这些起源与已知对象的配置进行比较。
不,那是不可能的,除非(也许)你开始使用一些相当奇怪、不寻常的激活函数。
我们先忽略神经元2,假设神经元1是输出节点。让 x0
表示偏差值(总是 x0 = 1
),x1
和 x2
表示示例的输入值,让 y
表示所需的输出,并让 w1, w2, w3
表示从 x's
到神经元 1 的权重。对于 XOR 问题,我们有以下四个示例:
x0 = 1, x1 = 0, x2 = 0, y = 0
x0 = 1, x1 = 1, x2 = 0, y = 1
x0 = 1, x1 = 0, x2 = 1, y = 1
x0 = 1, x1 = 1, x2 = 1, y = 0
让f(.)
表示神经元1的激活函数。然后,假设我们可以以某种方式训练我们的权重来解决异或问题,我们有以下四个方程:
f(w0 + x1*w1 + x2*w2) = f(w0) = 0
f(w0 + x1*w1 + x2*w2) = f(w0 + w1) = 1
f(w0 + x1*w1 + x2*w2) = f(w0 + w2) = 1
f(w0 + x1*w1 + x2*w2) = f(w0 + w1 + w2) = 0
现在,主要问题是通常使用的激活函数(ReLU、sigmoid、tanh、恒等函数...也许其他)是非递减的。这意味着如果你给它一个更大的输入,你也会得到一个更大的输出:f(a + b) >= f(a)
if b >= 0
。如果你看一下上面的四个等式,你会发现这是一个问题。比较第二个和第三个等式与第一个等式告诉我们 w1
和 w2
需要为正,因为与 f(w0)
相比它们需要增加输出。但是,第四个等式将无法解决,因为它会给出更大的输出,而不是 0
.
我认为(但实际上并没有尝试验证,也许我遗漏了什么)如果你使用一个先上升然后再下降的激活函数是可能的。想想像 f(x) = -(x^2)
这样的东西,加上一些额外的术语来将它从原点移开。我认为这种激活函数在神经网络中并不常用。我怀疑它们在训练时表现得不太好,而且从生物学的角度来看也不合理(请记住,神经网络至少受到生物学的启发)。
现在,在您的问题中,您还从神经元 1 到神经元 2 添加了一个额外的 link,我在上面的讨论中忽略了这一点。这里的问题仍然是一样的。神经元 1 的激活水平总是高于(或至少与)第二种和第三种情况。神经元 2 通常会再次具有非递减的激活函数,因此无法改变这一点(除非你在隐藏神经元 1 和输出神经元 2 之间放置一个负权重,在这种情况下你翻转问题并预测太高的第一种情况的价值)
编辑:请注意,这与 Aaron 的回答有关,本质上也是关于非递减激活函数的问题,只是使用了更正式的语言。也给他点个赞吧!
当然可以。但在用两个神经元解决 XOR 问题之前,我想讨论一下线性可分性。如果只有一个超平面可以作为决策边界,则问题是线性可分的。 (超平面只是一个用来区分 类 的平面。对于 N 维问题,即具有 N 个特征作为输入的问题,超平面将是 N-1 维平面。)所以对于 2 输入 XOR 问题超平面将是一个 "line" 的一维平面。
现在进入问题,XOR 不是线性可分的。因此我们不能直接解决两个神经元的 XOR 问题。下图显示无论我们以多少种方式在 2D space 中画一条线,我们都无法区分一侧的输出与另一侧的输出。例如,对于第一个 (0,1) 和 (1,0),两个输入都进行 XOR 以给出 1。但对于输入 (1,1),输出为 0,但我们无法将其分开,不幸的是它们落入同侧
所以这里我们有两种解决方法:
- 使用隐藏层。但是会增加两个以上的神经元数量。
- 另一种选择是增加维度。
让我们举例说明增加维度如何解决这个问题,同时保持神经元数量为 2。
打个比方,我们可以将 XOR 视为从 OR 中减去 AND,如下所示,
如果你注意到上图,第一个神经元将在将 "v=(-1.5)+(x1*1)+(x2*1)" 传递给某个激活函数后模拟逻辑与,输出将被视为 0 或 1,具体取决于 v 分别为负或正(我我没有深入细节......希望你明白了)。下一个神经元将以同样的方式模仿逻辑或。
因此对于前三种情况 table AND 神经元将保持关闭状态。但是对于最后一个(实际上 OR 不同于 XOR 的地方),AND 神经元将被打开,为 OR 神经元提供一个大的负值,这将使总和变为负数,因为它大到足以使总和成为负数.所以最后第二个神经元的激活函数将其解释为0。
通过这种方式,我们可以用2个神经元进行XOR。
以下两张图也是我收集的你问题的解答:
只用两个神经元就可以解决异或问题
看看下面的模型。
这个模型轻松解决了这个问题。 第一个代表逻辑与,另一个代表逻辑或。隐藏神经元的阈值 +1.5 确保它仅在两个输入单元都打开时才会打开。输出神经元的值 +0.5 确保它仅在接收到大于 +0.5 的净正输入时才会打开。从隐藏神经元到输出神经元的权重 -2 确保当两个输入神经元都打开时输出神经元不会打开(参考文献 2)。
参考。 1:Hazem M El-Bakry,用于解决高复杂性问题的模块化神经网络 (link)
参考。 2:D. E. Rumelhart、G. E. Hinton 和 R. J. Williams,通过错误反向传播学习表示,并行分布式处理:认知微观结构的探索,卷。 1,剑桥,马萨诸塞州:麻省理工学院出版社,第 318-362 页,1986 年。
问题可以分为两部分。
第一部分
a b c
------
0 0 0
0 1 1
1 0 0
1 1 0
第二部分
a b d
------
0 0 0
0 1 0
1 0 1
1 1 0
第一部分可以用一个神经元解决。
第二部分也可以用一个神经元来解决。
第一部分和第二部分相加得到异或。
c = sigmoid(a * 6.0178 + b * -6.6000 + -2.9996)
d = sigmoid(a * -6.5906 + b *5.9016 + -3.1123 )
-------------------------------------------- --------------
sigmoid(0.0 * 6.0178 + 0 * -6.6000 + -2.9996)+ sigmoid(0.0 * -6.5906 + 0 *5.9016 + -3.1123 ) = 0.0900
sigmoid(1.0 * 6.0178 + 0 * -6.6000 + -2.9996)+ sigmoid(1.0 * -6.5906 + 0 *5.9016 + -3.1123 ) = 0.9534
sigmoid(0.0 * 6.0178 + 1 * -6.6000 + -2.9996)+ sigmoid(0.0 * -6.5906 + 1 *5.9016 + -3.1123 ) = 0.9422
sigmoid(1.0 * 6.0178 + 1 * -6.6000 + -2.9996)+ sigmoid(1.0 * -6.5906 + 1 *5.9016 + -3.1123 ) = 0.0489