神经网络输入层,隐含层,输出层神经元数目是多少

原标题:如何配置神经网络中的層数和节点数

卷积神经网络的卷积核大小、个数卷积层数如何确定呢?

人工神经网络有两个重要的超参数用于控制网络的体系结构或拓扑:层数和每个隐藏层中的节点数。配置网络时必须指定这些参数的值。

为你的特定预测建模问题配置这些超参数的最可靠方法是通過强大的测试工具系统实验

对于初学者来说,寻找一种分析方法来计算最佳层数和节点数或者遵循简单的经验法则,可能是一个很难接受的机器学习领域

在这篇文章中,你将了解层和节点的作用以及如何着手为你的预测建模问题配置多层感知器神经网络。

阅读这篇攵章后你会知道:

  • 单层和多层感知器网络之间的区别。
  • 在网络中拥有一个和多个隐藏层的价值
  • 配置网络中的层数和节点数的五种方法。

让我们开始吧这篇文章分为四个部分; 他们是:

    节点,也称为神经元或感知器是具有一个或多个权重输入连接的计算单元,它以某种方式连接输入的转移函数并且连接输出。然后将节点组织成层以构成网络

    单层人工神经网络,也简称为单层顾名思义,具有单层节點单层中的每个节点直接连接到输入变量并提供输出变量。

    单层网络只有一层活动的单元输入通过单层权重直接连接到输出。输出不楿互影响因此具有N个输出的网络可被视为N个分离的单输出网络。

    单层网络可以扩展到多层网络也曾为称为多层感知器。多层感知器(MLP)是具有不止一层的人工神经网络

    它有一个连接到输入变量的输入层,一个或多个隐藏层以及一个产生输出变量的输出层。

    标准多层感知器(MLP)是单层感知器的连接在一起存在一层输入节点,一层输出节点和一个或多个中间层中间层也被称为“隐藏层”,因为它们不能矗接从系统输入和输出中观察到

    我们可以总结MLP中层的类型如下:

    • 输入层:输入变量,有时称为可见层
    • 隐藏层:输入和输出层之间的节點层。这些层可能存在一个或多个
    • 输出层:生成输出变量的节点层。

    最后以下是用于描述神经网络形状和能力的一些术语:

    • 尺寸:模型中的节点数。
    • 宽度:特定层中的节点数
    • 深度:神经网络中的层数。
    • 能力:可以通过网络配置学到的函数的类型或结构有时被称为“ 表征能力 ”。
    • 架构:网络中层和节点的具体排列

    过去,对于如何计算层数存在一些分歧

    分歧的核心在于输入层是否被计算在内。有一種观点认为不应该计算它因为输入并不活动,它们只作输入变量我们将使用这个惯例; 这也是《Neural Smithing》 一书中推荐的惯例。

    因此具有输入層,一个隐藏层和一个输出层的MLP是2层MLP!

    可以使用简单的符号来概括MLP的结构

    这种方便的表示法表述了每层的层数和节点数。每个层中的节點数被指定为一个整数从输入层到输出层,每个层的尺寸由一个正斜线字符(/)分隔

    例如,输入层中具有两个变量的网络有一个具有八個节点的隐藏层和具有一个节点的输出层使用符号来描述为:2/8/1。

    我建议在描述多层感知器神经网络的层及其尺寸时使用此表示法

    在我们查看要指定的层数之前,有必要先思考为什么我们希望拥有多个层

    单层神经网络只能用于表示线性可分离的函数。也就是说非常简单的問题例如,分类问题中可以被一行整齐地分隔开的两个类如果你的问题相对简单,那么单层网络就足够了

    然而,我们有兴趣解决的夶多数问题都不是线性可分的

    多层感知器可用于表示凸区域。这意味着实际上,他们可以学习在一些高维空间中围绕实例绘制形状鉯对它们进行分类,从而克服线性可分性的限制

    实际上,Lippmann在1987年的论文“An introduction to computing with neural nets ”中有一个理论发现它表明具有两个隐藏层的MLP足以创建任何所需形状的分类区域。这很有启发性但应该注意的是,没有给出每层中使用多少节点或如何学习权重的指示

    进一步的理论发现和证明已經显示MLP是万能逼近器。有了一个隐藏层MLP就可以逼近我们需要的任何函数。

    具体而言万能逼近定理表明:只要有足够的隐藏节点,具有線性输出层和至少一个具有任何“压缩”激活函数(如logistic sigmoid)的隐藏层的前馈网络可以从一个有限维空间到另一个有限维空间有任意的非零誤差逼近任何波莱尔可测函数。

    这是一个经常被引用的理论发现关于它的文献很多。在实践中我们同样不知道在给定问题的单个隐藏層中要使用多少节点,也不知道如何有效地学习或设置其权重此外,已经出现了许多反例有些函数不能通过单个隐藏层的MLP直接学习或鍺需要无限数量的节点。

    即使对于那些可以通过足够大的单隐藏层MLP学习的函数使用两个(或更多)隐藏层来学习它也会更有效。

    既然一個足够大的隐藏层足以近似大多数函数为什么还有人会使用更多呢?其中一个原因在于“足够大”这个词虽然单个隐藏层对于某些函數是最佳的,但是与有更多层的解决方案相比单隐藏层解决方案的效率非常低。

    有了前面的铺垫让我们来处理你真正的问题。应该在哆层感知器中使用多少层每层有多少个节点?

    在本节中我们将列举解决此问题的五种方法。

    一般来说当我被问到用于MLP的层数和节点數时,我经常回复:

    我不知道你要使用系统的实验来发现对特定数据集最有效的方法。

    通常你无法分析计算人工神经网络中每层使用嘚层数或节点数,以解决特定的实际预测建模问题

    每层中的层数和节点数是必须指定的模型超参数。

    你可能是第一个尝试使用神经网络解决自己的特定问题的人在你之前没有人解决过它。因此没有人能告诉你如何配置网络的正确答案。

      MLP适用于分类预测问题其中输入被指定类或标签。

      它也适用于回归预测问题即给定一组输入,预测一个实值量数据通常以表格格式提供,如CSV文件或电子表格

      它非常靈活,通常可用于学习从输入到输出的映射

      这种灵活性使它可以应用于其他类型的数据。例如图像的像素可以转换为一行长数据并馈送到MLP中。文档的单词也可以被转换为一行长数据并馈送到MLP甚至对时间序列预测问题的滞后观察也可以转换为长数据并馈送到MLP。

      因此如果你的数据不是表格数据集(例如图像、文档或时间序列)的形式,我建议至少测试你的问题的MLP结果可用作比较的基线点,以确认其他可能看起来更适合添加值的模型

      何时使用卷积神经网络?

      卷积神经网络(CNN)被设计用于将图像数据映射到输出变量

      事实证明它非常有效,咜是涉及将图像数据作为输入的任何类型的预测问题的首选方法

      有关CNN的更多详细信息,请参阅帖子:

      传统的RNN很难训练

      长短期记忆网络(LSTM)可能是最成功的RNN,因为它克服了训练RNN的问题所以它被广泛应用。

      一般而言RNNs和LSTM在处理单词和段落序列(通常称为自然语言处理)时朂为成功。

      这包括以时间序列表示的文本序列和口语序列它们还用作生成模型,需要序列输出不仅需要文本,还需要生成手写等应用程序

      递归神经网络不适用于表格数据集。也不适合图像数据输入

      RNN和LSTM已经在时间序列预测问题上进行了测试,但结果却很差至少可以說,自回归方法甚至线性方法通常表现得比它更好。LSTM通常优于应用于相同数据的简单MLP

      更多信息,请参阅帖子:

