liqing 2018-08-07
摘要: 本文讲述了人工神经网络中使用了多少隐藏层,每个隐藏层中包含多少神经元,使用隐藏层和神经元的目的,以及增加隐藏的层数和神经元的数量总是会带来什么结果。
人工神经网络(ANNs)的初学者很可能都会面临一些问题。其中一些问题包括使用隐藏层的数量是多少?每个隐藏层中包含了多少个神经元?使用隐藏的层和神经元的目的是什么?增加隐藏的层数和神经元的数量总是会带来更好的结果吗?
非常高兴地告诉大家,这些问题都是可以回答的。
人工神经网络的灵感来自于生物学的神经网络。为了简单起见,在计算机科学中,它被表示为一系列的网络层。这些层分为三类:分别是输入层、隐藏层和输出层。
了解输入层和输出层的数量和它们的神经元的数量是比较容易的。每个人工神经网络都有一个单独的输入层和输出层。输入层中的神经元数量等于正在处理的数据中的输入变量的数量。在输出层中的神经元的数量等于与每个输入相关联的输出的数量。但是,真正的挑战是如何知道隐藏层和它们所包含的神经元的数量。
这里有一些可以依照的准则,用于知道分类问题中隐藏层的数量和每个隐藏层中所包含的神经元的数量:
· 基于数据,画出一个期望的决策边界用来分离多个类;
· 将决策边界表示为一组直线。注意,这样的直线组合必须服从于决策边界;
· 所选直线的数量等于在第一个隐藏层中的隐藏神经元的数量;
· 为了连接由前一层所创建的直线,添加了一个新的隐藏层。需要注意的是,当每次需要在前一个隐藏层中创建直线之间的连接时,都要添加一个新的隐藏层;
· 每个新的隐藏层中隐藏神经元的数量等于要建立的连接的数量;
为了把事情弄的更清楚,让我们用之前的方法和原则来举几个例子。
示例 1
让我们从下图中简单的分类问题开始,每个样本都有两个输入,和一个用于表示类标签的输出,这与XOR问题十分相似。
图1
第一个要回答的问题是隐藏层是否是必需的。为了解答这个问题,需要遵循的规则如下:
在人工神经网络中,仅仅当数据必须被非线性分离的时候,隐藏层才是必需的。
请看图2,看起来类必须是非线性分离的,一条线是完不成的。因此,我们必须使用隐藏层,以获得最佳的决策边界。在这种情形下,我们可能仍然不使用隐藏层,但这将影响分类的精确度。所以,最好还是使用隐藏层。
理解我们需要隐藏层的原因,首先需要回答以下两个重要的问题:
1、所需要隐藏层的数量是多少?
2、每个隐藏层中所包含的隐藏神经元的数量是多少?
接着前面的过程,第一步是画出分割两个类的决策边界。至少有一个可能的决策边界会正确地分离数据,如图所示:
图2
使用一组直线来表示决策边界,这种想法来自于使用单层感知器作为构造块来构造任何人工神经网络的方式。单层的感知器是一个线性分类器,它根据以下等式所创建的直线方程来分离多个类:
y = w_1*x_1 + w_2*x_2+⋯+ w_i*x_i + b
其中x_i表示输入,w_i表示它的权重,b表示偏差,y表示输出。因为每个添加的隐藏神经元将增加权重的数量,所以建议使用最少的隐藏神经元来完成任务,另外,使用比实际需要更多的隐藏神经元也会增加更多的复杂性。
回到我们的例子,人工神经网络是用多个感知器网络构建的,与使用多条直线构建的网络是一样的。
在这个例子中,决策边界被一组直线所代替。这些直线从边界曲线改变方向的点开始,在这些点上,各有两条直线经过,每条直线在不同的方向上。
因为只有在一个点上,边界曲线改变了方向,下图所示的灰色圆圈,那么只需要两条直线,换句话说,有两个单层感知器网络,每个感知器仅仅产生一条直线。
图3
只需要两条直线来表示决策边界,这告诉我们第一个隐藏层将有两个隐藏神经元。
到目前为止,我们有一个带有两个隐藏神经元的隐藏层。每个隐藏神经元可看作一个线性分类器,如上图所示,表示为一条直线。一个隐藏层将会有两个输出,每个输出都来自于一个分类器(即隐藏的神经元)。但是,我们要建立一个单一的分类器,并且带有一个表示类标签的输出,而不是两个分类器。结果是,两个隐藏神经元的输出被合并成了一个输出。换句话说,这两条直线将被另一个神经元连接起来,结果如下图所示。
图4
幸运的是,我们不需要用单一神经元来添加另一个隐藏层来完成这项工作,而是输出层神经元做这项工作。这样的神经元将合并先前生成的两条直线,使得只有一条直线来自人工神经网络的输出。
在知道隐藏层以及它们的神经元的数量之后,网络体系结构现在就已经完整了,如下图所示:
图5
示例 2
另一个分类的示例如图6所示,它类似于前一个示例,其中有两个类,并且每个样本包括两个输入和一个输出。这两个示例的区别就在于决策边界,示例2的边界比之前的示例要更复杂一些。
图6
根据指导原则,第一步是画出决策边界,在我们讨论中所使用的决策边界如图7(a)所示。
下一步是将决策边界分割成一组直线,其中每一条直线将在人工神经网络中被模拟成感知器。在画出这些直线之前,在决策边界改变方向所在的那些点应该被标记为图7(b)所示的那样。
图7
那么究竟我们需要多少直线呢?每个在顶部和底部的点都有两条直线经过,这样一共就有四条。中间的点会有两条从其它的点共享的两条直线,要创建的直线如图8所示:
图8
因为第一个隐藏层将具有与直线数量相等的隐藏层神经元,那么它有四个神经元。换句话说,它包含四个分类器,每一个分类器都是由单层感知器创建的。目前,人工神经网络将会产生四个输出,每个输出都会来自于一个分类器。下一步是将这些分类器连接在一起,这是为了让网络仅产生单一的输出。换句话说,这些直线会被其它隐藏层连接在一起,以形成一条单独的曲线。
由模型设计者来选择网络的布局。一个可用的网络结构是构造一个具有两个隐藏神经元的第二隐藏层。第一个隐藏神经元将连接前两条直线,最后一个隐藏神经元会连接最后两条直线,这就是第二隐藏层,结果如图9所示。
图9
对此,将有两条分离的曲线,所以会有两个来自网络的输出。下一步是将这样的曲线链接在一起,目的是为了从整个人工神经网络中仅得到一个输出。在这种情况下,输出层神经元可以被用来做最后的连接,而不是添加一个新的隐藏层。最后的结果如图10所示。
图10
在网络结构设计完成之后,完整的网络体系结构如图11所示。
图11
阿里云云栖社区组织翻译。
文章原标题《Beginners Ask “How Many Hidden Layers/Neurons to Use in Artificial Neural Networks?”》
作者:Ahmed Gad, KDnuggets Contributor
译者:奥特曼,审校:袁虎。