我知道2层中3个神经元的人工神经网络(ANN)可以解决异或
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?
不,这是不可能的,除非(也许)你开始使用一些相当奇怪,不寻常的激活功能。
让我们首先忽略神经元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
现在,主要问题是通常使用的激活函数(ReLU,sigmoid,tanh,idendity函数......可能是其他函数)是非减少的。这意味着如果你给它一个更大的输入,你也会获得更大的输出:f(a + b) >= f(a)
if b >= 0
。如果你看看上面的四个方程,你会发现这是一个问题。将第二个和第三个方程式与第一个方程式进行比较告诉我们,w1
和w2
需要为正,因为与f(w0)
相比,它们需要增加输出。但是,那么第四个等式将无法解决,因为它会产生更大的输出,而不是0
。
我认为(但实际上并没有尝试验证,也许我错过了一些东西),如果你使用先上升然后再下降的激活功能,那将是可能的。想想像f(x) = -(x^2)
这样的东西,有一些额外的术语可以将它从原点移开。我不认为这种激活函数通常用于神经网络。我怀疑他们在训练时表现得不那么好,而且从生物学的角度看也不合理(记住,神经网络至少受到生物学的启发)。
现在,在您的问题中,您还添加了从神经元1到神经元2的额外链接,我在上面的讨论中忽略了这一点。这里的问题仍然是一样的。神经元1中的激活水平总是高于(或至少与第二和第三种情况一样高)。神经元2通常会再次具有非减少的激活功能,因此无法改变这一点(除非你在隐藏的神经元1和输出神经元2之间放置负重量,在这种情况下你可以解决问题,并预测太高了第一种情况的价值)
编辑:请注意,这与Aaron的答案有关,它本质上也是关于非减少激活函数的问题,只是使用更正式的语言。给他一个upvote呢!
这是不可能的。
首先,您需要与XOR输入相同数量的输入。能够对任何二进制运算建模的最小ANN将包含两个输入。第二个图只显示一个输入,一个输出。
其次,这可能是最直接的反驳,XOR函数的输出不是加法或乘法关系,而是可以使用它们的组合来建模。神经元通常使用诸如sigmoids或没有stationary points的线之类的函数建模,因此一层神经元可以粗略地近似于加法或乘法关系。
这意味着产生XOR操作需要至少两层处理。
这个问题提出了人工神经网络的一个有趣话题。它们非常适合识别模糊关系,但往往需要至少与任何数学过程一样多的网络复杂性,这些过程可以解决问题而没有模糊的误差容限。使用人工神经网络,你需要识别看起来与你所识别的一样的东西,并使用数学,你需要准确地知道某些东西是否符合一组具体的特征。
理解人工神经网络和数学之间的区别开辟了将两者结合在更强大的计算流水线中的可能性,例如使用ANN识别图像中的可能圆圈,使用数学来确定其精确的起源,并使用第二个ANN来比较这些起源到已知对象的配置。
你可以用这种方式解决它。但请注意,这里有两个神经元不再相同。其中一个有2个输入,另一个有3个输入(不包括偏差).
对于一个类比,我们可以认为XOR是OR的减法,如下所示,
当我们总结每个神经元的权重和输入的乘法并通过激活函数传递结果时。因此,如果您注意到第一个数字,第一个神经元将在将“v =( - 1.5)+(x1 * 1)+(x2 * 1)”传递给某个激活函数后模拟逻辑AND,输出将被视为0或1取决于v分别是负面或正面(我没有深入细节......希望你明白这一点)。并且下一个神经元将以同样的方式模仿逻辑OR。
因此,对于真值表的前三个案例,AND神经元将保持关闭状态。但是对于最后一个(实际上OR与XOR不同),AND神经元将被打开,为OR神经元提供一个大的负值,这将使总和超过负值,因为它足够大以使求和为负数。因此,最后第二个神经元的激活功能将其解释为0。
通过这种方式,我们可以用2个神经元进行XOR。如果你想让神经元相同,你可以在AND神经元上加一个额外的输入,它将被设置为1并使偏差= -2.5。