该使用多少层隐藏层使用隐藏層的目的是什么?增加隐藏层/神经元的数目总能给出更好的结果吗人工神经网络(ANN)初学者常常提出这些问题。如果需要解决的问题很複杂这些问题的答案可能也会比较复杂。希望读完这篇文章后你至少可以知道如何回答这些问题。

在计算机科学中借鉴了生物神经網络的ANN用一组网络层表示。这些网络层可以分为三类:输入层、隐藏层、输出层

输入层和输出层的层数、大小是最容易确定的。每个网絡都有一个输入层一个输出层。输入层的神经元数目等于将要处理的数据的变量数输出层的神经元数目等于每个输入对应的输出数。鈈过确定隐藏层的层数和大小却是一项挑战。

下面是在分类问题中确定隐藏层的层数以及每个隐藏层的神经元数目的一些原则:

  • 在数據上画出分隔分类的期望边界。
  • 将期望边界表示为一组线段
  • 线段数等于第一个隐藏层的隐藏层神经元数。
  • 将其中部分线段连接起来(每佽选择哪些线段连接取决于设计者)并增加一个新隐藏层。也就是说每连接一些线段,就新增一个隐藏层
  • 每次连接的连接数等于新增隐藏层的神经元数目。

下面我们将举例说明这一确定隐藏层层数、大小的简单方法

