我目前正在从事一个使用 ANN 的项目。对于训练算法,我选择了 LMA,因为它相当快且用途广泛,并且我阅读了一篇论文,认为它是我们用例的最佳训练算法。然而,在写完之后,我开始担心 SSE(误差平方和除以 2)在使用具有 2 个输入、1 个隐藏层和 2 个节点的网络的简单 XOR 问题上仅从 2.05 降低到 1.00,并且1 个输出。我以为我在某个地方编程出错了,但是当我尝试更改 PRNG 种子值时,SSE 突然收敛到 2.63e-09。然而,与可能的编程错误相比,这更加令人不安,因为对于这样一个简单的问题,我不认为算法的性能会受到随机机会的影响这么大。
PRNG 根据模式 0.8 和 -0.8 的双峰分布生成偏差和权重,并且概率分布在 0 附近下降到接近 0,所以希望我不应该从一开始就用非常小的参数来损害算法,但是在那里生成良好起始值的任何其他提示?我将 tanh 用于我的 sigmoid 函数,如果这有所作为的话。我在想,也许使用更大的值可能会产生影响,但我同样担心这也会产生不利影响。
我知道 LMA 只收敛到局部最小值,但肯定有一些方法可以避免这些问题。我只是因为我的种子价值不走运吗?每次卡住时,我是否应该简单地使用新的种子值重复训练?我应该完全寻找另一种训练算法吗?
ANN 将首先在一些历史数据上进行预训练,然后定期使用更新的数据进行更新,所以虽然我可能有能力在必要时重复训练几次,但种子值的数量是有实际限制的可以尝试。此外,虽然这个初始测试只有 9 个参数,但我们最终将处理接近 10,000 个,并且可能不止一个隐藏层。我的直觉是,这会加剧局部最小值的问题,但增加问题规模是否可能实际上是有益的?