我想知道当我们构建神经网络架构时,我们如何确定隐藏层中有多少节点,以及放置多少隐藏层。
我知道输入和输出层取决于我们拥有的训练集,但是我们如何决定隐藏层和总体架构呢?
我想知道当我们构建神经网络架构时,我们如何确定隐藏层中有多少节点,以及放置多少隐藏层。
我知道输入和输出层取决于我们拥有的训练集,但是我们如何决定隐藏层和总体架构呢?
遗憾的是,仅给出问题描述,没有通用的方法来先验地确定神经网络的最佳神经元数量和层数。甚至没有太多的指导可以确定好的价值观作为起点。
最常见的方法似乎是根据先前对用于类似问题的网络的经验进行粗略猜测。这可能是您自己的经验,也可能是您从培训课程、博客或研究论文中获得的二手/第三手经验。然后尝试一些变化,并仔细检查性能,然后再选择最好的。
神经网络的大小和深度也与其他超参数相互作用,因此在别处改变一件事会影响最佳值的位置。因此,不可能为网络隔离“最佳”大小和深度,然后继续单独调整其他参数。例如,如果你有一个非常深的网络,它可能与 ReLU 激活函数一起有效地工作,但与 sigmoid 不太好 - 如果你找到了最佳的网络大小/形状,然后尝试使用不同的激活函数进行实验,你可能会来得出关于什么最有效的错误结论。
您有时可能会读到研究人员在从头开始设计神经网络时使用的“经验法则”。这些东西可能对您的问题有用,但它们至少具有从问题开始的优势。我看到的变化是:
创建一个隐藏层大小顺序与输入相似且大小相同的网络,理由是没有特别的理由来改变大小(除非您可能正在创建自动编码器)。
从简单开始并建立复杂性,看看是什么改进了简单的网络。
如果您希望输入数据能够很好地解释输出,但具有复杂的关系(而不仅仅是固有的噪声),请尝试不同的网络深度。
尝试添加一些 dropout,这是神经网络最接近魔法仙尘的东西,它可以让一切变得更好(警告:添加 dropout 可能会提高泛化能力,但也可能会增加所需的层大小和训练时间)。
如果您在任何文本中阅读了这些或类似的内容,请用少许盐来处理它们。但是,在最坏的情况下,它们会帮助您克服空白页效应,并编写某种网络,并让您开始测试和改进过程。
顺便说一句,当其他方法可能更好并为您节省大量时间时,尽量不要在调整神经网络时迷失方向。请考虑并使用其他机器学习和数据科学方法。探索数据,也许做一些情节。首先尝试一些简单的线性方法来获得要击败的基准,线性回归,逻辑回归或 softmax 回归,具体取决于您的问题。考虑使用与 NN 不同的 ML 算法 - 基于决策树的方法(例如 XGBoost)在许多问题上比深度学习更快、更有效。