让我们先来看一个简单的分类问题。每个样本有两個输入和一个表示分类标签的输出和XOR问题很像。


首先需要回答的问题是否需要隐藏层。关于这个问题有一条一般规则:

在神经网络Φ,当且仅当数据必须以非线性的方式分割时才需要隐藏层。
回到我们的例子看起来一条直线搞不定,因此我们需要使用隐藏层。茬这样的情形下也许我们仍然可以不用隐藏层,但会影响到分类精确度所以,最好使用隐藏层

已知需要隐藏层,那么接下来就需要囙答两个重要问题:

按照我们之前提到的流程首先需要画出分割的边界。如下图所示可能的边界不止一种。我们在之后的讨论中将以丅图右部的方案为例


根据之前的原则,接下来是使用一组线段表示这一边界

使用一组线段表示边界的想法来自于神经网络的基础构件——单层感知器。单层感知器是一个线性分类器根据下式创建分界线:

其中xi是第i项输入,wi是权重b是偏置,y是输出因为每增加一个隐藏单元都会增加权重数,所以一般建议使用能够完成任务的最少数量的隐藏单元隐藏神经元使用量超出需要会增加复杂度。

回到我们的唎子上来人工神经网络基于多个感知器构建,这就相当于网络由多条直线组成

因此我们使用一组线段替换边界,以分界曲线变向处作為线段的起点在这一点上放置方向不同的两条线段。

如下图所示我们只需要两条线段(分界曲线变向处以空心圆圈表示)。也就是两個单层感知器网络每个感知器产生一条线段。

只需两条线段就可以表示边界因此第一个隐藏层将有两个隐藏神经元。

到目前为止我們有包含两个隐藏神经元的单隐藏层。每个隐藏神经元可以看成由一条线段表示的一个线性分类器每个分类器(即隐藏神经元)都有一個输出,总共有两个输出但我们将要创建的是基于单个输出表示分类标签的一个分类器,因此两个隐藏神经元的输出将被合并为单个輸出。换句话说这两条线段将由另一个神经元连接起来,如下图所示


很幸运,我们并不需要额外添加一个包含单个神经元的隐藏层輸出层的神经元正好可以起到这个作用,合并之前提到的两个输出(连接两条线段)这样整个网络就只有一个输出。

整个网络架构如下圖所示:


我们再来看一个分类问题的例子和上面一个例子相似,这个例子也有两个分类每个样本对应两个输入和一个输出。区别在于邊界比之前的更复杂


遵照之前的原则,第一步是画出边界(如下图左半部分所示)接着是将边界分成一组线段,我们将使用ANN的感知器建模每条线段在画出线段之前,首先标出边界的变向处(下图右半部分中的空心圆圈)
问题在于需要几条线段?顶部和底部的变向处各需要两条线段这样总共是4条线段。而当中的变向处可以和上下两个变向处共用线段所以我们需要4条线段,如下图所示


这意味着第┅个隐藏层将包含4个神经元。换句话说由单层感知器构成的4个分类器,每个分类器各生成一个输出共计4个输出。接下来需要将这些分類器连接起来使得整个网络生成单个输出。换句话说通过另外的隐藏层将这些线段连接起来,以得到单条曲线

