如何配置神经网络中层和节点的数量

译文
人工智能 深度学习
对于刚接触机器学习领域的初学者来说,这可能并非易事,关键是寻找一种分析方法来计算最佳的层数和节点数,或者遵循简单的经验法则。在这篇文章中,你将了解层和节点的作用,以及如何着手为你的预测建模问题配置多层感知器神经网络。

【51CTO.com快译】人工神经网络有两个重要的超参数控制着网络的架构或拓扑结构:层数和每个隐藏层中的节点数。

你在配置网络时,必须指定这些参数的值。想为你特定的预测建模问题配置这些超参数,最可靠的方法就是用强大的测试工具进行系统试验。

对于刚接触机器学习领域的初学者来说,这可能并非易事,关键是寻找一种分析方法来计算最佳的层数和节点数,或者遵循简单的经验法则。

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

阅读本文后,你会知道:

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

让我们开始吧!

[[239712]] 

图1:如何配置神经网络中的层数和节点数

概述

本文分为四个部分,它们是:

  1. 多层感知器
  2. 如何计数层?
  3. 为什么有多层?
  4. 使用多少层和节点?

多层感知器

节点又叫神经元或感知器,它是一个计算单元,拥有一个或多个权重输入连接、以某种方式结合输入的传递函数(transfer function)以及连接输出。

然后将节点组织成层以构成网络。

单层人工神经网络又叫单层,顾名思义,它只有单层节点。单层中的每个节点直接连接到输入变量,用于得到输出变量。

单层网络只有一层活动单元。输入通过单层权重直接连接到输出。输出不相互影响,因此拥有N个输出的网络可被视为N个独立的单输出网络。

--1999年的《神经锻造:前馈人工神经网络中的监督学习》,第15页

单层网络可以扩展成多层网络(又叫多层感知器)。多层感知器(MLP)是有不止一层的人工神经网络。

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

标准多层感知器(MLP)由单层感知器相互连接在一起。有一层输入节点、一层输出节点和一个或多个中间层。内部层有时叫作“隐藏层”,因为它们无法从系统输入和输出直接观察到。

--1999年的《神经锻造:前馈人工神经网络中的监督学习》,第31页

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

  • 输入层:输入变量,有时叫作可见层。
  • 隐藏层:输入层和输出层之间的节点层。可能有一个或多个隐藏层。
  • 输出层:生成输出变量的节点层。

最后,有几个用来描述神经网络形状和能力的术语:

  • 大小:模型中的节点数。
  • 宽度:特定层中的节点数。
  • 深度:神经网络中的层数。
  • 能力:可通过网络配置学习的函数的类型或结构。有时叫作“表示能力”。
  • 架构:网络中层和节点的具体排列。

如何计数层?

过去关于如何计数层数存在一些分歧。

分歧的焦点在于输入层要不要计数在内。一种观点认为输入层不该计数在内,因为输入不是活动输入,它们只是输入变量。我们将使用这个惯例,这也是《神经锻造》一书中推荐的惯例。

因此,拥有输入层、一个隐藏层和一个输出层的MLP是2层MLP,可以使用简单的标记来概括MLP的结构。

这种方便的标记概括了层数和每层的节点数。每层中的节点数被指定为一个整数,按照从输入层到输出层的顺序,每个层的大小由正斜线字符(“/”)分隔。

比如说,如果某个网络有输入层中的两个变量、有8个节点的一个隐藏层和有1个节点的输出层,可以使用标记:2/8/1来描述。

我建议在描述多层感知器神经网络的层及大小时使用此标记。

为什么有多层?

在我们探讨指定多少层之前,思考为什么我们想要有多层很重要。

单层神经网络只能用于表示线性可分的函数。这意味着很简单的问题,比如说分类问题中的两个类可以用一条线整齐地分开。如果你的问题比较简单,单层网络可能足够了。

我们想要解决的大多数问题都不是线性可分的。

多层感知器可用于表示凸区域(convex region)。这意味着,实际上,它们可以学习针对一些高维度空间中的实例绘制形状,以便可以将它们进行分隔和分类,从而克服线性可分的局限性。

实际上,Lippmann在1987年的论文《神经网络计算入门》中有一个理论发现表明,有两个隐藏层的MLP足以创建任何所需形状的分类区域。这颇有启发性,不过值得一提的是,论文根本没有表明每层中使用多少节点或如何学习权重。

进一步的理论发现和证据已表明,MLP是通用逼近器(universal approximator,https://en.wikipedia.org/wiki/Universal_approximation_theorem)。有一个隐藏层,MLP就可以逼近我们需要的任何函数。

具体而言,通用逼近定理表示,前馈网络若有线性输出层和至少一个隐藏层,而且有任何“压缩”激活函数(比如逻辑sigmoid激活函数),可以逼近任何波莱尔可测函数,前提是给网络足够的隐藏单元。

-2016年的《深度学习》,第198页。

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

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

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

--1999年的《神经锻造:前馈人工神经网络中的监督学习》,第38页

使用多少层和节点?

前面已介绍了MLP,现在不妨处理你的实际问题:应该在多层感知器中使用多少层,每层多少节点?

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

1)试验

一般来说,我被问及MLP使用多少层和节点时,我常常回答:

我不知道,使用系统试验来发现什么是最适合你的特定数据集。

我仍坚持这么回答。

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

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

你可能是第一个尝试使用神经网络解决你那特定问题的人。在你之前没人解决该问题。因此,没人能告诉你到底如何配置网络。

你得使用强大的测试工具和对照试验来找到答案。比如,不妨看看这篇文章:《如何评估深度学习模型的技能?》(https://machinelearningmastery.com/evaluate-skill-deep-learning-models/)

无论你遇到什么样的启发方法,所有答案都归结为需要认真的试验,看看哪种方法最适合你的特定数据集。

2)直觉

