确定神经网络层数以及神经元个数

神经网络的性能受其结构影响,包括隐藏层数和隐藏层神经元数量。简单的数据集可能只需一两层隐藏层,复杂任务如NLP和CV则可能需要更多。隐藏层过多可能导致过拟合,而太少可能导致欠拟合。隐藏层神经元数量应在输入层和输出层之间,过多会增加过拟合风险。通常建议从少量神经元和层数开始,根据欠拟合或过拟合情况调整。此外,可以参考已有模型或利用正则化技术防止过拟合。
摘要由CSDN通过智能技术生成

神经网络主要由输入层,隐藏层以及输出层构成,合理的选择神经网络的层数以及隐藏层神经元的个数,会在很大程度上影响模型的性能(不论是进行分类还是回归任务)。

 输入层的节点数量以及输出层的节点数量是最容易获得的。

输入层的神经元数量等于数据的特征数量(feature个数)。

若为回归,则输出层的神经元数量等于1;若为分类,则输出层的神经元数量为分类的类别个数(如区分猫狗,则为2;区分手写数字0-9,则为10)。

 

1.确定隐藏层的层数

对于一些很简单的数据集,一层甚至两层隐藏元都已经够了,隐藏层的层数不一定设置的越好,过多的隐藏层可能会导致数据过拟合。对于自然语言处理以及CV领域,则建议增加网络层数。

隐藏层的层数与神经网络的结果如下表所示:

如何确定隐藏层的层数
隐藏层层数用途
仅能够表示线性可分函数或决策
1可以拟合任何“从一个有限空间到另一个有限空间的连续映射”的函数
2搭配适当的激活函数(比如Relu)可以表示任意精度的任意决策边界,并且可以拟合任何精度的任何平滑映射
>2多出来的隐藏层可以学习复杂的描述(某种自动特征工程)

层数越深,理论上来说模型拟合函数的能力增强,效果会更好,但是实际上更深的层数可能会带来过拟合的问题,同时也会增加训练难度,使模型难以收敛。

因此这里给出的建议是,在使用神经网络时,最好可以参照已有的性能良好的模型。

如果自己手写的话,若数据集很简单,则最好从一两层开始尝试,尽量不要使用太多的层数。在CV、NLP等特殊领域,可以使用CNN、RNN、attention等特殊模型,不能不考虑实际而直接无脑堆砌多层神经网络。

尝试迁移和微调已有的预训练模型,能取得事半功倍的效果

2.确定隐藏层中的神经元数量

在隐藏层中使用太少的神经元将导致欠拟合(underfitting)

相反,使用过多的神经元同样会导致一些问题。首先,隐藏层中的神经元过多可能会导致过拟合(overfitting)

当神经网络具有过多的节点时,训练集中包含的有限信息量不足以训练隐藏层中的所有神经元,因此就会导致过拟合。即使训练数据包含的信息量足够,隐藏层中过多的神经元会增加训练时间,从而难以达到预期的效果。显然,选择一个合适的隐藏层神经元数量是至关重要的。

通常对于某些数据集,拥有较大的第一层并在其后跟随较小的层将导致更好的性能,因为第一层可以学习很多低阶的特征,这些较低层的特征可以馈入后续层中,提取出较高阶特征。

需要注意的是,与在每一层中添加更多的神经元相比,添加层层数将获得更大的性能提升。因此,不要在一个隐藏层中加入过多的神经元

按照经验来说,神经元数量可以由以下规则来确定:

还有另一种方法可供参考,神经元数量通常可以由一下几个原则大致确定:

  • 隐藏神经元的数量应在输入层的大小和输出层的大小之间。
  • 隐藏神经元的数量应为输入层大小的2/3加上输出层大小的2/3。
  • 隐藏神经元的数量应小于输入层大小的两倍。

总而言之,隐藏层神经元是最佳数量需要自己通过不断试验来进行微调,建议从一个较小数值比如1到3层和1到100个神经元开始。

如果欠拟合然后慢慢添加更多的层和神经元,如果过拟合就减小层数和神经元。此外,在实际过程中还可以考虑引入Batch Normalization, Dropout, 正则化等降低过拟合的方法。

同时神经元的数量也可以参考以下公式来确定:

其中:

Nh是输入层神经元个数;

No是输出层神经元个数;

Ns是训练集的样本数;

α是任意值变量,通常取值范围为2-10。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值