目前,我正在尝试通过阅读书籍来学习如何使用神经网络,但主要是通过互联网教程。
我经常看到"XOR是神经网络的'Hello World‘“。
但是这里有一件事:一个教程的作者说,对于计算XOR值的神经网络,我们应该使用1个隐藏层和2个神经元。此外,他还使用带增量的反向传播来调整权重。
我实现了这一点,但即使在一百万次之后,我仍然有一个问题,网络被输入数据1和1卡住了。答案应该是"0“,但答案通常是0.5左右。我检查了我的代码,它是正确的。
如果我尝试在隐藏层中再添加一个神经元,网络在大约50,000个时期后成功地计算了XOR。
与此同时,也有人说"XOR不是一项微不足道的任务,我们应该使用具有2-3层或更多层的网络“。为什么?
来吧,如果XOR产生了这么多问题,也许我们不应该把它当作神经网络的“你好世界”?请解释一下发生了什么事。
发布于 2018-03-04 09:34:27
因此,神经网络非常有趣。有一个证据表明,只要有足够的时间,单个感知器就可以学习任何线性函数。更令人印象深刻的是,一个只有一个隐藏层的神经网络显然可以学习任何功能,尽管我还没有看到这一点的证据。
对于教授神经网络来说,XOR是一个很好的函数,因为作为CS学生,班上的学生可能已经熟悉了它。此外,在单个感知器可以学习它的意义上,它也不是微不足道的。它不是线性的。看我放在一起的这张图。
这些值之间没有分隔线。然而,它对人类来说足够简单,更重要的是,人类可以理解可以解决它的神经网络。神经网络是非常黑盒的,所以很难知道为什么它们工作得这么快。见鬼,这是另一个可以解决异或的网络配置。
你的一个更复杂的网络的例子更快地解决了它,展示了组合更多神经元和更多层的力量。绝对没有必要使用2-3个隐藏层来解决它,但它肯定有助于加快这一过程。
重点是,这是一个足够简单的问题,可以由人类在课堂上的黑板上解决,同时也比给定的线性函数稍具挑战性。
编辑:另一个实际教授NNs的极好的例子是MNIST手绘数字分类数据集。我发现它很容易显示出一个问题,这个问题对人类来说非常简单,很难为其编写非学习程序,并且是机器学习的一个非常实际的用例。问题是,网络结构不可能在黑板上绘制,并以一种对类实用的方式跟踪正在发生的事情。XOR实现了这一点。
编辑2:此外,如果没有代码,可能很难诊断为什么它不收敛。神经元是你自己写的吗?那么优化函数等等呢?
编辑3:如果你的函数最后一个节点的输出是0.5,试着使用一个步长压缩函数,把所有低于.5的值变成0,把所有大于0.5的值变成1。不管怎么说,你只有二进制输出,所以为什么要在最后一个节点上连续激活呢?
https://stackoverflow.com/questions/49090962
复制相似问题