确定神经网络的层数和隐藏层的神经元数量

转载于知乎:如何确定神经网络的层数和隐藏层神经元数量

确定神经网络的层数和隐藏层的神经元数量

反向传播神经网络主要由输入层、隐藏层和输出层组成,输入和输出层的节点数是固定的,对于回归还是分类任务,选择合适的层数以及隐藏层节点数,很大程度上会影响神经网咯的性能。
神经网络是什么?

确定神经网络的层数和隐藏层的神经元数量
输入层与输出层的节点数量很容易得到,输入层的神经元数量等于待处理数据中输入变量的数量,输出层的神经元数量等于与每个输入关联的数量,真正的困难之处在于确定合适的隐藏层和神经元的数量。

; 隐藏层的层数

在神经网络中,当且仅当数据非线性分离时需要隐藏层。对于一般简单的数据集,一两层隐藏层就够了,对于涉及到时间序列和计算机视觉的复杂数据集,需要额外增加层数。单层神经网络只能用于线性分离函数(分类问题中两个类可以用一条直线整齐地分开)。多个隐藏层可以用于拟合非线性函数。隐藏层的层数与神经网络的效果,可以概括为:

确定神经网络的层数和隐藏层的神经元数量
没有隐藏层:仅能够表示线性可分函数或决策。
隐藏层数=1:可以拟合任何”包含从一个有限空间到另一个有限空间的连续映射”的函数。
隐藏层数=2:搭配适当的激活函数可以表示任意精度的任意决策边界,并且可以拟合任何精度的任何平滑映射。
隐藏层数>2:多出来的隐藏层可以学习复杂的描述(某种自动特征工程)
层数越深,理论上拟合函数的能力增强,效果按理说会更好,但是实际上更深的层数可能会带来过拟合的问题,同时也会增加训练难度,使模型难以收敛。在使用BP神经网络时,最好可以参照已有的表现优异的模型,或者根据上面的表格,从一两层开始尝试,尽量不要使用太多的层数。在CV、NLP等特殊领域,可以使用CNN、RNN、attention等特殊模型,不能不考虑实际而直接无脑堆砌多层神经网络。 尝试迁移和微调已有的预训练模型,能取得事半功倍的效果。

隐藏层中神经元数量

隐藏层中使用太少的神经元将导致欠拟合(underfitting)。相反,使用过多的神经元同样会导致一些问题。首先,隐藏层中的神经元过多可能会导致过拟合(overfitting)。当神经网络具有过多的节点(过多的信息处理能力)时,训练集中包含的有限信息量不足以训练隐藏层中的所有神经元,因此就会导致过拟合。即使训练数据包含的信息量足够,隐藏层中过多的神经元会增加训练时间,从而难以达到预期的效果。显然,选择一个合适的隐藏层神经元数量是至关重要的。
通常,对所有隐藏层使用相同数量的神经元就足够了。对于某些数据集,拥有较大的第一层并在其后跟随较小的层将导致更好的性能,因为第一层可以学习很多低阶的特征,这些较低层的特征可以馈入后续层中,提取出较高阶特征。
需要注意的是,与在每一层中添加更多的神经元相比,添加层层数将获得更大的性能提升。因此,不要在一个隐藏层中加入过多的神经元。
如何确定神经元数量,有大神给出了经验以供参考:

确定神经网络的层数和隐藏层的神经元数量
还有一种方法: 隐藏神经元的数量应在输入层的大小和输出层的大小之间。隐藏神经元的数量应为输入层大小的2/3加上输出层大小的2/3。隐藏神经元的数量应小于输入层大小的两倍。
隐藏层神经元最佳数量需要通过自己不断试验获得,建议从一个较小的数值比如1到5和1到100个神经元开始,如果欠拟合后会慢慢添加更多的层和神经元,如果过拟合就减小层数和神经元,实际过程中还可以考虑引入 Batch Normalization, Dropout, early-stopping、添加正则化项等降低过拟合的方法。

Original: https://blog.csdn.net/weixin_46569877/article/details/121405548
Author: 精分天秤座的mystery
Title: 确定神经网络的层数和隐藏层的神经元数量

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/618454/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球