神经网络隐藏神经元选择策略

数据挖掘 机器学习 神经网络
2022-02-15 20:08:36

我正在尝试确定我的 MATLAB 神经网络的最佳隐藏神经元数量。我正在考虑采用以下策略:

  • 循环获取隐藏神经元的一些值,例如 1 到 40;
  • 对于每个具有固定数量隐藏神经元的NN,执行一定数量的训练(例如40,由于时间原因限制了epoch的数量:我正在考虑这样做,因为网络似乎很难训练,经过一段时间的MSE epochs 非常高)
  • 存储所有具有不同隐藏神经元数量的网络获得的 MSE
  • 执行前面的过程超过 1 次,例如 4 次,以考虑初始随机权重,并取 MSE 的平均值
  • 选择并在具有多个隐藏神经元的 NN 上执行“真实”训练,以使先前计算的 MSE 最小化

我所指的 MSE 是验证 MSE:我的样本在训练、测试和验证中的拆分以避免过度拟合分别为 70%、15% 和 15%)

与我的问题相关的其他信息是:
拟合问题
9 个输入神经元
2 个输出神经元
1630 个样本

这个策略可行吗?有没有更好的标准可以采用?谢谢

编辑:测试完成,所以结果建议我采用 12 个神经元?(低验证 MSE 和低于 2*numberOfInputNeurons 的神经元数量?但 18 也可能很好...... 在此处输入图像描述

2个回答

经验法则是:

  • 从与特征数量相等(或略高)的隐藏神经元数量开始。
  • 在您的情况下,它将是 9。我的建议是从 9*2 = 18 开始,以涵盖更广泛的可能性。
  • 确保您的测试和验证集被“公平地”选择:随机选择并多次改变种子以测试不同的配置是可以的。

一般来说,与特征数量相等的神经元数量往往会使每个隐藏的神经元尝试学习每个特征添加的特殊事物,因此可以说它是分别“学习每个特征”。虽然这听起来不错,但它可能会过度拟合。

由于您的输入数量和数据集大小很小,因此可以从两倍 (18) 的隐藏层大小开始并开始降低。当训练误差和测试误差稳定在低于阈值的差异时,您可能会找到更好的泛化模型。

神经网络非常擅长通过从起点深入探索解决方案来找到局部最优值。不过,出发点也很重要。如果您没有得到很好的概括,您可能会尝试使用混合神经网络的方法找到良好的初始起点。例如,一种常见的方法是使用遗传算法找到权重的初始组合,然后从该点开始神经网络。鉴于您的搜索空间将被更好地覆盖(以防您的问题确实需要)。

至于机器学习中的每个问题,在将数据引入 NN 之前清理数据非常重要。尽量写的很详细,以免 NN 学习到你已经知道的东西。例如,如果您知道两个特征是如何相关的,则通过明确相关性来改善输入数据,从而减少 NN 的工作量(这实际上可能会给您带来麻烦)。

顶层:

规则是选择能够令人满意地执行的最简单的网络。请参阅本出版物及其PDF

方法论:

你建议的测试也是如此(在每个隐藏节点的数量上训练许多网络)并绘制结果。在最少数量的节点下,您会看到最差的性能。随着节点数量的增加,您会看到性能提高(错误减少)。在某个点 N,您会看到性能似乎达到了上限,超过此上限的节点数将停止显着提高性能。随着训练变得更加困难,进一步增加可能会开始稍微损害性能)。那一点 N 是您想要的节点数。

它是如何为我工作的:

我第一次使用这种方法时,它创建了一个漂亮的近乎 sigmoid 的函数,其中包含非常明确的节点数量,这些节点需要达到良好的效果。我希望这对你有用,也对我有用。