初学者想问:人工神经网络中要使用多少隐藏层、多少隐藏单元?

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第9天,点击查看活动详情

对于这个问题我之前查阅了各种文章写了个精简的综合版,可以看这里:神经网络中如何确定隐藏层的层数和大小,本文主要是对当是的一个参考文章进行翻译。


正文

人工神经网络(ANN)的初学者可能会问一些问题。 比如:

  • 要使用多少隐藏层?
  • 每个隐藏层中有多少隐藏的神经元?
  • 使用隐藏层/神经元的目的是什么?
  • 增加隐藏层/神经元的数量是否总能获得更好的结果?

我要告诉你,这些问题确实可以回答。

但是要明确的是,如果要解决的问题很复杂,那么要回答上面几个问题也很复杂。

作者意思是在一些大模型大网络中,因为存在很多因素,你可能没办法解释为什么要用这么多层网络之类的上述几个问题。

但是看完这篇文章,你至少能知道在简单的网络中如何操作。

image.png

介绍

人工神经网路是生物神经网络的启发建立的,为了简单起见,在计算机科学中,神经网络被表示为一些层,这些层分为三类:

  1. 输入层
  2. 隐藏层
  3. 输出层

在一个神经网络中,最简单的就是知道输入和输出层的数量及其神经元的数量。 因为每个网络都有一个输入层和一个输出层。其中输入层中神经元的数量等于正在处理的数据中输入变量的数量;输出层中的神经元数量等于 与 每个输入相关联的输出的数量。 但神经网络设计的难点在于知道隐藏层的数量及其神经元的数量。

输出层中的神经元数量等于 与 每个输入相关联的输出数量。 这个输入相关联的输入,指的是不同的输入映射到不同的输出,谁映射到谁。因为神经网络最终模拟出一个计算的公式,由x映射到y。 再举个例子,比如一个分类问题,有哪个x分为第一类,有哪个x分为第二类,最终有几类输出层就有几个单元。

扫描二维码关注公众号,回复: 14223712 查看本文章

以下是一些指导原则,用于了解分类问题中每个隐藏层的隐藏层和神经元数量:

  1. 根据这些数据,画出一个预期的决策边界将数据分为不同的类别。

  2. 将决策边界表示为一组线条,这些线条组合起来必须要服从决策边界。(换句话说就是这些线条直线组合起来就是你想要的分割效果。)

  3. 上一步中的线条的数量就表示第一个隐藏层中神经元的数量。

  4. 要连接上一层创建的两条线,就需要添加一个新的隐藏层。

    不是一次咔咔咔全连了,每次只能两两一组连在一起,看看你第二步中线条的数量,用那个数一直除2,直到最后结果是1,除了几次就需要几个隐藏层。

  5. 每个新隐藏层中隐藏的神经元数量等于要建立的连接数量。

    不是两两相连吗,你要连几次就几个隐藏单元。

单看这些条条框框很模糊,为了让你更深刻的理解,现在搞几个例子看一下:

例一

让我们从一个简单的二分类问题开始,下图所示。每个示例有两个输入和一个输出,输出它们代表类标签。这个核异或问题非常相似。

一个输出,就是你随便选个点,问你是哪一类。你只有一个回答“第一类”或者“第二类”,不是说你有两类就是两个输出。

image.png 要回答的第一个问题是是否需要隐藏层

为了确定是否需要隐藏层,需要遵循以下规则:

在人工神经网络中,当且仅当数据必须非线性分离时,才需要隐藏层。

看看下图,要把这几个点分两类必须是非线性分离的,换句话说就是一条线不行,一条线分不开。因此,我们必须使用隐藏层来获得最佳决策边界。 当然在这种情况下,你可能不用隐藏层,但是这会影响分类效果,因为一条直线就是没办法把这两类分开。因此,最好使用隐藏层。

为了添加隐藏层,我们需要回答以下两个问题:

所需的隐藏层数是多少? 每个隐藏层中隐藏的神经元数量是多少?

按照前面的步骤,第一步是绘制分割两个类的决策边界。有多个可能的决策边界可以正确分割数据,下图所示。我们将使用左边的图(a)进行进一步讨论。

