【发布时间】:2012-11-21 19:31:17
【问题描述】:
这是一个关于神经网络性能的更高层次的问题。我遇到的问题是,每层神经元数量较多,网络经常出现完全愚蠢的回合。它们不一致;当层数超过 60 个神经元(总是 3 层)时,一般成功与失败的概率似乎约为 50/50。
我通过向具有 10-200 大小的输入和隐藏层的网络教授相同的功能来测试这一点。成功率是 0-1% 或 90+%,但没有介于两者之间。为了帮助可视化这一点,我将其绘制成图表。失败是 5k 次训练迭代后对 200 个数据集的错误响应的总计数。 .
我认为还需要注意的是,每次实验运行时网络成功或失败的数字都会发生变化。我想出的唯一可能的罪魁祸首是局部最小值(但不要让这影响你的答案,我是新手,最初尝试最小化局部最小值的机会似乎没有效果)。
那么,最终的问题是,什么会导致这种行为?为什么这件事如此不一致?
Python 代码位于 Github 上,生成此图的代码是 test.py 中的 testHugeNetwork 方法(第 172 行)。如果网络算法的任何特定部分有帮助,我很高兴发布相关的 sn-ps。
【问题讨论】:
-
您“最初尝试最小化局部最小值的机会”是什么?您是否尝试过降低学习率?
-
@larsmans 我期望最大的帮助是将权重初始化为更小的量级(它们是随机的)。我认为较大的初始值会增加网络卡在错误路径上的机会。我还试验了学习率和动量常数。没有引起明显的变化。
-
有趣。是的,小权重应该有帮助,至少如果你有 sigmoid(逻辑或 tanh)激活函数,因为它们往往在零附近是线性的。再说一次,许多小的 sigmoid 激活可能会增加一个非常大的权重进入输出层。具有线性激活的它,它的预测可能会有很大的偏差,训练它可能需要很长时间。
-
@larsmans 我可能说得太快了。我将学习率和动量都更改为比我之前尝试过的更小,并且初始测试看起来不错。现在我会说这正是问题所在。这几天我很困惑,我没有对最简单的变量给予足够的思考。如果这被证明是解决方案,是否相当确定问题是局部最小值?
-
它可能是,或者它可能是错误表面中的高原,这取决于您检查收敛的方式。
标签: python machine-learning neural-network