如何改善神经网络的稳定性?


11

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

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

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


您能否给我们更多有关您(或R包)使用的学习算法和体系结构的详细信息?NN有几层?
卢卡斯

嗨,卢卡斯,我使用的是R包Neuronet 链接,该链接在此处具有很好的说明性文章link。我正在使用8个神经元的一个隐藏层。该学习算法是具有权重回溯的弹性反向传播。
tfb

Answers:


8

通常,通过增加隐藏节点的数量并使用适当的权重衰减(aka岭罚分),您将获得更高的稳定性。

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

我还要确保您的输入均已正确设置。您是否对它们进行正交处理然后重新缩放?插入符还可以通过其pcaNNet功能为您执行此预处理。

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


有趣的是,我将网络的训练切换为“ nnet”功能(在相同名称的软件包中提供),并且数据测试集上的结果变得更加稳定-也许与权重的不同方式有关在两个包之间初始化?
tfb 2012年

nnet初始权都被初始化为一个统一的随机数0.7 -0.7,如果我没有记错。您可以控制参数的大小。老实说,我对产品nnet包装感到满意,而且从未尝试过其他任何选择。祝你好运!
Shea Parkes '02

1

我尚未使用R,因此只能提供更多一般性提示。

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

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


正如Fyi一样,只要他使用的nnet是R 的底数,它就使用R的BFGS优化方法optim。它实际上是计算梯度以获得表面的图片。它的实现中没有批处理,也没有固定的动量参数。说了这么多,它很容易收敛。特别是在垃圾。
谢伊帕克斯

@SheaParkes感谢您的评论和答复。我实际上正在使用Neuronet软件包-请参阅上面的评论。它使用具有权重回溯功能的弹性反向传播算法
tfb 2012年

然后我道歉卢卡斯,我错过了那条小消息。我很高兴您能解决tfb。
Shea Parkes '02
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.