人工神经网络有两个重要的超参数,用于控制网络的体系结构或拓扑:层数和每个隐藏层中的节点数。配置网络时,必须指定这些参数的值。
为你的特定预测建模问题配置这些超参数的最可靠方法是通过强大的测试工具系统实验。
对于初学者来说,寻找一种分析方法来计算最佳层数和节点数,或者遵循简单的经验法则,可能是一个很难接受的机器学习领域。
在这篇文章中,你将了解层和节点的作用,以及如何着手为你的预测建模问题配置多层感知器神经网络。
阅读这篇文章后,你会知道:
- 单层和多层感知器网络之间的区别。
- 在网络中拥有一个和多个隐藏层的价值。
- 配置网络中的层数和节点数的五种方法。
让我们开始吧。这篇文章分为四个部分; 他们是:
- 多层感知器
- 如何计算层?
- 为什么要有多个层?
- 要使用多少层和节点?
多层感知器
节点,也称为神经元或感知器,是具有一个或多个权重输入连接的计算单元,它以某种方式连接输入的转移函数,并且连接输出。然后将节点组织成层以构成网络。
单层人工神经网络,也简称为单层,顾名思义,具有单层节点。单层中的每个节点直接连接到输入变量并提供输出变量。
单层网络只有一层活动的单元。输入通过单层权重直接连接到输出。输出不相互影响,因此具有N个输出的网络可被视为N个分离的单输出网络。
– 第15页,Neural Smithing: Supervised Learning in Feedforward Artificial Neural Networks,1999。
单层网络可以扩展到多层网络,也曾为称为多层感知器。多层感知器(MLP)是具有不止一层的人工神经网络。
它有一个连接到输入变量的输入层,一个或多个隐藏层,以及一个产生输出变量的输出层。
标准多层感知器(MLP)是单层感知器的连接在一起。存在一层输入节点,一层输出节点和一个或多个中间层。中间层也被称为“隐藏层”,因为它们不能直接从系统输入和输出中观察到。
– Page 31,Neural Smithing: Supervised Learning in Feedforward Artificial Neural Networks,1999。
我们可以总结MLP中层的类型如下:
- 输入层:输入变量,有时称为可见层。
- 隐藏层:输入和输出层之间的节点层。这些层可能存在一个或多个。
- 输出层:生成输出变量的节点层。
最后,以下是用于描述神经网络形状和能力的一些术语:
- 尺寸:模型中的节点数。
- 宽度:特定层中的节点数。
- 深度:神经网络中的层数。
- 能力:可以通过网络配置学到的函数的类型或结构。有时被称为“ 表征能力 ”。
- 架构:网络中层和节点的具体排列。
如何计算层?
过去,对于如何计算层数存在一些分歧。
分歧的核心在于输入层是否被计算在内。有一种观点认为不应该计算它,因为输入并不活动,它们只作输入变量。我们将使用这个惯例; 这也是《Neural Smithing》 一书中推荐的惯例。
因此,具有输入层,一个隐藏层和一个输出层的MLP是2层MLP!
可以使用简单的符号来概括MLP的结构。
这种方便的表示法表述了每层的层数和节点数。每个层中的节点数被指定为一个整数,从输入层到输出层,每个层的尺寸由一个正斜线字符(/)分隔。
例如,输入层中具有两个变量的网络,有一个具有八个节点的隐藏层和具有一个节点的输出层使用符号来描述为:2/8/1。
我建议在描述多层感知器神经网络的层及其尺寸时使用此表示法。
为什么要有多个层?
在我们查看要指定的层数之前,有必要先思考为什么我们希望拥有多个层。
单层神经网络只能用于表示线性可分离的函数。也就是说非常简单的问题,例如,分类问题中可以被一行整齐地分隔开的两个类。如果你的问题相对简单,那么单层网络就足够了。
然而,我们有兴趣解决的大多数问题都不是线性可分的。
多层感知器可用于表示凸区域。这意味着,实际上,他们可以学习在一些高维空间中围绕实例绘制形状,以对它们进行分类,从而克服线性可分性的限制。
实际上,Lippmann在1987年的论文“An introduction to computing with neural nets ”中有一个理论发现,它表明具有两个隐藏层的MLP足以创建任何所需形状的分类区域。这很有启发性,但应该注意的是,没有给出每层中使用多少节点或如何学习权重的指示。
进一步的理论发现和证明已经显示MLP是万能逼近器。有了一个隐藏层,MLP就可以逼近我们需要的任何函数。
具体而言,万能逼近定理表明:只要有足够的隐藏节点,具有线性输出层和至少一个具有任何“压缩”激活函数(如,logistic sigmoid)的隐藏层的前馈网络可以从一个有限维空间到另一个有限维空间有任意的非零误差逼近任何波莱尔可测函数。
– 第198页,Deep Learning,2016年。
这是一个经常被引用的理论发现,关于它的文献很多。在实践中,我们同样不知道在给定问题的单个隐藏层中要使用多少节点,也不知道如何有效地学习或设置其权重。此外,已经出现了许多反例,有些函数不能通过单个隐藏层的MLP直接学习或者需要无限数量的节点。
即使对于那些可以通过足够大的单隐藏层MLP学习的函数,使用两个(或更多)隐藏层来学习它也会更有效。
既然一个足够大的隐藏层足以近似大多数函数,为什么还有人会使用更多呢?其中一个原因在于“足够大”这个词。虽然单个隐藏层对于某些函数是最佳的,但是与有更多层的解决方案相比,单隐藏层解决方案的效率非常低。
– 第38页,Neural Smithing: Supervised Learning in Feedforward Artificial Neural Networks,1999。
要使用多少层和节点?
有了前面的铺垫,让我们来处理你真正的问题。应该在多层感知器中使用多少层,每层有多少个节点?
在本节中,我们将列举解决此问题的五种方法。
1)实验
一般来说,当我被问到用于MLP的层数和节点数时,我经常回复:
我不知道,你要使用系统的实验来发现对特定数据集最有效的方法。
我仍然坚持这个答案。
通常,你无法分析计算人工神经网络中每层使用的层数或节点数,以解决特定的实际预测建模问题。
每层中的层数和节点数是必须指定的模型超参数。
你可能是第一个尝试使用神经网络解决自己的特定问题的人。在你之前没有人解决过它。因此,没有人能告诉你如何配置网络的正确答案。
你必须使用强大的测试工具和受控实验来发现答案。推荐文章:
- https://machinelearningmastery.com/evaluate-skill-deep-learning-models/
无论你遇到什么样的启发式方法,所有答案都会回到需要仔细的实验来查看哪种方法最适合你的特定数据集。
2)直觉
网络可以通过直觉进行配置。
例如,你可能有直觉认为需要深层网络来解决特定的预测建模问题。
深度模型提供了层次结构,这种层次构建了从输入变量空间到输出变量的不断增加的抽象级别。
如果对问题域有了一定的了解,我们可能认为需要深层次模型来充分解决预测问题。在这种情况下,我们可以选择具有多层深度的网络配置。
选择深度模型编码了一个非常常见的信念,即我们想要学习的函数应该包含几个更简单函数的组合。这可以从表示学习的角度解释为我们认为学习问题由发现发现的一组潜在的变异因素构成,这些因素又可以用其他更简单的变异潜在因素来描述。
– 第201页,Deep Learning,2016年。
这种直觉可以来自领域的经验,神经网络建模问题的经验,或者两者都有。
根据我的经验,直觉常常被实验证明是无效的。
3)去深度
在他们重要的深度学习教科书中,Goodfellow,Bengio和Courville强调,在经验上,对于感兴趣的问题,深度神经网络似乎表现得更好。
具体而言,他们表示在深度可能直观有益的情况下,选择使用深度神经网络作为统计论据。
从经验上看,深度越大,对各种任务的归纳就越好。[…]这表明使用深层架构确实在模型学习的函数空间上表达了一个有用的先验。
– 第201页,Deep Learning,2016年。
我们可以使用这个论点来建议使用深层网络,具有多层的网络,可能是一种配置网络的启发式方法,以应对具有挑战性的预测建模问题。
这与从随机森林和随机梯度提升开始对预测建模问题的建议类似,利用表格数据,在测试其他方法之前快速地了解模型技能的上限。
4)借用思想
一种简单但可能很耗时的方法是利用文献中报道的研究结果。
查找研究论文,描述在预测问题的实例上使用MLP,以类似方式解决你的问题。请注意这些文章中使用的网络配置,并将它们作为测试自己问题的配置起点。
模型超参数的可转移性导致从一个问题到另一个问题的巧妙的模型,这是一个具有挑战性的开放问题,并且这就是模型超参数配置比艺术更具艺术性的原因。
然而,在相关问题上使用的网络层和节点数量是测试想法的良好起点。
5)搜索
设计自动搜索以测试不同的网络配置。你可以用文学和直觉的想法来进行搜索。
一些流行的搜索策略包括:
- 随机:尝试每层的层和节点的随机配置。
- 网格:尝试系统地搜索每个层的层数和节点数。
- 启发式:尝试在配置上进行定向搜索,如遗传算法或贝叶斯优化。
- 穷举:尝试所有层的组合和节点的数量;它可能适用于小型网络和数据集。
对于大型模型,大型数据集以及或者都大,这可能具有挑战性。减少或管理计算负担的一些想法包括:
- 在训练数据集的较小子集上拟合模型以加速搜索。
- 严格限制搜索空间的大小。
- 跨多个服务器实例并行化搜索(例如,使用Amazon EC2服务)。
如果时间和资源允许,我建议系统化的搜索。
拓展阅读
如果希望深入了解,本节将提供有关该主题的更多资源。
论文
- https://ieeexplore.ieee.org/abstract/document/1165576/
- https://www.tandfonline.com/doi/abs/10.1080/01431160802549278
文章
- https://en.wikipedia.org/wiki/Artificial_neural_network
- https://en.wikipedia.org/wiki/Universal_approximation_theorem
- http://www.faqs.org/faqs/ai-faq/neural-nets/part3/section-9.html
如何为自己的项目选择合适的神经网络
深度学习是使用现代硬件的人工神经网络的应用。它使开发,训练和使用比过去更大(更多层)的神经网络成为可能。
研究人员提出了数千种类型的特定神经网络,它们往往是对现有模型的修改或调整。有时也会有全新的方法。
作为一名从业者,我建议你等到模型出现后普遍适用后再使用。因为很难从每天或每周发布的大量出版物的中梳理出效果良好的那个。
我建议你一般关注三种类型的人工神经网络。即:
- 多层感知器(MLP)
- 卷积神经网络(CNN)
- 递归神经网络(RNN)
这三类网络提供了很大的灵活性,并且经过数十年的证明,它们在各种各样的问题中都是有用和可靠的。并且在过去的几十年里已经证明它们在许多问题中是有用和可靠的。他们还有许多变种,以帮助他们专门处理不同的预测问题框架和不同数据集。
现在我们知道要关注哪些网络,让我们看看何时可以使用每哪一类神经网络。
何时使用多层感知器?
多层感知器(简称MLP)是经典的神经网络。它由一层或多层神经元组成。数据被馈送到输入层,可能存在提供抽象层次的一个或多个隐藏层,并且在输出层(也称为可见层)上进行预测。
有关MLP的更多详细信息,请参阅:
https://machinelearningmastery.com/neural-networks-crash-course/
MLP适用于分类预测问题,其中输入被指定类或标签。
它也适用于回归预测问题,即给定一组输入,预测一个实值量。数据通常以表格格式提供,如CSV文件或电子表格。
使用MLP用于:
- 表格数据集
- 分类预测问题
- 回归预测问题
它非常灵活,通常可用于学习从输入到输出的映射。
这种灵活性使它可以应用于其他类型的数据。例如,图像的像素可以转换为一行长数据并馈送到MLP中。文档的单词也可以被转换为一行长数据并馈送到MLP。甚至对时间序列预测问题的滞后观察也可以转换为长数据并馈送到MLP。
因此,如果你的数据不是表格数据集(例如图像、文档或时间序列)的形式,我建议至少测试你的问题的MLP。结果可用作比较的基线点,以确认其他可能看起来更适合添加值的模型。
尝试MLP On:
- 图像数据
- 文字数据
- 时间序列数据
- 其他类型的数据
何时使用卷积神经网络?
卷积神经网络(CNN)被设计用于将图像数据映射到输出变量。
事实证明它非常有效,它是涉及将图像数据作为输入的任何类型的预测问题的首选方法。
有关CNN的更多详细信息,请参阅帖子:
https://machinelearningmastery.com/crash-course-convolutional-neural-networks/
使用CNN的好处是能够开发二维图像的内部表示。这允许模型在数据中的变体结构中学习位置和比例,这在处理图像时很重要。
使用CNN:
- 图像数据
- 分类预测问题
- 回归预测问题
总而言之,CNN适合与具有空间关系的数据一起工作。
CNN输入一般是是二维的,场或矩阵,但也可以改变为一维,允许它开发一维序列的内部表示。
这使CNN更普遍地用于具有空间关系的其他类型的数据。例如,文本文档中的单词之间存在顺序关系。在时间序列的时间步长中存在存在关系。
虽然不是专门针对非图像数据开发的,但CNN在诸如使用文本分类进行情绪分析和相关问题中实现了最先进的结果。
尝试使用CNN:
- 文本数据
- 时间序列数据
- 序列输入数据
何时使用递归神经网络?
递归神经网络(RNN)被设计用于处理序列预测问题。序列预测问题有多种形式,最好用支持的输入和输出类型来描述。
序列预测问题的一些例子包括:
- 一对多:从作为输入的观察映射到具有多步的作为输出的序列。
- 多对一:多步序列作为输入映射到类或数量的预测。
- 多对多:多步序列作为输入映射到具有多步的作为输出的序列。
多对多的问题通常被称为序列到序列,或简称为seq2seq。
有关序列预测问题类型的更多详细信息,请参阅帖子:
https://machinelearningmastery.com/models-sequence-prediction-recurrent-neural-networks/
传统的RNN很难训练。
长短期记忆网络(LSTM)可能是最成功的RNN,因为它克服了训练RNN的问题,所以它被广泛应用。
一般而言,RNNs和LSTM在处理单词和段落序列(通常称为自然语言处理)时最为成功。
这包括以时间序列表示的文本序列和口语序列。它们还用作生成模型,需要序列输出,不仅需要文本,还需要生成手写等应用程序。
RNN用于:
- 文字数据
- 语音数据
- 分类预测问题
- 回归预测问题
- 生成模型
递归神经网络不适用于表格数据集。也不适合图像数据输入。
不使用RNN:
- 表格数据
- 图像数据
RNN和LSTM已经在时间序列预测问题上进行了测试,但结果却很差。至少可以说,自回归方法,甚至线性方法通常表现得比它更好。LSTM通常优于应用于相同数据的简单MLP。
更多信息,请参阅帖子:
machinelearningmastery.com/suitability-long-short-term-memory-networks-time-series-forecasting/
然而,它仍然是一个活跃的领域。
也许可以尝试RNN:
- 时间序列数据
混合网络模型
CNN或RNN模型很少单独使用。
这些类型的网络在更大的模型(具有一个或多个MLP层)中用作层。从技术上讲,这些是混合类型的神经网络架构。
也许最有趣的工作来自将不同类型的网络混合在一起成为混合的模型。
例如,思考一下,有这一样一个模型,它使用一堆层,输入端为CNN,中间为LSTM,输出端为MLP。这样的模型可以读取图像输入序列(如视频),并生成预测。这称为CNN LSTM架构。
这种类型的网络也可以堆叠在特定的架构中以解锁新功能,例如可重复使用的图像识别模型,这个模型使用非常深的CNN和MLP网络,可以添加到新的LSTM模型并用于给照片配字幕。同样地,encoder-decoder LSTM网络可用于具有不同长度的输入和输出序列。
重要的是要先清楚地了解你和你的利益相关者对项目的要求,然后找到满足你特定项目需求的网络架构(或者自己开发一个)。
有关帮助你考虑数据和预测问题的良好框架,请参阅帖子:
https://machinelearningmastery.com/how-to-define-your-machine-learning-problem/