如何提高我的神经网络稳定性?

机器算法验证 r 机器学习 神经网络
2022-03-05 07:47:42

我正在使用 R 中的神经网络来构建一个具有 14 个输入和一个输出的 NN。我使用相同的输入训练数据和相同的网络架构/设置多次构建/训练网络。

在生成每个网络后,我在一组独立的测试数据上使用它来计算一些预测值。尽管每次构建网络时所有输入(训练数据和测试数据)都保持不变,但我发现预测数据的每次迭代都存在很大差异。

我知道每次在 NN 内产生的权重都会有所不同,并且没有两个神经网络会是相同的,但是在给定相同数据的情况下,我可以尝试生成在每列火车上更一致的网络吗?

2个回答

通常,通过增加隐藏节点的数量并使用适当的权重衰减(又名脊惩罚),您可以获得更高的稳定性。

具体来说,我建议使用该caret软件包来更好地了解您的准确性(甚至是准确性的不确定性。)另外,插入符号是avNNet使集成学习器脱离多个神经网络以减少初始种子的影响。我个人没有看到使用的巨大改进,avNNet但它可以解决您最初的问题。

我还要确保您的输入都经过适当调整。您是否对它们进行了正交化然后重新缩放?pcaNNetCaret 也可以通过它的功能为你做这个预处理。

最后,您可以考虑折腾一些跳过层连接。您需要确保数据中没有异常值/杠杆点来扭曲这些连接。

我没有使用过 R,所以我只能给出更一般的提示。

你检查算法是否收敛?一种可能的解释是,不同的参数集都在同一最优值的一半。

如果算法总是收敛但收敛到不同的局部最优值,那么您可以尝试避免使用许多启发式方法。使用随机梯度下降(SGD)时的一种简单策略是使用更小的批次和更大的动量较小的批大小有效地在训练中引入了一些噪声,这可以帮助逃避一些局部最优。一个更复杂的策略是使用自动编码器初始化权