【问题标题】:Can an ANN of 2 neurons solve XOR?2个神经元的ANN可以解决XOR吗?
【发布时间】:2017-06-02 10:02:30
【问题描述】:

我知道一个 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”在两个图中始终存在。

旁注:

单个神经元可以解决异或,但需要额外的输入 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 形式可以通过向 Neuron1 或 Neuron2 附加输入来解决 XOR 问题?

【问题讨论】:

  • 异或不需要两个输入吗?
  • I know that an artificial neural network (ANN) of 3 neurons in 2 layers can solve XOR 您能否提供该解决方案的草图(或参考)? But to minify this ANN, can just 2 neurons solve XOR?(最小化?)分层还是非分层?
  • "minify this ANN" = 减少神经元数量
  • 您的编辑现在更好地阐明了问题。在第二张图中,Neuron2 的功能有限。无论它响应的值是什么,都可以通过移除它并改变网络的权重和偏差来近似近似,因此第二张图只是一个将值合成在一起的功能层。

标签: algorithm neural-network artificial-intelligence xor


【解决方案1】:

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

我们先忽略神经元 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 的激活函数。然后,假设我们可以通过某种方式训练权重来解决 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

现在,主要问题是通常使用的激活函数(ReLUs、sigmoid、tanh、同一性函数......也许其他)是非递减的。这意味着如果你给它一个更大的输入,你也会得到一个更大的输出:f(a + b) >= f(a) 如果b >= 0。如果您查看以上四个等式,您会发现这是一个问题。将第二个和第三个等式与第一个等式进行比较告诉我们w1 和w2 需要为正,因为与f(w0) 相比,它们需要增加输出。但是,第四个等式就行不通了,因为它会给出更大的输出,而不是0。

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

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


编辑:请注意,这与 Aaron 的回答有关,这本质上也是关于不递减激活函数的问题,只是使用了更正式的语言。也给他点个赞吧!

【讨论】:

  • 谢谢,你的回答很清楚,这意味着传统的分层网络是不可能的。但是,如果在第二张图中,Neuron1 像往常一样采用 2 个输入,Neuron2 采用 3 个输入(输入 1、输入 2 和 Neuron1 的输出)怎么办?我知道以这种方式连接神经元不是传统的分层网络,反向传播过程也不相同,但它可能是一个新的解决方案?
  • @johnlowvale 直觉上,我是这么认为的。在您的原始示例中,神经元 1 和 2 之间的单一连接并没有真正改变任何可以近似的函数。我怀疑以同样的方式,可以通过在左侧的输入 1 和 2 以及右侧的神经元 2 之间放置一个额外的隐藏神经元来扩展新问题中的结构,而不会真正影响可以近似的函数类型。这将是具有 2 个节点的隐藏层的众所周知的网络。不过它可能训练得更慢。确保最好的方法是实施并尝试!
【解决方案2】:

这是不可能的。

首先,您需要与 XOR 的输入相同数量的输入。能够对 any 二元运算建模的最小 ANN 将包含两个输入。第二张图只显示了一个输入,一个输出。

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

这意味着至少需要两层处理才能产生 XOR 运算。


这个问题提出了一个有趣的 ANN 话题。它们非常适合识别模糊关系,但往往需要至少与任何数学过程一样多的网络复杂性,以解决没有模糊容错的问题。在您需要识别大部分与您正在识别的内容相似的地方使用人工神经网络,并在需要精确了解某事物是否与一组具体特征匹配的地方使用数学。

了解 ANN 和数学之间的区别开启了将两者结合到更强大的计算管道中的可能性,例如使用 ANN 识别图像中可能的圆圈,使用数学来确定它们的精确起源,以及使用第二个 ANN将这些来源与已知对象的配置进行比较。

【讨论】:

  • 输入层不包含在我的问题中
  • 有两个神经元连接到两个输入,权重为 1,“front” 的阈值为 2,连接到“out”的第三个输入,权重为 -2,阈值为 1 - 只是 不分层并使用负权重。
  • @greybeard 这是一个值得注意的案例,尽管它偏离了我所知道的许多 ANN 模型的假设。在某种程度上,弯曲使用中的模型以更好地满足某些情况是一项很好的练习,即使通常不足以证明总体改进是合理的。
【解决方案3】:

完全有可能只用两个神经元解决异或问题。

看看下面的模型。

这个模型很容易解决这个问题。 第一个代表逻辑与,另一个代表逻辑或。隐藏神经元的阈值 +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 年。

【讨论】:

    【解决方案4】:

    当然可以。但在用两个神经元解决 XOR 问题之前,我想讨论线性可分性。如果只有一个超平面可以构成决策边界,则问题是线性可分的。 (超平面只是为区分类别而绘制的平面。对于 N 维问题,即具有 N 个特征作为输入的问题,超平面将是 N-1 维平面。)因此,对于 2 输入 XOR 问题,超平面将是一维平面,即“线”。

    现在问题来了,XOR 不是线性可分的。因此,我们不能直接用两个神经元解决 XOR 问题。下图显示,无论我们在 2D 空间中画线的方式有多少,我们都无法区分一侧的输出与另一侧的输出。例如,对于第一个 (0,1) 和 (1,0),两个输入都使 XOR 得到 1。但是对于输入 (1,1),输出为 0,但我们无法将其分开,不幸的是它们落入同一边。

    所以这里我们有两种选择来解决它:

    1. 使用隐藏层。但它会增加两个以上的神经元。
    2. 另一种选择是增加尺寸。

    让我们来说明如何增加维度来解决这个问题,保持神经元的数量为 2。

    作为一个类比,我们可以将 XOR 视为 OR 与 AND 的减法,如下所示,

    如果你注意到上图,第一个神经元在将 "v=(-1.5)+(x1*1)+(x2*1)" 传递给某个激活函数后会模拟逻辑与,输出将被视为取决于 v 的 0 或 1 分别是负数或正数(我没有深入细节......希望你明白了)。同样的方式下一个神经元将模仿逻辑或。

    因此,对于真值表的前三个情况,AND 神经元将保持关闭状态。但是对于最后一个(实际上 OR 与 XOR 不同),AND 神经元将被打开,为 OR 神经元提供一个很大的负值,这将压倒总和为负,因为它大到足以使总和成为负数.所以最后第二个神经元的激活函数会把它解释为0。

    通过这种方式,我们可以对 2 个神经元进行 XOR。

    下面两张图也是我收集到的你的问题的解答:

    【讨论】:

      猜你喜欢
      • 2017-05-21
      • 1970-01-01
      • 2021-08-24
      • 2019-09-09
      • 2016-03-22
      • 2023-03-10
      • 2015-02-07
      • 1970-01-01
      • 2020-03-25
      相关资源
      最近更新 更多