为什么神经网络可以泛化?

人工智能 神经网络 机器学习 过拟合 计算学习理论 概括
2021-11-17 00:49:01

神经网络非常擅长学习功能。我们通过通用逼近定理知道,理论上,它们可以采用几乎任何函数的形式——实际上,它们似乎特别适合学习正确的参数。然而,我们在训练神经网络时经常不得不解决的问题是过度拟合——复制训练数据而不是推广到验证集。过度拟合的解决方案通常是简单地添加更多数据,合理化是在某一点上,神经网络几乎别无选择,只能学习正确的函数。

但这对我来说从来没有多大意义。没有理由,就损失而言,神经网络应该更喜欢一个泛化好的函数(即你正在寻找的函数)而不是一个在训练数据上表现得非常好的并且在其他任何地方都失败的函数。事实上,过拟合通常有损失优势。同样,有无数个函数可以拟合训练数据,但除此之外都没有成功。

那么为什么神经网络几乎总是(尤其是对于更简单的数据)偶然发现我们想要的函数,而不是无限的其他选项之一?为什么神经网络在没有激励的情况下擅长泛化?

4个回答

您提出的问题基本上是关于神经网络的最重要的开放性问题之一。答案是一个巨大的谜——对这个问题的任何回应都会立即以所谓的解释开始,这基本上是荒谬的。我们不知道。

正如您所指出的,问题在于训练集根本不包含足够的信息来唯一指定目标函数。在一个无限的输入域上Rn,没有有限数量的样本足以唯一地确定单个函数,即使是近似的。即使考虑到输入的边界和离散化,甚至考虑到我们的架构对输出函数施加的对称性,与输入域的大小相比,我们的训练集也是微观的。神经网络每天都能成功解决的问题应该是不可能的。

您可以在低维输入空间中考虑这一点以获得一些直觉。在单位正方形上进行监督二元分类(即您的输入是一对数字)相当于尝试通过查看其某些像素的随机样本来确定单色图像。就训练集的大小相对于输入域的大小而言,神经网络在 MNIST 之类的图像分类任务上所做的相当于,例如,通过观察 20 个随机像素几乎完美地猜测 1000x1000 单色图像,并且即使是 20 也可能是慷慨的。这项任务是不可能的——除非你知道目标图像是什么。如果您知道图像(目标函数)仅限于某个集合H函数,那么您也许可以从有限样本中近似确定它。神经网络必须在某种意义上隐含地做到这一点,具有一些“好”的功能H它似乎恰好包含(近似于)我们实际上希望他们学习的许多功能,例如所有图像空间上的“是一只猫”功能。

对这些“好”函数集的研究,特别是在学习可能之前它们需要多小,是统计学习理论的主题。但我不知道有什么合理的答案H可能用于神经网络。

泛化通常不仅仅是增加训练数据。它有助于通过各种方式使任务变得嘈杂。一种常见且流行的方法是使用 dropout,它鼓励网络利用每个节点,并避免对小型节点集群的依赖。

那么让任务变得更嘈杂如何有助于泛化呢?好吧,用一个概念性的例子很容易解释,但我认为这不是你要找的,而是一种更数学的方法。

考虑它的最佳方法是使用仅 2 维的多项式数据集的简单示例。如果考虑到这一点,以及网络通过反向传播缓慢接近最优值的方式,分类边界逐渐接近最优值的概念(在所有情况下都是过拟合函数)并不太牵强。

现在考虑到这一点,这表明为了正确训练网络,我们需要一些方法来确定网络何时不是超级接近最优值(因为到那时它会过度拟合)但也不是到目前为止,它比随机挑选更糟糕。这是提高泛化能力的方法,我们想达到那个最佳点。

如果学习率太高,我们将超过那个最佳点并完全错过(范围有时可能非常小),如果它太低,我们可能会陷入微小的局部最小值并且永远无法逃脱,或者可能需要数年时间到达它。

使用之前的 dropout 示例,这会增加噪声,并使网络上的训练更加困难。由于训练难度更大,网络以较慢的速度接近最优函数,并且在网络泛化良好时更容易削减训练。

方便地,这也扩展到 n 维问题。现在,据我所知,没有可靠的数学证据证明这为什么适用于 n 维问题。这样做的原因,解释了为什么神经网络甚至存在:我们不知道如何在数学上将这些问题分类到神经网络自己做的程度正因为如此,我们的知识总会有空白。如果不让它们过时,我们将永远无法定量地说明神经网络在做什么。因此,在我们自己弄清楚之前,我们只需要对看不见的数据进行测试,看看网络是否确实已经泛化。

最近的一篇论文对此给出了答案:
协调现代机器学习实践和偏差-方差权衡Mikhail Belkin、Daniel Hsu、Siyuan Ma、Soumik Mandal
https://arxiv.org/abs/1812.11118
https://www.pnas.org/content/116/32/15849

我可能没有资格总结,但听起来他们推测的机制是:通过拥有比完美插值训练数据所需的参数多得多的参数,可能的结果函数的空间扩展到包括“更简单”的函数(这里更简单显然不是意味着更少的参数,而是像“更少摆动”之类的东西,即使在完美地插值训练集时也能更好地泛化。

这似乎与更传统的通过 dropout、正则化等降低容量的 ML 方法完全正交。

神经网络由连续函数组成。通过在损失函数的权重上添加 l2 惩罚来对神经网络进行正则化。这意味着神经网络将尝试使权重尽可能小。权重也使用 N(0, 1) 分布进行初始化,因此初始权重也往往很小。所有这一切意味着神经网络将计算一个尽可能平滑的连续函数,同时仍能拟合数据。平滑是指相似的输入在通过神经网络运行时往往具有相似的输出。更正式地说,||xy||小暗示||f(x)f(y)||small 其中 f 表示神经网络的输出。这意味着如果神经网络看到一个新的输入x接近训练数据的输入y, 然后f(x)会趋于接近f(y). 所以最终的结果是神经网络会分类x基于附近训练示例的标签是什么。所以神经网络实际上有点像k近邻。

神经网络泛化的另一种方法是使用不变性。例如,卷积神经网络是近似平移不变的。因此,这意味着如果它看到并成像相关对象已被翻译的位置,那么它仍然会识别该对象。

但它并没有给我们想要的确切功能。损失函数是分类准确性和减小权重的组合,以便您可以使用尽可能平滑的函数拟合数据。由于我之前所说的原因,这往往可以很好地概括,但这只是一个近似值。您可以使用高斯过程的最小假设更准确地解决问题,但高斯过程太慢而无法处理大量数据。