
初学人工神经网络(ANN)的人通常会有一系列问题,例如应使用多少个隐藏层?每个隐藏层需要多少个隐藏神经元?为什么要使用隐藏层/神经元?增加隐藏层/神经元的数量是否总能带来更好的效果?这些问题我们是可以回答的。需要说明的是,如果待解决的问题本身很复杂,那么回答起来也会相当复杂。读完本文,您至少能理解这些问题背后的思路,并能在简单示例上自行尝试。
简介
ANN 的灵感来自生物神经网络。为便于理解,在计算机科学中,它被表示为一组层。这些层分为三类:输入层、隐藏层和输出层。
确定输入层和输出层的数量及其神经元数量是最容易的。每个网络都有一个输入层和一个输出层。输入层中的神经元数量等于所处理数据中的输入变量数。输出层中的神经元数量等于与每个输入对应的输出数量。难点在于如何确定隐藏层的数量以及每个隐藏层中的神经元数量。
以下是在分类问题中确定隐藏层数量以及每个隐藏层中神经元数量的一些指导原则:
- 根据数据绘制用于分隔类别的预期决策边界。
- 将该决策边界表示为若干条直线的组合。注意,这些直线的组合应当能够构成该决策边界。
- 所选直线的条数代表第一隐藏层中隐藏神经元的数量。
- 若要将上一层创建的直线连接起来,需要新增一个隐藏层。注意,每当您需要在上一隐藏层的直线之间创建连接时,就应添加一个新的隐藏层。
- 每个新隐藏层中的隐藏神经元数量等于需要建立的连接数量。
为使上述原则更直观,我们用几个示例来说明。
示例一
先看一个包含两个类别的简单分类问题,如下图所示。每个样本有两个输入和一个表示类别标签的输出。这与 XOR 问题非常相似。
首先需要回答的是是否需要隐藏层。判断是否需要隐藏层的一条规则如下:
在人工神经网络中,当且仅当数据需要进行非线性分隔时,才需要使用隐藏层。
从下图可以看出,这两个类别需要非线性分隔,单条直线无法完成。因此,我们必须使用隐藏层以获得理想的决策边界。在这种情况下,也可以不使用隐藏层,但分类准确率会受影响,所以更好的做法是使用隐藏层。
既然确定需要隐藏层,就需要回答两个关键问题:
-
需要多少个隐藏层?
-
每个隐藏层需要多少个隐藏神经元?
按照前述流程,第一步是绘制将两个类别分开的决策边界。如下图所示,能正确分割数据的决策边界不止一种。我们接下来讨论将采用图中右侧(b)的那一条。
根据指导原则,下一步是用若干条直线来表示该决策边界。
之所以用若干条直线来表示决策边界,是因为任何 ANN 都是以单层感知机为基本构件堆叠而成的。单层感知机是线性分类器,它根据下式生成一条用于分隔类别的直线:
y=w1x1+w2x2+ ⋯ +wixi+b
其中 xi 为第 i 个输入,wi 为其权重,b 为偏置,y 为输出。由于每增加一个隐藏神经元都会增加权重数量,故建议使用尽可能少的隐藏神经元完成任务。过多的隐藏神经元只会增加模型复杂度。
回到我们的例子,把 ANN 看作由多个感知机构成,就等同于说该网络由多条直线构成。
在本例中,将决策边界替换为一组直线。这些直线从边界曲线改变方向的点起始。在该点处,放置两条直线,分别朝不同方向。
由于如下一图中灰色圆圈所示,边界曲线只有一个改变方向的点,因此只需要两条直线。换言之,有两个单层感知机网络,每个感知机产生一条直线。
既然只需两条直线来表示决策边界,那么第一隐藏层就应包含两个隐藏神经元。
到目前为止,我们有一个包含两个隐藏神经元的单隐藏层。每个隐藏神经元都可视为一个线性分类器,在图中以一条直线表示。这样会产生两个输出,分别来自两个分类器(即隐藏神经元)。但我们的目标是构建一个单一分类器,其输出是一个表示类别标签的值,而不是两个分类器。因此,需要将两个隐藏神经元的输出合并为一个输出。换句话说,需要用另一个神经元把两条直线连接起来。如下图所示。
幸运的是,无需为此再添加一个仅含单个神经元的隐藏层。输出层的神经元即可完成该工作。它会把前面生成的两条直线合并,使网络只产生一个输出。
在确定了隐藏层及其神经元数量后,网络结构如下一图所示,至此设计完成。
示例二
下图给出了另一个分类示例。它与上一个示例类似:有两个类别,每个样本有两个输入和一个输出。不同之处在于决策边界。本例的边界比前一个更复杂。
按照指导原则,第一步是绘制决策边界。我们讨论所用的决策边界见下图最左侧(a)。
下一步是将该决策边界拆分为若干条直线,每条直线将在 ANN 中由一个感知机建模。在画线之前,需先标出边界改变方向的点,如下图最右侧(b)所示。
问题是需要多少条直线?顶部和底部的两个点各自需要两条直线,总计 4 条。中间的那个点所需的两条直线可由其他点共享。下图展示了需要创建的直线。
由于第一隐藏层的隐藏神经元数量等于直线的条数,因此第一隐藏层应包含 4 个神经元。换言之,有 4 个由单层感知机构成的分类器。此时网络会产生 4 个输出,分别来自这 4 个分类器。接下来需要把这些分类器连接起来,使网络只产生单一输出。也就是说,需要通过其他隐藏层把这些直线连接成一条曲线。
网络的布局由模型设计者决定。一种可行的结构是再构建一个含 2 个隐藏神经元的第二隐藏层。第一个隐藏神经元连接前两条直线,最后一个隐藏神经元连接最后两条直线。第二隐藏层的结果如下图所示。
到这一步,有两条分离的曲线,因此网络有两个输出。接下来需将这两条曲线连接起来,使整个网络只有一个输出。在这种情况下,无需再添加新的隐藏层,输出层神经元即可完成最终连接。最终结果如下图所示。
网络设计完成后,其完整结构如下图所示。
了解更多
SlideShare
YouTube
初学人工神经网络(ANN)的人通常会有一系列问题,例如应使用多少个隐藏层?每个隐藏层需要多少个隐藏神经元?为什么要使用隐藏层/神经元?增加隐藏层/神经元的数量是否总能带来更好的效果?这些问题我们是可以回答的。需要说明的是,如果待解决的问题本身很复杂,那么回答起来也会相当复杂。读完本文,您至少能理解这些问题背后的思路,并能在简单示例上自行尝试。
简介
ANN 的灵感来自生物神经网络。为便于理解,在计算机科学中,它被表示为一组层。这些层分为三类:输入层、隐藏层和输出层。
确定输入层和输出层的数量及其神经元数量是最容易的。每个网络都有一个输入层和一个输出层。输入层中的神经元数量等于所处理数据中的输入变量数。输出层中的神经元数量等于与每个输入对应的输出数量。难点在于如何确定隐藏层的数量以及每个隐藏层中的神经元数量。
以下是在分类问题中确定隐藏层数量以及每个隐藏层中神经元数量的一些指导原则:
为使上述原则更直观,我们用几个示例来说明。
示例一
先看一个包含两个类别的简单分类问题,如下图所示。每个样本有两个输入和一个表示类别标签的输出。这与 XOR 问题非常相似。
首先需要回答的是是否需要隐藏层。判断是否需要隐藏层的一条规则如下:
从下图可以看出,这两个类别需要非线性分隔,单条直线无法完成。因此,我们必须使用隐藏层以获得理想的决策边界。在这种情况下,也可以不使用隐藏层,但分类准确率会受影响,所以更好的做法是使用隐藏层。
既然确定需要隐藏层,就需要回答两个关键问题:
需要多少个隐藏层?
每个隐藏层需要多少个隐藏神经元?
按照前述流程,第一步是绘制将两个类别分开的决策边界。如下图所示,能正确分割数据的决策边界不止一种。我们接下来讨论将采用图中右侧(b)的那一条。
根据指导原则,下一步是用若干条直线来表示该决策边界。
之所以用若干条直线来表示决策边界,是因为任何 ANN 都是以单层感知机为基本构件堆叠而成的。单层感知机是线性分类器,它根据下式生成一条用于分隔类别的直线:
y=w1x1+w2x2+ ⋯ +wixi+b其中
xi为第i个输入,wi为其权重,b为偏置,y为输出。由于每增加一个隐藏神经元都会增加权重数量,故建议使用尽可能少的隐藏神经元完成任务。过多的隐藏神经元只会增加模型复杂度。回到我们的例子,把 ANN 看作由多个感知机构成,就等同于说该网络由多条直线构成。
在本例中,将决策边界替换为一组直线。这些直线从边界曲线改变方向的点起始。在该点处,放置两条直线,分别朝不同方向。
由于如下一图中灰色圆圈所示,边界曲线只有一个改变方向的点,因此只需要两条直线。换言之,有两个单层感知机网络,每个感知机产生一条直线。
既然只需两条直线来表示决策边界,那么第一隐藏层就应包含两个隐藏神经元。
到目前为止,我们有一个包含两个隐藏神经元的单隐藏层。每个隐藏神经元都可视为一个线性分类器,在图中以一条直线表示。这样会产生两个输出,分别来自两个分类器(即隐藏神经元)。但我们的目标是构建一个单一分类器,其输出是一个表示类别标签的值,而不是两个分类器。因此,需要将两个隐藏神经元的输出合并为一个输出。换句话说,需要用另一个神经元把两条直线连接起来。如下图所示。
幸运的是,无需为此再添加一个仅含单个神经元的隐藏层。输出层的神经元即可完成该工作。它会把前面生成的两条直线合并,使网络只产生一个输出。
在确定了隐藏层及其神经元数量后,网络结构如下一图所示,至此设计完成。
示例二
下图给出了另一个分类示例。它与上一个示例类似:有两个类别,每个样本有两个输入和一个输出。不同之处在于决策边界。本例的边界比前一个更复杂。
按照指导原则,第一步是绘制决策边界。我们讨论所用的决策边界见下图最左侧(a)。
下一步是将该决策边界拆分为若干条直线,每条直线将在 ANN 中由一个感知机建模。在画线之前,需先标出边界改变方向的点,如下图最右侧(b)所示。
问题是需要多少条直线?顶部和底部的两个点各自需要两条直线,总计 4 条。中间的那个点所需的两条直线可由其他点共享。下图展示了需要创建的直线。
由于第一隐藏层的隐藏神经元数量等于直线的条数,因此第一隐藏层应包含 4 个神经元。换言之,有 4 个由单层感知机构成的分类器。此时网络会产生 4 个输出,分别来自这 4 个分类器。接下来需要把这些分类器连接起来,使网络只产生单一输出。也就是说,需要通过其他隐藏层把这些直线连接成一条曲线。
网络的布局由模型设计者决定。一种可行的结构是再构建一个含 2 个隐藏神经元的第二隐藏层。第一个隐藏神经元连接前两条直线,最后一个隐藏神经元连接最后两条直线。第二隐藏层的结果如下图所示。
到这一步,有两条分离的曲线,因此网络有两个输出。接下来需将这两条曲线连接起来,使整个网络只有一个输出。在这种情况下,无需再添加新的隐藏层,输出层神经元即可完成最终连接。最终结果如下图所示。
网络设计完成后,其完整结构如下图所示。
了解更多
深度学习——数据科学家的入门教程
Python 深度学习入门课程
SlideShare
YouTube