网络可以通过直觉来进行配置。比如说,你可能拥有深度网络解决特定的预测建模问题所需要的直觉。

深度模型提供了层次结构,这种层次从输入变量空间到输出变量空间逐渐提高了抽象级别。

如果对问题领域(problem domain)有一定的了解,我们可能需要深度层次模型来充分解决预测问题。在这种情况下,我们可以选择有多层深度的网络配置。

选择一个深度模型意味着我们相信,我们想要学习的函数应包含几个更简单的函数。这可以从表示学习的角度来加以解释,我们认为学习问题包括发现一组变化的影响因素,而这些因素又可以从其他更简单的变化影响因素方面加以描述。

――2016年的《深度学习》,第201页。

这种直觉可能来自领域方面的经验、神经网络建模问题方面的经验或者两者兼之。

根据我的经验,直觉常常通过试验被证明是无效的。

3)深度化

Goodfellow、Bengio和Courville在重要的深度学习教科书中强调,单凭经验,针对感兴趣的问题,深度神经网络似乎表现更好。

具体而言,他们表示在深度可能明显有利的情况下,应该选择使用深度神经网络作为统计论点。

从经验上看,深度越大对众多任务的归纳就越好。[…]这表明使用深度架构确实在模型学习的函数空间上表达了一个有用的先验。

――2016年出版的《深度学习》,第201页。

我们可以使用这个论点来表明:使用深度网络(多层网络)可能是一种配置网络的启发式方法,以应对有挑战性的预测建模问题。

4)借鉴想法

一种简单但可能很耗时的方法是利用文献中报道的研究结果。

查找这类研究论文:描述使用MLP处理多少类似你问题的预测问题。注意那些论文中使用的网络配置,将它们用作测试你问题的配置的一个起点。

模型超参数的可传递性导致模型可以从一个问题适用于另一个问题,这是颇具挑战性的开放性问题,也是模型超参数配置与其说是科学不如说是艺术的原因。

然而,针对相关问题所使用的网络层和节点数是测试想法的好起点。

5)搜索

设计自动搜索以测试不同的网络配置。

你在搜索时可以结合来自文献和直觉的想法。

一些流行的搜索策略包括:

  • 随机:尝试层和每层节点的随机配置。
  • 网格:尝试对层数和每层节点数执行系统搜索。
  • 启发式方法:尝试对配置进行定向搜索,比如遗传算法或贝叶斯优化。
  • 穷尽法:试遍层和节点数的所有组合;这个策略对小型网络和数据集来说可能行得通。

对于庞大模型、庞大数据集以及两者的结合体,这可能具有挑战性。减轻或管理计算负担的一些想法包括如下:

  • 让模型拟合训练数据集的较小子集,以加快搜索。
  • 严格限制搜索空间的大小。
  • 跨多个服务器实例并行化搜索(比如使用亚马逊EC2服务)。

如果时间和资源允许,我建议系统化搜索。

拓展阅读

如果你希望深入了解,本节将提供有关该主题的更多资源。

论文

  • 1987年的《神经网络计算入门》:https://ieeexplore.ieee.org/abstract/document/1165576/
  • 2009年的《有多少隐藏层和节点?》:https://www.tandfonline.com/doi/abs/10.1080/01431160802549278

书籍

  • 1999年的《神经锻造:前馈人工神经网络中的监督学习》:https://amzn.to/2vhyW8j
  • 2016年的《神经网络》:https://amzn.to/2IXzUIY

文章

  • 维基百科上的人工神经网络条目:

https://en.wikipedia.org/wiki/Artificial_neural_network

  • 维基百科上的通用逼近定理条目:

https://en.wikipedia.org/wiki/Universal_approximation_theorem

  • 我该使用多少隐藏层?comp.ai.neural-nets FAQ:

http://www.faqs.org/faqs/ai-faq/neural-nets/part3/section-9.html

结束语

你在本文中了解不同层和节点的作用,以及如何着手配置一个多层感知器神经网络。

具体来说,你知道了:

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

有什么问题吗?欢迎留言交流!

原文标题:How to Configure the Number of Layers and Nodes in a Neural Network,作者:Jason Brownlee 

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】

责任编辑:庞桂玉 来源: 51CTO
相关推荐

2020-08-06 10:11:13

神经网络机器学习算法

2018-02-05 08:58:36

Python神经网络识别图像

2018-07-03 16:10:04

神经网络生物神经网络人工神经网络

2017-08-29 13:50:03

TensorFlow深度学习神经网络

2017-03-27 16:18:30

神经网络TensorFlow人工智能

2017-04-26 08:31:10

神经网络自然语言PyTorch

2023-05-12 14:58:50

Java神经网络深度学习

2019-06-06 09:00:02

卷积神经网络CNNAI

2018-08-30 09:15:42

人工智能神经网络深度学习

2023-06-18 23:00:39

神经网络损失函数随机变量

2017-09-10 07:07:32

神经网络数据集可视化

2021-06-21 10:43:25

Python神经网络深度学习

2017-01-10 17:25:59

深度学习框架神经网络

2017-09-08 13:30:32

深度学习图像识别卷积神经网络

2022-07-28 09:00:00

深度学习网络类型架构

2017-07-31 10:24:15

神经网络音乐

2022-05-16 09:40:00

神经网络工具

2017-03-21 08:52:20

神经网络声誉

2021-01-18 14:38:53

神经网络人工智能神经元

2023-11-14 16:29:14

深度学习
点赞
收藏

51CTO技术栈公众号