algorithm - 2 个神经元的 ANN 可以解决 XOR 问题吗?

标签 algorithm neural-network artificial-intelligence 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?

最佳答案

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

我们先忽略神经元 2,假设神经元 1 是输出节点。设 x0 表示偏置值(总是 x0 = 1),x1x2 表示输入值举个例子,让 y 表示期望的输出,让 w1, w2, w3 表示从 x's 到神经元 1 的权重。异或问题,我们有以下四个例子:

  • 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、恒等函数...也许其他)是非递减的。这意味着如果你给它一个更大的输入,你也会得到一个更大的输出:f(a + b) >= f(a) if b >= 0。如果你看一下上面的四个等式,你会发现这是一个问题。比较第二个和第三个等式与第一个等式告诉我们 w1w2 需要为正,因为与 f(w0) 相比,它们需要增加输出。但是,第四个等式将无法解决,因为它会给出更大的输出,而不是 0

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

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


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

关于algorithm - 2 个神经元的 ANN 可以解决 XOR 问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41712420/

相关文章:

algorithm - 家务调度算法

machine-learning - 更改caffe框架SoftMaxWithLoss层时的疑惑

python - 在数据预处理期间使用 toarray() 和 onehotencoding

tensorflow - 为什么Tensorflow的MirroredStrategy和OneDevicestrategy在colab上不起作用?

algorithm - 最佳桶尺寸和桶数

algorithm - 有没有办法对分区的 spark 数据集并行运行操作?

java - 如何计算包含一个数字但不包含另一个数字的数字?

python - Keras 中卷积自动编码器的输出大小

code-generation - 使用机器学习生成代码

python - ValueError : Input 0 of layer "max_pooling2d" is incompatible with the layer: expected ndim=4, 发现 ndim=5。收到完整形状 : (None, 3, 51, 39, 32)