Abh*_*mar 97 machine-learning perceptron neural-network deep-learning
如果我们有10个特征向量,那么我们可以在输入层有10个神经节点.如果我们有5个输出类,那么我们可以在输出层有5个节点.但是选择MLP中隐藏层数的标准是什么以及有多少神经节点1个隐藏层中的节点?
dou*_*oug 207
有多少隐藏层?
具有零隐藏层的模型将解析线性可分离数据.因此,除非您已经知道您的数据不是线性可分的,否则验证这一点并没有什么坏处 - 为什么要使用比任务要求更复杂的模型?如果它是线性可分的,那么更简单的技术就可以工作,但是Perceptron也可以完成这项工作.
假设您的数据确实需要通过非线性技术进行分离,那么始终从一个隐藏层开始.几乎可以肯定,这就是你所需要的一切.如果您的数据可以使用MLP分离,那么该MLP可能只需要一个隐藏层.这有理论上的理由,但我的理由纯粹是经验性的:使用单隐藏层MLP解决了许多困难的分类/回归问题,但我不记得遇到任何用于成功建模数据的多重隐藏层MLP- - 无论是在ML公告板,ML教科书,学术论文等等,它们肯定存在,但证明其使用合理的情况在经验上非常罕见.
隐藏层中有多少个节点?
来自MLP学术文献.我自己的经验等,我已经聚集并经常依赖于几个经验法则(RoT),我也发现它是可靠的指南(即,指导是准确的,即使它不是,它,它通常明确下一步该做什么):
RoT基于改善融合:
当您开始建模时,错误地位于隐藏层中更多节点的一侧.
为什么?首先,隐藏层中的一些额外节点不可能造成任何伤害 - 您的MLP仍然会收敛.另一方面,隐藏层中的节点太少会阻止收敛.可以这样考虑,额外的节点提供了一些过剩的容量 - 在迭代(训练或模型构建)期间向网络存储/释放信号的额外权重.其次,如果您从隐藏层中的其他节点开始,那么以后很容易修剪它们(在迭代过程中).这很常见,并且有一些诊断技术可以帮助您(例如,Hinton Diagram,它只是重量矩阵的视觉描绘,重量值的'热图').
RoT基于输入图层的大小和输出图层的大小:
根据经验,这个[隐藏]图层的大小介于输入图层大小...和输出图层大小之间....
要计算隐藏节点的数量,我们使用以下一般规则:(输入数量+输出)x 2/3
RoT基于主要组成部分:
通常,我们指定与捕获输入数据集的70-90%方差所需的维度[主要组件]一样多的隐藏节点.
然而,NN常见问题解答作者将这些规则称为"无意义"(字面意思),因为它们:忽略训练实例的数量,目标中的噪声(响应变量的值)以及特征空间的复杂性.
在他看来(在我看来他总是知道他在说什么),根据你的MLP是否包含某种形式的正规化或早期停止来选择隐藏层中的神经元数量.
优化隐藏层中神经元数量的唯一有效技术:
在你的模型建设过程中,痴迷地测试; 测试将揭示"不正确"网络架构的签名.例如,如果您开始使用具有由少量节点组成的隐藏层的MLP(根据测试结果,您将根据需要逐渐增加),您的训练和泛化误差将由偏差和欠拟合引起.
然后一次增加一个隐藏层中的节点数,直到泛化误差开始增加,这次是由于过度拟合和高方差.
在实践中,我这样做:
输入层:我的数据vactor的大小(我的模型中的特征数)+偏置节点的1个,当然不包括响应变量
输出层:由我的模型确定的soley:回归(一个节点)与分类(相当于类数的节点数,假设softmax)
隐藏层:要启动,一个隐藏层的节点数等于输入层的大小."理想"大小更可能更小(即输入层中的数字与输出层中的数字之间的一些节点)而不是更大 - 再次,这只是一个经验观察,并且大量这种观察是我自己的经历.如果项目证明了所需的额外时间,那么我从一个由少量节点组成的隐藏层开始,然后(如上所述)我将节点添加到隐藏层,一次一个,同时计算泛化错误,训练错误,偏差和方差.当泛化错误已经下降并且在它再次开始增加之前,那个点上的节点数是我的选择.见下图.

| 归档时间: |
|
| 查看次数: |
45830 次 |
| 最近记录: |