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

在我的高级算法与数据结构课程中,我的教授让我们选择任何感兴趣的话题进行研究,并尝试实现一个解决方案。我选择了神经网络,因为这是我一直想学习的内容。

我已经成功实现了使用步进函数作为激活器的神经网络来实现AND、OR和XOR操作。之后,我尝试实现了一个通过反向传播学习识别XOR操作符的神经网络(使用S形函数作为激活器)。通过使用3-3-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-150属于类别III。你不希望以这种顺序将它们呈现给网络。换句话说,你不希望网络先看到类别I的所有50个观察,然后是类别II的所有50个,最后是类别III的所有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]是网络在三个纪元中呈现训练数据的方式)。

一些诊断问题的建议:

  1. 如我上面提到的,查看在未收敛情况下的输入向量顺序——它们是否按响应变量排序?

  2. 在未收敛的情况下,查看你的权重矩阵(我假设你有两个)。寻找任何非常大的值(例如,比其他值大100倍,或者比初始值大100倍)。大的权重可能会导致溢出。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注