如何决定神经网络架构?


19

我想知道如何确定隐藏层中有多少个节点,以及在构建神经网络体系结构时要放置多少个隐藏层。

我了解输入和输出层取决于我们拥有的训练集,但是总体上我们如何确定隐藏层和整体体系结构?


通常,我们会根据自己的直觉进行实验;认为它是一个超参数。有一些学习体系结构的方法,但我不知道它们的实用性:blog.acolyer.org/2017/05/10/…–
Emre

2
我正在寻找重复的内容,因为我确信它在此站点上已经出现了很多次。但是,找不到未附加到某些数据集或问题的纯版本。也许这可能是我们指向其他人的通用问题?可悲的是,通常没有一个很好的“如何”答案,但是当面对如此多的选择时,这是一个普遍的问题。
尼尔·斯莱特


这是一个非常有趣的问题(研究人员开始研究您的问题)。数据集A和数据集B的最佳架构是什么。请阅读以下试图回答您问题的论文。欢迎神经结构搜索(NAS)的世界。arxiv.org/abs/1611.01578
iDeepVision

Answers:


17

可悲的是,仅给出问题描述,就没有一种通用的方法来确定先验神经网络的最佳数量和层数。确定良好的价值尝试作为起点,甚至没有太多指导。

最常见的方法似乎是基于对类似问题所用网络的先前经验进行粗略的猜测。这可以是您自己的经验,也可以是您从培训课程,博客或研究论文中获得的二手/二手经验。然后尝试一些变体,并在选择最佳变体之前仔细检查性能。

神经网络的大小和深度也与其他超参数相互作用,因此在其他地方更改一件事物会影响最佳值的位置。因此,不可能隔离网络的“最佳”大小和深度,然后继续隔离地调整其他参数。例如,如果您的网络非常深,则可以使用ReLU激活功能有效地工作,但是对于Sigmoid来说效果不佳-如果您找到了最佳的网络大小/形状,然后尝试了各种激活功能的实验,关于什么最有效的错误结论。

您有时可能会读到研究人员从头开始进行神经网络设计时使用的“经验法则”。这些事情可能对您的问题都有效,但至少它们具有从问题上开始的优势。我看到的变化是:

  • 创建隐藏层大小与输入顺序相似且大小均相同的隐藏层的网络,理由是没有特定理由来更改大小(除非您可能正在创建自动编码器)。

  • 从简单开始并建立复杂性,以了解改进简单网络的方法。

  • 如果您希望输入数据能很好地解释输出,但关系复杂(与固有的噪音相对),则尝试改变网络的深度。

  • 尝试添加一些滤除,这是神经网络与魔术般的尘埃最接近的东西,它可以使一切变得更好(注意:添加滤除可以提高泛化能力,但也可能增加所需的图层大小和训练时间)。

如果您在任何文本中阅读了这些内容或类似内容,则请捏一点盐。但是,最糟糕的是,它们可以帮助您克服空白页的影响,编写某种网络,并使您开始测试和优化过程。


顺便说一句,当其他方法可能更好并且节省大量时间时,请尽量不要在调整神经网络时迷失方向。请考虑并使用其他机器学习和数据科学方法。探索数据,也许作一些图。首先尝试一些简单的线性方法,以根据您的问题获取基准以击败,线性回归,逻辑回归或softmax回归。考虑对神经网络使用不同的ML算法-基于决策树的方法(例如XGBoost)比深度学习在许多问题上更快,更有效。


这是一个很好的解释。谢谢。我也想知道是否有一个很好的方法来决定使用哪种ML方法?您提到了比神经网络更好的方法,但是我们如何轻松地确定呢?
user7677413

@ user7677413:同样的道理。您必须尝试看看,尽管经验可能会为您提供有关常见问题的指南。
尼尔·斯莱特

1
那么什么时候需要神经网络?
user7677413

1
神经网络很少需要。但是,他们在某些问题上比较擅长。它们擅长于音频和图像识别等信号处理任务,还具有从大量数据中学习微妙差异的能力,而简单的算法可能会达到极限。但是,NN是否适合您,以及您在特定一天遇到的任何问题,没人能预测。
尼尔·斯莱特

1
@ user7677413我认为您是在假设没有40年深入而有见地的机器学习研究。听起来您只是在抓挠表面。我建议找到一本教科书,并看一看它们如何联系在一起,这将有助于您建立许多机器学习算法的直觉。
亚历克斯L
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.