2个神经元的ANN可以解决XOR吗?

时间:2017-01-18 06:03:24

标签: algorithm neural-network artificial-intelligence xor linear

我知道2层3个神经元的人工神经网络(ANN)可以解决XOR

Input1----Neuron1\
       \ /        \
       / \         +------->Neuron3
      /   \       /
Input2----Neuron2/

但是要缩小这个ANN,只能有2个神经元(Neuron1需要2个输入,Neuron2只需要1个输入)才能解决XOR?

Input1
      \
       \ Neuron1------->Neuron2
       / 
Input2/
  

人工神经元接收一个或多个输入......   https://en.wikipedia.org/wiki/Artificial_neuron

假设偏差输入'1'始终存在于两个图中。

  

附注:

     

单个神经元可以解决xor,但需要额外的输入x1 * x2或x1 + x2   https://www.quora.com/Why-cant-the-XOR-problem-be-solved-by-a-one-layer-perceptron/answer/Razvan-Popovici/log

     

第二张图中的ANN形式可以通过上面的神经元1或神经元2等附加输入解决XOR?

4 个答案:

答案 0 :(得分:4)

这是不可能的。

首先,您需要输入相同数量的XOR输入。能够建模任何二进制运算的最小ANN将包含两个输入。第二个图只显示一个输入,一个输出。

其次,这可能是最直接的反驳,XOR函数的输出不是加法或乘法关系,但可以使用它们的组合来建模。神经元通常使用sigmoids或没有stationary points的线等函数建模,因此一层神经元可以粗略地近似于加法或乘法关系。

这意味着生成XOR操作至少需要两层处理

这个问题提出了人工神经网络的一个有趣话题。它们非常适合识别模糊关系,但往往要求至少与任何数学过程一样多的网络复杂性,这将解决问题,没有模糊的误差幅度。使用人工神经网络,你需要识别看起来像 的东西,就像你所识别的东西一样,并使用数学,你需要知道正确是否符合一系列具体特征。< / p>

理解人工神经网络与数学之间的区别,开辟了将两者结合在更强大的计算流水线中的可能性,例如使用人工神经网络识别图像中的可能圆圈,使用数学来确定其精确的起源,并使用第二个人工神经网络将这些来源与已知对象的配置进行比较。

答案 1 :(得分:4)

不可能,除非(也许)你开始使用一些相当奇怪,不寻常的激活功能。

让我们首先忽略神经元2,并假装神经元1是输出节点。让x0表示偏差值(始终为x0 = 1),x1x2表示示例的输入值,让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的激活函数。然后,假设我们能够以某种方式训练我们的权重来解决XOR问题,我们有以下四个方程式:

  • 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,idendity函数......可能是其他函数)不会减少。这意味着如果你给它一个更大的输入,你也会获得更大的输出:f(a + b) >= f(a)如果b >= 0。如果你看看上面的四个方程,你会发现这是一个问题。将第二个和第三个等式与第一个等式进行比较告诉我们w1w2需要为正,因为与f(w0)相比,它们需要增加输出。但是,第四个方程式不会成功,因为它会产生更大的输出,而不是0

我认为(但实际上并没有尝试验证,也许我错过了一些东西),如果你使用先上升然后再下降的激活功能,那么它是可能的。想象f(x) = -(x^2)这样的东西,加上一些额外的术语,使它远离原点。我不认为这种激活功能常用于神经网络。我怀疑他们在训练时表现得不那么好,并且从生物学的角度来看并不合理(记住,神经网络至少受到生物学的启发)。

现在,在您的问题中,您还添加了从神经元1到神经元2的额外链接,我在上面的讨论中忽略了这一点。这里的问题仍然是一样的。神经元1中的激活水平总是高于(或至少与第二和第三种情况一样高)。神经元2通常会再次具有非减少的激活功能,因此无法改变这一点(除非你在隐藏的神经元1和输出神经元2之间放置负重量,在这种情况下你可以解决问题,并预测太高了第一种情况的价值)

编辑:请注意,这与Aaron的答案有关,这本质上也是关于非减少激活功能的问题,只是使用更正式的语言。给他一个upvote呢!

答案 2 :(得分:3)

仅用两个神经元就可以解决XOR问题。

看看下面的模型。

enter image description here

此模型可以轻松解决问题。 第一个表示逻辑AND,另一个表示逻辑OR。隐藏神经元阈值的+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卷。 1,麻省剑桥市:麻省理工学院出版社,第318-362页,1986年。

答案 3 :(得分:1)

您可以通过这种方式解决它。但是请注意,这里的两个神经元不再相同。其中一个具有2个输入,另一个具有3个输入(不包括偏置)。Here is the diagram

打个比方,我们可以将XOR视为从OR减去AND,如下所示,

Truth table

当我们对每个神经元的权重和输入的乘积求和时,将结果通过激活函数传递。因此,如果您注意到第一个数字,则在将“ v =(-1.5)+(x1 * 1)+(x2 * 1)”传递给某个激活函数后,第一个神经元将模仿逻辑AND,输出将被视为0或取决于v的1分别是负还是正(我不详细介绍...希望您明白这一点)。同样,下一个神经元将模仿逻辑OR。

因此,对于真值表的前三种情况,AND神经元将保持关闭状态。但是对于最后一个(实际上OR不同于XOR),AND神经元将被打开,从而为OR神经元提供一个较大的负值,这将使总和变为负数,因为它足以使求和为负数。因此,第二神经元的激活功能最终会将其解释为0。

通过这种方式,我们可以对2个神经元进行XOR。如果要使神经元相同,则可以向AND神经元添加一个额外的输入,并将其设置为始终为1,并使bias = -2.5。