Machine learning 多层感知器(MLP)架构:选择隐藏层数量和隐藏层大小的标准?

Machine learning 多层感知器(MLP)架构:选择隐藏层数量和隐藏层大小的标准?,machine-learning,neural-network,deep-learning,perceptron,Machine Learning,Neural Network,Deep Learning,Perceptron,如果我们有10个特征向量,那么我们可以在输入层有10个神经节点。如果我们有5个输出类,那么我们可以在输出层有5个节点。但是在MLP中选择隐藏层的数量以及在一个隐藏层中有多少个神经节点的标准是什么?在一个隐藏层中选择神经元的数量非常困难,选择神经网络中隐藏层的数量 通常,对于大多数应用程序,一个隐藏层就足够了。此外,隐藏层中的神经元数量应介于输入数量(示例中为10)和输出数量(示例中为5)之间 但选择神经元数量和隐藏层的最佳方法是实验。训练多个具有不同隐层数和隐神经元数的神经网络,并使用该方法测量

如果我们有10个特征向量,那么我们可以在输入层有10个神经节点。如果我们有5个输出类,那么我们可以在输出层有5个节点。但是在MLP中选择隐藏层的数量以及在一个隐藏层中有多少个神经节点的标准是什么?

在一个隐藏层中选择神经元的数量非常困难,选择神经网络中隐藏层的数量

通常,对于大多数应用程序,一个隐藏层就足够了。此外,隐藏层中的神经元数量应介于输入数量(示例中为10)和输出数量(示例中为5)之间

但选择神经元数量和隐藏层的最佳方法是实验。训练多个具有不同隐层数和隐神经元数的神经网络,并使用该方法测量这些网络的性能。您可以选择性能最好的网络的数字。

有多少隐藏层?

具有零隐藏层的模型将解析线性可分离数据。因此,除非您已经知道数据不是线性可分的,否则验证这一点并没有坏处——为什么要使用比任务要求更复杂的模型?如果它是线性可分的,那么一种更简单的技术将起作用,但感知器也将起作用

假设您的数据确实需要通过非线性技术进行分离,那么始终从一个隐藏层开始。几乎可以肯定,这就是你所需要的。如果使用MLP可以分离数据,那么MLP可能只需要一个隐藏层。这有理论上的理由,但我的理由纯粹是经验上的:许多困难的分类/回归问题都是使用单隐层MLP解决的,但我不记得曾遇到过任何用于成功建模数据的多隐层MLP——无论是在ML公告板、ML教科书、学术论文等上。它们是存在的,当然可以,但从经验上看,证明使用它们的情况相当罕见


隐藏层中有多少节点?

来自MLP学术文献。我自己的经验等,我收集并经常依赖一些经验法则(RoT),我也发现它们是可靠的指南(即,指南是准确的,即使不准确,通常也很清楚下一步该做什么):

基于改进收敛性:

开始构建模型时,在more节点一侧出错 在隐藏层中

为什么??首先,隐藏层中的几个额外节点不太可能造成任何伤害——MLP仍然会收敛。另一方面,隐藏层中的节点太少会妨碍收敛。这样想,额外的节点提供了一些多余的容量——额外的权重,用于在迭代(训练或模型构建)期间存储/释放信号到网络。其次,如果您从隐藏层中的其他节点开始,那么以后(在迭代过程中)很容易修剪它们。这是常见的,有诊断技术可以帮助您(例如,Hinton图,它只是权重矩阵的视觉描述,权重值的“热图”)

根据输入层和输出层的大小:

经验法则是这个[隐藏]层的大小在某个地方 在输入层大小之间。。。输出层的大小

为了计算隐藏节点的数量,我们使用以下一般规则: (输入+输出的数量)x 2/3

基于主成分:

通常,我们指定的隐藏节点数与维度数相同[principal] 组件]需要捕获70-90%的输入数据方差 设定

但作者称这些规则为“胡说八道”(字面意思),因为它们忽略了训练实例的数量、目标中的噪声(响应变量的值)和特征空间的复杂性

在他看来(在我看来,他总是知道他在说什么),根据你的MLP是否包括某种形式的规则化,或者提前停止,选择隐藏层中的神经元数量。

优化隐藏层神经元数量的唯一有效技术:

在你的模型构建过程中,测试是强迫性的;测试将揭示“不正确”网络架构的特征。例如,如果一个MLP开始时有一个由少量节点组成的隐藏层(根据测试结果,您将根据需要逐渐增加这些节点),那么由于偏差和拟合不足,您的训练和泛化误差都会很高

然后增加隐藏层中的节点数,一次增加一个,直到泛化误差开始增加,这一次是由于过度拟合和高方差


实际上,我是这样做的:

输入层:我的数据vactor的大小(我的模型中的特征数量)+1表示偏差节点,当然不包括响应变量

输出层:完全由我的模型决定:回归(一个节点)与分类(节点数量等于类数量,假设softmax)

隐藏层:首先,一个隐藏层,其节点数量等于输入层的大小。“理想”大小更可能更小(即,输入层和输出层中的节点数之间的节点数),而不是更大——同样,这只是一个经验观察,大部分观察是我自己的经验。如果项目证明所需的额外时间是合理的,那么我从一个由少量节点组成的隐藏层开始,然后(正如我刚才解释的那样)在计算gener时向隐藏层添加节点,一次添加一个节点