估计人工神经网络的神经元数量和层数

我正在寻找一种计算神经网络层数和每层神经元数量的方法。 作为输入,我只有输入向量的大小、输出向量的大小和训练集的大小。

通常,最好的网络是通过尝试不同的网络拓扑结构并选择误差最小的那个来确定的。 不幸的是,我无法这样做。


回答:

这确实是一个非常困难的问题。

网络内部结构越多,网络就越能更好地表示复杂的解决方案。 另一方面,过多的内部结构会降低速度,可能导致训练发散,或导致过度拟合 — 这会阻止你的网络很好地泛化到新数据。

人们传统上通过几种不同的方式来解决这个问题:

  1. 尝试不同的配置,看看哪个效果最好。 你可以将训练集分成两部分 — 一部分用于训练,一部分用于评估 — 然后训练和评估不同的方法。 不幸的是,听起来在你的情况下,这种实验方法是不可行的。

  2. 使用经验法则。 很多人都提出了很多关于什么效果最好的猜测。 关于隐藏层中神经元的数量,人们推测(例如)它应该 (a) 在输入和输出层大小之间,(b) 设置为接近 (输入 + 输出) * 2/3 的某个值,或者 (c) 永远不大于输入层大小的两倍。

    经验法则的问题是它们并不总是考虑到重要的信息比如问题有多“困难”,训练集和测试集的大小是多少 等等。 因此,这些规则通常被用作“让我们尝试一堆东西,看看哪个效果最好”方法的粗略起点。

  3. 使用一种动态调整网络配置的算法。Cascade Correlation 这样的算法从一个最小的网络开始,然后在训练过程中添加隐藏节点。 这可以使你的实验设置更简单一些,并且(理论上)可以带来更好的性能(因为你不会意外地使用不合适的隐藏节点数量)。

关于这个主题有很多研究 — 所以如果你真的感兴趣,有很多东西可以阅读。 查看 此摘要 中的引用,特别是:

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注