如果我们有10个特征 vector ,则在输入层中可以有10个神经节点;如果我们有5个输出类,则在输出层中可以有5个节点,但是在MLP中选择隐藏层数的标准是多少? 1个隐藏层中的节点?
最佳答案
多少个隐藏层?
具有零隐藏层的模型将解析线性可分离的数据。因此,除非您已经知道数据不是线性可分离的,否则验证它不会有任何伤害-为什么要使用比任务要求更复杂的模型?如果它是线性可分离的,那么可以使用一种更简单的技术,但是Perceptron也可以完成这项工作。
假设您的数据确实需要使用非线性技术进行分离,那么总是从一个隐藏层开始。几乎可以肯定,这就是您所需要的。如果使用MLP可分离数据,则该MLP可能只需要一个隐藏层。为此有理论上的证明,但我的理由纯粹是凭经验:使用单隐层MLP解决了许多困难的分类/回归问题,但我不记得遇到过用于成功建模数据的任何多隐层MLP, -是否存在于ML公告板上,ML教科书,学术论文等上,它们确实存在。但是,凭经验证明使用它们的理由很少。
隐藏层中有多少个节点?
来自MLP学术文献。以我自己的经验等为基础,我收集并经常依靠一些经验法则(RoT),并且我发现这些经验法则也是可靠的指南(即,该指南是准确的,即使不是这样,通常很清楚下一步该怎么做):
RoT基于改进的收敛性:
为什么?首先,隐藏层中的几个额外节点可能不会造成任何损害-您的MLP仍将收敛。另一方面,隐藏层中的节点太少会阻止收敛。这样想,其他节点会提供一些多余的容量-额外的权重,以便在迭代(训练或模型构建)期间将信号存储/释放到网络。其次,如果您从隐藏层中的其他节点开始,那么稍后很容易修剪它们(在迭代过程中)。这很常见,并且有诊断技术可以为您提供帮助(例如,欣顿图(Hinton Diagram),它只是重量矩阵的可视化表示,重量值的“热图”)。
RoTs基于输入层的大小和输出层的大小:
RoT基于主要成分:
但是NN FAQ作者称这些规则为“废话”(从字面上看)是因为它们:忽略训练实例的数量,目标中的噪声(响应变量的值)以及特征空间的复杂性。
在他看来(我总是觉得他知道他在说什么),请根据您的MLP是否包含某种形式的正则化或提前停止来选择隐藏层中神经元的数量。
用于优化隐藏层中神经元数量的唯一有效技术:
在建立模型的过程中,请过分地进行测试;测试将揭示“不正确”网络体系结构的特征。例如,如果您开始使用的MLP具有由少量节点组成的隐藏层(根据测试结果,您将根据需要逐渐增加该隐藏层),则由于偏差和拟合不足,您的训练和泛化误差都会很高。
然后一次增加一个隐藏层中的节点数,直到泛化误差开始增加,这是由于过度拟合和高方差。
在实践中,我这样做:
输入层:我的数据变量的大小(模型中特征的数量)+ 1(用于偏差节点),当然不包括响应变量
输出层:由我的模型确定的soley:回归(一个节点)与分类(节点数等于类数,假设softmax)
隐藏层:首先,一个隐藏层的节点数等于输入层的大小。 “理想”大小可能会更小(即,输入层中的节点数与输出层中的节点数之间的一定数量的节点),而不是更大-再次,这只是一个经验观察,这种观察是我自己的经验。如果项目证明需要额外的时间,那么我将从包含少量节点的单个隐藏层开始,然后(如上所述),我一次将一个节点添加到“隐藏层”,同时计算概化错误,训练错误,偏差和方差。当泛化误差下降并且在误差开始再次增大之前,我选择此时的节点数。参见下图。