【问题标题】:Effects of randomizing the order of inputs to a neural network随机化神经网络输入顺序的影响
【发布时间】:2011-12-27 11:10:25
【问题描述】:

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

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

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

然后我实现了训练集的随机化,所以这一次输入的顺序是足够随机化的。我现在注意到我的神经网络卡住了并且错误正在减少,但速度非常小(每个时期都在变小)。一段时间后,错误开始围绕一个值波动(因此错误停止减少)。

我是这个主题的新手,到目前为止我所知道的一切都是自学的(阅读教程、论文等)。为什么输入的呈现顺序会改变我的网络的行为?是不是因为从一个输入到下一个输入的误差变化是一致的(因为顺序是一致的),这让网络很容易学习?

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

【问题讨论】:

    标签: artificial-intelligence machine-learning neural-network xor backpropagation


    【解决方案1】:

    您将构成训练集的观察结果(输入向量)呈现给网络的顺序仅在一个方面很重要——观察结果的随机排列根据响应变量 比有序排列更受欢迎。

    例如,假设您的训练集包含 150 个观测值,并且每个响应变量都是三个类标签(I、II 或 III 类)之一,因此观测值 1-50 属于 I、51 II 类为 -100,III 类为 101-50。您不想做的是按该顺序将它们呈现给网络。换句话说,您不希望网络看到 I 类中的所有 50 个观测值,然后是 II 类中的所有 50 个,然后是 III 类中的所有 50 个。

    在训练分类器期间发生了什么?好吧,最初您将四个观察结果呈现给您的网络,无序 [0, 1, 1, 0]。

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

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

    诊断问题的一些建议:

    1. 如上所述,查看非收敛情况下输入向量的排序 - 它们是否按响应变量排序?

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

    【讨论】:

    • 感谢道格提供的信息。同样,由于我是新手,我对所有术语都不是很熟悉。您所说的“非收敛案例”是什么意思?就权重而言,我有两个权重向量:一个用于隐藏层的输入,一个用于输出层的输入。
    • 我犯了一个愚蠢的错误。输入与输出不对应,这确保了网络没有学到任何东西!我还修改了我的反向传播算法,仅在为网络中的所有节点计算误差后才调整权重。
    • @VivinPaliath “非收敛”情况仅指网络未收敛到结果的情况 - 即哪个数据点导致它卡住。让我建议。你知道神经网络 comp.ai 的常见问题吗? IMO,迄今为止任何地方最好的神经网络资源——最权威、最全面,而且令人惊讶的是,最容易阅读(完全以常见问题解答格式)。 faqs.org/faqs/ai-faq/neural-nets/part1/preamble.html。共有 7 个部分,您可以下载 pdf 格式的全部 7 个。
    • @VivinPaliath 很高兴知道你解决了它。因此,您重新排序了输入数组,但忘记了类似地重新排序相应的目标——我已经这样做了可能一百万次。如果您使用 python 或 matlab,一种简单的避免它的方法,只需将输入 + 目标作为单个 2D(“数据”)矩阵保持在一起,因此不要将每个变量绑定到单独的变量(输入、目标),只需使用索引/切片组合数据矩阵上的表示法来引用任一,例如,输入是 data[:,:-1],目标是 data[:,-1]
    • 感谢您的链接;它看起来很有帮助!另外,感谢您对使我的代码不易出错的建议!
    猜你喜欢
    • 2012-01-23
    • 1970-01-01
    • 2013-09-22
    • 2018-09-10
    • 2012-10-05
    • 2019-01-12
    • 2010-10-13
    • 2015-12-23
    相关资源
    最近更新 更多