神经网络/多层感知器(MLP)架构:选择隐藏层数量和大小的标准

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/lt77701/article/details/76135962

隐藏层个数:

一个零隐藏层的模型可以解决线性可分数据。所以除非你早知道你的数据线性不可分,证明它也没什么坏处—为什么使用比任务需求更困难的模型?如果它是线性可分的那么一个更简单的技术可以工作,感知器也可以。 
假设您的数据确实需要通过非线性技术进行分离,则始终从一个隐藏层开始(几乎肯定这就是你所需要的)。如果你的数据使用MLP是可分的,那么这个MLP可能只需要单个隐藏层。这是有理论依据的,但是我的理由是单纯经验性的:许多困难的分类/回归问题使用单个隐藏层MLP来解决,我想不出遇到过任何多隐藏层MLP成功建模数据。他们存在,但是使用场景是非常少的。

隐藏层大小:

从MLP学术论文以及我自己的经验来看,我已经收集并经常依据一下几个规则,并且我也发现它是可靠的指南:

1. 基于改善收敛。

当你开始建模时,请在隐藏层中更多节点的边上。 
Why?首先,隐藏层中的几个额外节点不太可能造成任何伤害 - 您的MLP仍然会收敛。但是,过少的节点可能会阻止收敛。这样想,附加节点提供了一些额外容量–在迭代期间向网络存储/释放信号的额外权重。第二,如果你的隐藏层有额外节点,以后剪掉它是非常容易的,这是常见并且有检测技术帮助你(Hinton图–一个权重矩阵的可视化描述,权重值热图)

2. 基于输入层和输出层大小:

关于隐藏层大小的经验法则是在输入层和输出层之间,为了计算隐藏层大小我们使用一个一般法则:(输入大小+输出大小)*2/3

3. 基于关键部分

通常,我们指定与捕获数据集方差70-90%的关键组件维度相当的隐藏节点。 
神经网络作者称这些规则是“废话”因为它们忽略了训练数据大小,目标中的噪声(响应变量的值),以及特征空间复杂度。 
在他看来,选择隐藏层神经元个数基于你的MLP是否包含某种正则化形式,或者提前停止。

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

在建模期间,多多测试;测试会显示出”不准确”网络框架。比如,如果你以有少量节点(你可以基于测试结果根据需要逐步增加)的单个隐藏层MLP开始,你的训练和泛化误差都会因为偏倚和欠拟合而变得很高。然后增加隐藏层节点个数,一次一个,直到泛化误差开始增加,此时是由过拟合和高方差引起的。

通常,我这样做:

输入层,我的输入向量(模型特征数)+1(偏倚节点),不包括响应变量。 
输出层,由模型决定:回归(一个节点)VS分类(类别个数) 
隐藏层,一开始,一个节点数目等于输入层节点数目的隐藏层。“理想”大小极有可能更小而不是更大–再次,这只是一个经验观察,大部分观察是我自己的经验。如果项目时间允许,我将从一个包含少量节点的单个隐藏层开始,那么(正如我刚刚解释的),我将节点添加到隐藏层,一次一个,同时计算泛化误差,训练误差,偏差和方差。当泛化误差已经下降并且在其再次开始增加之前,在这一点上的节点数量是我的选择。见下图 
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值