Artificial intelligence 神经网络输入顺序随机化的影响

Artificial intelligence 神经网络输入顺序随机化的影响,artificial-intelligence,machine-learning,neural-network,xor,backpropagation,Artificial Intelligence,Machine Learning,Neural Network,Xor,Backpropagation,对于我的高级算法和数据结构课程,我的教授让我们选择任何我们感兴趣的话题。他还告诉我们要研究它,并尝试在其中实现一个解决方案。我选择神经网络是因为它是我想学很久的东西 我已经能够使用一个神经网络来实现AND、OR和XOR,该神经网络的神经元使用一个阶跃函数作为激活器。之后,我尝试实现一个反向传播神经网络,学习识别XOR运算符(使用sigmoid函数作为激活器)。通过使用3-3-1网络(在输入层和隐藏层有1个偏差,权重随机初始化),我能够在90%的时间内实现这一点。在其他时候,它似乎陷入了我认为是一

对于我的高级算法和数据结构课程,我的教授让我们选择任何我们感兴趣的话题。他还告诉我们要研究它,并尝试在其中实现一个解决方案。我选择神经网络是因为它是我想学很久的东西

我已经能够使用一个神经网络来实现AND、OR和XOR,该神经网络的神经元使用一个阶跃函数作为激活器。之后,我尝试实现一个反向传播神经网络,学习识别XOR运算符(使用sigmoid函数作为激活器)。通过使用3-3-1网络(在输入层和隐藏层有1个偏差,权重随机初始化),我能够在90%的时间内实现这一点。在其他时候,它似乎陷入了我认为是一个本地最低限度,但我不确定(我以前问过这个问题,人们告诉我,不应该有本地最低限度)

在它工作的90%时间里,我始终按以下顺序显示输入:
[0,0]、[0,1]、[1,0]、[1,0]
,预期输出设置为
[0,1,1,0]
。当我以相同的顺序一致地呈现值时,网络最终会学习模式。事实上,我发送的顺序并不重要,只要每个时代的顺序完全相同

然后我实现了训练集的随机化,所以这次输入的顺序是充分随机化的。我现在注意到我的神经网络被卡住了,误差在减少,但速度很小(每个历元的误差都越来越小)。一段时间后,误差开始围绕一个值振荡(因此误差停止减小)

我是这方面的新手,到目前为止我所知道的一切都是自学的(阅读教程、论文等)。为什么输入的呈现顺序会改变我的网络行为?是因为错误的变化在一个输入到下一个输入之间是一致的(因为顺序是一致的),这使得网络易于学习


我能做些什么来解决这个问题?我正在检查我的反向传播算法,以确保我正确地实现了它;目前,它是以学习速度和势头实施的。我正在考虑其他增强功能,如自适应学习率。然而,XOR网络通常被描述为一个非常简单的网络,因此我认为我不需要使用复杂的反向传播算法

将包含训练集的观察结果(输入向量)呈现给网络的顺序只在一个方面起作用——根据响应变量对观察结果进行随机排列比有序排列更受欢迎

例如,假设您有150个观察值,组成您的训练集,并且对于每个观察值,响应变量是三个类别标签(类别I、II或III)中的一个,因此观察值1-50在类别I中,51-100在类别II中,101-50在类别III中。您不想做的是按照该顺序将它们呈现给网络。换句话说,你不希望网络看到第一类的全部50个观测值,然后是第二类的全部50个观测值,然后是第三类的全部50个观测值

在训练你的分类器的过程中发生了什么?最初,你将四个观察结果无序地呈现给你的网络[0,1,1,0]

我想知道在网络无法收敛的情况下,输入向量的顺序是什么?如果它是[1,1,0,0]或[0,1,1,1],这与我上面提到的这个有充分证明的经验规则是一致的

另一方面,我想知道这条规则是否适用于你的情况。原因是,您的训练实例太少,即使顺序是[1,1,0,0],多个时期的训练(我相信您一定会这样做)将意味着这种排序看起来更“随机”,而不是我上面提到的示例(即[1,1,0,0,1,1,0,0,1,1,0,0]网络将如何呈现三个时期的培训数据)。

诊断问题的一些建议:

  • 正如我上面提到的,看看非收敛情况下输入向量的顺序——它们是按响应变量排序的吗

  • 在非收敛的情况下,看看你的权重矩阵(我假设你有两个)。查找任何非常大的值(例如,其他值的100倍,或初始化值的100倍)。重量过大会导致溢出


  • 谢谢你的信息,道格。再说一次,由于我是新手,我对所有的术语都不是很熟悉。你所说的“不一致情况”是什么意思?就权重而言,我有两个权重向量:一个用于隐藏层的输入,另一个用于输出层的输入。这是一个愚蠢的错误,让我陷入了困境。输入与输出不对应,这确保了网络没有学到任何东西!我还修改了反向传播算法,使其仅在计算了网络中所有节点的误差后调整权重。@VivinPalath“非收敛”情况仅指网络未收敛于某个结果的情况,即,哪个数据点导致其卡住。让我建议。你知道神经网络comp.ai常见问题吗?IMO,迄今为止最好的NN资源--最权威、最全面、令人惊讶的是,最容易阅读(完全采用FAQ格式)。共有7个部分,您可以以pdf格式下载所有7个部分。@VivinPalath很高兴知道您解决了它。所以你重新排列了你的输入数组,但是忘记了同样地重新排列相应的目标——我已经做了一百万次了。如果您使用python或matlab,一种简单的避免方法就是将输入+目标作为单个2D(“数据”)矩阵保存在一起,因此不要将每个矩阵绑定到单独的变量(输入,目标),只需在组合数据矩阵上使用索引/切片表示法即可