独家 | 初学者的问题:在神经网络中应使用多少隐藏层/神经元?(附实例)

本文主要是介绍独家 | 初学者的问题:在神经网络中应使用多少隐藏层/神经元?(附实例),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

640?wx_fmt=png

作者:Ahmed Gad

翻译:蒋雨畅

校对:李海明

本文约2400字,建议阅读8分钟

本文将通过两个简单的例子,讲解确定所需隐藏层和神经元数量的方法,帮助初学者构建神经网络。


人工神经网络(ANNs)初学者可能会问这样的问题:


  • 该用多少个隐藏层?

  • 每个隐藏层中有多少个隐藏的神经元?

  • 使用隐藏层/神经元的目的是什么?

  • 增加隐藏层/神经元的数量总能带来更好的结果吗?


很高兴我们可以回答这些问题。首先要清楚,如果要解决的问题很复杂,回答这些问题可能会过于复杂。到本文结束时,您至少可以了解这些问题的答案,而且能够在简单的例子上进行测试。

 

ANN的灵感来自生物神经网络。在计算机科学中,它被简化表示为一组层级。而层级分为三类,即输入,隐藏和输出类。

 

确定输入和输出层的数量及其神经元的数量是最容易的部分。每一神经网络都有一个输入和一个输出层。输入层中的神经元数量等于正在处理的数据中输入变量的数量。输出层中的神经元数量等于与每个输入相关联的输出数量。但挑战在于确定隐藏层及其神经元的数量。

 

以下是一些指导,可以帮助了解分类问题中每个隐藏层的隐藏层数和神经元数:


  • 根据数据绘制预期的决策边界,从而将各个类别分开。

  • 将决策边界表示为一组线。注意这些线的组合必须服从于决策边界。

  • 所选的线的数量表示第一隐藏层中隐藏神经元的数量。

  • 如要连接由前一层所创建的连线,则需添加一个新的隐藏层。注意,每次添加一个新的隐藏层时,都需要与上一个隐藏层创建连接。

  • 每个新隐藏层中隐藏神经元的数量等于要建立的连接数。

 

 为便于理解,请看以下实例:


实例一

 
让我们从一个两个类的分类问题的简单示例开始。如图1所示,每个示例都有两个输入和一个表示类标签的输出。它与XOR问题非常相似。


640?wx_fmt=png

图1
 

第一个问题是是否需要隐藏层。确定是否需要隐藏层的规则如下:

 

在人工神经网络中,当且仅当数据必须非线性分离时,才需要隐藏层。

 

如图2所示,似乎这些类必须是非线性分离的。一条单线不能分离数据。因此,我们必须使用隐藏层以获得最佳决策边界。在这种情况下,我们可能仍然不使用隐藏层,但这会影响分类准确性。因此,最好使用隐藏层。

 

知道需要隐藏层之后,有两个重要问题需要回答,即:


  • 所需的隐藏层数是多少?

  • 每个隐藏层的隐藏神经元数量是多少?

 

按照前面的过程,第一步是绘制分割两个类的决策边界。如图2所示,有多个可能的决策边界正确地分割数据。我们将进一步讨论图2(a)中的那个。


640?wx_fmt=png

图2

 

接下来是通过一组线进行表达决策边界。

 

使用一组线来表示决策边界的事实依据是:任何ANN都是使用单层感知器作为构建块构建的。单层感知器是一个线性分类器,它使用根据以下等式创建的线来分隔不同类:

 

y = w_1 * x_1 + w_2 * x_2 +⋯+ w_i * x_i + b

 

其中 x_i 是 输入,w_i 是其权重,b 是偏差,y 是输出。因为添加的每个隐藏神经元都会增加权重数量,且使用更多的隐藏神经元会增加复杂性,因此建议使用最少数量的隐藏神经元来完成任务。

 

回到我们的例子,说ANN是使用多个感知器网络构建的,就像说网络是使用多条线路构建的。

 

在这个例子中,决策边界被一组线代替。线从边界曲线改变方向的点开始。在这一点上,放置两条线,每条线在不同的方向上。

 

如图3所示,因为边界曲线只有一个点通过灰色圆圈改变方向,所以只需要两条线。换句话说,这里有两个单层感知器网络,每个感知器产生一条线。


640?wx_fmt=png

图3
 

决策边界只需要两条线即可表示,这意味着第一个隐藏层将有两个隐藏的神经元。

 

到目前为止,我们有一个隐藏层,其包括有两个隐藏的神经元,每个隐藏的神经元可以被视为线性分类器,如图3中的线所示。这里将有两类输出,其中一类来自每一个分类器(即隐藏的神经元)。然而我们希望构建一个只能输出类标的分类器。因此,两个隐藏神经元的输出将合并为一个输出。换句话说,这两条线将由另一个神经元连接。结果如图4所示。

 

幸运的是,我们不需要添加另一个带有单个神经元的隐藏层来完成这项工作。输出层神经元将完成任务。其可将先前生成的两条线进行融合,使网络最终只有一个输出。


640?wx_fmt=png

图4


知道隐藏层及其神经元的数量后,网络架构现已完成,如图5所示。


640?wx_fmt=png

图5
 

实例二

 
另一个分类的例子如图6所示。与之前的例子类似,有两个分类,其中每个样本有两个输入和一个输出。区别在于决策边界。此示例的边界比前一个示例更复杂。


640?wx_fmt=png

图6
 

根据最开始的指示,第一步是绘制决策边界。前述中使用的决策边界如图7(a)所示。

 

下一步是将决策边界分成一组线,每条线都可构建为像ANN感知器那样的模型。在绘制线之前,应该标记边界变化方向的点,如图7(b)所示。