image.png 遵循这些指导原则,下一步是用一组线表示决策边界。

使用一组线表示决策边界,为什么?有什么依据?

这个想法是这样的:任何人工神经网络都是使用单层感知机作为基础构建的。单层感知器是一种线性分类器,它使用根据以下等式创建的线来分离类:

y = w 1 x 1 + w 2 x 2 + + w i x i + b y=w_1*x_1+w_2*x_2+⋯ + w_i*x_i+b

其中 x i x_i 是输入, w i w_i 是其权重, b b 是偏差, y y 是输出。

每多一个神经元,相应的就会增加一个权重单元,因此我们尽量使用最少的神经单元来构造我们的神经网络。因为你用一堆没必要的神经元只会增加复杂性。

回到我们的例子,人工神经网络是使用多个感知器网络构建的,也可以说网络是使用多条线构建的。

对照上边那句任何人工神经网络都是使用单层感知机作为基础构建的一起理解。 单层感知机是一条直线,好几个单词感知机组成一个多层感知机,不就是多条直线构成多层感知机。

在本例中,决策边界现在被替换为一组线。这些线从决策边界曲线拐弯的那个点开始。在本例中需要两条不同方向的线。

因为只有一个点导致决策边界方向改变,下图中的灰色圆圈圈出来了,所以只需要两条线,换句话说,在这里需要两个单层感知机,每个感知机产生一条线。 image.png

知道只需要两条线来表示决策边界,我们就知道第一个隐藏层需要两个隐藏的神经元了。

到目前为止,我们的网络有一个隐藏层,这个隐藏层包含两个神经单元。每个隐藏的神经元都可以被视为一个线性分类器,如上图所示。 但是现在两个隐藏单元将会产生两个输出,一个隐藏神经元一个输出。但我们要构建一个分类器,仅有一个输出代表类标签,因此,我们需要将两个隐藏神经元的输出将合并为一个输出。换句话说,这两条线将由另一个神经元连接。结果下图所示。

但是在这里我们就不需要再添加一个有一个隐藏神经元的隐藏层了,因为我们有输出层,输出层接过了这个重任。输出层的神经元会合并之前生成的两条线,这样网络就只有一个输出。

image.png

在知道了隐藏层的数量及其神经元后,我们二分类的人工神经网络就创建完毕,如下图。

image.png

例二

再搞一个例子熟悉一下,如下图。

它类似于前面的示例,还是个二分类问题,有两类输入,每个样本一个输出。区别在于决策边界。这个例子的边界比前一个更复杂。 image.png 第一步是绘制决策边界,如下图左侧的(a)所示。

下一步是将决策边界分割成一组线,每条线将被建模为人工神经网络中的感知机。在画线之前,应按下图右侧图(b)所示,找到曲线改变方向的拐点。 image.png

问题是需要多少线?最顶上的拐点要两条线,最下边的拐点也要两条,这就是四条了,他们二者中间的那两条线恰好可以和中间的拐点共享,具体如下图所示。

因为第一个隐藏层的神经元数量和线的数量相同,所以第一个隐藏层将有四个神经元,换句话说,有四个分类器,每个分类器由一个单层感知机创建。 目前,网络将生成四个输出,每个分类器一个输出。下一步是将这些分类器连接在一起,使网络只生成一个输出。换句话说,这些线将通过其他隐藏层连接在一起,以生成一条曲线。 image.png 怎么连接需要设计网络的人自己布局。一种可行的网络结构是用一个包含两个神经元的隐藏层作为第二个隐藏层。第一个神经元连接前两条线,最后一个隐藏神经元将连接最后两条线。第二个隐藏层的结果。第二层的结果如下图: image.png

到目前为止,我们获得两条分开的曲线。此时网络有两个输出。下一步是将这些曲线连接在一起,以便整个网络只有一个输出。这时候可以使用输出层神经元进行最终连接,而不是添加新的隐藏层。最终结果如下图:

image.png

设计之后的神经网络如下图:

image.png


原作信息

image.png

Beginners Ask “How Many Hidden Layers/Neurons to Use in Artificial Neural Networks?”

猜你喜欢

转载自juejin.im/post/7104429409607614478