我知道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-a-one-layer-perceptron/答案/ Razvan-Popovici /日志
第二张图中的ANN形式可以使用与Neuron1或Neuron2类似的额外输入来求解XOR?
Aaron3468.. 5
这是不可能的。
首先,您需要与XOR输入相等数量的输入。能够建模任何二进制运算的最小的ANN 将包含两个输入。第二张图仅显示一个输入,一个输出。
其次,这可能是最直接的反驳,XOR函数的输出不是加法或乘法关系,而是可以使用它们的组合来建模。通常使用没有固定点的 S型曲线或直线等函数对神经元进行建模,因此一层神经元可以粗略地近似加性或乘法关系。
这意味着产生XOR操作至少需要两层处理。
这个问题提出了一个关于人工神经网络的有趣话题。它们非常适合识别模糊关系,但往往要求至少与解决问题且没有模糊余量的数学过程一样多的网络复杂性。在需要识别与所识别内容最相似的事物的地方使用人工神经网络,在需要精确地识别某些事物是否与一组具体特征相匹配的地方使用数学。
理解ANN和数学之间的区别为在更强大的计算管道中结合两者提供了可能性,例如使用ANN识别图像中的可能圆,使用数学确定其精确原点以及使用第二个ANN比较那些原点到已知对象上的配置。
这是不可能的。
首先,您需要与XOR输入相等数量的输入。能够建模任何二进制运算的最小的ANN 将包含两个输入。第二张图仅显示一个输入,一个输出。
其次,这可能是最直接的反驳,XOR函数的输出不是加法或乘法关系,而是可以使用它们的组合来建模。通常使用没有固定点的 S型曲线或直线等函数对神经元进行建模,因此一层神经元可以粗略地近似加性或乘法关系。
这意味着产生XOR操作至少需要两层处理。
这个问题提出了一个关于人工神经网络的有趣话题。它们非常适合识别模糊关系,但往往要求至少与解决问题且没有模糊余量的数学过程一样多的网络复杂性。在需要识别与所识别内容最相似的事物的地方使用人工神经网络,在需要精确地识别某些事物是否与一组具体特征相匹配的地方使用数学。
理解ANN和数学之间的区别为在更强大的计算管道中结合两者提供了可能性,例如使用ANN识别图像中的可能圆,使用数学确定其精确原点以及使用第二个ANN比较那些原点到已知对象上的配置。
不可能,除非(也许)您开始使用一些相当奇怪的,不寻常的激活功能。
Let's first ignore neuron 2, and pretend that neuron 1 is the output node. Let x0
denote the bias value (always x0 = 1
), and x1
and x2
denote the input values of an example, let y
denote the desired output, and let w1, w2, w3
denote the weights from the x's
to neuron 1. With the XOR problem, we have the following four examples:
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
Let f(.)
denote the activation function of neuron 1. Then, assuming we can somehow train our weights to solve the XOR problem, we have the following four equations:
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
Now, the main problem is that activation functions that are typically used (ReLUs, sigmoid, tanh, idendity function... maybe others) are nondecreasing. That means that if you give it a larger input, you also get a larger output: f(a + b) >= f(a)
if b >= 0
. If you look at the above four equations, you'll see this is a problem. Comparing the second and third equations to the first tell us that w1
and w2
need to be positive because they need to increase the output in comparison to f(w0)
. But, then the fourth equation won't work out because it will give an even greater output, instead of 0
.
I think (but didn't actually try to verify, maybe I'm missing something) that it would be possible if you use an activation function that goes up first and then down again. Think of something like f(x) = -(x^2)
with some extra term to shift it away from the origin. I don't think such activation functions are commonly used in neural networks. I suspect they'll behave less nicely when training, and are not plausible from a biological point of view (remember than neural networks are at least inspired by biology).
现在,在您的问题中,您还添加了从神经元1到神经元2的额外链接,我在上面的讨论中忽略了该链接。尽管这里的问题仍然相同。神经元1的激活水平将始终高于(或至少与第二和第三种情况一样)。神经元2通常会再次具有不减小的激活功能,因此将无法更改此功能(除非您在隐藏的神经元1和输出神经元2之间施加负权重,否则您将问题转过来并且会预测过高第一种情况的值)
编辑:请注意,这与Aaron的答案有关,本质上也与不减少激活函数的问题有关,仅使用更正式的语言即可。也给他投票!