传统学习算法在处理大量数据时表现出色,但在处理人工智能的核心问题,如感知任务(如语音识别和图像识别)和认知任务(如自然语言处理)方面显得力不从心。这些问题的核心在于传统学习算法在高维数据上的泛化能力较差,从而推动了深度学习的发展。
本文探讨了为什么传统学习算法在处理高维数据时泛化能力较差,而深度学习算法则具有更好的泛化能力。
在处理高维数据时,机器学习面临的一个主要问题是维度灾难。随着变量数量的增加,变量的不同组合数量会呈指数级增长。然而,我们往往缺乏足够的样本数据来覆盖所有可能的组合。
维度灾难带来的挑战之一是统计上的挑战。具体来说,输入空间的可能值数量远远超过训练样本的数量。为了更好地理解这一问题,我们可以将输入空间划分为多个网格。在低维空间中,少量的网格就能很好地描述特征空间。当遇到新数据点时,我们可以先找到它所在的网格,然后参考该网格中的训练样本来处理新数据点。例如,如果需要估计某点的概率密度,可以通过计算该点所在单位体积内的训练样本数量占总训练样本数量的比例来实现;如果需要对样本进行分类,可以选择该网格中出现次数最多的类别;如果是回归分析,则可以使用该网格中样本目标值的平均值。
然而,在高维空间中,可能的配置数量远大于样本数量,这意味着许多配置没有对应的样本。在这种情况下,传统学习算法通常只能简单地假设新数据点的输入与最近的训练数据点相同。但在高维空间中,这种假设并不总是有效。
上图展示了随着变量维度的增加,配置数量呈指数级增长的情况。左边是一维空间,可以用少量的网格来区分10个不同的状态,每个网格都有足够的训练样本支持。中间是二维空间,需要更多的网格来覆盖所有可能的状态。右边是三维空间,需要更多样本来覆盖更多的网格。
为了更好地泛化,机器学习算法需要一些先验知识来指导学习过程。在贝叶斯统计和最大后验概率中,我们通常会使用参数θ的先验概率P(θ)。最常见的先验类型是平滑先验或局部不变性先验,即所学函数在小范围内不应发生显著变化。换句话说,如果知道输入x对应的输出,那么在x的附近输入也应该具有相似的输出。如果在该范围内有多个输入,我们可以取其平均值来获得一个尽可能符合大多数输入的输出。
许多传统学习算法依赖于这种先验来实现良好的泛化效果,但这种方法难以应对感知任务和认知任务。在深度学习中,我们会引入额外的显式和隐式先验来减少泛化误差。
局部不变性的一个极端例子是K近邻算法。如果一个区域内的所有点x在训练数据集中与k个最近的样本相同,那么这些点x的处理方式也相同。在K近邻算法中,每个训练样本至少定义了一个区域,如下图所示。
是否有方法能够表示比训练样本数量更多的复杂函数呢?仅仅假设函数是局部不变的不足以解决这个问题。因为基于局部不变性先验,如果新数据点和某个训练样本在一个区域内,我们可以对新数据点进行预测,但如果新数据点所在的区域没有训练样本,我们就无法进行预测。因此,我们需要引入额外的假设来建立不同区域之间的依赖关系。例如,k个样本可以用来描述2^k个区域。通过这种方法,我们可以实现非局部的泛化。为了充分利用这些优势,许多不同的深度学习算法都提出了适用于多种人工智能任务的显式或隐式假设,比如目标函数是周期性的。
流形是指在数学上由一系列连续区域组成的几何结构,其中每个点都有邻域,并且可以通过某种变换从一个位置移动到另一个位置。例如,我们通常把地球看作是一个二维平面,但实际上它是一个三维空间中的球体流形,我们可以通过向东或向西移动来改变位置。
流形学习认为,我们观察到的数据实际上是低维流形在高维空间中的投影。高维空间中的维度冗余使得数据难以划分,但在低维流形中,数据可以很好地划分。流形学习的目标是学习流形上的特征,而不是高维空间中的无关特征。下图展示了训练数据集位于二维空间中的一维流形中。
数据位于低维流形的假设并不总是正确的。在图像识别、语音识别和自然语言处理等场景中,流形假设至少是近似的。当数据确实位于低维流形时,使用流形中的坐标而非高维空间中的坐标可以更好地处理数据。例如,在三维空间中,球面上一个点的坐标可以表示为(x, y, z),而在二维流形中,相同的点可以用极坐标θ和φ来表示。