640?wx_fmt=jpeg

图7
 

问题是需要多少条线?顶点和底点中的每一个将具有与它们相关联的两条线,总共4条线。中间点有两条线从其他点共享。要创建的线如图8所示。

 

因为第一个隐藏层将具有等于线数的隐藏层神经元,所以第一个隐藏层将具有4个神经元。换句话说,有4个分类器,每个分类器由单层感知器创建。目前,网络将生成4个输出,每个分类器一个。接下来是将这些分类器连接在一起,以使网络仅生成单个输出。换句话说,线条将通过其他隐藏层连接在一起来生成单独一条曲线。


640?wx_fmt=png

图8
 

模型设计者可以选择网络布局。一种可行的网络架构是构建具有两个隐藏神经元的第二隐藏层。第一个隐藏的神经元将连接前两条线,最后一个隐藏的神经元将连接最后两条线。第二个隐藏层的结果如图9所示。


640?wx_fmt=png

图9

到目前为止,这里有两条分开的曲线。因此,网络有两个输出。接下来是将这些曲线连接在一起从整个网络中获得单个输出。在这种情况下,输出层神经元可用于进行最终连接而非添加新的隐藏层。最终结果如图10所示。


640?wx_fmt=png

图10


网络设计完成后,完整的网络架构如图11所示。


640?wx_fmt=png

图11
 

更多详细信息:


深度学习简介+使用人工神经网络求解XOR


  • SlideShare:

https://www.slideshare.net/AhmedGadFCIT/brief-introduction-to-deep-learning-solving-xor-using-anns

  • YouTube:

https://www.youtube.com/watch?v = EjWDFt-2n9k

 

作者简介:


Ahmed Gad于2015年7月在埃及Menoufia大学计算机与信息学院(FCI)获得了信息技术优秀学位的理学士学位。由于他在学院里排名第一,他在2015年被推荐为一所埃及研究机构的教学助理,然后于2016年在学院里担任教学助理和研究员。他目前的研究兴趣包括深度学习,机器学习,人工智能,数字信号处理和计算机视觉。


原文标题: 

Beginners Ask “How Many Hidden Layers/Neurons to Use in Artificial Neural Networks?

原文链接:

https://www.kdnuggets.com/2018/07/beginners-ask-how-many-hidden-layers-neurons-neural-networks.html 


译者简介

640?wx_fmt=png

蒋雨畅,香港理工大学大三在读,主修地理信息,辅修计算机科学,目前在研究学习通过数据科学等方法探索城市与人类活动的关系。希望能认识更多对数据科学感兴趣的朋友,了解更多前沿知识,开拓自己的眼界。

翻译组招募信息

工作内容:需要一颗细致的心,将选取好的外文文章翻译成流畅的中文。如果你是数据科学/统计学/计算机类的留学生,或在海外从事相关工作,或对自己外语水平有信心的朋友欢迎加入翻译小组。

你能得到:定期的翻译培训提高志愿者的翻译水平,提高对于数据科学前沿的认知,海外的朋友可以和国内技术应用发展保持联系,THU数据派产学研的背景为志愿者带来好的发展机遇。

其他福利:来自于名企的数据科学工作者,北大清华以及海外等名校学生他们都将成为你在翻译小组的伙伴。


点击文末“阅读原文”加入数据派团队~

转载须知

如需转载,请在开篇显著位置注明作者和出处(转自:数据派ID:datapi),并在文章结尾放置数据派醒目二维码。有原创标识文章,请发送【文章名称-待授权公众号名称及ID】至联系邮箱,申请白名单授权并按要求编辑。

发布后请将链接反馈至联系邮箱(见下方)。未经许可的转载以及改编者,我们将依法追究其法律责任。


640?wx_fmt=png640?wx_fmt=jpeg

点击“阅读原文”拥抱组织

这篇关于独家 | 初学者的问题:在神经网络中应使用多少隐藏层/神经元?(附实例)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/901661

相关文章

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

Linux使用nload监控网络流量的方法

《Linux使用nload监控网络流量的方法》Linux中的nload命令是一个用于实时监控网络流量的工具,它提供了传入和传出流量的可视化表示,帮助用户一目了然地了解网络活动,本文给大家介绍了Linu... 目录简介安装示例用法基础用法指定网络接口限制显示特定流量类型指定刷新率设置流量速率的显示单位监控多个

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

mybatis和mybatis-plus设置值为null不起作用问题及解决

《mybatis和mybatis-plus设置值为null不起作用问题及解决》Mybatis-Plus的FieldStrategy主要用于控制新增、更新和查询时对空值的处理策略,通过配置不同的策略类型... 目录MyBATis-plusFieldStrategy作用FieldStrategy类型每种策略的作

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

C++ Primer 多维数组的使用

《C++Primer多维数组的使用》本文主要介绍了多维数组在C++语言中的定义、初始化、下标引用以及使用范围for语句处理多维数组的方法,具有一定的参考价值,感兴趣的可以了解一下... 目录多维数组多维数组的初始化多维数组的下标引用使用范围for语句处理多维数组指针和多维数组多维数组严格来说,C++语言没

linux下多个硬盘划分到同一挂载点问题

《linux下多个硬盘划分到同一挂载点问题》在Linux系统中,将多个硬盘划分到同一挂载点需要通过逻辑卷管理(LVM)来实现,首先,需要将物理存储设备(如硬盘分区)创建为物理卷,然后,将这些物理卷组成... 目录linux下多个硬盘划分到同一挂载点需要明确的几个概念硬盘插上默认的是非lvm总结Linux下多