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

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


回答:

需要多少个隐藏层?

一个没有隐藏层的模型可以处理线性可分的数据。因此,除非你已经知道你的数据不是线性可分的,否则验证这一点并无害——为什么要使用比任务要求更复杂的模型呢?如果数据是线性可分的,那么更简单的技术就可以工作,但感知器也能完成任务。

假设你的数据确实需要通过非线性技术来分离,那么总是从一个隐藏层开始。几乎可以肯定,你只需要一个隐藏层。如果你的数据可以使用MLP分离,那么那个MLP可能只需要一个隐藏层。这有理论上的依据,但我的理由完全是经验性的:许多困难的分类/回归问题都是使用单隐藏层的MLP解决的,但我从未遇到过使用多隐藏层的MLP成功建模数据的案例——无论是在机器学习公告板、机器学习教科书、学术论文等中。它们确实存在,但证明其使用的环境在经验上非常罕见。

隐藏层中需要多少个节点?

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

基于改进收敛的RoT

当你开始构建模型时,倾向于在隐藏层中设置更多节点。

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

基于输入层大小和输出层大小的RoTs

一个经验法则是这个[隐藏]层的尺寸应该介于输入层大小…和输出层大小之间…

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

基于主成分的RoT

通常,我们指定的隐藏节点数量与需要捕获输入数据集70-90%方差的维度[主成分]相同

然而,NN FAQ的作者称这些规则为“无稽之谈”(字面意思),因为它们:忽略了训练实例的数量,目标中的噪声(响应变量的值),以及特征空间的复杂性。

在他看来(而且我一直觉得他知道自己在说什么),选择隐藏层中神经元的数量应该基于你的MLP是否包含某种形式的正则化或早期停止

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

在你的模型构建过程中, obsessively进行测试;测试将揭示“错误”网络架构的迹象。例如,如果你从一个具有少量节点的隐藏层的MLP开始(你将根据测试结果逐渐增加所需的节点数),你的训练和泛化误差都会很高,这是由于偏差和欠拟合造成的。

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

Related Posts

L1-L2正则化的不同系数

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

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

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

f1_score metric in lightgbm

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

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

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

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

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

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

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

发表回复

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