序言
深度学习是机器学习的一个特定分支。要想学好深度学习,必须对机器学习的基本原理有深刻的理解。
首先,我们将介绍学习算法的定义,并介绍一个简单的示例:线性回归算法。接下来,我们会探讨拟合训练数据和泛化到新数据之间有哪些不同的挑战。大部分机器学习算法都有超参数(必须在学习算法外设定);我们将讨论如何使用额外的数据设置超参数。机器学习本质上属于应用统计学,更多关注于如何用计算机统计地估计复杂函数,不太关注为这些函数提供置信区间;因此我们会探讨两种统计学的主要方法:频率估计和贝叶斯推断。大部分机器学习算法可以分成监督学习和无监督学习两类;我们将探讨不同的分类,并为每类提供一些简单的机器学习算法作为示例。大部分深度学习算法都基于随机梯度下降求解。我们将介绍如何组合不同的算法部分,例如优化算法、 代价函数、模型和数据集,来建立一个机器学习算法。最后,我们会介绍一些限制传统机器学习泛化能力的因素。这些挑战促进了解决这些问题的深度学习算法的发展。
容量、过拟合和欠拟合
-
机器学习的主要挑战是我们的算法必须能够在先前未观测的新输入上表现良好,而不只是在训练集上效果好。
-
- 在先前未观测到的输入上表现良好的能力被称为泛化 (generalization)。
-
- 通常情况下,当我们训练机器学习模型时,我们可以访问训练集,在训练集上计算一些度量误差,被称为训练误差 (training error),并且我们会降低训练误差。
-
泛化误差/测试误差 (generalization error/test error):
- 目前为止,我们讨论的是一个简单的优化问题。 机器学习和优化不同的地方在于,我们也希望泛化误差 (generalization error),也被称为测试误差 (test error),很低。
- 泛化误差被定义为新输入的误差期望。这里,期望取值自我们期望系统在现实中从输入分布中采样得到的不同可能值。
-
通常,我们度量模型在训练集中分出来的测试集 (test set)样本上的性能,来评估机器学习模型的泛化误差。
-
在我们的线性回归实例中,我们通过最小化训练误差来训练模型:
1 m ( train ) ∥ X ( train ) w − y ( train ) ∥ 2 2 \displaystyle{\frac{1}{m^{(\text{train})}}} \Vert \boldsymbol{X}^{(\text{train})} \boldsymbol{w} - \boldsymbol{y}^{(\text{train})} \Vert^2_2 m(train)1∥X(train)w−y(train)∥22
但是我们真正关注的是测试误差,即
1 m ( test ) ∥ X ( test ) w − y ( test ) ∥ 2 2 \displaystyle{\frac{1}{m^{(\text{test})}}} \Vert \boldsymbol{X}^{(\text{test})} \boldsymbol{w} - \boldsymbol{y}^{(\text{test})} \Vert^2_2 m(test)1∥X(test)w−y(test)∥22 -
当我们只能观测到训练集时,我们如何才能影响测试集的性能呢?统计学习理论(statistical learning theory)提供了一些答案。
- 如果训练集和测试集的数据是任意收集的,那么我们能够做的确实很有限。
- 如果我们可以对训练集和测试集数据的收集方式有些假设,那么我们能够对算法做些改进。
-
训练集和测试集数据通过数据集上被称为数据生成过程(data generating process)的概率分布生成。
-
通常,我们会做一系列假设,被统称为独立同分布假设(independence and identically distributed assumption, i.i.d. assumption)。
- 该假设是说,每个数据集中样本都是彼此相互独立的(independent),并且训练集和测试集是同分布(identically distributed),采样自相同的分布。
- 这个假设使我们能够在单个样本上用概率分布描述数据生成过程。然后相同的分布可以用来生成每一个训练样本和每一个测试样本。
- 我们将这个共享的潜在分布称为数据生成分布(data generating distribution),记作 p data p_{\text{data}} pdata。这个概率框架和独立同分布假设允许我们数学地研究训练误差和测试误差之间的关系。
-
我们能观察到训练误差和测试误差之间的直接联系是,随机模型训练误差的期望和该模型测试误差的期望是一样的。
-
假设我们有概率分布 p ( x , y ) p(\boldsymbol{x},y) p(x,y),从中重复采样生成训练集和测试集。对于某个固定的 w \boldsymbol{w} w,训练集误差的期望恰好和测试集误差的期望一样,这是因为这两个期望的计算都是用相同的数据集生成过程。这两种情况的唯一区别是数据集的名字不同。
-
当然,当我们使用机器学习算法时,我们不会提前固定参数,然后从数据集中采样。我们会在训练集上采样,然后挑选参数去降低训练集误差,然后再在测试集上采样。在这个过程中,测试误差期望会大于或等于训练误差期望。以下是决定机器学习算法效果是否好的因素:
- 降低训练误差;
- 缩写训练误差和测试误差之间的差距
-
欠拟合 (underfitting)和过拟合 (overfitting):
- 上述这两个因素对应机器学习的两个主要挑战:欠拟合 (underfitting)和过拟合 (overfitting)。
- 欠拟合发生于模型不能在训练集上获得足够低的误差。
- 过拟合发生于训练误差和测试误差之间的差距太大。
- 上述这两个因素对应机器学习的两个主要挑战:欠拟合 (underfitting)和过拟合 (overfitting)。
-
- 通过调整模型的容量 (capacity),我们可以控制模型是否偏向于过拟合或者欠拟合。
- 定义:
- 通俗地,模型的容量是指其拟合各种函数的能力。
- 容量低的模型可能很难拟合训练集。
- 容量高的模型可能会过拟合,因为记住了不适用于测试集的训练集性质。
-
- 定义:
- 一种控制训练算法容量的方法是选择假设空间 (hypothesis space),即能够选为解决方案的学习算法函数集。
- 例如,
- 线性回归函数将关于其输入的所有线性函数作为假设空间。
- 广义线性回归的假设空间包括多项式函数,而非仅有线性函数。这样增加了模型的容量。
- 定义:
-
一次多项式提供了我们已经熟悉的线性回归模型,
- 其预测,如: y ^ = b + w x \hat{y} = b + wx y^=b+wx
- 通过引入 x 2 x^2 x2作为线性回归模型的另一个特征,我们能够学习关于 x x x的二次函数模型: y ^ = b + w 1 x + w 2 x 2 \hat{y} = b + w_1 x + w_2 x^2 y^=b+w1x+w2x2。
- 尽管该模型是输入的二次函数,但输出仍是参数的线性函数。因此我们仍然可以用正规方程得到模型的闭解。我们可以继续添加 x x x的更高幂作为额外特征。例如,9次多项式: y ^ = b + ∑ i = 1 9 w i x i \hat{y} = b + \sum\limits_{i=1}^9 w_i x^i y^=b+i=1∑9wixi。
-
当机器学习算法的容量适合于所执行任务的复杂度和所提供数据的数量时,算法效果会最佳。
-
容量不足的模型不能解决复杂任务。
-
容量高的模型能够解决复杂的任务,但是当其容量高于任务时,有可能会过拟合。
-
例如,我们比较了线性,二次和9次预测器拟合二次真实函数的效果。
- 线性函数无法刻画真实函数的曲率,所以欠拟合。
- 9次函数能够表示正确的函数,但是因为训练参数比训练样本还多,所以它也能够表示无限多个刚好穿越训练样本点的很多其他函数。我们不太可能从这很多不同的解中选出一个泛化良好的。在这个问题中,二次模型非常符合任务的真实结构,因此它可以很好地泛化到新数据上。
-
说明:
- 我们用了三个模型拟合了这个训练集的样本。
- 训练数据是通过随机抽取 x x x然后用二次函数确定性地生成 y y y来合成的。
- 左图,用一个线性函数拟合数据会导致欠拟合。 它无法捕捉数据中的曲率信息。
- 中图,用二次函数拟合数据在为观察到的点上泛化的很好。这并不会导致明显的欠拟合或过拟合。
- 右图,一个9阶的多项式拟合数据会导致过拟合。在这里我们使用Moore-Penrose伪逆来解决这个欠定的正规方程。得出的解能够精确的穿过所有的训练点,但不幸的是我们无法提取有效的结构信息。在两个数据点之间它有一个真实的函数所包含的深谷。在数据的左侧,它也会急剧增长,在这一区域真实的函数却是下降的。
-
-
目前为止,我们探讨了通过改变输入特征的数目,和加入这些特征对应的参数,改变模型的容量。
- 事实上,还有很多方法可以改变模型的容量。容量不仅取决于模型的选择。
- 模型规定了调整参数降低训练对象时,学习算法可以从哪些函数族中选择函数。这被称为模型的表示容量 (representational capacity)。
- 在很多情况下,从这些函数中挑选出最优函数是非常困难的优化问题。
- 实际中,学习算法不会真的找到最优函数,而仅是找到一个可以降低训练误差很多的函数。
- 额外的限制因素,比如优化算法的不完美,意味着学习算法的有效容量 (effective capacity) 可能小于模型族的表示容量。
-
奥卡姆剃刀 (Occam’s razor)
- 提高机器学习模型泛化的现代思想可以追溯到早在托勒密时期的哲学家的思想。
许多早期的学者提出一个简约原则,现在被广泛称为奥卡姆剃刀 (Occam’s razor, 1287-1387)。该原则指出,在同样能够解释已知观测现象的假设中,我们应该挑选“最简单”的那一个。这个想法是在20世纪,由统计学习理论创始人Vapnik and Chervonenkis提出来并精确化的。
- 提高机器学习模型泛化的现代思想可以追溯到早在托勒密时期的哲学家的思想。
-
Vapnik-Chervonenkis维度(VC dimension):
- 统计学习理论提供了量化模型容量的不同方法。在这些中,最有名的Vapnik-Chervonenkis维度 (Vapnik-Chervonenkis dimension, VC)。
- VC维度量二元分类器的容量。
- VC维度定义为该分类器能够分类的训练样本的最大数目。假设存在 m m m个不同 x \boldsymbol{x} x点的训练集,分类器可以任意地标记该 m m m个不同的 x \boldsymbol{x} x点, VC维被定义为 m m m的最大可能值。
-
量化模型的容量使得统计学习理论可以进行量化预测。
- 统计学习理论中最重要的结论阐述了训练误差和泛化误差之间差异的上界随着模型容量增长而增长,但随着训练样本增多而下降。
- 这些边界为机器学习算法可以有效解决问题提供了理论验证,但是它们很少应用于实际中的深度学习算法。
- 一部分原因是边界太松,另一部分原因是很难确定深度学习算法的容量。
- 确定深度学习模型容量的问题特别困难是由于有效容量受限于优化算法的能力。
- 对于深度学习中的一般非凸优化问题,我们只有很少的理论分析。
-
我们必须记住虽然更简单的函数更可能泛化(训练误差和测试误差的差距小),但我们仍然需要选择一个充分复杂的假设以达到低的训练误差。
-
通常,当模型容量上升时,训练误差会下降,直到其渐近最小可能误差(假设误差度量有最小值)。
-
通常,泛化误差是一个关于模型容量的 U \text{U} U形曲线函数。
-
说明:
-
-
非参数 (non-parametric):
- 考虑任意高容量的极端情况,我们介绍非参数 (non-parametric) 模型的概念。至此,我们只探讨过参数模型,例如线性回归。参数模型学习到的函数在观测新数据前,参数是有限且固定的向量。
- 非参数模型没有这些限制。
- 有时,非参数模型仅是一些不能实际实现的理论抽象(比如搜索所有可能概率分布的算法)。然而,我们也可以设计一些实用的非参数模型,使它们的复杂度和训练集大小有关。这种算法的一个实例是最近邻回归 (nearest neighbor regression)。不像线性回归有固定长度的向量作为权重,最近邻回归模型存储了训练集中所有的 X \boldsymbol{X} X和 y \boldsymbol{y} y。
- 说明:
- 当需要为测试点 x \boldsymbol{x} x分类时,模型会查询训练集中离该店最近的点,并返回相关的回归目标。换言之, y ^ = y i \hat{y} = y_i y^=yi其中 i = arg min ∥ X i , : − x ∥ 2 2 i = \argmin \lVert \boldsymbol{X}_{i,:} - \boldsymbol{x} \rVert_2^2 i=argmin∥Xi,:−x∥22。
- 该算法也可以扩展成 L 2 L^2 L2范数以外的距离度量。
- 如果该算法通过平均 X i , : \boldsymbol{X}_{i,:} Xi,:中所有最近的向量对应的 y i y_i yi来打破平局,那么该算法会在任意回归数据集上达到最小可能的训练误差(如果存在两个相同的输入对应不同的输出,那么训练误差可能会大于零。)
-
最后,我们也可以将参数学习算法嵌入另一个依所需增加参数数目的算法来创建非参数学习算法。例如,我们可以想象一个算法,外层循环调整多项式的次数,内层循环通过线性回归学习模型。
-
贝叶斯误差(Bayes error):
- 理想模型假设我们能够预先指导生成数据的真实概率分布。
- 然而这样的模型仍然会在很多问题上发生一些错误,因为分布中仍然会有一些噪扰。
- 在监督学习中,从 x \boldsymbol{x} x到 y y y的映射可能内在是随机的,或者 y y y可能是包括 x \boldsymbol{x} x在内还有其他变量的确定性函数。
- 从预先知道的真实分布 p ( x , y ) p(\boldsymbol{x}, y) p(x,y)预测而出现的误差被称为贝叶斯误差(Bayes error)。
-
训练误差和泛化误差随训练集的大小发生变化。
- 泛化误差的期望不会随着训练样本数目的增加而增加。
- 对于非参数模型而言,更多的数据会得到更好的泛化能力,直到达到最佳可能的泛化误差。
-
任何模型容量小于最优容量的固定参数模型会渐近到大于贝叶斯误差的误差值。如容量和误差之间的典型关系图所示。值得注意的是,具有最优容量的模型仍然有可能在训练误差和泛化误差之间存在很大的差距。在这种情况下,我们可以通过收集更多的训练样本来缩小差距。
-
机器学习中没有免费午餐定理(No Free Lunch Theorem):
- 学习理论表明机器学习算法能够从有限个训练集样本中很好地泛化。这似乎违背一些基本的逻辑原则。归纳推理,或是从一组有限的样本中推断一般的规则,在逻辑上不是很有效。逻辑地推断一个规则去描述集合中的元素,我们必须具有集合中每个元素的信息。
- 在一定程度上,机器学习仅通过概率法则就可以避免这个问题,而无需使用纯逻辑推理整个确定性法则。机器学习保证找到一个关注的大多数样本可能正确的规则。
- 不幸的是,即使这样也不能解决整个问题。机器学习的没有免费午餐定理 (no free lunch theorem) 表明,在所有可能的数据生成分布上平均,每一个分类算法在未事先观测的点上都有相同的错误率。换言之,在某种意义上,没有一个机器学习算法总是比其他的要好。我们能够设想的最先进的算法和简单地将每一个点归为同一类的简单算法有着相同的平均性能(在所有可能的任务上)。
- 幸运的是,这些结论仅在我们考虑所有可能的数据生成分布时才成立。在现实世界的应用中,如果我们对遇到的概率分布进行假设的话,那么我们可以设计在这些分布上效果良好的学习算法。
- 这意味着机器学习研究的目标不是找一个通用学习算法或是绝对最好的学习算法。反之,我们的目标是理解什么样的分布和人工智能获取经验的“真实世界”相关,什么样的学习算法在我们关注的数据生成分布上效果最好。
-
- 没有免费午餐定理暗示我们必须在特定任务上设计性能良好的机器学习算法。我们建立一组学习算法的偏好来达到这个要求。当这些偏好和我们希望算法解决的学习问题相吻合时,性能会更好。
- 算法的效果不仅受影响于假设空间的函数数量,也取决于这些函数的具体形式。
- 例如,我们可以加入权重衰减(weight decay)来修改线性回归的训练标准。带权重衰减的线性回归最小化,训练集上的均方差和正则项的和
J
(
w
)
J(\boldsymbol{w})
J(w),偏好于平方
L
2
L^2
L2范数较小的权重。具体如:
J
(
w
)
=
MSE
train
+
λ
w
⊤
w
J(\boldsymbol{w}) = \text{MSE}_{\text{train}} + \lambda \boldsymbol{w}^\top \boldsymbol{w}
J(w)=MSEtrain+λw⊤w
- 其中 λ \lambda λ是提前挑选的值,控制我们偏好小范数权重的程度。
- 当 λ = 0 \lambda = 0 λ=0,我们没有任何偏好。越大的 λ \lambda λ偏好范数越小的权重。
- 最小化 J ( w ) J(\boldsymbol{w}) J(w)可以看作是拟合训练数据和偏好小权重范数之间的权衡。这会使得解决方案的斜率较小,或是将权重放在较少的特征上。
- 我们可以训练具有不同 λ \lambda λ值的高次多项式,来举例说明如何通过权重衰减控制模型欠拟合或过拟合的趋势。
- 一般地,正则化一个学习函数 f ( x ; θ ) f(\boldsymbol{x}; \theta) f(x;θ)的模型,我们可以给代价函数添加被称为正则化项(regularizer)的惩罚。
- 正则化是指导我们对学习算法所做的降低泛化误差而非训练误差的修改。正则化是机器学习领域的中心问题之一,能够和其重要性媲美的只有优化。
- 没有免费午餐定理已经清楚阐述了没有最优的学习算法,特别地,没有最优的正则化形式。反之,我们必须挑选一个非常适合于我们要解决任务的正则形式。深度学习中普遍的理念是大量任务(例如所有人类能做的智能任务)也许都可以使用非常通用的正则化项(regularizer)来有效解决。
总结
深度学习容量指的是模型能够表示和学习复杂函数的能力。当模型容量过大时,它可能会过于精确地拟合训练数据,导致对未知数据的预测性能下降,这种现象称为过拟合。过拟合的模型在训练集上表现良好,但在测试集上性能不佳。相反,如果模型容量不足,它可能无法捕捉到数据的复杂模式,导致在训练集和测试集上的性能都较差,这被称为欠拟合。为了避免过拟合和欠拟合,通常需要采取如数据增强、正则化、调整模型结构等策略来平衡模型的容量和泛化能力。