为什么神经网络变得更深,而不是更宽?

机器算法验证 机器学习 分类 神经网络 深度学习 卷积神经网络
2022-02-08 18:09:07

近年来,卷积神经网络(或者一般来说可能是深度神经网络)变得越来越深,最先进的网络从 7 层(AlexNet)到 1000 层(Residual Nets)在 4年。从更深的网络提高性能的原因是可以学习更复杂的非线性函数。给定足够的训练数据,这使网络能够更容易地区分不同的类别。

然而,趋势似乎并没有随着每一层的参数数量而变化。例如,卷积层中的特征图数量,或者全连接层中的节点数量,尽管层数大幅增加,但基本保持不变,数量级仍然相对较小。但从我的直觉来看,增加每层参数的数量似乎会给每一层提供更丰富的数据源,从中学习其非线性函数;但是这个想法似乎被忽略了,只是简单地添加了更多的层,每个层都有少量的参数。

因此,虽然网络变得“更深”,但它们并没有变得“更宽”。为什么是这样?

4个回答

作为免责声明,我在研究中研究神经网络,但我通常使用相对较小的浅层神经网络,而不是您在问题中引用的前沿研究中的真正深层网络。我不是深网络的怪癖和特性方面的专家,我会听从专家的意见。

首先,原则上,根本没有理由需要深度神经网络。在给定足够的训练数据的情况下,只有一个隐藏层的足够宽的神经网络可以逼近任何(合理的)函数。然而,使用极宽、浅层的网络存在一些困难。 主要问题是这些非常广泛、浅层的网络非常擅长记忆,但不太擅长泛化因此,如果您使用每个可能的输入值训练网络,超宽网络最终可以记住您想要的相应输出值。但这没有用,因为对于任何实际应用程序,您都不会使用所有可能的输入值进行训练。

多层的优点是可以学习不同抽象层次的特征例如,如果你训练一个深度卷积神经网络对图像进行分类,你会发现第一层将训练自己识别边缘等非常基本的事物,下一层将训练自己识别形状等边缘的集合,下一层层将训练自己识别眼睛或鼻子等形状的集合,而下一层将学习更高阶的特征,如面部。 多层在泛化方面要好得多,因为它们学习了原始数据和高级分类之间的所有中间特征。

这就解释了为什么你可能使用深度网络而不是非常宽但浅的网络。但为什么不是一个非常深、非常宽的网络呢?我认为答案是您希望您的网络尽可能小以产生良好的结果。随着网络规模的增加,实际上只是引入了更多网络需要学习的参数,从而增加了过度拟合的机会。 如果你构建了一个非常宽、非常深的网络,那么每一层都有可能只记住你想要的输出,而你最终会得到一个无法泛化到新数据的神经网络。

除了过度拟合的幽灵之外,您的网络越广泛,训练所需的时间就越长训练深度网络的计算成本已经很高,因此有强烈的动机让它们足够宽以使其工作良好,但不能更宽。

我认为您的问题没有明确的答案。但我认为传统智慧如下:

基本上,随着学习算法的假设空间的增长,算法可以学习到越来越丰富的结构。但与此同时,算法变得更容易过拟合,泛化误差可能会增加。

因此,最终,对于任何给定的数据集,建议使用具有足够能力学习数据真实结构的最小模型。但这是一个非常随意的建议,因为通常“数据的真实结构”是未知的,而且通常甚至候选模型的能力也只是模糊地了解。

对于神经网络,假设空间的大小由参数的数量控制。似乎对于固定数量的参数(或固定数量级),更深入可以让模型捕获更丰富的结构(例如本文)。

这可能部分解释了参数较少的更深层次模型的成功:VGGNet(从 2014 年开始)有 16 层,参数约为 140M,而 ResNet(从 2015 年开始)以 152 层但只有 ~2M 参数击败了它

(另一方面,较小的模型在计算上可能更容易训练——但我认为这本身并不是一个主要因素——因为深度实际上使训练复杂化)

请注意,这种趋势(更多深度,更少参数)主要存在于与视觉相关的任务和卷积网络中,这需要特定领域的解释。所以这里有另一个观点:

卷积层中的每个“神经元”都有一个“感受野”,即影响每个输出的输入的大小和形状。直观地说,每个内核都会捕获附近输入之间的某种关系。小内核(常见且可取)具有较小的感受野,因此它们只能提供有关局部关系的信息。

但是随着你走得更深,每个神经元相对于更早的层的感受野变得更大。因此,深层可以提供具有全局语义意义和抽象细节的特征(关系的关系......对象的关系),同时只使用小内核(它规范了网络学习的关系,并帮助它收敛和泛化)。

因此,深度卷积网络在计算机视觉中的有用性可能部分由图像和视频的空间结构来解释。时间可能会告诉我们,对于不同类型的问题,或者对于非卷积架构,深度实际上并不能很好地发挥作用。

添加更多功能会有所帮助,但在添加大量功能后,好处很快就会变得微不足道。这就是为什么像PCA这样的工具可以工作的原因之一:一些组件捕获了功能中的大部分差异。因此,在某个时间点之后添加更多功能几乎是无用的。

另一方面,为特征找到合适的函数总是一个好主意。然而,如果你没有一个好的理论,当然很难提出一个正确的函数。因此,添加层作为蛮力方法的形式很有帮助。

考虑一个简单的例子:汽车的空气阻力说,我们不知道等式:

fCρAv2/2
在哪里A- 汽车的横截面积,ρ- 空气密度,和v- 汽车的速度。我们可以认为汽车测量值很重要,并将它们添加为特征,汽车的速度也会加入。所以我们不断添加功能,可能会添加气压、温度、汽车的长度、宽度、座位数等。

我们最终会得到一个像

fiβixi
您会看到,除非我们添加所有交互作用和多项式,否则这些特征不会将自己组装成“真实”方程。然而,如果真正的方程不是方便的多项式,比如它有指数或其他奇怪的超越函数,那么我们就没有机会通过扩展特征集或扩大网络来模拟它。

然而,使网络更深很容易让你只用两层就得到上面的等式。更复杂的功能需要更多的层,这就是为什么加深层数可能是解决许多问题的一种方法。

对于深度连接的密集神经网络d和宽度w,参数的数量(因此,运行或训练网络所需的 RAM)为O(dw2). 因此,如果您只有有限数量的参数,则通常更倾向于大幅增加深度而不是小幅增加宽度。

您为什么要尝试限制参数的数量?几个原因:

  • 您正在尝试避免过度拟合。(虽然限制参数的数量是实现这一目标的一种非常生硬的手段。)
  • 如果您可以使用相同数量的参数超越其他人的模型,您的研究会更令人印象深刻。
  • 如果模型(如果您使用 Adam,则加上矩参数)可以容纳在单个 GPU 的内存中,那么训练您的模型会容易得多。
  • 在现实生活中的应用程序中,为模型提供服务时,RAM 通常很昂贵。对于在例如手机上运行模型尤其如此,但有时甚至可以应用于从云中提供模型。

在哪里O(dw2)来自?对于两个相邻的宽度层w1,w2, 它们之间的联系由 a 描述w1×w2. 所以如果你有(d2)层宽w(加上一个输入和一个输出层),参数的数量是

(d2)w2+w(input layer width)+w(output layer width)=O(dw2).
有时使用的替代策略不是限制宽度,而是使用稀疏连接。例如,在初始化网络拓扑时,您可以以概率承认每个连接1/w所以参数的总数是O(dw). 但是如果你这样做,不清楚增加宽度是否一定会增加模型的学习能力。