目前,我正在尝试通过阅读书籍来学习如何使用神经网络,但主要是通过互联网教程。
我经常看到" XOR是' Hello World'神经网络"。
但这是一件事:一个教程的作者说,对于计算XOR值的神经网络,我们应该使用1个隐藏层和2个神经元。他还使用反向传播与增量来调整权重。
我实现了这一点,但即使在100万个时代之后,我也遇到了一个问题,即网络卡在输入数据1和1上。应该有" 0"作为答案,但答案通常是0.5something。我检查了我的代码,这是正确的。
如果我尝试在隐藏层中再添加1个神经元,网络会在~50 000个时期后成功计算XOR。
与此同时,有些人说" XOR不是一项微不足道的任务,我们应该使用2-3层或更多层的网络"。为什么呢?
来吧,如果XOR产生了很多问题,也许我们不应该将它用作“你好世界”。神经网络?请解释一下发生了什么。
答案 0 :(得分:1)
所以神经网络非常有趣。这是一个证据,表明单个感知器可以在足够的时间内学习任何线性函数。更令人印象深刻的是,具有一个隐藏层的神经网络显然可以学习任何功能,尽管我还没有看到该证明。
XOR是教授神经网络的一个很好的功能,因为作为CS学生,班上的学生可能已经熟悉它。此外,从单个感知器可以学习它的意义上讲,这并非微不足道。它不是线性的。看到我放在一起的这张图。
没有分隔这些值的行。 YET,它足以让人类理解,更重要的是,人类可以理解可以解决它的神经网络。 NN非常黑盒子,很难说它们为什么工作得非常快。地狱,这里是另一个网络配置,可以解决XOR。
更快速地解决它的网络的例子显示了组合更多神经元和更多层的力量。绝对没有必要使用2-3个隐藏层来解决它,但它确实有助于加快这个过程。
关键在于,人类和课堂上的黑板解决这个问题非常简单,同时也比给定的线性函数更具挑战性。
编辑:实际教授NN的另一个奇妙例子是MNIST手绘数字分类数据集。我发现它非常容易地显示出一个同时非常简单易于理解的问题,非常难以编写非学习程序,以及一个非常实用的机器学习用例。问题是网络结构不可能在黑板上绘制,并以一种实用的方式跟踪正在发生的事情。 XOR实现了这一点。
编辑2:此外,没有代码,可能很难诊断为什么它没有收敛。你自己写过神经元了吗?那么优化功能等呢?
编辑3:如果函数最后一个节点的输出为0.5,请尝试使用步进压缩功能,使得.5以下的所有值都变为0,将所有0.5以上的值变为1.无论如何都只有二进制输出,为什么还要麻烦在最后一个节点上连续激活?