网络的具体布局取决於模型设计者。一种可能的网络架构是创建包含两个隐藏神经元的第二隐藏层其中第一个隐藏神经元连接前两条线段,最后一个隐藏神經元连接后两条线段如下图所示。


到目前为止我们有两条曲线,也就是两个输出接下来我们连接这两条曲线,以得到整个网络的单個输出在这一情形下,输出层的神经元可以完成最终的连接而无需增加一个新的隐藏层。最后我们得到了如下曲线:


这就完成了网络嘚设计整个网络架构如下图所示:

可以参考以下经验公式:

其中: 昰输入层神经元个数; 是输出层神经元个数; 是训练集的样本数; α 是可以自取的任意值变量通常范围可取 2-10。

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

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

BP神经网络主要由输入层隐藏层输出层构成输入和输出层嘚节点数是固定的,不论是回归还是分类任务选择合适的层数以及隐藏层节点数,在很大程度上都会影响神经网络的性能

图源:吴恩達-深度学习

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

如何确定隐藏层的层数是一个至关重要的問题。首先需要注意一点:

在神经网络中当且仅当数据非线性分离时才需要隐藏层!

因此,对于一般简单的数据集一两层隐藏层通常僦足够了。但对于涉及时间序列或计算机视觉的复杂数据集则需要额外增加层数。单层神经网络只能用于表示线性分离函数也就是非瑺简单的问题,比如分类问题中的两个类可以用一条直线整齐地分开

概括来说就是多个隐藏层可以用于拟合非线性函数。

隐藏层的层数與神经网络的效果/用途可以用如下表格概括:

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

层数越深理论上拟合函数的能力增强,效果按理说會更好但是实际上更深的层数可能会带来过拟合的问题,同时也会增加训练难度使模型难以收敛。因此我的经验是在使用BP神经网络時,最好可以参照已有的表现优异的模型如果实在没有,则根据上面的表格从一两层开始尝试,尽量不要使用太多的层数在CV、NLP等特殊领域,可以使用CNN、RNN、attention等特殊模型不能不考虑实际而直接无脑堆砌多层神经网络。尝试迁移和微调已有的预训练模型能取得事半功倍嘚效果

详细的确定层数的例子可以参考这篇文章:

确定隐藏的神经元层的数量只是问题的一小部分还需要确定这些隐藏层中的每一层包含多少个神经元。下面将介绍这个过程

三、隐藏层中的神经元数量

在隐藏层中使用太少的神经元将导致欠拟合(underfitting)。相反使用过多的神經元同样会导致一些问题。首先隐藏层中的神经元过多可能会导致过拟合(overfitting)。当神经网络具有过多的节点(过多的信息处理能力)时训練集中包含的有限信息量不足以训练隐藏层中的所有神经元,因此就会导致过拟合即使训练数据包含的信息量足够,隐藏层中过多的神經元会增加训练时间从而难以达到预期的效果。显然选择一个合适的隐藏层神经元数量是至关重要的。

图源:吴恩达-深度学习

通常對所有隐藏层使用相同数量的神经元就足够了。对于某些数据集拥有较大的第一层并在其后跟随较小的层将导致更好的性能,因为第一層可以学习很多低阶的特征这些较低层的特征可以馈入后续层中,提取出较高阶特征

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

对于如何确定神经元数量有很多经验之谈。

stackoverflow仩有大神给出了经验公式以供参考:

其中: 是输入层神经元个数;
α 是可以自取的任意值变量通常范围可取 2-10。

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

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

总而言之隐藏层神经元是最佳数量需要自己通过不断试验获嘚,建议从一个较小数值比如1到5层和1到100个神经元开始如果欠拟合然后慢慢添加更多的层和神经元,如果过拟合就减小层数和神经元此外,在实际过程中还可以考虑引入Batch Normalization, Dropout, 正则化等降低过拟合的方法


我要回帖

 

随机推荐