通过对神经网络的研究,我发现神经网络的每一层都负责识别输入数据的一个特征。例如,如果我们构建一个对汽车、公共汽车、货车和自行车进行分类的神经网络,那么一层将负责识别轮胎,另一层将负责识别车辆的尺寸。问题是,为什么这是真的?即每一层的表现都与其他层相似,并且每一层都没有特殊设计。有没有办法给每一层分配一个特定的特征或者它是隐式完成的?
神经网络的每一层如何负责一个特征
... 神经网络的每一层都负责识别输入数据的一个特征。例如,如果我们构建一个对汽车、公共汽车、货车和自行车进行分类的神经网络,那么一层将负责识别轮胎,另一层将负责识别车辆的尺寸。
神经网络有很多种,它们内部使用了不同的可微组件来实现端到端学习。卷积层负责找到对减少错误至关重要的特征。这些特征在不同节点之间共享,对我们来说不一定有意义。由于在不同的权重之间共享,它们必须同时使用。你想说的是,在卷积网络中,第一层试图找到低级特征,如垂直和水平边缘,而更深的卷积层试图找到更抽象的高级特征。但这里的重点是他们试图识别他们这样做的方式是使用在不同激活图中共享的权重和激活。因此,一个神经元不一定负责人脸或汽车。可能有不同的神经元和过滤器负责它们。看看已经说明了这一点的链接。
另一点是关于负责分类的全连接层。他们所做的是找到决策边界以对输入进行分类或估计回归任务的函数。它们不是卷积层那样的特征提取器。正如引用的链接中所示,他们试图做的是分离输入空间,以便在当前特征空间中进行泛化。
问题是,为什么这是真的?即每一层的表现都与其他层相似,并且每一层都没有特殊设计。有没有办法给每一层分配一个特定的特征或者它是隐式完成的?
如前所述,这不是真的。尽管每一层看起来都与其他层相似,但由于成本函数,它们的相应权重被设置为降低成本函数。因此,对于全连接层,所有特征都馈送到每一层中的所有神经元,训练过程决定如何使用它们。此外,卷积层试图在输入模式中找到相似的模式、内核。
实际上,传统的神经网络不会从数据中提取特征。这意味着您无法获得例如第二层的输出并将它们提供给另一个机器学习算法。如果您想从数据中提取特征,您应该使用自动编码器(特殊类型的神经网络),但即使在自动编码器中,特征提取过程也是自动化的,并由模型(神经网络)本身管理。因此,即使使用自动编码器,您也无法为每一层分配特定的特征。
首先,神经网络是一个黑盒模型,没有办法真正知道每一层在实践中的作用。已经创建的示例有助于解释可能发生的概念过程。汽车示例和 Eigen-face 示例是我想到的两个示例。实际上,这些都是精心定制的示例,可以帮助人们理解深度学习与单层神经网络。我的猜测是,一些实习生或研究生偶然发现了为示例生成“功能”的配置。虽然有一些工具可以输出隐藏层,但在实践中通常不需要这样做。
正如您所注意到的,除了开发人员选择的激活函数之外,层的功能没有区别。
这在实践中意味着没有启发式方法可以确定神经网络的最佳形状或深度。回到汽车的例子,从记忆中,它暗示模型是一个三层或四层神经网络,但你不知道每个隐藏层中有多少个节点或每层使用的激活函数。
实际上,模型的性能可能会在模型中有任意数量的变化时更好,例如时期的数量、隐藏层的数量、每个隐藏层中的节点或每层的激活函数。定义模型确实比其他模型更直观和原型设计(想想线性回归)。这就是良好的网格搜索可以提供帮助的地方。