【发布时间】:2009-08-13 06:05:48
【问题描述】:
一般来说,通过向一个或多个隐藏层添加更多节点来扩展人工神经网络,您能得到什么?
它是否允许更精确的映射,或者它是否允许它可以识别的关系更微妙,或者其他什么?
【问题讨论】:
-
有没有反馈?
-
会,但我认为学习算法与结果无关。
一般来说,通过向一个或多个隐藏层添加更多节点来扩展人工神经网络,您能得到什么?
它是否允许更精确的映射,或者它是否允许它可以识别的关系更微妙,或者其他什么?
【问题讨论】:
机器学习中有一个众所周知的结果,即单个隐藏层足以逼近任何平滑的有界函数(这篇论文被称为"Multilayer feedforward networks are universal approximators",现在已经有将近 20 年的历史了)。不过,有几件事情需要注意。
深度神经网络的问题在于它们更难训练。你最终会得到非常非常小的梯度被反向传播到较早的隐藏层,并且学习不会真正去任何地方,特别是如果权重被初始化为很小(如果你将它们初始化为更大的数量,你经常会陷入糟糕的局部最小值) .有一些“预训练”技术,例如 Geoff Hinton 在 Google tech talk 中讨论的技术,它们试图解决这个问题。
【讨论】:
这是一个非常有趣的问题,但回答起来并不容易。这取决于您尝试解决的问题以及您尝试使用的神经网络。有几种神经网络类型。
我一般不太清楚更多节点是否等于更高的精度。研究表明,您通常只需要一个隐藏层。节点数应该是解决问题所需的最小节点数。如果你没有足够的它们 - 你将无法找到解决方案。
另一方面 - 如果您已达到可以解决解决方案的节点数量 - 您可以添加越来越多的节点,并且您不会看到结果估计有任何进一步的进展。
这就是为什么有这么多类型的神经网络。他们试图解决不同类型的问题。所以你有神经网络来解决静态问题,解决时间相关问题等等。节点的数量不像它们的设计那么重要。
【讨论】:
当你有一个隐藏层时,你正在创建输入的组合特征。那么,是通过现有输入的更多特征,还是通过组合现有特征的高阶特征来更好地解决问题?这是标准前馈网络的权衡。
您有一个理论上的保证,即任何函数都可以由具有两个隐藏层和非线性激活的神经网络表示。
此外,如果您不确定合适的拓扑结构,请考虑使用额外资源进行提升,而不是添加更多节点。
【讨论】:
非常粗略的经验法则
对于更大的输入向量,通常每层有更多的元素。
更多的层可以让您对更多的非线性系统进行建模。
如果您使用的网络类型有传播延迟,则更多层可能允许对时间序列进行建模。注意在延迟中有时间抖动,否则它不会很好地工作。如果这对你来说只是 gobbledegook,请忽略它。
更多层可让您插入循环特征。这对于辨别任务非常有用。您的 ANN 实施我不允许这样做。
HTH
【讨论】:
每个隐藏层的单元数说明了 ANN 描述任意复杂函数的潜力。一些(复杂的)函数可能需要很多隐藏节点,或者可能需要不止一个隐藏层。
当一个函数可以通过一定数量的隐藏单元粗略近似时,任何额外的节点都会提供更高的准确度……但这只有在使用的训练样本足以证明这种添加的合理性时才是正确的——否则会发生什么“过度收敛”。过度收敛意味着你的 ANN 已经失去了泛化能力,因为它过分强调了特定的样本。
一般来说,如果生成的网络可以提供良好的结果,最好使用尽可能少的隐藏单元。在大多数情况下,很难找到证明更多隐藏节点合理所需的额外训练模式,而且准确性不是 NN 的强项。
【讨论】: