深度学习是机器学习的一个特定分支。我们要想充分理解深度学习,必须对机器学习的基本原理有深刻的理解。
5.1 学习算法
机器学习算法是一种能够从数据中学习的算法。然而,我们所谓的 ‘学习’ 是什么意思呢?Mitchell (1997) 提供了一个简洁的定义:‘‘对于某类任务 T 和性能度量P ,一个计算机程序被认为可以从经验 E 中学习是指,通过经验 E 改进后,它在任务 T 上由性能度量 P 衡量的性能有所提升。”
5.1.1 任务 T
通常机器学习任务定义为机器学习系统应该如何处理
样本(example)。样本是指我们从某些希望机器学习系统处理的对象或事件中收集到的已经量化的
特征(feature)的集合。我们通常会将样本表示成一个向量 x ∈ R n ,其中向量的每一个元素 x i 是一个特征。例如,一张图片的特征通常是指这张图片的像素值。
机器学习可以解决很多类型的任务。一些非常常见的机器学习任务列举如下:
分类、输入缺失分类、回归、转录、机器翻译、结构化输出、异常检测、合成和采样、缺失值填补、去噪、密度估计或概率质量函数估计。
5.1.2 性能度量 P
为了评估机器学习算法的能力,我们必须设计其性能的定量度量。通常性能度量 P 是特定于系统执行的任务 T 而言的。
对于诸如分类、缺失输入分类和转录任务,我们通常度量模型的
准确率(accuracy)。准确率是指该模型输出正确结果的样本比率。我们也可以通过
错误率(errorrate)得到相同的信息。错误率是指该模型输出错误结果的样本比率。我们通常把错误率称为 0 − 1损失的期望。在一个特定的样本上,如果结果是对的,那么 0 − 1损失是 0;否则是 1。但是对于密度估计这类任务而言,度量准确率,错误率或者其他类型的 0 − 1损失是没有意义的。反之,我们必须使用不同的性能度量,使模型对每个样本都输出一个连续数值的得分。最常用的方法是输出模型在一些样本上概率对数的平均值。
5.1.3 经验 E
根据学习过程中的不同经验,机器学习算法可以大致分类为 无监督(unsupervised)算法和 监督(supervised)算法。
无监督学习算法(unsupervised learning algorithm)训练含有很多特征的数据集,然后学习出这个数据集上有用的结构性质。在深度学习中,我们通常要学习生成数据集的整个概率分布,显式地,比如
密度估计,或是隐式地,比如
合成或去噪。还有一些其他类型的无监督学习任务,例如
聚类,将数据集分成相似样本的集合。
监督学习算法(supervised learning algorithm)训练含有很多特征的数据集,不过数据集中的样本都有一个 标签(label)或 目标(target)。例如,Iris 数据集注明了每个鸢尾花卉样本属于什么品种。监督学习算法通过研究 Iris 数据集,学习如何根据测量结果将样本划分为三个不同品种。
监督学习算法(supervised learning algorithm)训练含有很多特征的数据集,不过数据集中的样本都有一个 标签(label)或 目标(target)。例如,Iris 数据集注明了每个鸢尾花卉样本属于什么品种。监督学习算法通过研究 Iris 数据集,学习如何根据测量结果将样本划分为三个不同品种。
有些机器学习算法并不是训练于一个固定的数据集上。例如,
强化学习(reinforcement learning)算法会
和环境进行交互,所以学习系统和它的训练过程会有反馈回路。
5.2 容量、过拟合和欠拟合
机器学习的主要挑战是我们的算法必须能够在先前未观测的新输入上表现良好,而不只是在训练集上表现良好。在先前未观测到的输入上表现良好的能力被称为
泛化(generalization)。
通常情况下,当我们训练机器学习模型时,我们可以使用某个训练集,在训练集上计算一些被称为
训练误差(training error)的度量误差,目标是降低训练误差。
目前为止,我们讨论的是一个简单的优化问题。机器学习和优化不同的地方在于,我们也希望 泛化误差(generalization error)(也被称为 测试误差(test error))很低。
泛化误差被定义为新输入的误差期望。这里,期望的计算基于不同的可能输入,这些输入采自于系统在现实中遇到的分布。通常,我们度量模型在训练集中分出来的 测试集(test set)样本上的性能,来评估机器学习模型的泛化误差。
目前为止,我们讨论的是一个简单的优化问题。机器学习和优化不同的地方在于,我们也希望 泛化误差(generalization error)(也被称为 测试误差(test error))很低。
泛化误差被定义为新输入的误差期望。这里,期望的计算基于不同的可能输入,这些输入采自于系统在现实中遇到的分布。通常,我们度量模型在训练集中分出来的 测试集(test set)样本上的性能,来评估机器学习模型的泛化误差。
以下是决定机器学习算法效果是否好的因素:
1. 降低训练误差。
2. 缩小训练误差和测试误差的差距。
1. 降低训练误差。
2. 缩小训练误差和测试误差的差距。
这两个因素对应机器学习的两个主要挑战:
欠拟合(under-fitting)和
过拟合(over-fitting)。
欠拟合是指模型不能在训练集上获得足够低的误差。而过拟合是指训练误差和和测试误差之间的差距太大。
通过调整模型的 容量(capacity),我们可以控制模型是否偏向于过拟合或者欠拟合。通俗地,模型的容量是指其拟合各种函数的能力。容量低的模型可能很难拟合训练集。容量高的模型可能会过拟合,因为记住了不适用于测试集的训练集性质。
我们用三个模型拟合了这个训练集的样本。训练数据是通过随机抽取 x 然后用二次函数确
定性地生成 y 来合成的。(左) 用一个线性函数拟合数据会导致欠拟合——它无法捕捉数据中的曲率信息。(中) 用二次函数拟合数据在未观察到的点上泛化得很好。这并不会导致明显的欠拟合或者过拟合。(右) 一个 9 阶的多项式拟合数据会导致过拟合。在这里我们使用 Moore-Penrose 伪逆来解这个欠定的正规方程。得出的解能够精确地穿过所有的训练点,但可惜我们无法提取有效的结构信息。在两个数据点之间它有一个真实的函数所不包含的深谷。在数据的左侧,它也会急剧增长,而在这一区域真实的函数却是下降的。
定性地生成 y 来合成的。(左) 用一个线性函数拟合数据会导致欠拟合——它无法捕捉数据中的曲率信息。(中) 用二次函数拟合数据在未观察到的点上泛化得很好。这并不会导致明显的欠拟合或者过拟合。(右) 一个 9 阶的多项式拟合数据会导致过拟合。在这里我们使用 Moore-Penrose 伪逆来解这个欠定的正规方程。得出的解能够精确地穿过所有的训练点,但可惜我们无法提取有效的结构信息。在两个数据点之间它有一个真实的函数所不包含的深谷。在数据的左侧,它也会急剧增长,而在这一区域真实的函数却是下降的。
capacity)。
5.2.1 没有免费午餐定理
机器学习的没有免费午餐定理(no free-lunch theorem)表明,在所有可能的数据生成分布上平均之后,每一个分类算法在未事先观测的点上都有相同的错误率。换言之,在某种意义上,没有一个机器学习算法总是比其他的要好。我们能够设想的最先进的算法和简单地将所有点归为同一类的简单算法有着相同的平均性能(在所有可能的任务上)。
幸运的是,这些结论仅在我们考虑所有可能的数据生成分布时才成立。在真实世界应用中,如果我们对遇到的概率分布进行假设的话,那么我们可以设计在这些分布上效果良好的学习算法。
这意味着机器学习研究的目标不是找一个通用学习算法或是绝对最好的学习算法。反之,我们的目标是理解什么样的分布与人工智能获取经验的 “真实世界” 相关,什么样的学习算法在我们关注的数据生成分布上效果最好。
5.2.2 正则化
正则化是指我们修改学习算法,使其降低泛化误差而非训练误差。正则化是机器学习领域的中心问题之一,只有优化能够与其重要性相媲。
5.3超参数和验证集
大多数机器学习算法都有超参数,可以设置来控制算法行为。超参数的值不是通过学习算法本身学习出来的。
5.3.1 交叉验证
当
数据集太小时,也有替代方法允许我们使用所有的样本估计平均测试误差,代价是增加了计算量。这些过程是基于在原始数据上随机采样或分离出的不同数据集上重复训练和测试的想法。最常见的是
k-折交叉验证过程,如算法 5.1 所示,将数据集分成 k 个不重合的子集。测试误差可以估计为 k 次计算后的平均测试误差。在第 i 次测试时,数据的第 i 个子集用于测试集,其他的数据用于训练集。
5.4 估计、偏差和方差
5.4.1 点估计
5.4.2 偏差
估计的偏差被定义为:
bias( θ̂) = 0,我们称估计 θ̂ 是无偏的。