众所周知的事实是,1层网络无法预测XOR函数,因为它不能线性分离。我尝试使用Logistic Sigmoid函数和BackProp来创建一个2层网络来预测XOR。我的网络在输入层上有2个神经元(和一个偏差),隐藏层中有2个神经元和1个偏见,1个输出神经元。令我惊讶的是,这不会融合。如果我添加了一个新图层,因此我有一个3层网络,其中包含输入(2+1),hidden1(2+1),hidden2(2+1)和输出,它可以正常工作。另外,如果我保留一个2层网络,但是我将隐藏层大小增加到4个神经元 + 1个偏置,则它也会收敛。是否有原因为什么具有3个或更少隐藏神经元的2层网络无法建模XOR函数?

有帮助吗?

解决方案

是的,有原因。这与您如何初始化权重有关。

有16个局部最小值在0.5-1之间收敛的概率最高。

enter image description here

这是分析XOR问题的论文。

其他提示

一个包含两个神经元的隐藏层的网络应足以将XOR问题分开。第一个神经元充当或门,第二个神经元被用作不和门。添加两个神经元,如果他们通过Treshold,那将是积极的。您可以将其使用线性决策神经元来调整tresholds的偏见。对于0/1输入,NOT和GATE的输入应为负。这张图应该使它更加清楚,连接的值是权重,神经元中的值是偏见,决策函数的作用为0/1决策(或在这种情况下,符号函数也起作用)。

XOR Neural Network

图片谢谢 “ Abhranil博客”

如果您使用的是基本梯度下降(没有其他优化,例如动量)和一个最小的网络2输入,2个隐藏的神经元,1个输出神经元,那么绝对可以训练它来学习XOR,但是它可以很相同棘手和不可靠。

  • 您可能需要调整学习率。最常见的错误是将其设置得太高,因此网络将振荡或差异而不是学习。

  • 使用批处理或在线梯度下降训练最小网络可能需要大量的时代。也许需要几千个时代。

  • 由于权重(只有6个),有时随机初始化会产生容易卡住的组合。因此,您可能需要尝试,检查结果然后重新开始。我建议您使用种子随机数生成器进行初始化,并在误差值卡住并且不改进的情况下调整种子值。

许可以下: CC-BY-SA归因
scroll top