本篇主要为原书5.1-5.3节内容,定义了机器学习算法的基本概念,简要描述了机器学习能完成的主要任务;指出机器学习过程中存在的欠拟合和过拟合两大问题,从选择容量及正则化角度提供了解决欠拟合、过拟合问题的基本思路;简要介绍了验证集的必要性和交叉验证方法。
5.1 学习算法
机器学习算法是一种能够从数据中学习的算法,Mitchell (1997) 将学习的定义为: ‘‘对于某类任务 T 和性能度量P,一个计算机程序被认为可以从经验 E 中学习是指,通过经验 E 改进后,它在任务 T 上由性能度量 P 衡量的性能有所提升。”
5.1.1 任务
任务:通常机器学习任务定义为机器学习系统应该如何处理 样本( example)
样本:样本是指我们从某些希望机器学习系统处理的对象或事件中收集到的已经量化的 特征( feature)的集合,也称为数据点
常见任务举例:
- 分类:指定输入属于 k 类中的哪一类。输出可以是数字码标识的类别或不同类别的概率
- 输入缺失分类:输入的某些特征欠缺时的分类
- 回归:对给定输入预测数值(连续的)
- 转录: 输入一些相对非结构化表示的数据,并将信息输出为离散的文本形式。eg.光学字符识别、语音识别
- 机器翻译:输入一种语言的符号序列,输出另一种语言的符号序列
- 结构化输出:输出向量或者其他包含多个值的数据结构,并且构成输出的这些不同元素间具有重要关系。强调输出具有结构性 eg)为图片添加描述,要求输出单词能够成通顺的句子;语法分析,将自然语言句子映射到语法结构树
- 异常检测:在一组时间或对象中筛选并标记不正常/非典型的个体
- 合成和采样:生成和训练数据相似的新样本
- 缺失值填补:对给定样本缺失元素进行填补
- 去噪:根据损坏样本预测干净样本
- 密度估计:学习样本采样空间的概率密度函数或概率质量函数
5.1.2 性能度量
为了评估机器学习算法的能力,我们必须设计其性能的定量度量。通常性能度量 P 是特定于系统执行的任务 T 而言的。对于分类问题常使用准确率或错误率来度量性能,但对于密度估计等任务需要设计特定的度量方法。
5.1.3 经验
根据学习过程中的不同经验, 机器学习算法可以大致分类为 无监督( unsupervised)算法和 监督( supervised)算法。
通常经验通过数据集(大量样本的集合)获得
表示据集的常用方法是设计矩阵,设计矩阵的每一行包含一个不同的样本。每一列对应不同的特征。
当每一个样本都能表示成向量,且这些向量的维度相同时,才能将一个数据集表示成设计矩阵。对于具有不同维度的异构数据(如不同尺寸的图片)的处理将在后续介绍。
- 有监督学习:训练含有很多特征的数据集,然后学习出这个数据集上有用的结构性质,如学习概率分布或聚类。无监督学习涉及到观察随机向量 x 的好几个样本,试图显式或隐式地学习出概率分布 p(x),或者是该分布一些的性质
- 无监督学习:训练含有很多特征的数据集,数据集中的样本都有一个 标签( label)或 目标( target)。监督学习包含观察随机向量 x 及其相关联的值或向量 y,然后从 x 预测 y,通常是估计 p(y | x)
5.2 容量、过拟合和欠拟合
在先前未观测到的输入上表现良好的能力被称为 泛化( generalization)。
通常情况下,当我们训练机器学习模型时,我们可以使用某个训练集,在训练集上计算一些被称为训练误差( training error)的度量误差,目标是降低训练误差。和优化不同的地方在于,我们也希望泛化误差( generalization error)(也被称为测试误差( test error)尽可能低。泛化误差被定义为新输入的误差期望。
通常,我们度量模型在训练集中分出来的 测试集( test set) 样本上的性能,来评估机器学习模型的泛化误差。
当训练集和测试集的数据生成过程满足独立同分布时,训练误差和测试误差的期望应当是相同的。但在实际过程中是通过采样训练集,挑选参数降低训练误差,再采样测试集。这样测试误差通常大于训练误差。
决定算法效果的因素包括:1)降低训练误差和2)缩小测试误差和训练误差的差距,因此带来了欠拟合和过拟合的挑战。
欠拟合:模型不能在训练集上获得足够低的误差
过拟合:训练误差和和测试误差之间的差距太大
通过调整模型的 容量( capacity),我们可以控制模型是否偏向于过拟合或者欠拟合。模型的容量是指其拟合各种函数的能力。模型本身规定了调整参数降低训练目标时,学习算法可以从哪些函数族中选择函数。这被称为模型的 表示容量(representational capacity)。额外的限制因素,比如优化算法的不完美,意味着学习算法的 有效容量( effective capacity)可能小于模型族的表示容量。
统计学习理论中最重要的结论阐述了训练误差和泛化误差之间差异的上界随着模型容量增长而增长。也就是说更简单的函数更可能泛化(训练误差和测试误差的差距小),但我们仍然需要选择一个充分复杂的假设以达到低的训练误差。下图给出了容量和误差的典型关系
容量任意高的极端情况是非参数模型。
理想模型假设为预先知道的真实概率分布,由于噪声等因素存在依然可能存在误差。由真实分布预测出现的误差成为贝叶斯误差( Bayes error)。
尽管泛化误差的期望与训练集大小无关,但训练误差和泛化误差会随训练集的大小发生变化。对于非参数模型而言,更多的数据会得到更好的泛化能力,直到达到最佳可能的泛化误差。任何模型容量小于最优容量的固定参数模型会渐近到大于贝叶斯误差的训练误差值。值得注意的是,具有最优容量的模型仍然有可能在训练误差和泛化误差之间存在很大的差距。在这种情况下,我们可以通过收集更多的训练样本来缩小差距。
5.2.1 没有免费午餐定理(Wolpert, 1996)
在所有可能的数据生成分布上平均之后,每一个分类算法在未事先观测的点上都有相同的错误率。换言之,在某种意义上,没
有一个机器学习算法总是比其他的要好。我们能够设想的最先进的算法和简单地将所有点归为同一类的简单算法有着相同的平均性能(在所有可能的任务上)。
这意味着机器学习研究的目标不是找一个通用学习算法或是绝对最好的学习算法。反之,我们的目标是什么样的学习算法在我们关注的数据生成分布上效果最好。因此我们必须在特定任务上设计性能良好的机器学习算法。
5.2.2 正则化
学习算法的效果除了受除了模型假设空间的函数(即模型容量)影响,还取决于这些函数的具体形式。正则化通过隐式或显式地表达对不同函数的偏好来修改学习算法,从而降低泛化误差(而非训练误差)。正则化是机器学习领域的中心问题之一!
5.3超参数和验证集
超参数:能够控制算法行为,但不是通过学习本身计算得到的(尽管我们可以设计一个嵌套的学习过程,一个学习算法为另一个学习算法学出最优超参数)。
有时一个参数被设为超参数,是因为它太难优化了。更多的情况是它不适合在训练集上学习,包括控制模型容量的超参数,若在训练集上学习其总趋于更大容量,导致过拟合。
为了解决这个问题,我们需要一个训练算法观测不到的 验证集( validation set)样本。通常将训练集分成不相交的子集,分别用来训练参数和评估泛化误差并调整超参数。用于挑选超参数的子集称为验证集( validation set)。通常, 80% 的训练数据用于训练, 20% 用于验证。所有超参数优化完成之后,泛化误差可能会通过测试集来估计。