如果我们有10个特征向量,那么我们可以在输入层设置10个神经节点。如果我们有5个输出类别,那么我们可以在输出层设置5个节点。但是,在MLP中选择隐藏层的数量和一个隐藏层中神经节点的数量的标准是什么?
回答:
需要多少个隐藏层?
一个没有隐藏层的模型可以处理线性可分的数据。因此,除非你已经知道你的数据不是线性可分的,否则验证这一点并无害——为什么要使用比任务要求更复杂的模型呢?如果数据是线性可分的,那么更简单的技术就可以工作,但感知器也能完成任务。
假设你的数据确实需要通过非线性技术来分离,那么总是从一个隐藏层开始。几乎可以肯定,你只需要一个隐藏层。如果你的数据可以使用MLP分离,那么那个MLP可能只需要一个隐藏层。这有理论上的依据,但我的理由完全是经验性的:许多困难的分类/回归问题都是使用单隐藏层的MLP解决的,但我从未遇到过使用多隐藏层的MLP成功建模数据的案例——无论是在机器学习公告板、机器学习教科书、学术论文等中。它们确实存在,但证明其使用的环境在经验上非常罕见。
隐藏层中需要多少个节点?
从MLP的学术文献、我自己的经验等,我收集并经常依赖于几个经验法则(RoT),这些法则我也发现是可靠的指南(即,指导是准确的,即使不是准确的,通常也清楚下一步该做什么):
当你开始构建模型时,倾向于在隐藏层中设置更多节点。
为什么?首先,隐藏层中多几个节点不太可能造成任何伤害——你的MLP仍然会收敛。另一方面,隐藏层中的节点太少可能会阻止收敛。这样想吧,额外的节点提供了一些多余的容量——在迭代过程中(训练或模型构建)向网络存储/释放信号的额外权重。其次,如果你从隐藏层中开始设置额外的节点,那么在迭代过程中很容易修剪它们。这是常见的,并且有诊断技术来帮助你(例如,Hinton图,这只是权重矩阵的视觉描绘,权重值的“热图”)。
一个经验法则是这个[隐藏]层的尺寸应该介于输入层大小…和输出层大小之间…
计算隐藏节点的数量,我们使用的一般规则是:(输入+输出)x 2/3
通常,我们指定的隐藏节点数量与需要捕获输入数据集70-90%方差的维度[主成分]相同。
然而,NN FAQ的作者称这些规则为“无稽之谈”(字面意思),因为它们:忽略了训练实例的数量,目标中的噪声(响应变量的值),以及特征空间的复杂性。
在他看来(而且我一直觉得他知道自己在说什么),选择隐藏层中神经元的数量应该基于你的MLP是否包含某种形式的正则化或早期停止。
优化隐藏层中神经元数量的唯一有效技术:
在你的模型构建过程中, obsessively进行测试;测试将揭示“错误”网络架构的迹象。例如,如果你从一个具有少量节点的隐藏层的MLP开始(你将根据测试结果逐渐增加所需的节点数),你的训练和泛化误差都会很高,这是由于偏差和欠拟合造成的。
然后,逐个增加隐藏层中的节点数量,直到泛化误差开始增加,这次是由于过拟合和高方差造成的。