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

编译:yxy

出品:ATYUN订阅号

人工神经网络有两个重要的超参数,用于控制网络的体系结构或拓扑:层数和每个隐藏层中的节点数。配置网络时,必须指定这些参数的值。

为你的特定预测建模问题配置这些超参数的最可靠方法是通过强大的测试工具系统实验。

对于初学者来说,寻找一种分析方法来计算最佳层数和节点数,或者遵循简单的经验法则,可能是一个很难接受的机器学习领域。

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

阅读这篇文章后,你会知道:

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

多层感知器

节点,也称为神经元或感知器,是具有一个或多个权重输入连接的计算单元,它以某种方式连接输入的转移函数,并且连接输出。然后将节点组织成层以构成网络。

单层人工神经网络,也简称为单层,顾名思义,具有单层节点。单层中的每个节点直接连接到输入变量并提供输出变量。

单层网络只有一层活动的单元。输入通过单层权重直接连接到输出。输出不相互影响,因此具有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://amzn.to/2vhyW8j
  • https://amzn.to/2IXzUIY

文章

  • 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

总结

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

阅读这篇文章后,你会知道:

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

原文发布于微信公众号 - ATYUN订阅号(atyun_com)

原文发表时间:2018-07-31

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏企鹅号快讯

高精准预测—人工神经网络

我就在这里等你关注,不离不弃 ——A·May R-46T-56 ? 「序 言 」 前几天学习了R中的KNN近邻分类预测的做法,KNN近邻分析法可以说是最基础的、...

2146
来自专栏AI星球

从零开始用Python搭建超级简单的点击率预估模型

本篇是一个基础机器学习入门篇文章,帮助我们熟悉机器学习中的神经网络结构与使用。 日常中习惯于使用Python各种成熟的机器学习工具包,例如sklearn、Te...

4424
来自专栏AI研习社

怎样信息最大化?什么是“范例卷积神经网络”?这篇文章告诉你答案

AI 研习社按:本文由图普科技编译自《Exemplar CNNs and Information Maximization》,雷锋网 AI 研习社独家首发。文中...

3306
来自专栏CSDN技术头条

使用scikit-learn解释随机森林算法

在以前的一篇博文里,我讨论过如何将随机森林算法转化为一个“白盒”,这样每次预测就能被分解为各项特征的贡献和,即 ? 我多次想找相关的代码。然而,绝大多数的随机森...

19010
来自专栏大数据文摘

关于集成建模,这有40个给数据科学家的技能测试题及解答

2777
来自专栏机器之心

深度 | 脆弱的神经网络:UC Berkeley详解对抗样本生成机制

45911
来自专栏书山有路勤为径

改善深层神经网络-设置机器学习应用

这有一个常见的误区,在机器学习发展的小数据时代,常见做法是将所有数据三七分,70%训练集,30%测试集或者60%训练集,20%验证集,20%测试集,这是机器学习...

692
来自专栏CVer

[计算机视觉论文速递] 2018-04-17

[1]《Towards Improved Cartoon Face Detection and Recognition Systems》

1392
来自专栏新智元

计算成本降低35倍!谷歌发布手机端自动设计神经网络MnasNet

【新智元导读】神经结构自动搜索是最近的研究热点。谷歌大脑团队最新提出在一种在移动端自动设计CNN模型的新方法,用更少的算力,更快、更好地实现了神经网络结构的自动...

751
来自专栏机器之心

学界 | 新型池化层sort_pool2d实现更快更好的收敛:表现优于最大池化层(附代码实现)

选自Hackernoon 作者:Sahil Singla 机器之心编译 参与:黄小天、路雪 近日,Sahil Singla 在 Medium 上发表了一篇题为《...

37012

扫码关注云+社区

领取腾讯云代金券