为什么有人要使用“隐藏层”?与没有它们的网络(线性模型)相比,它们如何增强网络的学习能力?
隐藏层的目的是什么?
“隐藏”层实际上并没有那么特别……隐藏层实际上只不过是任何不是输入或输出的层。所以即使是一个非常简单的 3 层神经网络也有 1 个隐藏层。所以我认为问题并不是真正的“隐藏层如何提供帮助?” 就像“为什么更深的网络更好?”。
后一个问题的答案是一个积极研究的领域。即使是像 Geoffrey Hinton 和 Andrew Ng 这样的顶级专家也会坦率地承认,我们并不真正理解为什么深度神经网络会起作用。也就是说,无论如何我们都不完全详细地理解它们。
也就是说,据我所知,这个理论是这样的……网络的连续层学习连续更复杂的特征,这些特征建立在前几层的特征之上。因此,例如,用于面部识别的 NN 可能会像这样工作:第一层检测边缘,仅检测边缘。下一层识别几何形状(框、圆等)。下一层识别面部的原始特征,如眼睛、鼻子、下巴等。下一层然后识别基于“眼睛”特征、“鼻子”特征等组合的合成物。
因此,从理论上讲,更深的网络(更多的隐藏层)更好,因为它们可以对正在识别的“事物”进行更细粒度/详细的表示。
隐藏层本身没有用。如果您有线性的隐藏层,最终结果仍然是输入的线性函数,因此您可以将任意数量的线性层折叠成单个层。
这就是我们使用非线性激活函数(如 RELU)的原因。这允许我们为每个隐藏层添加一定程度的非线性复杂性,并且使用任意多个隐藏层,我们可以构建任意复杂的非线性函数。
因为我们可以(至少在理论上)捕捉任何程度的复杂性,所以我们将神经网络视为“通用学习器”,因为足够大的网络可以模拟任何功能。
实际上, mindcrime给出的分层学习解释不再那么可接受了(Ian Goodfellow 也指出了这一点)。由于有 150 层或更多层的神经网络,这种解释对于这种神经网络没有意义。但是,我们可以将其视为解决高维流形的结,即将输入转换为高维空间,这有助于我们找到更好的数据表示。
François Chollet在用 Python 进行深度学习一书中解释了几何解释:
...您可以将神经网络解释为高维空间中非常复杂的几何变换,通过一系列简单的步骤实现...
想象两张彩色纸:一张红色和一张蓝色。把一个放在另一个上面。现在把它们揉成一个小球。那个皱巴巴的纸球是你的输入数据,每张纸都是分类问题中的一类数据。神经网络(或任何其他机器学习模型)的目的是找出纸球的变换,将其弄松,从而使这两个类再次清晰分离。通过深度学习,这将被实现为 3D 空间的一系列简单转换,例如您可以用手指在纸球上应用的转换,一次一个动作。弄皱纸球就是机器学习的意义所在:为复杂、高度折叠的数据流形找到简洁的表示。这一点,您应该对深度学习为何擅长于此有一个很好的直觉:它采用将复杂的几何变换逐步分解为一长串基本变换的方法,这几乎是人类解开纸球所遵循的策略. 深度网络中的每一层都应用了一种转换,可以稍微解开数据——而一层很深的层使一个极其复杂的解开过程变得容易处理。
我建议您阅读这篇精彩的博客文章,了解深度学习的拓扑解释。
此外,这个玩具交互代码可能会对您有所帮助。
在机器学习的上下文中,流形的概念可以如下图所示。
在第一部分,数据是 3 维的。但是,我们可以找到一个变换得到第二张图像,这表明数据实际上是人为的高维数据,即它是 3-D 空间中的 2 维流形。这个例子可以被认为是一个分类问题,颜色可以代表类别,我们可以找到数据的平凡表示进行分类。
另一个例子可能是我提到的博客中的数字。在这里,如果没有具有 3 个或更多隐藏单元的层,无论深度如何,都无法解决此分类问题。所以高维变换的概念很重要。
我们可以将这些数据映射到 3-D,并找到一个平面将它们分开。
我想在前面的答案中添加一个方面是所谓的维度诅咒。这个概念是指许多算法的时间复杂度随着数据的维度呈指数增长的问题。
作为一个简单的例子,让我们考虑一个集合每个维度只有两个值。例如,和. 现在想象给你一个函数为一个特定的输入精确地输出 TRUE。目标是确定该输入。
在示例中,如果对 f 一无所知,那么最好的办法就是一个接一个地尝试输入。然而,拥有元素。因此,一个人必须尝试的输入数量通常大致为也是。
然而,存在可以通过深度学习解决的维度灾难的例子,即使用具有许多隐藏层的神经网络。高维偏微分方程给出了一个具有重要实际意义的示例,例如,参见本报告:
http://www.sam.math.ethz.ch/sam_reports/reports_final/reports2017/2017-44_fp.pdf
或者这个热方程的例子:
https://arxiv.org/abs/1901.10854
我还发现了这篇关于使用深度学习克服维度诅咒的评论: