如何配置神经网络中的层数和节点数
人工神经网络有两个主要的超参数来控制网络结构或拓扑:层数和每个隐藏层中的节点数。
你必须在配置网络时指定这些参数的值。
要为你的特定预测建模问题配置这些超参数,最可靠的方法是使用强大的测试工具进行系统实验。
对于机器学习领域的初学者来说,这可能是一颗难以下咽的药丸,他们正在寻找一种分析方法来计算最优的层数和节点数,或者是容易遵循的经验法则。
在这篇文章中,你将发现层和节点的作用,以及如何配置多层感知器神经网络来解决你的预测建模问题。
读完这篇文章,你就会知道:
- 单层和多层感知器网络的区别。
- 网络中有一个或多个隐藏层的价值。
- 配置网络中的层数和节点数的五种方法。
我们开始吧。
概述
这篇文章分为四个部分,它们是:
- 多层感知器。
- 如何计算层数?
- 为什么要有多层呢?
- 要使用多少层和节点?
多层感知器
节点也称为神经元或感知器,是具有一个或多个加权输入连接、以某种方式组合输入的传递函数和输出连接的计算单元。
然后将节点组织成层以组成网络。
单层人工神经网络,也称为单层,顾名思义,只有一层节点。单层中的每个节点直接连接到一个输入变量,并贡献一个输出变量。
单层网络只有一层活动单元。输入通过单层权重直接连接到输出。输出不交互,因此具有N个输出的网络可以被视为N个单独的单输出网络。
单层网络可以扩展为多层网络,称为多层感知器。多层感知器(Multilayer Perceptron,简称MLP)是一种具有多个单层的人工神经网络。
它具有连接到输入变量的输入层、一个或多个隐藏层,以及生成输出变量的输出层。
标准多层感知器(MLP)是单层感知器的级联。存在输入节点层、输出节点层和一个或多个中间层。内部层有时被称为“隐藏层”,因为它们不能直接从系统输入和输出中观察到。
我们可以将MLP中的层类型总结如下:
- 输入层:输入变量,有时称为可见层。
- 隐藏层:输入层和输出层之间的节点层。可能有一个或多个这样的层。
- 输出层:生成输出变量的节点层。
最后,还有一些术语用于描述神经网络的形状和功能;例如:
- 大小:模型中的节点数。
- 宽度:特定层中的节点数。
- 深度:神经网络中的层数。
- 容量:可通过网络配置学习的功能类型或结构。有时被称为“代表性能力”。
- 体系结构:网络中各层和节点的具体排列。
如何计算层数?
传统上,关于如何计算层数存在一些分歧。
分歧集中在输入层是否被计算在内。有一种观点认为它不应该被计算在内,因为输入是不活跃的;它们只是输入变量。我们将使用这个约定;这也是“神经锻造”一书中推荐的约定。
因此,具有输入层、隐藏层和输出层的MLP是2层MLP。
MLP的结构可以用一个简单的符号来概括。
这个方便的表示法汇总了层数和每层中的节点数。每层中的节点数按从输入层到输出层的顺序指定为整数,每层的大小由正斜杠字符(“/”)分隔。
例如,输入层中有两个变量、一个隐藏层中有八个节点以及一个输出层中有一个节点的网络将使用记号2/8/1来描述。
我建议在描述多层感知器神经网络的层及其大小时使用此表示法。
为什么要有多层呢?
在我们查看要指定多少层之前,重要的是要想一想为什么要有多个层。
单层神经网络只能用来表示线性可分函数。这意味着非常简单的问题,比方说,分类问题中的两个类可以用一条线整齐地分开。如果你的问题相对简单,也许单层网络就足够了。
我们感兴趣解决的大多数问题都不是线性可分的。
多层感知器可以用来表示凸面区域。这意味着,实际上,他们可以学习在一些高维空间中围绕示例绘制形状,这些示例可以对它们进行分离和分类,从而克服了线性可分割性的限制。
事实上,Lippmann在1987年的论文“神经网络计算入门”中有一个理论发现,它表明具有两个隐层的MLP足以创建任何所需形状的分类区域。这是有指导意义的,尽管应该注意的是,没有给出在每层中使用多少节点或如何获知权重的指示。
进一步的理论发现和证明表明,MLP是万能逼近器。有了一个隐藏层,MLP就可以近似我们需要的任何函数。
具体地说,普适逼近定理指出,如果一个具有线性输出层和至少一个隐层的前馈网络具有任意的“挤压”激活函数(例如Logistic Sigmoid激活函数),只要该网络具有足够的隐含单元,则该网络可以以任意期望的非零量误差逼近从一个有限维空间到另一个有限维空间的任何Borel可测函数。
这是一个经常被引用的理论发现,关于它的文献也很多。在实践中,对于给定的问题,我们同样不知道在单个隐含层中使用多少个节点,也不知道如何有效地学习或设置它们的权重。此外,已经给出了不能通过单个一个隐藏层MLP直接学习或需要无穷多个节点的函数的许多反例。
即使对于那些可以通过足够大的一个隐藏层MLP学习的功能,用两个(或更多)隐藏层学习也会更有效率。
既然单个足够大的隐藏层就足以近似大多数功能,为什么还会有人使用更多呢?其中一个原因在于“足够大”这个词。虽然单个隐藏层对于某些函数是最佳的,但对于其他函数,与具有更多层的解决方案相比,单隐藏层解决方案的效率非常低。
要使用多少层和节点?
把MLP的前言去掉,让我们开始讨论你真正的问题。
你的多层感知器应该使用多少层,每层有多少个节点?
在本节中,我们将列举解决此问题的五种方法。
1)实验
通常,当我被问及MLP使用多少层和节点时,我通常会回答:
我不知道。使用系统实验来发现哪种方法最适合你的特定数据集。
我仍然坚持这个答案。
通常,你不能分析计算人工神经网络中每层要使用的层数或节点数,以解决特定的真实预测建模问题。
层数和每层中的节点数是必须指定的模型超参数。
你很可能是第一个尝试用神经网络解决你的具体问题的人。在你之前没有人解决过这个问题。因此,没有人能告诉你如何配置网络的答案。
你必须使用强大的测试工具和受控实验来发现答案。例如,请参见文章:
不管你可能会遇到什么试探法,所有的答案都会返回到需要仔细的实验以查看哪种方法最适合你的特定数据集。
2)直觉
网络可以通过直觉进行配置。
例如,你可能有一种直觉,即需要深度网络来解决特定的预测建模问题。
深层模型提供了层的层次结构,这些层构建了从输入变量空间到输出变量的不断增加的抽象级别。
考虑到对问题域的理解,我们可能认为需要一个深层次的模型来充分解决预测问题。在这种情况下,我们可以选择具有多层深度的网络配置。
选择深度模型编码了一种非常普遍的信念,即我们想要学习的函数应该包含几个更简单的函数的组合。这可以从表征学习的角度解释为,我们认为学习问题包括发现一组潜在的变异因素,这些因素又可以用其他更简单的潜在变异因素来描述。
这种直觉可以来自领域的经验、神经网络建模问题的经验,或者两者的某种混合。
根据我的经验,直觉经常会因为实验而失效。
3)追求深度
古德费罗、本吉奥和库维尔在他们关于深度学习的重要教科书中强调,从经验上看,在感兴趣的问题上,深度神经网络似乎表现得更好。
具体地说,他们陈述了在深度可能对直觉有益的情况下,选择使用深度神经网络作为统计论据。
从经验上看,深度越大,对各种任务的泛化效果似乎就越好……这表明使用深层架构确实比模型学习的功能空间表达了有用的优先级。
我们可以使用这一论点来建议使用深层网络,即那些具有多个层的网络,可能是配置网络以挑战预测建模问题的启发式方法。
这类似于针对表格数据的预测建模问题从随机森林和随机梯度提升开始的建议,以便在测试其他方法之前快速了解模型技能的上限。
4)借鉴思想
一种简单但可能很耗时的方法是利用文献中报告的研究结果。
查找描述MLP在预测问题实例中的使用情况的研究论文,这些问题在某种程度上与你的问题相似。记下这些白皮书中使用的网络配置,并将其作为配置的起点来测试你的问题。
模型超参数从一个问题到另一个问题的可移植性是一个具有挑战性的开放问题,也是模型超参数配置更具艺术性而不是科学性的原因。
然而,在相关问题上使用的网络层和节点数量是测试想法的一个很好的起点。
5)搜索。
设计自动搜索以测试不同的网络配置。
你可以从文学和直觉中寻找灵感。
一些流行的搜索策略包括:
- 随机:尝试每层的层和节点的随机配置。
- 网格:尝试对层的数量和每层的节点进行系统搜索。
- 启发式:尝试跨配置(如遗传算法或贝叶斯优化)进行定向搜索。
- 穷举:尝试所有层和节点数的组合;对于小型网络和数据集可能是可行的。
对于大型模型、大型数据集以及两者的组合,这可能是具有挑战性的。减轻或管理计算负担的一些想法包括:
- 将模型拟合到训练数据集的较小子集上,以加快搜索速度。
- 积极限制搜索空间的大小。
- 跨多个服务器实例并行搜索(例如,使用Amazon EC2服务)。
如果时间和资源允许,我建议系统地进行。
进一步阅读
如果你想深入了解,本节提供了更多关于该主题的资源。
论文
书籍
文章
讨论
摘要
在这篇文章中,你了解了层和节点的作用,以及如何配置多层感知器神经网络。
具体地说,你了解到:
- 单层和多层感知器网络的区别。
- 网络中有一个或多个隐藏层的价值。
- 配置网络中的层数和节点数的五种方法。