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

Machine learning 人工神经网络神经元数和层数的估计,machine-learning,neural-network,deep-learning,artificial-intelligence,Machine Learning,Neural Network,Deep Learning,Artificial Intelligence,我正在寻找一种方法来计算每层的层数和神经元数。作为输入,我只有输入向量的大小、输出向量的大小和训练集的大小 通常,通过尝试不同的网络拓扑并选择误差最小的网络拓扑来确定最佳网络。不幸的是,我不能那样做。这是一个非常困难的问题 网络的内部结构越多,网络就越能更好地表示复杂的解决方案。另一方面,过多的内部结构速度较慢,可能会导致训练出现分歧,或导致过度拟合,这将阻止您的网络很好地推广到新数据 人们传统上以几种不同的方式处理这个问题: 尝试不同的配置,看看什么最有效。您可以将培训集分为两部分——一部分用

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


通常,通过尝试不同的网络拓扑并选择误差最小的网络拓扑来确定最佳网络。不幸的是,我不能那样做。

这是一个非常困难的问题

网络的内部结构越多,网络就越能更好地表示复杂的解决方案。另一方面,过多的内部结构速度较慢,可能会导致训练出现分歧,或导致过度拟合,这将阻止您的网络很好地推广到新数据

人们传统上以几种不同的方式处理这个问题:

  • 尝试不同的配置,看看什么最有效。您可以将培训集分为两部分——一部分用于培训,一部分用于评估——然后培训和评估不同的方法。不幸的是,在您的案例中,这种实验方法似乎不可用

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

    经验法则的问题在于,它们并不总是考虑重要的信息、are等。因此,这些规则通常被用作“让我们尝试一堆东西,看看什么最有效”方法的粗略起点

  • 使用动态调整网络配置的算法。类似的算法从最小网络开始,然后在训练期间添加隐藏节点。这可以使您的实验设置更简单,并且(理论上)可以获得更好的性能(因为您不会意外地使用不适当数量的隐藏节点)

  • 关于这个问题有很多研究,所以如果你真的感兴趣的话,有很多值得一读的。查看引文,尤其是:

    • 劳伦斯,S.,贾尔斯,C.L.,和蔡,A.C.(1996)。技术报告UMACAC-TR 96-22和CS-TR—3617,马里兰大学高级计算机研究所,Park
    • Elisseeff,A.和Paugam Moisy,H.(1997)。神经信息处理系统的进展9,麻省剑桥:麻省理工学院出版社,第162-168页


    在实践中,这并不困难(基于编码和训练了几十名MLP)

    从教科书的意义上讲,要使体系结构“正确”是很难的——也就是说,要调整您的网络体系结构,使性能(分辨率)无法通过进一步优化体系结构来提高是很难的,我同意。但只有在极少数情况下才需要达到这种优化程度

    实际上,要达到或超过您的规范所要求的神经网络的预测精度,您几乎不需要花费大量时间在网络体系结构上——这有三个原因:

    • 指定网络体系结构所需的大多数参数 一旦确定了数据模型(数量 输入向量中的特征,是否为所需的响应变量 是数字类还是分类类,如果是后者,有多少个唯一类 您选择的标签)

    • 剩下的几个架构参数实际上是可调的, 几乎总是(在我的经验中,100%的时间)受到那些固定架构的高度限制 参数——即,这些参数的值由最大值和最小值紧密限定;及

    • 最佳体系结构之前不必确定 训练开始了,事实上,神经网络代码开始训练是很常见的 包括一个小模块,以编程方式调整网络 训练期间的体系结构(通过移除权重值为 正在接近零(通常称为“修剪”)

    根据上表,神经网络的结构完全由六个参数(内部网格中的六个单元)指定。其中两个(输入层和输出层的层数类型)总是一和一——神经网络有一个输入层和一个输出层。您的NN必须至少有一个输入层和一个输出层——不多也不少。第二,包含这两个层中每一层的节点数量是固定的——输入层,由输入向量的大小决定——即,输入层中的节点数量等于输入向量的长度(实际上,几乎总是在输入层中添加一个神经元作为偏置节点)

    类似地,输出层大小由响应变量固定(数值响应变量为单节点,假设使用softmax,如果响应变量为类标签,则输出层中的节点数仅等于唯一类标签数)

    这就只剩下了两个完全可以自由决定的参数——隐藏层的数量和包含每个层的节点的数量。

    隐藏层的数量 如果您的数据是线性可分离的(在开始编写NN时,您通常知道这一点),那么您根本不需要任何隐藏层(如果事实上是这样的话,我不会使用NN解决这个问题——选择一个更简单的线性分类器)。 第一个问题——隐藏层的数量——几乎总是一个。这一假设背后有很多经验性的分量——在实践中,很少有问题不能用一个隐藏层来解决,而可以通过添加另一个隐藏层来解决