第 5 章:机器学习基础(Machine Learning Basics)
5.1 学习算法(Learning Algorithms)
Mitchell(1997)给出的"学习"定义是:一台计算机程序被称为从经验 E 中学习关于某类任务 T 和性能度量 P 的知识,如果它在 T 上的性能(用 P 衡量)随经验 E 而提升。本书不打算为 E、T、P 给出形式化定义,而是直观描述三类实体可包含哪些内容。作者建议熟悉机器学习基础的读者可跳到 5.11 节;想看更全面基础的可读 Murphy(2012)或 Bishop(2006)。本章的组织顺序是:先定义学习算法并给出线性回归例子;再讨论训练集拟合与泛化到新数据的差别;再讨论超参数(必须由学习算法外部决定);再讨论频率派估计与贝叶斯推断两种统计核心方法;再讨论监督/无监督两大类;再讨论随机梯度下降这一深度学习的核心优化算法;再讨论如何把优化器、代价函数、模型、数据集组合成完整学习算法;最后在 5.11 节讨论传统机器学习泛化能力受限的几个因素,正是这些因素推动了深度学习的发展。
5.1.1 任务 T(The Task, T)
机器学习让我们能处理那些无法用人工编写的固定程序解决的任务。从科学与哲学角度说,机器学习有趣在于:理解机器学习就是理解智能背后的原理。这里"任务"的相对形式化定义里,"学习"本身不是任务,而是我们获得任务执行能力的手段,例如机器人行走任务是 T,写一个教它走路的程序才是学习。任务通常被描述为机器学习系统应如何处理一个示例(example),而示例是关于某对象或事件的、被定量测量得到的一组特征(features),通常表示为向量 x∈R^n,其中每一维 x_i 是一个特征。例如图像的特征通常是像素值。
书中列出了几类常见任务。分类:要求计算机程序指明输入属于 k 个类别中的哪一个,学习算法通常需产生函数 f:R^n→{1,…,k};也有的变种输出类别上的概率分布。例子有物体识别(输入是图像,输出是物体类别数字代码)、人脸识别。带缺失输入的分类:程序不能保证输入向量的每一个分量都被提供,此时学习算法必须学习一族函数,每一族对应缺失一种不同子集的输入;常用方法是学习所有相关变量的联合概率分布,再对缺失变量做边际化,n 个输入变量只需学一个联合分布,却能得到 2^n 个分类函数。回归:程序需根据输入预测一个数值,要学习 f:R^n→R;例子有保险理赔额预测、证券价格预测。转录:观察某种数据的相对非结构化表示并转录成离散的文本形式;例子有 OCR(Google Street View 用深度学习处理门牌号)和语音识别。机器翻译:输入是某种语言的符号序列,程序须转换为另一种语言序列。结构化输出:输出是一个向量或其它包含多个值且彼此有重要关系的数据结构;涵盖转录与翻译,并包括句法解析、像素级分割、图像描述(image captioning)等。异常检测:筛过一组事件/对象,标记出反常或非典型的,例如信用卡欺诈检测。合成与采样:生成与训练数据相似的新示例,应用于游戏纹理、语音合成等。缺失值填补:给一个 x∈R^n 但某些分量 x_i 缺失,要求预测缺失分量。去噪:输入是被未知损坏过程污染的样本 x̃∈R^n,学习器要预测干净样本 x 或条件分布 p(x|x̃)。密度估计或概率质量函数估计:学习函数 p_model:R^n→R(连续情形为概率密度,离散情形为概率质量函数);实质上需要捕捉数据的概率结构;原则上许多其它任务可通过在 p(x) 上做计算完成(如缺失值填补对应于 p(x_i|x_{-i})),但许多相关计算在实践中是不可解的。书中最后说,所列任务只是示例,不是严格的分类法。
任务列举的顺序也透露作者的归纳逻辑:先是有清晰离散输出的分类与回归,再到多步输出耦合的结构化输出,最后才是无显式标签的合成、填补、去噪、密度估计。这种排序也对应了监督→半监督→无监督的连续过渡,与 5.1.3 节对学习范式的讨论呼应。值得专门指出的是:书中对每一类任务都给出具体的应用场景——如 Willow Garage PR2 机器人作 waiter(Goodfellow et al., 2010)、现代物体识别用 Krizhevsky et al.(2012)与 Ioffe and Szegedy(2015)的深度学习方法、Taigman et al.(2014)的人脸识别、Google Street View 的门牌号识别(Goodfellow et al., 2014d)、Microsoft/IBM/Google 的语音识别(Hinton et al., 2012b)、Sutskever et al.(2014)与 Bahdanau et al.(2015)的机器翻译、Collobert(2011)的句法解析、Mnih and Hinton(2010)的航拍图像道路标注、Chandola et al.(2009)的异常检测综述、Luo et al.(2013)的游戏纹理合成、Goodfellow et al.(2013b)的带缺失输入医疗诊断概率模型。这一长串具体引用说明作者写这一节的目的不仅是分类,更是用 2010 年代中期的真实产业应用为后面所有算法组件的具体实例做铺垫——SGD、卷积网络、循环网络、注意力机制、生成模型这些后续章节的工具,对应的就是这些任务。
5.1.2 性能度量 P(The Performance Measure, P)
为评估算法能力,必须设计一个量化的性能度量 P,它通常针对具体任务 T 而定。对分类、带缺失输入的分类、转录任务,我们常度量模型的准确率(正确分类样本的比例),等价信息也可用错误率(错误分类样本的比例)给出,也叫期望 0-1 损失(0-1 loss):单个样本上 0-1 损失在正确分类时为 0、错误时为 1。对密度估计则不适合用准确率、错误率或任何 0-1 损失,必须用对每个样本给出连续值分数的度量,最常见的是报告模型赋予样本的平均对数概率(average log-probability)。我们通常关心算法在未见过的数据上的表现,因为它决定部署到真实世界后的表现,因此通常用训练集之外的测试集评估性能。性能度量的选择看似直白客观,实际上常常难以选择与期望系统行为对应得好的度量。一种困难是难以决定应度量什么,例如转录任务应度量完整序列的转录准确率,还是给部分元素正确以部分信用的细粒度度量;回归任务应更严厉惩罚"频繁犯中等错误",还是更严厉惩罚"极少犯的极大错误",取决于应用。另一种困难是:我们有时知道理想上想度量什么,但实际度量不可行,例如在密度估计中,许多最好的概率模型只隐式表示概率分布,要在特定点求概率值在很多此类模型里不可解,这种情况下必须设计仍能反映设计目标的替代准则,或设计一个好的近似。
注意"错误率"和"期望 0-1 损失"是同义概念:0-1 损失在单个样本上定义为I{y ≠ f(x)},期望 0-1 损失即在数据生成分布上取期望,正是错误率。对密度估计使用平均对数概率是统计学上的标准做法——它对应负对数似然(与 5.5 节最大似然直接对接),是连续值分布之间自然的距离度量。
补充一个具体的密度估计评估例子:设真实数据生成分布 p_data 是高斯混合,学习模型 p_model 是单个高斯。直接计算 p_model(x) 在每个测试点上的概率值是可行的,但若用归一化流或 EBM 等隐式模型,我们只能估计密度比 p_model(x)/p_model(x_0),无法给出绝对密度值。这种情况下常用的替代度量是 Parzen 窗密度估计、AIS 估计的对数似然下界、或样本质量度量(如 FID、Inception Score 用于生成模型)。
5.1.2 节关于"应度量什么"的两种困难分别叫"度量定义难"和"度量实现难"。前者反映在:很多实际应用没有客观的"对错"概念——例如机器翻译中BLEU 分数与人类判断的相关性只有约 0.6-0.7;图像描述中人类评价与自动度量(如 CIDEr)也不完全一致。后者反映在:很多理论上最好的度量(如对数似然)在现代生成模型(GAN、扩散模型)中不可解,只能用替代度量(FID、IS)。
实际工程中常遇到一个反直觉现象:同一个任务的两个度量可能给出相反的算法排序。例如翻译中 BLEU 高未必意味着人类评价高(因为 BLEU 只看 n-gram 重叠不看语义);生成图像的 FID 分数低未必意味着样本质量高(FID 对模式崩溃敏感)。这种度量间的不一致提醒我们:度量本身是模型,不可过度信任单一指标。
对 0-1 损失而言,错误率与准确率是互补的(加和为 1),互为等价信息。对多类问题,错误率与 top-k 准确率(预测的前 k 个类别中是否包含真类)有不同侧重——top-5 准确率更适合 ImageNet 这种标签空间大的问题。
关于"度量未达到理论最优"的工程应对:实践中常用一系列代理度量(proxy metrics)逼近理论最优度量——例如 FID 是真实分布与生成分布在 Inception 特征空间中的高斯拟合距离,作为生成分布与真实分布距离的代理。
5.1.3 经验 E(The Experience, E)
机器学习算法可粗分为无监督和监督两大类,依据是学习过程中允许获得的"经验"类型。本书大多数学习算法可被理解为允许它们经历一整个数据集(dataset)——数据集是大量示例的集合,也称为数据点(data points)。Iris 数据集(Fisher, 1936)是统计学家与机器学习研究者研究过的最古老数据集之一:150 株鸢尾花各部分的测量值(萼片长、萼片宽、花瓣长、花瓣宽),每株对应一个示例,同时记录所属的三个物种之一。无监督学习算法经历一个含很多特征的数据集,然后学习数据集结构的有用性质;在深度学习中通常希望学到生成数据集的整个概率分布(无论是显式密度估计还是隐式合成/去噪),也有其它无监督算法执行聚类(clustering)——把数据集划分为相似示例的簇。监督学习算法经历一个含特征的数据集,但每个示例还与一个标签或目标关联;例如 Iris 数据集标注了每株鸢尾花所属物种,监督学习算法可学会根据测量值将鸢尾花分到三个不同物种。粗略地说:无监督学习涉及观察随机向量 x 的若干样本,尝试隐式或显式学习概率分布 p(x) 或其某些有趣性质;监督学习涉及观察随机向量 x 与关联值/向量 y 的若干样本,学习由 x 预测 y,通常通过估计 p(y|x)。"监督"一词起源于 y 由"教师"提供,机器学习系统被告知应做什么;无监督学习中没有教师,算法必须自己理解数据。监督与无监督不是形式化定义术语,界限常常模糊,许多机器学习技术两种任务都可用。例如概率链规则 p(x)=∏{i=1}^n p(x_i|x_1,…,xp(x,y') 推出(式 5.2)。虽然无监督与监督不是完全形式化或截然不同的概念,但有助于粗略分类我们用机器学习算法做的事情:传统上回归、分类、结构化输出是监督学习;为支持其它任务而做的密度估计通常被视为无监督。其它变种还有}) 意味着无监督的 p(x) 建模问题可拆为 n 个监督子问题(式 5.1);反之监督学习 p(y|x) 可通过学习联合分布 p(x,y) 再由 p(y|x)=p(x,y)/Σ_{y'半监督学习(部分样本有监督目标,部分没有)、多示例学习(整个样本集合被标记为含或不含某类示例,但集合内个体未标记,参见 Kotzias et al., 2015)。还有些机器学习算法不只经历一个固定数据集,例如强化学习算法与环境交互,存在学习系统与经验之间的反馈环;本书不涉及强化学习,可参考 Sutton and Barto(1998)、Bertsekas and Tsitsiklis(1996)、Mnih et al.(2013)了解深度学习用于强化学习的方法。数据集本身有多种描述方式。一种常见方式是用设计矩阵(design matrix):每行一个示例,每列一个特征;Iris 数据集 150 个示例、4 个特征,可表示为 X∈R^{150×4},X_{i,1} 是第 i 株的萼片长,等等。本书将主要用设计矩阵形式描述学习算法。要把数据集描述为设计矩阵,每个示例必须可表示为向量,且各向量维度相同;这并不总是可能,例如不同宽高的照片含有不同像素数。第 9.7 节与第 10 章会讨论如何处理这种异构数据,在那种情况下我们用 m 个元素的集合 {x^(1), x^(2), …, x^(m)} 描述数据集,并不要求任意两个 x^(i) 与 x^(j) 同维。在监督学习情形,示例除含特征外还含标签或目标,例如用学习算法做物体识别时必须指明每张照片里出现哪种物体——通常用 0 代表人、1 代表汽车、2 代表猫这样的数字代码;通常在使用含设计矩阵的特征观测 X 的同时还提供标签向量 y,y_i 给出第 i 个示例的标签。当然标签有时不仅仅是单个数字,例如训练语音识别系统转录完整句子时,每个示例句子的标签是一个词序列。监督与无监督之间没有形式化定义,数据集或经验也没有严格的分类法;本书描述的结构涵盖大多数情形,但为新应用设计新结构总是可能的。
5.1.4 例子:线性回归(Example: Linear Regression)
把学习算法定义为"能通过经验改进计算机程序在某任务上的性能"比较抽象,本节给出简单学习算法——线性回归——使之具体;后续章节会反复回到此例帮助理解。线性回归解的是回归问题:构建一个系统把向量 x∈R^n 作为输入,预测标量 y∈R 的值。线性回归的输出是输入的线性函数:令 ŷ 表示模型对 y 的预测值,定义输出为 ŷ = w^⊤x(式 5.3),其中 w∈R^n 是参数向量。参数(parameters)是控制系统行为的值;w_i 是与特征 x_i 相乘再求和的系数,可把 w 看作一组权重,决定每个特征对预测的影响程度:正权重下增大该特征会增大预测 ŷ;负权重下增大该特征会减小预测;权重绝对值大则影响大;权重为 0 则该特征无影响。到此我们已定义了任务 T:由 x 通过输出 ŷ = w^⊤x 预测 y,接下来需要定义性能度量 P。假设我们有 m 个示例输入的设计矩阵,它们不用于训练、只用于评估模型表现;还有这些示例的回归目标向量提供每个示例 y 的正确值;因为这数据集只用于评估,所以叫测试集(test set),把输入设计矩阵记为 X^(test)、回归目标向量记为 y^(test)。一种衡量模型性能的方式是计算模型在测试集上的均方误差(MSE):MSE_test = (1/m) Σ_i (ŷ^(test) - y^(test))^2_i(式 5.4);直观上预测与目标完全相等时该误差降为 0;也等价于 MSE_test = (1/m) ||ŷ^(test) - y^(test)||^2_2(式 5.5),即预测与目标的欧氏距离增大时误差增大。要构成机器学习算法,还需设计一种算法,使算法被允许通过观察训练集 (X^(train), y^(train)) 获得经验时能以降低 MSE_test 的方式改进权重 w;一种直观做法(5.5.1 节会给出证明)就是最小化训练集上的均方误差 MSE_train。最小化 MSE_train 只需对其梯度等于 0 求解:∇_w MSE_train = 0;将 MSE_train 写成 (1/m) ||ŷ^(train) - y^(train)||^2_2 后对 w 求梯度得 (1/m) ∇_w ||X^(train) w - y^(train)||^2_2 = 0;用内积展开得到 (1/m)∇_w (w^⊤ X^(train)⊤ X^(train) w - 2w^⊤ X^(train)⊤ y^(train) + y^(train)⊤ y^(train)) = 0;化简为 2X^(train)⊤ X^(train) w - 2X^(train)⊤ y^(train) = 0,从而得到 正规方程组(normal equations)w = (X^(train)⊤ X^(train))^{-1} X^(train)⊤ y^(train)(式 5.12);图 5.1 给出线性回归算法运行的一个示例。值得指出"线性回归"一词常被用来指一个稍复杂的模型——多一个参数截距项 b:ŷ = w^⊤ x + b(式 5.13);从参数到预测仍是线性函数,但从特征到预测变成了仿射函数(affine function),模型预测图仍是一条线但不一定要过原点;另一种做法是仍用只含权重的模型但给 x 增加一个永远为 1 的额外分量,对应权重的角色就是偏置参数 b;本书将频繁用"线性"一词指仿射函数。截距项 b 常被叫作仿射变换的偏置参数(bias parameter),源于"无输入时变换的输出偏向于 b"的观点;这不同于统计学中的"统计偏差"概念(统计估计算法对某量的期望估计不等于真值)。线性回归当然是一个极为简单有限的学习算法,但它给出了学习算法工作方式的一个示例;后续章节会描述学习算法设计的基本原理,并演示如何用这些原理构建更复杂的学习算法。
关于图 5.1 的具体内容:作者用单特征训练集演示——10 个数据点,模型只有权重 w_1(无偏置 b)。左图显示学习到的直线 y = w_1 x 尽可能接近所有训练点;右图显示MSE_train 作为 w_1 的函数,标注的点对应正规方程组的解——它正好是 MSE_train 最小处。这一图示让读者把抽象的梯度为零条件与具体优化景观(optimization landscape)联系起来。对式 5.12 的理解还应注意:X^(train)⊤ X^(train) 的求逆要求该矩阵可逆,即训练样本数 m应不小于特征数 n 且特征之间不冗余。当 m < n 或特征共线时,最小二乘问题变为欠定(underdetermined),此时应使用 Moore-Penrose 伪逆或加正则化项(参看 5.2.2)。
5.2 容量、过拟合与欠拟合(Capacity, Overfitting and Underfitting)
机器学习的核心挑战是:必须在新输入(未参与训练的输入)上也表现良好——而不仅仅在训练集上表现良好。在未观测过的输入上表现良好的能力叫泛化(generalization)。通常训练模型时我们可以访问训练集并计算训练误差、降低训练误差;到此为止我们描述的还只是优化问题(optimization problem)。机器学习与优化的区别在于:希望泛化误差(generalization error),也叫测试误差(test error),同样低。泛化误差定义为模型在新输入上的误差期望,期望取自我们期望系统在实际中遇到的所有可能输入。我们通常通过在与训练集分开的测试集样本上测量性能来估计泛化误差。在线性回归例子里我们通过最小化训练误差 m^(train) ||X^(train)w - y^(train)||^2_2 训练模型,但实际关心的是测试误差 m^(test)||X^(test)w - y^(test)||^2_2。当我们只能观察训练集时如何影响测试集上的性能?统计学习理论提供了一些答案。若训练集和测试集任意收集,几乎无能为力;若可对它们如何收集做某些假设,就能取得进展。训练与测试数据由数据集上的某个概率分布生成,叫数据生成分布(data generating distribution),我们通常做一组统称 i.i.d. 假设的假设:每个数据集中的样本彼此独立,训练集和测试集独立同分布,从同一概率分布抽取;这允许我们用单示例上的概率分布描述数据生成分布,同样的分布用于生成每个训练与测试样本,称这个共享的底层分布为数据生成分布 p_data。这种概率框架与 i.i.d. 假设让我们能数学化地研究训练误差与测试误差的关系。训练误差与测试误差之间一个直接联系是:随机选取的模型其期望训练误差等于其期望测试误差。设有概率分布 p(x,y),反复从中采样生成训练集和测试集;对某个固定的 w,期望训练集误差与期望测试集误差恰好相同,因为两个期望都通过同样的数据集采样过程形成。两者唯一的差别只是对所采样数据集起的名字。当然实际使用机器学习算法时我们不会先固定参数再采样两个数据集;我们是先采样训练集,用它来选择参数以降低训练集误差,再采样测试集。在这种过程下,期望测试误差大于或等于期望训练误差。决定机器学习算法表现好坏的因素是它能否:1. 使训练误差小;2. 使训练误差与测试误差之间的差距小。这两个因素对应机器学习两大核心挑战:欠拟合(underfitting)和过拟合(overfitting)。欠拟合指模型不能在训练集上获得足够低的误差值;过拟合指训练误差与测试误差之间的差距太大。我们可通过改变模型容量(capacity)来控制模型更可能过拟合还是欠拟合。非形式化地说,模型的容量是它拟合各种函数的能力。容量低的模型可能难以拟合训练集;容量高的模型可能因为记住了训练集上对测试集无益的性质而过拟合。控制学习算法容量的一种方法是选择它的假设空间(hypothesis space),即学习算法被允许选择为解的函数集合。例如线性回归算法的假设空间是其输入的全体线性函数;我们可通过包含多项式而非仅线性函数来推广线性回归,从而增加模型容量。1 次多项式给出我们熟悉的线性回归 ŷ = b + wx(式 5.15);通过引入 x^2 作为另一个特征提供给线性回归,可学到一个关于 x 的二次函数 ŷ = b + w_1 x + w_2 x^2(式 5.16);虽然模型实现的是其输入的二次函数,输出对参数仍是线性函数,因此仍可用正规方程组以闭式形式训练模型;可继续加入更高次幂作为附加特征,例如得到 9 次多项式 ŷ = b + Σ_{i=1}^9 w_i x^i(式 5.17)。一般而言,机器学习算法在其容量与任务真实复杂度以及训练数据量相匹配时表现最好。容量不足的模型不能解决复杂任务;高容量模型能解决复杂任务,但当其容量超出解决当前任务所需时可能过拟合。图 5.2 演示了此原理:用线性、二次、9 次多项式预测器去拟合真实底层函数为二次的问题;线性函数无法捕捉真实底层问题的曲率,所以欠拟合;9 次预测器虽能表示正确的函数但也能表示无限多种其它精确通过训练点的函数(参数比训练样本还多),要从如此多截然不同的解中选出一个能很好泛化的几乎不可能;本例中二次模型与任务真实结构完美匹配,对新数据泛化良好。
到目前我们只描述了一种改变模型容量的方法:通过改变输入特征数量并同时增加与这些特征相关联的参数。改变模型容量的方法还有很多。容量并不只由模型的选择决定。模型指定学习算法在变化参数以降低训练目标时可选择的函数族,这叫表示容量(representational capacity)。很多情况下,在这一族中找最佳函数是非常困难的优化问题。实践中学习算法实际上并不一定找最佳函数,而只是显著降低训练误差的那些函数之一。这些额外的限制——例如优化算法不完善——意味着学习算法的有效容量(effective capacity)可能小于模型族的表示容量。现代关于改进机器学习模型泛化能力的思想可追溯到至少 Ptolemy 时代的哲学家的精炼思想。许多早期学者援引一个最广为人知叫奥卡姆剃刀(Occam's razor,c. 1287-1347)的简约原则:对于同等程度解释已知观测的竞争假设,应选"最简单"的那个。20 世纪统计学习理论奠基者们(Vapnik and Chervonenkis, 1971; Vapnik, 1982; Blumer et al., 1989; Vapnik, 1995)将这一思想形式化并使之更精确。统计学习理论提供多种量化模型容量的方法,其中最著名的是 Vapnik-Chervonenkis 维度,简称 VC 维。VC 维衡量二元分类器的容量,定义为使得分类器可以任意标记 m 个不同 x 点的训练集所对应的最大 m。量化模型容量让统计学习理论能做出量化预测,其中最重要的结果显示训练误差与泛化误差之间的差距由一个量从上方界定:随着模型容量增长该量增长,但随训练样本数增加而缩小。这些界提供了机器学习算法可工作的智力正当性,但在深度学习实践里很少直接使用,部分因为界通常相当松,部分因为深度学习算法的容量很难确定。深度学习模型容量尤其难确定,因为有效容量受优化算法能力限制,而我们对这些深度学习中非常一般的非凸优化问题知之甚少。必须记住:虽然更简单的函数更可能泛化(训练与测试误差差距小),但仍须选择足够复杂的假设以达到低训练误差。通常训练误差随模型容量上升而下降直到渐近到误差度量的最小可能值(假设度量有最小值);通常泛化误差是模型容量的 U 形函数(如图 5.3)。为达到任意高容量的极端情形,引入非参数模型(non-parametric models)的概念。到目前我们看到的都是参数模型,如线性回归:参数模型学习一个由参数向量描述的函数,向量维数在观察任何数据之前就是有限且固定的;非参数模型没有这种限制。有时非参数模型只是理论上的抽象(例如搜索所有可能概率分布的算法),实践中无法实现;但我们也可通过让模型复杂度为训练集大小的函数来设计实际可用的非参数模型。一个这样的算法是最近邻回归:与有固定长度权重向量的线性回归不同,最近邻回归模型只是存储训练集的 X 与 y;当被要求对测试点 x 分类时,模型查找训练集中最近邻并返回对应回归目标,即 ŷ = y_i 其中 i = arg min ||X_{i,:} - x||^2_2;算法也可推广到 L2 范数以外的距离度量,如学习的距离度量(Goldberger et al., 2005)。若算法被允许通过平均所有打成平手的 X_{i,:} 对应 y_i 来打破平局,那么此算法能在任何回归数据集上达到最小可能的训练误差(如果两个相同输入对应不同输出,该误差可能大于零)。最后还可通过把一个参数学习算法包在另一个按需增加参数数的算法内来创建非参数学习算法,例如可想象一个外层学习循环,它改变线性回归在输入多项式展开基础上所学多项式的次数。理想模型是一个先知(oracle),它正好知道生成数据的真实概率分布。即使这样一个模型在很多问题上仍会有一些误差,因为分布中可能仍有噪声。在监督学习情形,从 x 到 y 的映射可能本质上是随机的,或 y 可能是除 x 包含的变量外还涉及其它变量的确定性函数。先知基于真实分布 p(x,y) 做预测所产生的误差叫贝叶斯误差(Bayes error)。训练和泛化误差随训练集大小变化而变化。期望泛化误差绝不会随训练样本数增加而上升;对非参数模型,更多数据带来更好泛化直到达到最好可能的误差。任何容量低于最优的固定参数模型会渐近到超过贝叶斯误差的误差值(如图 5.4)。注意模型可能有最优容量却仍存在大的训练-泛化差距,这种情况下我们可通过收集更多训练样本来缩小差距。
5.2.1 没有免费午餐定理(The No Free Lunch Theorem)
学习理论声称机器学习算法可从有限训练样本集泛化。这似乎与逻辑的一些基本原理相矛盾。归纳推理(inductive reasoning)——从有限样本集推断一般规则——在逻辑上不成立;要逻辑地推断描述集合中每个成员的规则,必须有关于该集合每个成员的信息。机器学习部分地通过只提供概率规则而避免这一问题,而不是纯粹逻辑推理使用的完全确定规则。机器学习承诺找到很可能正确的规则,适用于其所关心集合的多数成员。但即使这样也不能完全解决问题。机器学习的没有免费午餐定理(Wolpert, 1996)指出:在所有可能数据生成分布上做平均时,每个分类算法在分类先前未观察点时具有相同的错误率。换言之,在某种意义上,没有任何机器学习算法在所有可能任务上普适地胜过任何其它算法。我们能想到的最复杂的算法与简单地把每个点预测为属于同一类具有同样的平均性能。好在这些结论只在所有可能数据生成分布上取平均时成立。如果我们对实际应用中遇到的概率分布类型做假设,就能设计在这些分布上表现良好的学习算法。这意味着机器学习研究的目标不是寻找通用学习算法或绝对最佳学习算法,而是要理解对 AI 智能体所经历"真实世界"相关的分布类型,以及在从我们关心的数据生成分布类型抽取的数据上表现良好的机器学习算法类型。
这个定理听起来很反直觉,但其在数学上是平凡的:把所有可能的数据生成分布均匀地加权平均,则任何两个分类器在未见点上的预测错误率必然相等——因为任何分类器对一个点正确分类等价于另一个分类器错误分类,反之亦然。这一定理的实用意义不在于"所有算法等价",而在于提醒我们:脱离数据生成分布的具体假设去谈"哪个算法更好"是没有意义的。这也是为什么经验上总是能看到特定算法在特定数据分布上压倒性优于通用算法——这种优势来自该算法内置的归纳偏置(inductive bias)与数据生成分布结构的契合。
在归纳推理的逻辑问题中,休谟(Hume)的归纳问题早就指出:从有限经验推断一般规律在逻辑上不成立——你看到的所有白天鹅不能证明"所有天鹅都是白的"。机器学习的实用主义回答是:放弃追求逻辑确定性,转而追求概率意义上的正确性。NFL 定理进一步收紧这一论点:即使在概率意义上,也没有"普适最优"的算法——任何算法的优势都依赖于数据生成分布的具体假设。
应用 NFL 定理的工程含义:当我们为一个具体任务选择算法时,不应问"哪个算法最好",而应问"哪个算法的归纳偏置与该任务的数据生成分布结构最匹配"。这一思路直接导向后续各章对神经网络架构设计的讨论:CNN 的归纳偏置适合图像,RNN 的归纳偏置适合序列,注意力机制适合长程依赖——所有这些都体现了"为特定数据分布选择合适归纳偏置"的 NFL 实用原则。
NFL 定理的形式化表述:设所有数据生成分布为 p_data,对任意两个学习算法 a_1、a_2 和任意 m,E_{p_data}[error(a_1) - error(a_2)] = 0(即在所有分布上取期望时两算法错误率相同)。这一等式成立的前提是均匀加权所有分布——如果我们对实际感兴趣的分布族加权,a_1 与 a_2 的相对优势就不再为零。
5.2.2 正则化(Regularization)
没有免费午餐定理意味着我们必须设计机器学习算法使其在特定任务上表现良好,方法是向学习算法中构建一组偏好(preferences)。当这些偏好与我们要算法解决的问题相一致时表现就更好。到目前为止我们具体讨论过的修改学习算法的唯一方法是:通过向假设空间添加或移除函数来增加或减少模型的表示容量,例如在回归问题中增加或减少多项式的次数。前面描述的观点过于简化。学习算法的行为不仅受假设空间中所允许函数集的大小影响,还受这些函数的具体身份影响。我们迄今研究过的学习算法——线性回归——其假设空间由其输入的全体线性函数组成。这些线性函数对输入输出关系真正接近线性的问题非常有用;对行为非常非线性的问题则用处不大。例如若用线性回归从 x 预测 sin(x) 表现就不会很好。因此我们可通过选择允许算法从哪些函数中画解来控制算法的表现,也可通过控制这些函数的量。我们也可对学习算法在假设空间中的一种解相对另一种解给出偏好,这表示两个函数都合资格,但其中一个更受偏好;只有当非偏好解在拟合训练数据上显著优于偏好解时才会被选。例如可修改线性回归的训练准则使其包含权重衰减(weight decay):为执行带权重衰减的线性回归,我们最小化一个目标 J(w) = MSE_train + λ w^⊤ w(式 5.18),由训练均方误差和表达"偏好权重有较小 L2 范数"的一项组成,其中 λ 是预先选定的值,控制我们对较小权重的偏好强度。λ=0 时我们不施加偏好,更大的 λ 强制权重变得更小。最小化 J(w) 得到的权重选择需要折中拟合训练数据与保持权重小。这给我们斜率更小或更少放权于某些特征的解。作为通过权重衰减控制模型过拟合或欠拟合倾向的例子,我们可用不同的 λ 值训练高次多项式回归模型(图 5.5)。更一般地,我们可通过向代价函数加一个叫做正则化项(regularizer)的惩罚来正则化一个学习函数 f(x;θ) 的模型。在权重衰减情况下,正则化项为 Ω(w) = w^⊤ w;第 7 章会看到许多其它正则化项。对一个函数相对另一个函数表达偏好,是比在假设空间内含或排除成员更一般的控制模型容量的方式。我们可把把一个函数从假设空间排除视为对该函数表达无限强偏好。在权重衰减例子里我们通过在最小化准则中加一个额外项显式表达对用更小权重定义的线性函数的偏好。还有很多其它表达对不同解偏好的方式(隐式与显式),所有这些不同方法统称正则化(regularization)。正则化是我们对学习算法做的任何修改,旨在降低其泛化误差而非训练误差。正则化是机器学习领域的核心关注点之一,其重要性仅次于优化。没有免费午餐定理让我们清楚:没有最好的机器学习算法,特别是没有最好的正则化形式。我们必须选择一种与我们要解决的特定任务很好匹配的正则化形式。深度学习的整体哲学以及本书特定的观点是:非常广泛范围的任务(例如人们能做的所有智力任务)都可以用非常通用的正则化形式有效解决。
权重衰减项 λw^⊤w 中 λ 越大代表对大权重的惩罚越强——这与贝叶斯 MAP 估计中的高斯先验(精度参数 α)等价(参看 5.6.1)。第 7 章会展开其它形式正则化项:L1 范数、Dropout、early stopping、数据集增强、噪声鲁棒性等,它们都可被理解为在某些函数族上施加偏好。正则化为何如此重要?最根本原因是:有限训练集下,泛化误差不能仅通过控制训练误差来最小化——必须有额外的先验(无论是显式概率分布还是隐式算法偏置)告诉学习算法"在多个都解释训练数据的函数中选哪一个"。
5.3 超参数与验证集(Hyperparameters and Validation Sets)
大多数机器学习算法有几个可用来控制学习算法行为的设置,这些设置叫超参数(hyperparameters)。超参数的值不由学习算法本身适应(虽然我们可以设计嵌套的学习过程使一个学习算法为另一个学习算法学最好的超参数)。在图 5.2 看到的多项式回归例子里,有一个超参数:多项式的次数,起到容量超参数的作用。控制权重衰减强度的 λ 值是另一个超参数的例子。有时一个设置被选为学习算法不学的超参数是因为它难优化;更常见的是该设置必须作为超参数因为在训练集上学它不合适。这适用于所有控制模型容量的超参数——若在训练集上学它们,它们总选择最大可能模型容量导致过拟合(参看图 5.3);例如我们总可用更高次多项式与 λ=0 的权重衰减设置比用更低次多项式与正的权重衰减设置把训练集拟合得更好。解决这个问题需要训练算法不观察的验证集(validation set)样本。早先我们讨论过:由与训练集同分布样本组成的留出测试集可用于在学习过程完成后估计学习器的泛化误差。重要的是测试样本不以任何方式用于做关于模型的选择,包括其超参数。因此测试集中的样本都不能被用于验证集,所以我们总是从训练数据中构建验证集。具体地,我们把训练数据分成两个不相交子集,其中一个用于学参数;另一个就是验证集,用于在训练中或训练后估计泛化误差,从而允许相应地更新超参数。用于学参数的数据子集通常仍叫训练集,虽然这可能与用于整个训练过程的更大数据池混淆;用于指导超参数选择的数据子集叫验证集。典型做法是用约 80% 的训练数据做训练、20% 做验证。因为验证集被用于"训练"超参数,验证集误差会低估泛化误差,虽然通常比训练误差低估得少。所有超参数优化完成后,泛化误差可用测试集来估计。实践中,当同一测试集被反复用于多年来评估不同算法的性能,特别是如果我们考虑科学社区在打破该测试集报告的 state-of-the-art 性能上的所有尝试时,我们最终也会对测试集有过乐观的评估。基准会因而过时,不再反映训练系统的真实现场性能。所幸社区倾向于转向新的(通常更大更雄心勃勃的)基准数据集。
关于训练集/验证集/测试集的三分法:训练集用于学模型参数;验证集用于估计泛化误差并据此更新超参数;测试集只在所有训练和超参数选择完成后才使用一次,给出最终泛化误差估计。这种三分法的根本原因在于:超参数若在训练集上学,会选择最大化容量的极值(因训练误差总可被更复杂的模型压低);若超参数在测试集上学,测试集就被污染——它的误差估计会过于乐观(因为我们用同一批样本既选模型又评估)。验证集是这两难之间的折中。实践中常见的 80/20 划分不一定最优——更小的验证集可减少训练数据损失,但增大泛化误差估计方差;更大的验证集给出更稳定的超参数选择代价是训练数据减少。
实践中的训练集/验证集/测试集划分有多种变体。Holdout 验证(单一留出验证集)适合大数据集但对超参数选择的方差较大;k 折交叉验证(5.3.1 节)对小数据集更稳定但计算成本高 k 倍;嵌套交叉验证(外层估计泛化误差、内层选超参数)在小数据下最严格但成本是 k^2 级别。对深度学习这种重训练模型,通常使用 80/10/10 或 90/5/5 的简单 holdout 划分,因为完整 k 折交叉验证的计算成本不可接受。
5.3.1 交叉验证(Cross-Validation)
把数据集分成固定训练集和固定测试集如果导致测试集小会有问题。小的测试集意味着估计的平均测试误差有统计不确定性,使我们难以声称算法 A 在给定任务上优于算法 B。当数据集有几十万或更多样本时这不是严重问题。当数据集太小,存在替代程序让我们能利用所有样本来估计平均测试误差,代价是增加的计算成本。这些程序基于以下思想:在原始数据集的不同随机选择的子集或划分上重复训练与测试计算。最常见的是 k 折交叉验证程序(算法 5.1):通过把数据集划分为 k 个不相交子集来形成数据划分;测试误差可通过对 k 折试验取平均测试误差来估计。在第 i 次试验中,数据第 i 个子集被用作测试集,其余数据被用作训练集。一个问题是不存在这种平均误差估计方差的无偏估计量(Bengio and Grandvalet, 2004),但通常用近似。
k 折交叉验证的标准做法是 k = 5 或 k = 10——这是统计学习理论中偏差-方差折中的经验最佳点。当数据集小时可取更大 k(如留一交叉验证 k=m),但计算成本随之线性增长。交叉验证计算上的昂贵是其主要缺点:每调整一次超参数都需要重训模型 k 次。这正是为什么实践中更常用单一留出验证集——对超大模型来说重训成本不可接受。
5.4 估计、偏差与方差(Estimators, Bias and Variance)
统计学领域给了我们很多工具,能用于实现机器学习目标——不仅在训练集上、也泛化地解决任务。参数估计、偏差、方差等基础概念能形式化地表征泛化、欠拟合、过拟合等概念。
5.4.1 点估计(Point Estimation)
点估计是尝试提供对某个感兴趣量的单一"最佳"预测。一般而言感兴趣量可以是参数模型中的单个参数或参数向量,例如 5.1.4 节线性回归例子的权重,也可以是整个函数。为区分参数估计与真值,约定用 θ̂ 表示参数 θ 的点估计。设 {x^(1),…,x^(m)} 是 m 个独立同分布数据点。点估计量或统计量是数据的任意函数:θ̂_m = g(x^(1),…,x^(m))(式 5.19)。该定义不要求 g 返回接近真 θ 的值,也不要求 g 的值域与 θ 的允许值集相同。点估计量的这个定义非常一般,给估计量设计者极大灵活性。虽然几乎任何函数都因此有资格作估计量,但好的估计量是其输出接近生成训练数据的真 θ 的函数。我们暂时采取统计学中的频率派视角:假设真参数值 θ 固定但未知,而点估计 θ̂ 是数据的函数。由于数据是从随机过程抽取的,数据的任何函数都是随机的,因此 θ̂ 是随机变量。点估计也可指输入与目标变量之间关系的估计,称这种类型的点估计为函数估计(function estimators)。
函数估计 如上所述,有时我们感兴趣的是执行函数估计(或函数近似)。这里我们试图由输入向量 x 预测变量 y,假设存在函数 f(x) 描述 y 与 x 的近似关系。例如可假设 y = f(x) + ε,其中 ε 表示 y 中不能从 x 预测的部分。在函数估计中我们感兴趣的是用模型或估计 f̂ 来逼近 f。函数估计其实与估计参数 θ 一样;函数估计量 f̂ 只是函数空间中的点估计量。5.1.4 节的线性回归例和 5.2 节的多项式回归例都可被解释为估计参数 w 或估计从 x 到 y 的函数 f̂ 的两种情形。现在我们回顾点估计量最常被研究的性质并讨论它们告诉我们关于这些估计量的什么。
点估计与区间估计的根本区别:点估计给出 θ̂ = g(x^(1),…,x^(m)) 的单一数值;区间估计给出 θ 落在某个区间内的概率保证(参看 5.4.3 的 95% 置信区间)。频率派统计学的传统是同时报告点估计和区间估计;贝叶斯统计学的传统是只报告后验分布(可从中提取点估计和区间)。
函数估计的另一种视角:把 f 视为无穷维参数向量,把 f̂(x) = Σ_i θ̂_i φ_i(x)展开成基函数线性组合。有限维参数估计与无穷维函数估计的区别仅在于基函数集的大小——核方法、高斯过程、神经网络都可被纳入这一框架。
频率派与贝叶斯对点估计的态度差异:频率派把点估计视为对固定 θ 的猜测,用偏差、方差等统计性质评估估计量;贝叶斯把点估计视为后验分布的某个摘要(众数 = MAP、均值 = 后验均值、中位数 = 后验中位数),三种选择各有用途。5.6.1 节会详细讨论 MAP 估计。
实际应用中常见的是"损失函数 + 优化问题"的框架:选一个损失函数 L(θ̂,θ),找最小化期望损失的 θ̂。不同损失函数给出不同的"最优估计量":L2 损失 → 条件均值;L1 损失 → 条件中位数;0-1 损失 → 众数。这些对应贝叶斯后验的不同摘要——没有"对所有损失都好"的最优估计量(这又是 NFL 的一种)。
关于函数估计的工程价值:在监督学习中 f̂ 本身就是模型——线性回归的 f̂(x)=w^⊤x、神经网络的 f̂(x;θ) 都是函数估计量。理解"函数估计 = 函数空间中的点估计"让我们能用频率派的所有工具(偏差、方差、一致性、Cramer-Rao)来评估任何模型——这是统计学习理论给机器学习带来的核心概念框架。
5.4.2 偏差(Bias)
估计量的偏差定义为 bias(θ̂m) = E(θ̂_m) - θ(式 5.20),其中期望是对数据(视为从随机变量抽样的样本)取的,θ 是用于定义数据生成分布的真底层 θ 值。估计量 θ̂_m 被称为无偏(unbiased)的若 bias(θ̂_m) = 0,这意味着 E(θ̂_m) = θ。估计量 θ̂_m 被称为渐近无偏若 lim bias(θ̂m) = 0,这意味着 lim E(θ̂_m) = θ。
例:伯努利分布 考虑一组样本 {x^(1),…,x^(m)} 独立同分布于均值为 θ 的伯努利分布:P(x^(i);θ) = θ^{x^(i)} (1-θ)^{(1-x^(i))}(式 5.21)。该分布参数 θ 的常见估计量是训练样本的均值:θ̂_m = (1/m) Σ_i x^(i)(式 5.22)。要判断此估计量是否有偏,可将式 5.22 代入式 5.20:bias(θ̂_m) = E[θ̂_m] - θ = E[(1/m)Σ x^(i) - θ] = (1/m)Σ E[x^(i)] - θ。把 E[x^(i)] = θ 代回,1/m × mθ - θ = θ - θ = 0,故 bias(θ̂) = 0,估计量 θ̂ 无偏。
例:高斯分布均值的估计量 现在考虑一组样本 {x^(1),…,x^(m)} 独立同分布于高斯分布 p(x^(i)) = N(x^(i);μ,σ^2),i∈{1,…,m}。高斯概率密度函数由 p(x^(i);μ,σ^2) = (1/√(2πσ^2)) exp(-(1/2)(x^(i)-μ)^2/σ^2) 给出(式 5.29)。高斯均值参数的常见估计量就是样本均值:μ̂_m = (1/m)Σ x^(i)(式 5.30)。要确定样本均值的偏差,我们再次关心计算其期望:bias(μ̂_m) = E[μ̂_m] - μ = E[(1/m)Σ x^(i) - μ] = (1/m)Σ E[x^(i)] - μ = (1/m)Σ μ - μ = μ - μ = 0(式 5.31–5.35)。因此样本均值是高斯均值参数的无偏估计量。
例:高斯分布方差的估计量 作为例子,我们比较高斯分布方差参数 σ^2 的两种不同估计量,看它们是否有偏。第一个考虑的是样本方差:σ̂^2_m = (1/m)Σ (x^(i) - μ̂_m)^2(式 5.36),其中 μ̂_m 是上面定义的样本均值。更形式地,我们感兴趣的是计算 bias(σ̂^2_m) = E[σ̂^2_m] - σ^2(式 5.37)。先求 E[σ̂^2_m]:E[σ̂^2_m] = E[(1/m)Σ (x^(i) - μ̂_m)^2] = ((m-1)/m) σ^2(式 5.38–5.39),故样本方差的偏差为 -σ^2/m(式 5.37),因此样本方差是有偏估计量。无偏样本方差估计量 σ̃^2_m = (1/(m-1)) Σ (x^(i) - μ̂_m)^2(式 5.40)提供了另一种方法。顾名思义此估计量无偏:E[σ̃^2_m] = E[(1/(m-1)) Σ (x^(i) - μ̂_m)^2] = (m/(m-1)) E[σ̂^2_m] = (m/(m-1)) × ((m-1)/m) σ^2 = σ^2(式 5.41–5.44)。我们有两种估计量:一种有偏一种无偏。虽然无偏估计量显然合人心意,但它们不总是"最好"的估计量;我们经常使用具有其它重要性质的有偏估计量。
对伯努利估计量与高斯均值估计量都得到 bias = 0 的结果是统计理论中的经典结论。但对样本方差却得到 bias = -σ^2/m:这一项的来源是自由度——样本均值 μ̂_m 消耗了一个自由度,导致用 (x^(i) - μ̂_m)^2 估计 (x^(i) - μ)^2 时系统性偏低。除以 m-1 修正这一偏差后得到无偏样本方差 σ̃^2_m。两种估计量的对比告诉读者:"无偏"和"实用"不是同一件事。实际计算中常用无偏版本,但更复杂的模型(如神经网络)中通常使用有偏但方差更小的估计。
关于"无偏不总是最好"的进一步讨论:考虑伯努利分布均值的 MLE θ̂_m = (1/m) Σ x^(i) 虽然无偏但 m=1 时 θ̂_1 = x^(1) ∈ {0,1} 完全没有利用估计的统计意义。实际上 MSE 角度下有偏但低方差的 James-Stein 估计量在多元情形下能胜过 MLE——这是统计学上著名的 Stein 悖论:多元正态均值在 d ≥ 3 时所有分量同时估计时MLE 竟然不是 admissible(可被另一估计量在所有点上胜过)。这一悖论启发了现代正则化理论——在 d 较大时主动引入偏差以换取方差下降是合理的。
样本方差有偏而除以 m-1 后无偏这一现象在统计学中称为 Bessel 校正(Bessel's correction)。它实际上是自由度调整——样本均值消耗了一个自由度,所以估计方差时用 m 个观测但只 m-1 个独立平方偏差。
关于"好估计量不必无偏"的具体例子:岭回归(Ridge regression)的解是w_ridge = (X^⊤ X + λI)^{-1} X^⊤ y,这是有偏的(E[w_ridge] ≠ w*),但其 MSE 通常比 OLS 解(无偏)更小。这与 5.5.2 节中 MAP/MLE 的关系完全平行。
贝塞尔校正背后的更一般原理是"自由度调整"——任何用样本均值替代真均值的估计都会因自由度损失而需要校正。多元情形中样本协方差矩阵用 1/(m-1) 校正而非 1/m,t 分布用 m-1 自由度而非 m,都是同一原则的不同体现。
正态均值估计量 μ̂_m = (1/m) Σ x^(i) 是无偏的但其估计方差为 σ^2/m——随 m 增大方差趋于零但永远不为零。这是无偏估计量的典型性质:有限样本下方差永不为零,渐近下方差消失。这一对偶——无偏+有限方差——使无偏估计量在小样本下表现往往不如有偏低方差估计量。
5.4.3 方差与标准误差(Variance and Standard Error)
我们要考虑的估计量另一个性质是它随数据样本变化而变化多大。正如我们通过计算估计量期望确定其偏差,我们也可以计算其方差。估计量的方差就是 Var(θ̂)(式 5.45),其中随机变量是训练集。另一种说法,方差的平方根叫标准误差,记为 SE(θ̂)。估计量的方差或标准误差提供了我们关于"我们从数据计算的估计会随从底层数据生成分布独立重采样数据集而变化多少"的度量。正如我们希望估计量有低偏差,我们也会希望它有相对低的方差。当用有限数量的样本计算任何统计量时,我们对真底层参数的估计是不确定的,因为我们本可以从同一分布得到其它样本,它们的统计量本会不同。任何估计量中预期的变化程度是我们希望量化的误差来源。均值的标准误差 由 SE(μ̂_m) = √(Var[(1/m)Σ x^(i)]) = σ/√m 给出(式 5.46),其中 σ^2 是样本 x_i 的真方差。标准误差通常用 σ 的估计来估计。不幸的是,样本方差的平方根与方差无偏估计量的平方根都不提供对标准差的无偏估计;两种方法都倾向于低估真标准差,但仍在实践中使用;方差无偏估计量的平方根是低估较少的那个;对大 m 近似相当合理。均值的标准误差在机器学习实验中非常有用。我们经常通过计算测试集上误差的样本均值来估计泛化误差。测试集中样本数决定这一估计的精度。利用中心极限定理——告诉我们均值将大致按正态分布——我们可以用标准误差计算真期望在任意选定区间内的概率。例如在均值 μ̂_m 处居中的 95% 置信区间是 (μ̂_m - 1.96 SE(μ̂_m), μ̂_m + 1.96 SE(μ̂_m))(式 5.47),在均值为 μ̂_m、方差为 SE(μ̂_m)^2 的正态分布下。在机器学习实验中,常见做法是当算法 A 误差的 95% 置信区间上界低于算法 B 误差的 95% 置信区间下界且二者不相交时,称算法 A 优于算法 B。
例:伯努利分布 再次考虑从伯努利分布 P(x^(i);θ) = θ^{x^(i)} (1-θ)^{(1-x^(i))} 独立同分布抽取的样本 {x^(1),…,x^(m)}。这次我们感兴趣的是计算估计量 θ̂_m = (1/m)Σ x^(i) 的方差:Var(θ̂_m) = Var[(1/m)Σ x^(i)] = (1/m^2)Σ Var(x^(i)) = (1/m^2)Σ θ(1-θ) = (1/m^2) × m × θ(1-θ) = (1/m) θ(1-θ)(式 5.48–5.52)。估计量的方差随数据集样本数 m 的增加而下降。这是常用估计量共有性质,我们将在 5.4.5 节讨论一致性时回到。
SE(μ̂_m) = σ/√m 这一关系说明估计的精度按样本数的平方根增长——这是统计学中普遍存在的"慢收敛"现象。要把误差减半需要把数据量增 4 倍。这一关系也是机器学习实验设计的基础:给定 m 个测试样本,泛化误差估计的 95% 置信区间宽度约 ±1.96σ/√m。在算法对比中常见的"算法 A 95% CI 上界低于算法 B 95% CI 下界即宣称 A 优于 B"是工程经验法则,严格地说单边 CI 重叠与否不构成显著性检验——但实践中比配对 t 检验更常用,因其更直观。
中心极限定理要求独立同分布假设。机器学习实验中常见的违反 i.i.d. 假设的情形:时序数据中相邻样本高度相关;小批采样时同一批样本有偏;超参数搜索时同一验证集被多次使用导致 CI 估计过窄。这就是为什么 5.4.3 末尾说交叉验证后再用 CI 是"常做但不严格正当"——它忽略了样本间的相关性。
实践中的 CI 计算细节:算法 A 与算法 B 的泛化误差差值通常用配对 t 检验——对每个测试样本同时记录两算法的误差,配对差值的标准误差按 1/√m 收敛,95% 置信区间为 d̄ ± 1.96 SE(d̄)。这比独立的 CI 比较更敏感,因为配对方差小。
5.4.4 偏差与方差的折中以最小化均方误差(Trading off Bias and Variance to Minimize Mean Squared Error)
偏差与方差衡量估计量中两种不同的误差来源。偏差衡量估计值相对函数或参数真值的期望偏差;方差则提供对任何特定数据采样都可能引起的估计值偏离期望值的度量。当我们被给予两种估计量之间选择时——一个有较大偏差、一个有较大方差——我们如何选?例如假设我们想逼近图 5.2 所示的函数,但只被给予在大偏差和大方差模型之间做选择的机会,如何选?协商这种折中最常用的方式是使用交叉验证。经验上交叉验证在许多真实世界任务上非常成功。或者我们也可以比较估计量的均方误差(MSE):MSE = E[(θ̂_m - θ)^2] = Bias(θ̂_m)^2 + Var(θ̂_m)(式 5.53–5.54)。MSE 衡量估计量与参数 θ 真值之间在平方误差意义下的整体期望偏差。从式 5.54 看,评估 MSE 同时涉及偏差与方差。理想的估计量是那些 MSE 小的估计量——那些设法同时控制偏差与方差的估计量。图 5.6 显示容量增大时偏差(点线)趋于下降而方差(虚线)趋于上升,从而对泛化误差(粗线)产生另一条 U 形曲线。如果我们沿一个轴变化容量,就存在一个最优容量——低于此为欠拟合、高于此为过拟合。这与 5.2 节和图 5.3 讨论的容量、欠拟合、过拟合关系类似。偏差与方差关系与机器学习中的容量、欠拟合、过拟合概念紧密相关。在泛化误差用 MSE 衡量(偏差与方差是其有意义的分量)的情形下,增加容量往往增加方差并减少偏差。这在图 5.6 中说明,我们再次看到泛化误差作为容量函数的 U 形曲线。
式 5.54 MSE = Bias^2 + Var 是统计学中的基本分解。它成立的条件是估计量的偏差与方差独立——严格来说分解式 E[(θ̂-θ)^2] = (E[θ̂]-θ)^2 + E[(θ̂-E[θ̂])^2] = Bias^2 + Var 总是成立,与独立性无关。但这一分解仅在均方误差下有意义——其它损失函数(如 0-1 损失)没有如此干净的偏差-方差分解。MSE 分解在 MSE 作为训练目标时尤其有用:在 MSE 框架下,最小化 MSE 等价于同时控制偏差与方差。
图 5.6 的关键结论是偏差与方差作为容量函数此消彼长:低容量时模型欠拟合,偏差主导泛化误差;高容量时模型过拟合,方差主导泛化误差;存在最优容量使偏差与方差之和最小。这一 U 形曲线是机器学习模型选择的核心图景——几乎所有模型选择技术(验证集、交叉验证、信息准则如 AIC/BIC)都试图估计 U 形曲线的最低点。
对分类任务,0-1 损失下没有 Bias^2 + Var 的简单分解,但有类似的概念——偏差衡量系统性错误,方差衡量对数据采样的敏感性。集成方法(bagging)通过平均多个高方差低偏差模型降低方差,boosting 通过顺序训练多个低方差高偏差模型降低偏差——两者各自实现偏差-方差折中谱上的不同位置。
关于交叉验证作为偏差-方差折中实用工具的讨论:交叉验证在多个数据划分上估计泛化误差,其本身在偏差上比单次留出验证更接近真实泛化误差(因为它用了所有样本);在方差上比单次留出验证更稳定(因为 k 次估计的平均)。这就是为什么交叉验证是模型选择的工业标准——它以一种可计算的方式同时控制偏差与方差。
U 形曲线的"碗底"在实践中是平的而非尖的——这意味着在最优容量附近不同模型的泛化误差差异很小,模型选择对最终性能的影响有限。这就是为什么深度学习实践中我们通常用经验法则选择容量(参数量)而非精细搜索——只要在合理范围内,差异通常被训练随机性淹没。
5.4.5 一致性(Consistency)
到目前为止我们讨论了固定大小训练集下各种估计量的性质。我们通常也关心估计量随训练数据量增加的行为。特别地,我们通常希望:随着数据集中数据点数 m 增加,点估计收敛到对应参数的真值。更形式地,我们希望 plim_{m→∞} θ̂m = θ(式 5.55)。符号 plim 表示依概率收敛,意味着对任何 ε > 0,P(|θ̂_m - θ| > ε) → 0 当 m → ∞。式 5.55 描述的条件叫一致性(consistency)。有时也叫弱一致性;强一致性指 θ̂ 到 θ 的几乎处处收敛。随机变量序列 x^(1), x^(2), … 到值 x 的几乎处处收敛发生于 p(lim 估计正态分布 N(x;μ,σ^2) 的均值参数 μ。我们可用数据集的第一个样本 x^(1) 作无偏估计量:θ̂ = x^(1)。此时 E(θ̂_m) = θ,所以无论看多少数据点估计量都无偏。这当然意味着估计量渐近无偏。但它不是一致估计量——因为不是 θ̂_m → θ 当 m → ∞。} x^(m) = x) = 1。一致性保证由估计量引入的偏差随数据样本数增加而减小;但反之不成立——渐近无偏不蕴含一致性。例如考虑用数据集 {x^(1),…,x^(m)
弱一致性 vs 强一致性的区别:弱一致性用 plim_{m→∞} θ̂m = θ(依概率收敛),强一致性用 lim θ̂_m = θ a.s.(几乎处处收敛)。几乎处处收敛蕴含依概率收敛,反之不必然。一致性是渐近性质——它告诉我们当数据无限多时估计量会怎样,但在有限样本下不提供具体误差界。这是为什么实际应用中我们通常关心偏差、方差、MSE 这类有限样本度量,而非直接用一致性。最大似然估计量在 5.5.2 节会看到具有一致性与统计效率两个理想性质。
5.4.5 给出的反例(θ̂_m = x^(1) 无偏但不一致)实际上不是 MLE 类的估计量——它通过只用第一个样本浪费了所有其它信息。这一反例的真正意义是:"无偏性"和"有效性"(使用所有数据信息)是两个不同性质;MLE 是渐近有效的(即用到所有数据),最大后验估计(5.6.1)也用到所有数据。在所有"有效"估计量中,最大似然在 Cramér-Rao 下界意义上是渐近最优的(5.5.2)。
最大似然估计量的一致性证明通常需要三件事:模型族包含真分布、可识别性(真分布对应唯一 θ)、正则性条件(密度光滑且支撑集不依赖 θ)。违反任一条件 MLE 都不一致。例如:若真分布是 N(0,1) 但模型族是 N(μ,1) (仅单参数),MLE μ̂_m 仍一致因为单参数族仍包含真分布;若模型族是 N(μ,σ^2) 真分布也是正态但 σ^2 未知,则 MLE 一致(参看 5.4.2)。更微妙的情况:若真分布 p_data 不在模型族内(如真实分布是混合高斯但模型是单高斯),MLE 仍可一致但会收敛到 KL 意义上最接近 p_data 的模型——这叫"伪真"(pseudo-true)参数。
正则化项在有限样本下牺牲一致性以换取更好的有限样本性能——这在直觉上是"用偏差换方差",但形式上 MLE 一致而 MAP 通常不一致。理解这一 trade-off 的关键:渐近性质只在样本数趋于无穷时显现,对任何有限 m,正则化往往更优。
关于样本均值作为均值参数估计的一致性:μ̂m = (1/m) Σ x^(i) 显然是一致估计量——大数定律保证 plim μ̂_m = μ。它也是无偏的,渐近无偏 = 一致在这例成立。但 5.4.5 给出的反例(用 x^(1) 作估计)说明一致≠无偏+渐近无偏——一致是关于"随 m 增长估计量是否收敛到真值",而无偏只关于"期望是否等于真值"。
关于一致性的实际意义:当我们说"最大似然估计量是好的"时,常常隐含指其渐近性质——在 m → ∞ 时一致且高效。但在任何具体的有限样本下,MLE 不一定优于其他估计量。例如在小样本高维问题中,正则化估计(MAP、ridge)通常优于 MLE——尽管 MLE 在大样本下渐近更优。这是为什么现代机器学习几乎总是用某种正则化版本。
5.5 最大似然估计(Maximum Likelihood Estimation)
前面我们见过一些常见估计量的定义并分析了它们性质。但这些估计量从哪里来?我们不想靠猜某个函数可能作好的估计量然后分析其偏差与方差,而希望有某种原则,从中能为不同模型推导出好的特定函数作为估计量。最常见的这种原则是最大似然原则。考虑从真但未知的数据生成分布 p_data(x) 独立抽取的 m 个样本 X = {x^(1),…,x^(m)}。令 p_model(x;θ) 是由 θ 索引的、同空间上的参数化概率分布族;换言之,p_model(x;θ) 把任意配置 x 映射为估计真概率 p_data(x) 的实数。θ 的最大似然估计量定义为 θ_ML = arg max_θ p_model(X;θ) = arg max_θ ∏{i=1}^m p_model(x^(i);θ)(式 5.56–5.57)。许多概率的乘积出于多种原因不便,例如容易数值下溢。为得到更便利但等价的优化问题,我们观察到取似然对数不改变其 arg max 但方便地把乘积变成求和:θ_ML = arg max_θ Σ^m log p_model(x^(i);θ)(式 5.58)。因为当对代价函数重新缩放时 arg max 不变,可除以 m 得到一个用训练数据所定义经验分布 p̂data 上的期望表达的版本:θ_ML = arg max_θ E{x∼p̂data} log p_model(x;θ)(式 5.59)。解释最大似然估计的一种方式是把它视为最小化经验分布 p̂_data 与模型分布之间的不相似度,不相似度由 KL 散度(KL divergence)衡量。KL 散度由 D_KL(p̂_data || p_model) = E{x∼p̂data}[log p̂_data(x) - log p_model(x)] 给出(式 5.60)。左边项只是数据生成分布的函数而非模型的。这意味着当我们训练模型以最小化 KL 散度时,只需最小化 -E[log p_model(x)](式 5.61),当然与式 5.59 的最大化相同。最小化该 KL 散度正好对应最小化两个分布之间的交叉熵。许多作者用"交叉熵"一词特指伯努利或 softmax 分布上的负对数似然,那是个误称;任何由负对数似然组成的损失都是训练集定义的经验分布与模型定义概率分布之间的交叉熵。例如均方误差就是经验分布与高斯模型之间的交叉熵。因此我们可把最大似然视为让模型分布去匹配经验分布 p̂_data 的尝试。理想情况下我们想匹配真数据生成分布 p_data,但我们没有直接访问这一分布的方法。虽然无论我们是最大化似然还是最小化 KL 散度,最优 θ 都相同,但目标函数值不同。在软件中我们常把两者都说成最小化一个代价函数。因此最大似然变成最小化负对数似然(NLL),或等价地最小化交叉熵。最大似然等于最小化 KL 散度的视角在这种情形下变得有用,因为 KL 散度有已知的零下界。当 x 是实值时负对数似然实际上可以变成负数。
为什么把乘积变成求和是数值上重要的?因为每个 p_model(x^(i);θ) 都是小于 1 的数,它们的乘积随 m 指数衰减。32 位浮点数的最小正值约 10^-38,对 m ≥ 几十就会下溢为零。对数变换把乘积变成求和,数值稳定得多。另一个细节是:除以 m 后得到的式 5.59把优化目标表示为经验分布 p̂_data 上的期望——这种形式与 KL 散度的联系(式 5.60)正是把最大似然与信息论距离联系起来的桥梁。
关于均方误差作为高斯模型的负对数似然这一论点(最后一个段落):设真实模型 p_model(x;θ)是高斯 N(x;f̂(x;θ),σ^2),则负对数似然 E[-log p_model] = (1/2σ^2) E[||x - f̂(x;θ)||^2] + const,最小化它等价于最小化 MSE——这是把 MSE 损失从"任意的二次损失"重新解释为"高斯模型的负对数似然"的关键。这对理解现代深度学习中交叉熵损失(多元伯努利/softmax的负对数似然)与 MSE 损失(高斯模型的负对数似然)的本质有深远影响。
最大似然估计的"原则性"地位的来源是它在统计决策理论中达到各种最优性:渐近无偏、渐近有效(达 Cramér-Rao 下界)、一致、渐近正态。Neyman-Pearson 引理也表明似然比检验是最优假设检验。这些理论结果使 MLE 成为统计学家的默认估计量——而最大似然在机器学习中之所以被广泛采用,正是因为这些理论上的优良性质在大样本下会显式出现。
5.5.1 条件对数似然与均方误差(Conditional Log-Likelihood and Mean Squared Error)
最大似然估计量能直接推广到目标是估计条件概率 P(y|x;θ) 以由 x 预测 y 的情形。这其实是最常见情形,因为它构成大多数监督学习的基础。若 X 代表我们所有输入、Y 代表所有观察目标,条件最大似然估计量是 θ_ML = arg max_θ P(Y|X;θ)(式 5.62)。若假设示例 i.i.d.,可分解为 θ_ML = arg max_θ Σ_{i=1}^m log P(y^(i)|x^(i);θ)(式 5.63)。
例:作为最大似然的线性回归 5.1.4 节介绍的线性回归可被证明为最大似然程序。此前我们把线性回归动机化为"学习一个算法以从输入 x 产生输出值 ŷ"——选择从 x 到 ŷ 的映射以最小化均方误差——这一准则或多或少是任意引入的。我们现在从最大似然估计视角重新审视线性回归。我们不再产生单一预测 ŷ,而把模型视为产生条件分布 p(y|x)。可想象在无穷大训练集上,我们可能会看到若干训练例有同样的输入值 x 但不同的 y 值。学习算法的目标现在是拟合分布 p(y|x) 到所有与 x 兼容的不同 y 值。为推导与之前得到的同样线性回归算法,定义 p(y|x) = N(y;ŷ(x;w),σ^2),其中函数 ŷ(x;w) 给出高斯均值的预测;本例中假设方差固定为用户选定的常数 σ^2。可以看到这种 p(y|x) 函数形式选择使最大似然估计程序产生与我们之前发展的同样学习算法。假设样本 i.i.d.,条件对数似然(式 5.63)由 Σ log p(y^(i)|x^(i);θ) = -m log σ - (m/2) log(2π) - Σ |ŷ^(i) - y^(i)|^2 / (2σ^2) 给出(式 5.64–5.65),其中 ŷ^(i) 是线性回归对第 i 个输入 x^(i) 的输出,m 是训练样本数。比较对数似然与均方误差 MSE_train = (1/m) Σ ||ŷ^(i) - y^(i)||^2(式 5.66),我们立刻看到:关于 w 最大化对数似然得到的参数 w 估计与最小化均方误差得到的相同。两个准则值不同但最优位置相同。这证明了把 MSE 作为最大似然估计程序的合理性。我们将看到最大似然估计量有几个理想性质。
式 5.65 的对数似然展开用了 N 个独立高斯的对数似然标准形式:-N log σ - (N/2) log(2π)是与 w 无关的常数项,-Σ |ŷ^(i) - y^(i)|^2 / (2σ^2) 是与 w 相关的项。比较 MSE_train =(1/m) Σ ||ŷ^(i) - y^(i)||^2 关于 w 最大化对数似然等价于最小化 Σ |ŷ - y|^2 即最小化 MSE。这两个准则的 arg max/min 位置相同但值不同——这是我们说"线性回归是最小 MSE 算法"在概率意义上的重新证明。
这一节的隐含洞见:把 MSE 损失函数视为"高斯模型 + MLE"是重要的概念重构。它意味着我们不需要单独为 MSE 找理由——它已经是"假设残差为高斯噪声 + 条件 MLE"的自然推论。如果我们对残差分布有不同假设(如 t 分布、混合高斯),对应的损失函数应改为负对数似然而非 MSE。这一思路在鲁棒回归和现代异常检测中非常重要——用错损失函数等价于用错概率假设。
这一节建立的对应关系是 8 章中代价函数选择的关键背景。深度学习中回归任务用 MSE(高斯似然),二元分类用二元交叉熵(伯努利似然),多类分类用多类交叉熵(多项分布似然),序列生成用序列交叉熵——所有这些损失函数选择都对应着"模型输出 + 似然推导"的统一逻辑,不是任意的设计选择。
条件对数似然是监督学习标准公式的核心——给定输入 x 的条件分布 p(y|x;θ) 后,训练 = 最大化 Σ log p(y^(i)|x^(i);θ)。这与无监督的 Σ log p(x^(i);θ) (5.5 节)形式完全相同,只是数据从 (x) 变为 (x,y)。
线性回归作为 MLE 的另一种视角:给定输入 x,输出 y 是高斯 N(w^⊤x+b, σ^2),MLE 找到使观测数据在该模型下概率最大的 w, b。这把"线性回归"从"任意选取 MSE 损失"重新解释为"高斯噪声 + MLE"。
对条件对数似然的扩展:多类分类对应多项分布、计数数据对应泊松分布、生存分析对应威布尔分布——每种概率分布对应一种损失函数(负对数似然)。这就是 GLM(广义线性模型)的设计逻辑。
5.5.2 最大似然的性质(Properties of Maximum Likelihood)
最大似然估计量主要吸引力在于:可以证明它作为估计量是渐近最佳的——当样本数 m → ∞ 时——以随 m 增大的收敛速率计。在合适条件下最大似然估计量有一致性(参看上面 5.4.5 节),意味着当训练样本数趋于无穷时,参数的最大似然估计收敛到参数真值。条件是:真分布 p_data 必须位于模型族 p_model(·;θ) 内,否则没有任何估计量能恢复 p_data;真分布 p_data 必须对应恰好一个 θ 值,否则最大似然能恢复正确 p_data,但不能确定数据生成分布用了哪个 θ 值。除了最大似然估计量还有其它归纳原则,许多具有一致性估计量性质。但一致估计量可在统计效率上不同,意指一个一致估计量可能对固定数量样本 m 取得更低泛化误差,或等价地,可能需要更少样本来取得固定泛化误差水平。统计效率通常在参数情形下研究(如线性回归中那样):目标是估计一个参数的值(假设真参数可被识别),而非函数值。衡量我们多接近真参数的一种方式是用期望均方误差——计算估计与真参数值之间的平方差,期望是对 m 个从数据生成分布抽出的训练样本取的。该参数均方误差随 m 增加而下降;对大的 m,Cramér-Rao 下界(Rao, 1945; Cramér, 1946)显示没有一致估计量具有比最大似然估计量更低的均方误差。基于这些原因(一致性与效率),最大似然常被认为是机器学习中所用首选估计量。当样本数小到足以产生过拟合行为时,可使用权重衰减等正则化策略得到最大似然的有偏版本,使训练数据有限时方差更小。
Cramér-Rao 下界的具体含义:对单参数估计问题,任何无偏估计量 θ̂ 的方差都满足Var(θ̂) ≥ 1 / (m I(θ)),其中 I(θ) 是 Fisher 信息量对单样本的版本。最大似然估计量在渐近意义上达到这个下界——其方差渐进于 Cramér-Rao 下界。这是最大似然在渐近意义上"最高效"的精确含义。值得注意的是:有偏估计量可以超过 Cramér-Rao 下界(因为 Cramér-Rao 只约束无偏估计量),但通常以偏差换方差需要慎重权衡——5.5.2 末尾的"正则化得到有偏但方差更小的 MLE"就是这种权衡的实际应用。
Fisher 信息量 I(θ) 的直观含义:衡量样本携带的关于 θ 的信息量。I(θ) 越大说明观测对 θ 的约束越强,渐近方差 1/(mI(θ)) 越小。Cramér-Rao 下界 1/(mI(θ)) 给出无偏估计量能达到的最好渐近方差——MLE 渐近达到这个下界,因此在所有无偏估计量中渐近最有效。
关于"MLE 在小样本下可能过拟合":这是 5.5.2 末尾提到正则化的原因。正则化(如权重衰减)相当于对 θ 施加先验,使其偏向较小值。正则化后的 MLE 变成有偏估计量(5.6.1 MAP 估计),但在小样本下其 MSE 通常比纯 MLE 更小——这是偏差-方差折中的实际应用。
Cramér-Rao 下界在机器学习中的隐含应用:神经网络训练中的 Fisher 信息矩阵H = E[∇^2 log p(x;θ)] 决定损失函数的曲率,进而影响 SGD 的收敛速率。实践中我们常用 Hessian 矩阵(与 Fisher 信息在正则性条件下等价)来判断优化难度——病态 Hessian(小最大特征值比)意味着优化难。
统计效率与"少样本即可达到某泛化误差"密切相关:在固定泛化误差下,更高效的估计量需要更少样本。这解释了为什么最大似然是机器学习的默认估计量——它在大样本下高效,使模型能用相对少的数据达到好性能。
Cramer-Rao 下界是所有无偏估计量方差的下界——任何估计量都不能在所有分布上同时达到这一下界,只有在某些特定的"良好"分布下才能达到。MLE 在"良好"条件下渐近达到这个下界——这就是 MLE 在大样本下"最好"的精确含义。
5.6 贝叶斯统计(Bayesian Statistics)
到目前为止我们讨论了频率派统计学与基于估计单一 θ 值、然后基于该单一估计做所有预测的方法。另一种方法是在做预测时考虑 θ 的所有可能值。后者是贝叶斯统计的领域。如 5.4.1 节讨论的,频率派视角是:真参数值 θ 固定但未知,而点估计 θ̂ 是随机变量,因为它作为数据集(被视为随机的)的函数。贝叶斯对统计学的视角则非常不同。贝叶斯用概率反映对知识状态的确定度。数据集被直接观察到因此不是随机的;反过来真参数 θ 未知或不确定因此被表示为随机变量。在观察数据前,我们用先验概率分布(prior probability distribution)p(θ)(有时简称为"先验")表示对 θ 的认知。通常机器学习实践者选择相当宽(即高熵)的先验分布以反映在观察任何数据前对 θ 值的高度不确定性。例如可先验假设 θ 落在某个有限范围或体积内且为均匀分布。许多先验反映对"更简单"解的偏好(如更小幅值的系数或更接近常数的函数)。现在考虑我们有一组数据样本 {x^(1),…,x^(m)}。我们可通过贝叶斯规则把数据似然 p(x^(1),…,x^(m)|θ) 与先验结合以恢复数据对我们关于 θ 的信念的影响:p(θ|x^(1),…,x^(m)) = p(x^(1),…,x^(m)|θ) p(θ) / p(x^(1),…,x^(m))(式 5.67)。在贝叶斯估计通常使用的场景中,先验开始是相对均匀或高熵的高斯分布,数据的观察通常使后验失去熵并集中在几个高可能性的参数值附近。相对于最大似然估计,贝叶斯估计提供两个重要差异。首先,与对 θ 做点估计后做预测的最大似然方法不同,贝叶斯方法用 θ 上的完整分布做预测。例如在观察 m 个样本后,对下一个数据样本 x^{(m+1)} 的预测分布由 p(x^{(m+1)}|x^(1),…,x^(m)) = ∫ p(x^{(m+1)}|θ) p(θ|x^(1),…,x^(m)) dθ 给出(式 5.68)。每个有正概率密度的 θ 值都对下一个样本的预测有贡献,贡献用后验密度自身加权。观察 {x^(1),…,x^(m)} 后,若我们仍对 θ 值相当不确定,则这种不确定性被直接纳入我们可能做的任何预测中。在 5.4 节我们讨论过频率派方法如何通过评估估计量的方差处理给定 θ 点估计中的不确定性。估计量的方差是评估"估计会随观察数据的替代采样而怎样变化"。贝叶斯对"如何处理估计中不确定性"这一问题的回答就是直接对之积分,这通常能很好地防止过拟合。这一积分当然是概率定律的应用,使贝叶斯方法简单易证,而频率派构造估计量的机制基于相当随意的决定——用单一点估计概括数据中所含全部知识。贝叶斯估计方法与最大似然方法之间第二个重要差异 由贝叶斯先验分布的贡献引起。先验通过将概率质量密度推向参数空间中先验偏好的区域来产生影响。实践中先验常表达对更简单或更平滑模型的偏好。贝叶斯方法的批评者把先验识别为主观人为判断影响预测的来源。贝叶斯方法在训练数据有限时通常泛化好得多,但训练样本数大时通常承受高计算成本。
例:贝叶斯线性回归 这里我们考虑学习线性回归参数的贝叶斯估计方法。在线性回归中我们学习从输入向量 x∈R^n 到预测标量 y∈R 值的线性映射。预测由向量 w∈R^n 参数化:ŷ = w^⊤ x(式 5.69)。给定一组 m 个训练样本 (X^(train), y^(train)),可把对整个训练集 y 的预测表达为:ŷ^(train) = X^(train) w(式 5.70)。表示为关于 y^(train) 的高斯条件分布,我们有 p(y^(train)|X^(train),w) = N(y^(train);X^(train)w,I) ∝ exp(-(1/2)(y^(train) - X^(train)w)^⊤ (y^(train) - X^(train)w))(式 5.71–5.72),其中我们按标准 MSE 公式假设 y 上的高斯方差为 1。在下面为减少符号负担,我们把 (X^(train), y^(train)) 简记为 (X,y)。要确定模型参数向量 w 上的后验分布,首先需要指定一个先验分布。先验应反映我们关于这些参数值的朴素信念。有时用模型参数表达我们的先验信念是困难或不自然的,实践中我们通常假设相当宽的分布表达对 θ 的高度不确定性。对实值参数常用高斯作先验分布:p(w) = N(w;μ_0,Λ_0) ∝ exp(-(1/2)(w-μ_0)^⊤ Λ_0^{-1} (w-μ_0))(式 5.73),其中 μ_0 和 Λ_0 分别是先验分布的均值向量和协方差矩阵(除非有理由假设特定协方差结构,我们通常假设对角协方差矩阵 Λ_0 = diag(λ_0))。先验一旦指定,我们可继续确定模型参数上的后验分布:p(w|X,y) ∝ p(y|X,w) p(w) ∝ exp(-(1/2)(y-Xw)^⊤ (y-Xw)) exp(-(1/2)(w-μ_0)^⊤ Λ_0^{-1} (w-μ_0)) ∝ exp(-(1/2)(-2y^⊤ Xw + w^⊤ X^⊤ Xw + w^⊤ Λ_0^{-1} w - 2μ_0^⊤ Λ_0^{-1} w))(式 5.74–5.76)。现定义 Λ_m = X^⊤ X + Λ_0^{-1},μ_m = Λ_m^{-1} X^⊤ y + Λ_0^{-1} μ_0。用这些新变量我们发现后验可重写为高斯分布:p(w|X,y) ∝ exp(-(1/2)(w-μ_m)^⊤ Λ_m^{-1} (w-μ_m) + (1/2) μ_m^⊤ Λ_m^{-1} μ_m) ∝ exp(-(1/2)(w-μ_m)^⊤ Λ_m^{-1} (w-μ_m))(式 5.77–5.78)。所有不包含参数向量 w 的项已被省略;它们由分布必须归一化到积分为 1 这一事实隐含。式 3.23 展示了如何归一化多元高斯分布。检查这一后验分布能让我们对贝叶斯推断的效果获得一些直观。在大多数情形下我们设 μ_0 = 0。若设 Λ_0 = (1/α) I,则 μ_m 给出的 w 估计与带 αw^⊤w 权重衰减惩罚的频率派线性回归得到的 w 估计相同。一个差异是若 α 设为零则贝叶斯估计未定义——我们不允许以无穷宽的 w 先验开始贝叶斯学习过程。更重要的差异是贝叶斯估计提供协方差矩阵,展示 w 的所有不同值有多可能,而非仅提供估计 μ_m。
5.6.1 最大后验(MAP)估计(Maximum A Posteriori (MAP) Estimation)
虽然最原则的方法是用参数 θ 上的完整贝叶斯后验分布做预测,但通常仍希望有点估计。希望点估计的一个常见原因是:对大多数有趣模型,涉及贝叶斯后验的大多数操作不可解,点估计提供了一个可解的近似。我们不必简单回到最大似然估计,而仍可通过允许先验影响点估计的选择获得贝叶斯方法的一些好处。一种合理的方法是选择最大后验(maximum a posteriori, MAP)点估计。MAP 估计选最大后验概率的点(连续 θ 的更常见情形中即最大概率密度):θ_MAP = arg max_θ p(θ|x) = arg max_θ [log p(x|θ) + log p(θ)](式 5.79)。我们认出右边是标准对数似然项 log p(x|θ) 和对应先验分布的 log p(θ)。作为例子,考虑权重 w 上有高斯先验的线性回归模型。若先验由 N(w;0,(1/λ)I) 给出,则式 5.79 中对数先验项正比于熟悉的 λw^⊤w 权重衰减惩罚,加上一个不依赖 w 且不影响学习过程的项。权重上有高斯先验的 MAP 贝叶斯推断因此对应于权重衰减。和完整贝叶斯推断一样,MAP 贝叶斯推断有利用先验所带而训练数据中找不到的信息的优势。这一额外信息有助于降低 MAP 点估计的方差(与 ML 估计相比),代价是增加偏差。许多正则化估计策略——如带权重衰减正则化的最大似然学习——可被解释为对贝叶斯推断做 MAP 近似。这一观点在正则化由"在目标函数上加一项对应 log p(θ)"组成时适用。并非所有正则化惩罚都对应 MAP 贝叶斯推断。例如某些正则化项可能不是概率分布的对数;其它正则化项依赖数据,当然先验概率分布是不允许这样做的。MAP 贝叶斯推断提供一种直接方式设计复杂但可解释的正则化项。例如可通过用高斯混合而非单一高斯分布作先验导出更复杂的惩罚项(Nowlan and Hinton, 1992)。
式 5.79 θ_MAP = arg max_θ [log p(x|θ) + log p(θ)] 是 MAP 的核心——把对数似然和对数先验相加。对高斯先验 N(w;0,(1/λ)I),对数先验项为 -(λ/2) w^⊤w + const,因此 θ_MAP = arg max_θ [log p(x|θ) - (λ/2) w^⊤w] = arg min_θ [-log p(x|θ) + (λ/2) w^⊤w],正好是带权重衰减的负对数似然。这建立了 MAP 估计与权重衰减正则化之间的等价关系。深度学习中的几乎所有 L2 正则化都可被解释为高斯先验下的 MAP 估计;L1 正则化对应 Laplace 先验;Dropout 则不对应单一概率分布的 MAP 解释——它属于 5.6.1 末尾提到的"有些正则化项不是概率分布的对数"那种情形。
MAP 估计与完全贝叶斯推断的关键区别:MAP 把后验压缩到一点(最大后验点),完全贝叶斯用整个后验积分。MAP 的优势是计算简单(点估计 + 一个优化问题),劣势是丢失了后验的不确定性信息——这对决策问题有时很关键(例如医疗诊断中"70% 概率恶性 + 30% 良性"与"100% 良性"有本质区别)。
深度学习中所有使用 L2 正则化的训练都可被解释为 MAP 估计;使用 L1 正则化对应 Laplace 先验;使用混合高斯先验可得到稀疏与稠密组合的解(Nowlan and Hinton, 1992)。Dropout 不对应单一先验——它是几何平均多个子模型的一种近似贝叶斯推断方法,是 Gal and Ghahramani(2016)将 Dropout 解释为变分推断的来源。
MAP 与 ML 的实际区别:ML 是无先验的极限 MAP(即假设先验是均匀分布);MAP 相当于在 ML 目标上加一个 log p(θ) 项。L2 正则化对应 log p(θ) ∝ -λ||θ||^2 (高斯先验),L1 对应 log p(θ) ∝ -λ||θ||_1(Laplace 先验)。这两种正则化都来自 5.6.1 末尾的"通过用高斯混合而非单一高斯分布作先验"的提示——它指向一种更灵活的正则化设计:先验分布族可以非常复杂,只要其对数可加到目标函数上即可。
MAP 与完全贝叶斯的中间位置:MAP 比 ML 利用更多先验信息但仍只输出一点;完全贝叶斯用整个后验。MAP 的精度可通过增加先验的精确度来提升——但先验越精确,其主观性越强,对先验错误的鲁棒性越差。这是贝叶斯方法的核心 trade-off。
5.7 监督学习算法(Supervised Learning Algorithms)
回忆 5.1.3 节:监督学习算法粗略地说就是学习将一些输入与一些输出关联起来的学习算法,给定由输入 x 与输出 y 组成的训练样本集。很多情况下输出 y 可能难以自动收集而须由人提供"监督",但即使训练集目标是自动收集的术语仍适用。
5.7.1 概率监督学习(Probabilistic Supervised Learning)
本书中大多数监督学习算法基于估计概率分布 p(y|x)。可简单地用最大似然估计为参数化分布族 p(y|x;θ) 找到最佳参数向量 θ。我们已见过线性回归对应分布族 p(y|x;θ) = N(y;θ^⊤ x,I)(式 5.80)。我们可把线性回归推广到分类场景,方法是定义不同的概率分布族。如果有两个类——类 0 和类 1——只需指定其中一个类的概率。类 1 的概率决定类 0 的概率,因为这两个值必须加起来为 1。线性回归中实值数上的正态分布用均值参数化,我们给该均值的任何值都是有效的;二元变量上的分布稍复杂因为其均值必须始终在 0 与 1 之间。解决这一问题的一种方式是使用逻辑 S 型函数(logistic sigmoid function)把线性函数的输出压到区间 (0,1) 内并把该值解释为概率:p(y=1|x;θ) = σ(θ^⊤ x)(式 5.81)。这种方法叫逻辑回归(logistic regression)——名字有点奇怪,因为我们用该模型做分类而非回归。在线性回归情形我们能通过解正规方程组找到最优权重。逻辑回归稍难——其最优权重没有闭式解;必须通过最大化对数似然来搜索——可用梯度下降最小化负对数似然(NLL)来做到。这一相同策略可本质上应用于任何监督学习问题:写下对正确种类输入输出变量的条件概率参数化族即可。
逻辑回归没有闭式解这一事实意味着无法用 5.1.4 节线性回归那样的矩阵求逆一步得到最优 w。必须用迭代优化(梯度下降或牛顿法)来搜索最大似然解。这对神经网络时代的训练范式是奠基性的:所有深度学习模型都涉及对负对数似然的迭代优化。
逻辑回归的逻辑 S 型函数 σ(t) = 1/(1+exp(-t)) 把 t∈R 压到 (0,1)。其逆函数 logit(p) = log(p/(1-p)) 把概率 p∈(0,1) 映回实数。S 型函数在神经网络中也是关键激活函数——它把任意实值输入压到 (0,1),使其可解释为概率或归一化权重(参看第 6 章)。
多类分类用 softmax 函数 p(y=i|x) = exp(θ_i^⊤ x) / Σ_j exp(θ_j^⊤ x) 推广逻辑回归,对应多项分布的指数族形式。多类 softmax 分类的负对数似然就是 cross-entropy 损失,现代深度学习分类的标准损失函数。
逻辑回归与神经网络的关系:单层神经网络(无隐藏层)配 sigmoid 激活函数 + 交叉熵损失就是逻辑回归。深度学习实际上是把逻辑回归堆叠为多层、加非线性激活、配大规模数据的扩展——这一定位让逻辑回归成为理解神经网络的最简原形。
从逻辑回归到 softmax 多类分类只需把 sigmoid 推广为 softmax:p(y=i|x;θ) = exp(θ_i^⊤ x) / Σ_j exp(θ_j^⊤ x),对数似然是交叉熵 -Σ_i log p(y^(i)|x^(i))。softmax 在神经网络最后一层几乎是标配。
梯度下降在逻辑回归上的应用:因为 L(θ) = -Σ log p(y^(i)|x^(i);θ) 对 θ 可微且凸,梯度下降(用整个数据集的梯度)能找到全局最优。这与线性回归用闭式解等价——两者都因优化问题凸而能找到全局最优。
逻辑回归的另一个名字是"最大熵分类器"——因为它假设在给定 x 的条件下 y 的分布属于指数族且使条件熵最大化。这是指数族 + MLE 框架在分类问题上的具体应用。对 softmax 多类分类,最大熵原理同样给出 softmax 形式——这一联系让softmax 在信息论意义上成为"对 y 分布最少假设的合理选择"。
逻辑回归与神经网络共享的"线性函数 + 激活函数"模板:逻辑回归 = w^⊤x + sigmoid 激活;神经网络多层堆叠 = 多个 (w_i^⊤x_i + 激活) 组合。这种模板的层级堆叠正是深度学习的基础。
最后这一段"同一策略可应用于任何监督学习问题"是后续章节的纲领:6 章前馈网络 = 用非线性激活的多层堆叠;8 章优化 = 用 SGD 训练深度网络;9-10 章处理特定输入结构(图像、序列)。所有这些都可被理解为"写下一个参数化条件分布族 + 最大化对数似然"这一通用策略的具体应用。
5.7.2 支持向量机(Support Vector Machines)
最有影响的监督学习方法之一是支持向量机(support vector machine, SVM;Boser et al., 1992; Cortes and Vapnik, 1995)。该模型与逻辑回归类似:都由线性函数 w^⊤ x + b 驱动。与逻辑回归不同,SVM 不提供概率,只输出一个类别身份。SVM 预测:当 w^⊤ x + b 为正时正类存在;同样当 w^⊤ x + b 为负时负类存在。SVM 关键创新是核技巧(kernel trick)。核技巧由观察到许多机器学习算法可只通过示例之间的内积来写。例如可证明 SVM 用的线性函数可被重写为 w^⊤ x + b = b + Σ_{i=1}^m α_i x^⊤ x^(i)(式 5.82),其中 x^(i) 是训练示例,α 是系数向量。这样重写学习算法允许我们用某给定特征函数 φ(x) 的输出代替 x,用函数 k(x,x^(i)) = φ(x) · φ(x^(i)) 代替内积,叫做核(kernel)。点 · 运算符代表类似 φ(x)^⊤ φ(x^(i)) 的内积。对某些特征空间我们可能不严格用向量内积;某些无穷维空间我们需要用其它种类的内积,例如基于积分而非求和的内积。这些种类内积的完整发展超出本书范围。用核评估代替内积后我们可用函数 f(x) = b + Σ_i α_i k(x,x^(i))(式 5.83)做预测。该函数关于 x 是非线性的,但 φ(x) 与 f(x) 之间的关系是线性的;α 与 f(x) 之间关系也是线性的。基于核的函数正好等价于:先把所有输入用 φ(x) 做预处理,然后在新变换空间中学习线性模型。核技巧的强大在于两点。第一,它允许我们用保证有效收敛的凸优化技术学习关于 x 非线性的模型,这之所以可能是因为我们把 φ 看作固定的、只优化 α——即优化算法可把决策函数看作在不同空间中是线性的。第二,核函数 k 经常有一种实现比朴素地构造两个 φ(x) 向量并显式取它们内积显著更计算高效。某些情形下 φ(x) 甚至可以是无穷维的,这导致朴素显式方法的计算代价无穷。很多情形下 k(x,x') 是一个关于 x 的非线性可解函数,即使 φ(x) 不可解。作为无穷维特征空间配可解核的例子,我们对非负整数 x 构造一个特征映射 φ(x):假设该映射返回一个含 x 个 1 后接无穷多个 0 的向量。我们可以写核函数 k(x,x^(i)) = min(x,x^(i)),它正好等价于对应的无穷维内积。最常用的核是高斯核:k(u,v) = N(u-v;0,σ^2 I)(式 5.84),其中 N(x;μ,Σ) 是标准正态密度。该核也叫径向基函数(RBF)核,因为其值沿 v 空间中从 u 向外辐射的线下降。高斯核对应于无穷维空间中的内积,但该空间的推导不如我们整数 min 核的例子直接。我们可把高斯核视为执行一种模板匹配:与训练标签 y 关联的训练示例 x 变成类 y 的模板。当测试点 x' 在欧氏距离上接近 x 时,高斯核有大的响应,表明 x' 与 x 模板非常相似。然后模型把大的权重放在关联的训练标签 y 上。整体上预测将组合许多这样的训练标签,每个由对应训练示例的相似度加权。SVM 不是唯一可用核技巧增强的算法;许多其它线性模型可被这样增强。使用核技巧的算法类别叫核机器或核方法(kernel machines/kernel methods;Williams and Rasmussen, 1996; Schölkopf et al., 1999)。核机器的一个主要缺点是评估决策函数的成本与训练样本数线性相关,因为第 i 个示例贡献一项 α_i k(x,x^(i)) 给决策函数。SVM 能通过学习一个含大多为零的 α 向量缓解这一点——分类新示例时只需对有非零 α_i 的训练示例评估核函数——这些训练示例叫支持向量。核机器也在数据集大时承受高训练计算成本。我们将在 5.9 节重温这一想法。带一般核的核机器难以泛化良好——5.11 节会解释为什么。现代深度学习的化身设计来克服核机器的这些限制。当前的深度学习复兴始于 Hinton et al.(2006)证明神经网络能在 MNIST 基准上胜过 RBF 核 SVM。
5.7.3 其它简单监督学习算法(Other Simple Supervised Learning Algorithms)
我们已经简要遇到过另一种非概率监督学习算法:最近邻回归。更一般地,k-近邻(k-nearest neighbors)是一族可用于分类或回归的技术。作为非参数学习算法,k-近邻不限制于固定数量的参数。我们通常把 k-近邻算法看作没有任何参数,而是实现训练数据的一个简单函数。事实上甚至没有真正的训练阶段或学习过程。相反,在测试时当我们想为新测试输入 x 产生输出 y 时,我们找训练数据 X 中 x 的 k 个最近邻。然后我们返回训练集中对应 y 值的平均。这对几乎任何种类的监督学习(其中可对 y 值定义平均)都适用。在分类情形可对 one-hot 码向量 c 求平均——c_y=1,其它 c_i=0。然后我们可把对这些 one-hot 码的平均解释为类上的概率分布。作为非参数学习算法,k-近邻能取得很高容量。例如假设我们有多类分类任务并用 0-1 损失衡量性能。在该设置下,1-最近邻收敛到两倍贝叶斯误差当训练样本数趋于无穷。超过贝叶斯误差的误差来自通过在等距最近邻间随机打破平局来选一个最近邻。当有无穷多训练数据时所有测试点 x 都有无穷多距离为零的训练集邻居。如果我们允许算法用所有这些邻居投票而不是随机选一个,过程收敛到贝叶斯错误率。k-近邻的高容量使其在大训练集时取得高准确率。然而这是以高计算成本为代价的,并可能在小有限训练集上泛化很差。k-近邻一个弱点是不能学到一个特征比另一个更具区分力。例如想象我们有 x∈R^100 回归任务,x 从各向同性高斯分布抽取,但只有一个变量 x_1 与输出有关。进一步假设该特征直接编码输出,即 y=x_1 在所有情况下。最近邻回归将不能检测这一简单模式。大多数点 x 的最近邻将由大量特征 x_2 到 x_100 决定,而非由单独的特征 x_1 决定。因此小训练集上的输出基本上是随机的。
另一种也把输入空间分成区域且每个区域有独立参数的学习算法是决策树(decision tree;Breiman et al., 1984)及其众多变体。如图 5.7 所示决策树的每个节点与输入空间中的一个区域相关联,内部节点用(典型用轴对齐切分)将该区域分成每个孩子节点一个子区域。空间因此被细分为不重叠区域,叶节点与输入区域一一对应。每个叶节点通常把其输入区域中的每个点映射到同一输出。决策树通常用本书范围外的专门算法训练。若允许学习算法学任意大小的树则可视为非参数;不过决策树通常用大小约束正则化使它们在实践中变成参数模型。决策树按其通常使用方式——用轴对齐切分和每节点内常数输出——难以解决对逻辑回归很容易的一些问题。例如若我们有两类问题且正类出现在 x_2 > x_1 的任何地方,决策边界不是轴对齐的;决策树因此需要用许多节点逼近决策边界,实现一个用轴对齐步来回走真决策函数的阶梯函数。如我们所见,最近邻预测器和决策树都有许多限制。尽管如此,它们在计算资源受约束时是有用的学习算法。我们也可通过思考更复杂学习算法与 k-NN 或决策树基线之间的相似和差异来建立对更复杂学习算法的直觉。更多传统监督学习算法的资料可参看 Murphy(2012)、Bishop(2006)、Hastie et al.(2001)等机器学习教科书。
k-NN 在高维的弱点("不能学到某特征比另一特征更具区分力")实际上是维度灾难在监督学习中的具体表现——在 x∈R^100 但只有 x_1 真正与 y 相关时,前 100 维的欧氏距离被无关维度主导,k-NN 等于在随机选择邻居。深度网络通过分层非线性变换隐式地学到了"应该聚焦哪些特征",这正是 5.11.2 节讨论的"为什么需要深度学习"的监督学习版本。
决策树局限的具体例子(x_2 > x_1 的对角决策边界)也是非参数方法在面对简单非线性问题时的失败模式——对角边界需要许多 axis-aligned 阶梯函数近似,效率极低。这与 SVM/神经网络用核技巧或分层非线性学到的对角边界形成鲜明对比。
5.8 无监督学习算法(Unsupervised Learning Algorithms)
回忆 5.1.3 节:无监督算法是那些只经历"特征"而无监督信号的算法。监督与无监督算法的区别不是形式化和严格定义的——因为没有客观测试能区分某值是由监督者提供的特征还是目标。非形式化地说,无监督学习指从分布提取信息的大多数尝试——这些尝试不需要人标注样本。该术语通常与密度估计、学习从分布采样、学习从某分布去噪、寻找数据所在的流形、或把数据聚类成相关样本组相关联。一个经典无监督学习任务是找到数据的"最佳"表示(representation)。所谓"最佳"我们可指不同东西,但一般而言我们寻找一种表示在保持关于 x 尽可能多信息的同时服从某种让表示比 x 本身更简单或更可访问的惩罚或约束。定义更简单表示有多种方式,最常见的三种包括低维表示、稀疏表示与独立表示。低维表示尝试在更小表示中压缩关于 x 尽可能多的信息。稀疏表示(Barlow, 1989; Olshausen and Field, 1996; Hinton and Ghahramani, 1997)将数据集嵌入到对大多数输入其项大部分为零的表示。使用稀疏表示通常需要增加表示的维数,使表示变得大部分为零不会丢弃过多信息。这导致表示的总体结构倾向于沿表示空间各轴分布数据。独立表示尝试解开数据分布背后的变化源,使表示的各维在统计上独立。当然这三种标准并不互斥——低维表示经常产生依赖比原高维数据更少或更弱的元素。这是因为减少表示大小的一种方式是发现并去除冗余。识别和去除更多冗余允许降维算法在丢弃更少信息的同时实现更多压缩。表示的概念是深度学习的核心主题之一,因此也是本书的核心主题。本节我们开发一些表示学习算法的简单例子。这些例算法一起展示如何使上述三个标准都操作化。本书剩下的大多数章节介绍额外表示学习算法,它们以不同方式发展这些标准或引入其它标准。
三种简单表示的对比是这一节的隐藏主线:低维表示(PCA、t-SNE)压缩信息但保留可重建性,稀疏表示(k-means、ICA 的一部分)让大多数项为零使表示更易解释和存储,独立表示(ICA、变分自编码器)解开数据底层的变化因子使下游任务更易学到。三者在"保持信息"与"约束简单性"之间走不同的折中路线——这也是深度学习表示学习的基本设计空间。
关于表示学习作为深度学习核心的更具体说明:本书剩下 16 章(Ch6-Ch20)都在某种意义上是表示学习的不同方面。Ch6 前馈网络学习输入到输出的分层表示;Ch13-15 学习输入数据的概率或确定性表示;Ch16-20 学习生成模型的隐空间表示。所以 5.8 节末尾"表示的概念是深度学习的核心主题之一"这一句实际是全书的纲领。
表示学习为什么是深度学习的核心而非机器学习的一般特征?因为传统机器学习(PCA、k-均值、ICA)的表示是预定义的、线性的、浅层的;深度学习的表示是学到的、非线性的、分层的。从 PCA 到深度自编码器是从线性到非线性、从单层到分层的跨越——这正是 14 章和 15 章的主题。
无监督学习的工程意义:标注数据昂贵(人工标注成本是数据采集成本的 10-1000 倍),无标签数据相对丰富。无监督学习让我们能利用无标签数据学到有用的表示,再用少量标签数据微调——这正是现代自监督学习(self-supervised learning)和预训练-微调范式的核心动机。Ch8 和 Ch15 详细讨论这些技术。
5.8.1 主成分分析(Principal Components Analysis)
2.12 节我们见过主成分分析(PCA)算法提供了一种数据压缩方法。我们也可把 PCA 看作学习数据表示的无监督学习算法。这一表示基于上述简单表示标准中的两个。PCA 学习一个比原输入更低维的表示;它也学习元素之间无线性相关的表示。这是向学"元素统计独立"表示标准迈出的第一步。要达到完全独立,表示学习算法还必须去除变量之间的非线性关系。PCA 学习数据的正交线性变换把输入 x 投影到表示 z 如图 5.8 所示。2.12 节我们看到可学一个一维表示以最佳重建原数据(按均方误差意义),该表示实际上对应于数据的第一主成分。因此我们可用 PCA 作简单有效的降维方法尽可能保留数据中的信息(同样以最小二乘重建误差衡量)。下面我们研究 PCA 表示如何去相关原数据表示 X。考虑 m×n 维设计矩阵 X,假设数据均值为零 E[x]=0。若非如此,可通过从所有示例减去均值在预处理步骤中轻松中心化数据。X 关联的无偏样本协方差矩阵由 Var[x] = (1/(m-1)) X^⊤ X 给出(式 5.85)。PCA 通过线性变换 z = x^⊤ W 找到 Var[z] 对角的表示。2.12 节我们看到设计矩阵 X 的主成分由 X^⊤ X 的特征向量给出。由此视角,X^⊤ X = W Λ W^⊤(式 5.86)。本节我们利用主成分的另一种推导。主成分也可通过奇异值分解得到:具体地它们是 X 的右奇异向量。要看这一点,令 W 为分解 X = U Σ W^⊤ 中的右奇异向量。我们就恢复原来的特征向量方程 W 为特征向量基:X^⊤ X = (U Σ W^⊤)^⊤ (U Σ W^⊤) = W Σ^2 W^⊤(式 5.87)。SVD 对显示 PCA 产生对角 Var[z] 很有用。用 X 的 SVD,可把 X 的方差表示为:Var[x] = (1/(m-1)) X^⊤ X = (1/(m-1)) (U Σ W^⊤)^⊤ (U Σ W^⊤) = (1/(m-1)) W Σ^⊤ U^⊤ U Σ W^⊤ = (1/(m-1)) W Σ^2 W^⊤(式 5.88–5.91),其中我们利用 U^⊤ U = I 因为 SVD 的 U 矩阵被定义为正交。这表明若取 z = x^⊤ W,可确保 z 的协方差是所要求的对角:Var[z] = (1/(m-1)) Z^⊤ Z = (1/(m-1)) W^⊤ X^⊤ X W = (1/(m-1)) W^⊤ W Σ^2 W^⊤ W = (1/(m-1)) Σ^2(式 5.92–5.95),其中这次我们用 W^⊤ W = I,再次由 SVD 定义得出。上面分析表明当我们通过线性变换 W 把数据 x 投影到 z 时,所得表示有对角协方差矩阵(由 Σ^2 给出),这立即蕴含 z 的各元素之间相互无关。PCA 这种把数据变换到元素相互无关的表示的能力是 PCA 的一个非常重要性质——它是试图解开数据底层变化因子的表示的简单例子。在 PCA 情形这种解开采取"找到输入空间的旋转(由 W 描述)"的形式,使方差主轴与新表示空间(z 关联的)基对齐。虽然相关是数据元素间一类重要依赖,我们也感兴趣学解开更复杂形式特征依赖的表示;为此我们将需要比简单线性变换更多的东西。
PCA 的去相关性质(z 各元素相互无关)使其成为"学独立表示"的线性起点。但线性去相关不蕴含统计独立——例如 z_1 = x_1、z_2 = x_1 + x_2 时 z_1 与 z_2 不相关但并非独立(因为 z_2 - z_1 = x_2 已知则 z_1 的方差受限)。要学完全独立的表示必须用非线性方法(如 ICA、变分自编码器)。这预告了 13 章 ICA 与 14 章自编码器的内容。
PCA 的另一个隐含性质是其重建最优性:在所有线性变换中,PCA 选择的方向最大化重建方差——这等价于最小化重建误差(参看 2.12 节)。这与 5.10 节中把 PCA理解为"在重建损失函数 + 单位范数约束下"的优化问题是同一论点的两个视角。
PCA 在实践中常被用作数据预处理:把高维输入降到低维主成分空间,使后续算法(k-NN、SVM、神经网络)训练更快且不易过拟合。白化(whitening)进一步把每个主成分标准化为单位方差——这对图像数据的协方差偏移处理特别有用。
PCA 与矩阵分解的关系:PCA 等价于对中心化数据矩阵 X∈R^{m×n} 做 SVD X = UΣW^⊤,其中 W 是主成分方向,Σ 是各方向的标准差。这一矩阵分解视角使 PCA 可被高效计算(O(min(m,n)^2 max(m,n)) 复杂度)且与许多其它矩阵分解(如 NMF)形成谱系。
5.8.2 k-均值聚类(k-means Clustering)
另一个简单表示学习算法的例子是 k-均值聚类(k-means clustering)。k-均值聚类算法把训练集分成 k 个不同簇——彼此相近的示例簇。我们可因此把该算法视为提供 k 维 one-hot 码向量 h 表示输入 x。若 x 属于簇 i,则 h_i=1 表示 h 的所有其它项为 0。k-均值聚类提供的 one-hot 码是稀疏表示的一个例子——因为对每个输入大多数项为零。后面我们会开发其它学习更灵活稀疏表示的算法——其中对每个输入 x 多个项可非零。one-hot 码是稀疏表示的极端例子,失去了分布式表示的许多好处。one-hot 码仍带来一些统计优势(它自然传达同簇所有示例彼此相似这一思想)并带来计算优势:整个表示可被单个整数捕获。k-均值算法通过用不同值初始化 k 个不同质心 {μ^(1),…,μ^(k)} 工作,然后在两步之间交替直到收敛。在一步中每个训练示例被分配到簇 i——i 是最近质心 μ^(i) 的索引。在另一步中每个质心 μ^(i) 被更新为分配到簇 i 的所有训练示例 x^(j) 的均值。聚类的一个相关困难是:聚类问题本质上是不适定的(ill-posed)——没有单一准则能衡量数据聚类对应真实世界的程度。我们可衡量聚类性质例如簇质心到簇成员的平均欧氏距离。这允许我们说我们从簇分配重建训练数据有多好。我们不知道簇分配对应真实世界性质有多好。此外可能有多个不同聚类都对应真实世界某性质。我们可能希望找到与一个特征相关的聚类,但获得一个对我们任务不相关的、不同但同样有效的聚类。例如假设我们在由红色卡车、红色汽车、灰色卡车、灰色汽车图像组成的数据集上运行两个聚类算法。若要求每个聚类算法找两个簇,一个算法可能找到汽车一簇和卡车一簇,而另一个可能找到红色车辆一簇和灰色车辆一簇。假设我们还运行第三个聚类算法,它被允许决定簇数。这可能把示例分到四个簇——红车、红卡车、灰车、灰卡车。这一新聚类现在至少捕获两个属性的信息,但它丢失了相似性信息。红车与灰车在不同的簇,正如它们与灰卡车也在不同的簇。聚类算法的输出并未告诉我们红车与灰车比红车与灰卡车更相似。它们两者都不同,仅此而已。这些问题说明我们可能更偏好分布式表示而非 one-hot 表示的原因。分布式表示可对每辆车有两个属性——一个表示颜色、一个表示是车还是卡车。仍不完全清楚最优分布式表示是什么(学习算法怎么知道我们感兴趣的两个属性是"颜色和车 vs 卡车"而不是"制造商和使用年限"?),但有许多属性可减轻算法猜我们关心哪个单一属性的负担,并允许我们通过比较多属性而非仅测试一个属性是否匹配来细粒度衡量对象间的相似性。
k-均值收敛到的是局部最优而非全局最优——初始化对最终结果影响大。实践中常用k-means++ 初始化或多次重启取最优损失来缓解。
分布式表示 vs one-hot 表示的优势(最后一段)是本书反复出现的主题——这一优势不仅是统计意义上的(更多组合、更细粒度相似性),也是深度学习表示学习的核心理由。12 章(Applications)与 15 章(Representation Learning)会进一步展开这一论点。
k 均值与高斯混合模型(GMM)的联系:GMM 是 k 均值的概率推广——每个样本属于每个簇的概率软分配(soft assignment)而非硬分配(hard assignment)。GMM 用 EM 算法训练(参看 19 章)。k 均值可视为 GMM 在所有簇方差相等且为各向同性时的极限情形——这解释了两者的相似性与差异。
5.9 随机梯度下降(Stochastic Gradient Descent)
深度学习几乎完全由一个非常重要的算法驱动:随机梯度下降(stochastic gradient descent, SGD)。SGD 是 4.3 节介绍的梯度下降算法的扩展。机器学习中一个反复出现的问题是:好的泛化需要大训练集,但大训练集计算上也更昂贵。机器学习算法用的代价函数通常可分解为对训练样本的某种逐样本损失函数求和。例如训练数据的负条件对数似然可写为 J(θ) = E_{x,y∼p̂data} L(x,y,θ) = (1/m) Σ^m L(x^(i),y^(i),θ)(式 5.96),其中 L 是逐样本损失 L(x,y,θ) = -log p(y|x;θ)。对这些可加代价函数,梯度下降需要计算 ∇θ J(θ) = (1/m) Σ^m ∇θ L(x^(i),y^(i),θ)(式 5.97)。该操作计算成本是 O(m)。随训练集大小增至数十亿样本,单个梯度步的时间变得 prohibitive。随机梯度下降的洞见是梯度是一个期望。该期望可用一小批样本近似估计。具体地,在算法的每一步我们可从训练集均匀采样一小批(minibatch)样本 B = {x^(1),…,x^(m')},其中 m' 通常选择为相对小的样本数,从 1 到几百。关键地,m' 通常在训练集大小 m 增长时保持固定。我们可对数十亿样本的训练集做拟合只用在 100 个样本上计算的更新。梯度估计形式为 g = (1/m') Σ ∇}^{m'θ L(x^(i),y^(i),θ)(式 5.98),使用来自小批 B 的样本。随机梯度下降算法然后沿估计的梯度向下走:θ ← θ - ε g(式 5.99),其中 ε 是学习率。一般梯度下降常被视为慢或不可靠。过去将梯度下降应用于非凸优化问题被视为莽撞或不原则。今天我们知道第 II 部分描述的机器学习模型用梯度下降训练时工作得很好。优化算法可能不保证在合理时间抵达甚至局部最小,但它通常很快找到代价函数的非常低的值已足够有用。随机梯度下降在深度学习外还有许多重要用途。它是在很大数据集上训练大线性模型的主要方式。对固定模型大小,每个 SGD 更新的成本不依赖训练集大小 m。实践中我们常随训练集大小增加用更大的模型,但我们并非被迫这样做。到达收敛所需的更新数通常随训练集大小增加。然而当 m 趋于无穷时,SGD 在已采样训练集中每个样本之前模型终将收敛到其最好可能的测试误差。进一步增加 m 不会延长到达模型最好可能测试误差所需的训练时间。从此视角看,用 SGD 训练模型的渐近成本作为 m 的函数是 O(1)。深度学习出现前学习非线性模型的主要方式是用核技巧结合线性模型。许多核学习算法要求构造 m×m 矩阵 G = k(x^(i),x^(j))。构造该矩阵计算成本 O(m^2),对数十亿样本数据集明显不可取。学术界从 2006 年开始深度学习最初引起兴趣是因为它能比竞争算法更好地泛化到新示例——当时训练于含数万样本的中等规模数据集。之后深度学习在业界获得额外兴趣,因为它提供了在大数据集上训练非线性模型的可扩展方式。随机梯度下降及其许多增强在第 8 章进一步描述。
小批大小 m' 的选择是实际工程中的关键决策:m'=1 是真正的"随机"梯度下降,方差大但每步极快;m'=m 是批量梯度下降,方差为零但每步代价 O(m);实践中常用 m' ∈ [32, 1024] 取折中——m' 太小则 GPU/TPU 利用率低,m' 太大则陷入批量梯度下降的高单步成本。第 8 章会详细讨论小批大小的影响。
关于 SGD 的 O(1) 渐近成本论点:固定模型大小 m',每步成本独立于 m;而到达最好测试误差所需的更新次数随 m 增长而增长——但增长率远低于 m 本身。因此当 m超过某个临界点后,模型已"用尽"训练数据,进一步增加 m 几乎不再延长训练时间。这一现象是深度学习能扩展到亿级数据集的关键理论支撑。
深度学习出现前用核技巧训练非线性模型的开销 O(m^2) 与 SGD 的 O(m)(甚至 O(1))形成鲜明对比,这是为什么核方法无法扩展到大数据集,而深度网络可以。
5.10 构造一个机器学习算法(Building a Machine Learning Algorithm)
几乎所有深度学习算法可被描述为相当简单配方的特定实例:组合数据集规范、代价函数、优化过程和模型。例如线性回归算法组合由 X 和 y 组成的数据集,代价函数 J(w,b) = -E_{x,y∼p̂data} log p_model(y|x)(式 5.100),模型规范 p_model(y|x) = N(y;x^⊤ w + b,1),以及在大多数情况下由"用正规方程组解代价梯度为零"定义的优化算法。通过意识到我们可基本独立地替换这些组件中的任何一个,我们能得到非常广泛的算法。代价函数通常至少包含一项使学习过程执行统计估计。最常见的代价函数是负对数似然,因此最小化代价函数导致最大似然估计。代价函数也可包含额外项,例如正则化项。例如可给线性回归代价函数加权重衰减得到 J(w,b) = λ||w||^2_2 - E{x,y∼p̂data} log p_model(y|x)(式 5.101)。这仍允许闭式优化。若把模型改成非线性的,则大多数代价函数不能再以闭式优化——这要求我们选一种迭代数值优化程序,例如梯度下降。通过组合模型、代价和优化算法来构造学习算法的配方同时支持监督与无监督学习。线性回归例子展示了如何支持监督学习。无监督学习可通过定义只含 X 的数据集并提供适当无监督代价和模型来支持。例如可通过指定损失函数为 J(w) = E ||x - r(x;w)||^2_2(式 5.102)来获得第一 PCA 向量,同时模型被定义为 w 有单位范数、重建函数 r(x) = w^⊤ x w。某些情形下代价函数可能是我们实际上不能计算的函数,出于计算原因。在这种情形下只要我们有某种近似其梯度的方法我们仍可用迭代数值优化来近似地最小化它。大多数机器学习算法使用这一配方,虽然这一点可能不立即明显。如果机器学习算法看起来特别独特或手工设计,它通常可被理解为使用特殊情形优化器。一些模型如决策树或 k-均值要求特殊情形优化器因为其代价函数有平坦区域使它们不适合用基于梯度的优化器最小化。认识到大多数机器学习算法可用这一配方描述有助于把不同算法看作做相关任务、按相似原因工作的方法分类法的一部分,而非一长串各有独立正当性的算法。
"组合 + 替换组件"的配方是后续章节的隐藏目录:6 章(前馈网络)会替换模型为深度网络;7 章(正则化)会扩展代价函数加多种正则化项;8 章(优化)会替换优化器为 SGD 及其变体;13-14 章会处理无监督学习。本节相当于给读者一个路线图,说明深度学习的全部内容可以理解为对这四个组件的不同选择。
决策树和 k-均值需要特殊优化器的原因是它们的代价函数有平坦区域——梯度恒为零,使基于梯度的优化器无法行动。这是为什么这两种算法需要专门设计的迭代算法(如 ID3、C4.5 用于决策树;Lloyd 算法用于 k-均值),而不能用通用梯度下降。
"组合 + 替换"配方的具体应用:线性回归 = (X,y 数据集) + (MSE 代价) + (线性模型) + (正规方程组闭式优化);神经网络 = (X,y 数据集) + (负对数似然代价) + (深度网络模型) + (SGD 优化);PCA = (X 数据集) + (重建误差代价) + (线性投影模型) + (SVD 优化);k 均值 = (X 数据集) + (重建误差代价) + (one-hot 簇分配) + (Lloyd 算法)。
这一配方给深度学习研究者的实际教训:要改进一个学习算法,首先定位它在四个组件中哪个组件,然后用更合适的实现替换它。CNN 用卷积层替换全连接层改进了图像模型;Transformer 用注意力替换循环改进了序列模型;GAN 用对抗训练替换 MLE 改进了生成模型——所有这些进展都遵循"组件替换"模式。
5.11 深度学习的动机挑战(Challenges Motivating Deep Learning)
本章描述的简单机器学习算法在很多种重要问题上工作得非常好。然而它们没成功解决 AI 的核心问题,如识别语音或识别物体。深度学习的发展部分由传统算法在这些 AI 任务上泛化不佳所推动。本节关于"对泛化到新示例的挑战如何随处理高维数据而指数级变难"以及"用于在传统机器学习中实现泛化的机制不足以学高维空间中的复杂函数"。这些空间也常带来高计算成本。深度学习被设计来克服这些及其它障碍。
5.11.1 维度灾难(The Curse of Dimensionality)
许多机器学习问题在数据维数高时变得极其困难。这一现象叫维度灾难(curse of dimensionality)。特别令人担忧的是一组变量的可能不同配置数随变量数增加而指数增长。图 5.9 展示这一现象:随数据相关维数增加,感兴趣的配置数可能指数增长。一维例子中我们有一个变量只关心区分 10 个感兴趣区域;只要每个区域有足够多示例落进(每个区域对应图中一个格),学习算法能轻松正确泛化。直接泛化方式是估计目标函数在每个区域内的值(且可能在相邻区域间插值)。二维中区分每个变量的 10 个不同值更难;我们需要跟踪多达 10×10=100 个区域,需要至少那么多样本来覆盖所有这些区域。三维则增长到 10^3=1000 个区域且至少那么多样本。对 d 个维数每轴要区分 v 个值,似乎需要 O(v^d) 个区域和样本。这是维度灾难的一个例子。维度灾难在计算机科学许多地方出现,在机器学习中尤其如此。维度灾难提出的一个挑战是统计挑战。如图 5.9 所示统计挑战出现因为 x 的可能配置数远大于训练样本数。要理解问题,让我们考虑输入空间被组织成网格如该图所示。我们能用少量网格格描述低维空间,这些格大多被数据占据。泛化到新数据点时我们通常能通过检查与新输入在同一格内的训练示例来简单说该做什么。例如若估计某点 x 的概率密度我们可只返回与 x 在同一单位体积格内的训练样本数除以训练样本总数。若我们想分类示例我们可返回同一格内训练样本的最常见类。若我们做回归我们可平均该格内观察到的目标值。但那些我们没看到任何示例的格呢?因为在高维空间配置数巨大,远大于我们的样本数,典型网格格没有关联的训练样本。我们怎么可能对这些新配置说出有意义的意见?许多传统机器学习算法只是简单假设新点的输出应近似等于最近训练点的输出。
图 5.9 给出的具体例子(d 维每轴 v 个值需 v^d 个区域和样本)说明维度灾难不只是理论问题——例如 d=100 v=10 时需要 10^100 个样本,这超过了宇宙中原子数 10^80。这意味着任何通用方法在足够高维下都会失败——除非我们利用数据生成分布的特殊结构(流形假设,5.11.3)。
"新点输出近似等于最近训练点输出"是 k-NN 和许多核方法的核心假设。这一假设在高维下逐渐失效,因为高维欧氏距离的分布在所有点之间趋于均匀——"最近邻"和"最远邻"的相对距离差消失。这就是维度灾难的近邻视角。
维度灾难的工程化表述:设高维输入 x∈R^d,要让密度估计准确到 ε 精度,所需样本数随 d 指数增长。Bellman 把这一观察命名为"维度灾难"——它是动态规划、信号处理、机器学习、控制论等多个领域的共同敌人。对机器学习来说,维度灾难的直接含义是:通用方法(如均匀网格划分、通用核方法)在高维下都不可行,必须利用数据生成分布的特殊结构。
近邻方法在维度灾难下失效的精确论述:考虑 d 维单位球中均匀采样的点。对每个点 x,其最近邻与最远邻的相对距离差随 d 增长趋于零——d=10 时最近邻到中位距离比最远邻到中位距离比约 0.5;d=1000 时两者几乎相等。这意味着"最近邻"在概念上失去意义——所有点都几乎是同等的"近邻"。
5.11.2 局部常量与平滑正则化(Local Constancy and Smoothness Regularization)
为泛化良好机器学习算法需要被关于"它们应学什么种类函数"的先验信念所引导。之前我们看到这些先验以模型参数上的概率分布形式被并入作为显式信念。更非形式化地我们也讨论先验信念为直接影响函数本身、仅通过其对函数的影响间接作用于参数。此外我们非形式化讨论先验信念为通过选择偏向于选某类函数而非另一类函数的算法被隐式表达——即使这些偏差可能不通过概率分布(表达我们对不同函数的信念度)被表达(甚至不能表达)。最广泛使用的这些隐式"先验"之一是平滑先验(smoothness prior)或局部常量先验(local constancy prior)。该先验声明我们学的函数在小区域内不应变化很大。许多更简单算法完全依赖此先验泛化良好,因此它们未能扩展到解决 AI 级任务涉及的统计挑战。本书全程会描述深度学习如何引入额外(显式与隐式)先验以降低复杂任务上的泛化误差。这里我们解释为什么仅平滑先验对这些任务是不够的。有许多不同方式隐式或显式表达"所学函数应平滑或局部常量"的先验信念。所有这些不同方法都设计来鼓励学习过程学一个满足 f(x) ≈ f(x+ε)(式 5.103)的函数 f,对大多数配置 x 和小变化 ε。换言之若我们知道输入 x 的一个好答案(例如若 x 是有标签训练样本),那么该答案在 x 邻域内大概也是好的。若我们在某邻域内有若干好答案我们会把它们组合(通过某种平均或插值)以产生与尽可能多答案一致的答案。局部常量方法的极端例子是 k-近邻族学习算法。这些预测器在每个包含训练集中有相同 k 个最近邻的点的区域内字面上是常量。对 k=1,可区分区域数不能多于训练样本数。k-近邻算法从附近训练样本拷贝输出,而大多数核机器在与附近训练样本关联的训练集输出间插值。核的一个重要类别是局部核族——其中 k(u,v) 在 u=v 时大且随 u 与 v 越来越远而下降。局部核可被视为一种相似性函数:通过测量测试示例 x 与各训练示例 x^(i) 的接近程度执行模板匹配。深度学习的许多现代动机来自研究局部模板匹配的限制以及深度模型如何在局部模板匹配失败的场合成功(Bengio et al., 2006b)。决策树也因纯粹基于平滑学习而受限——它们把输入空间分成与叶一样多的区域并在每个区域用单独参数(或有时用决策树扩展的多个参数)。若目标函数需至少 n 个叶的树才能精确表示,那么至少需要 n 个训练样本来拟合该树。需要 n 的倍数才能在预测输出上达到某种统计置信度。一般而言要在输入空间区分 O(k) 个区域,所有这些方法都需要 O(k) 个样本。通常有 O(k) 个参数,每 O(k) 个区域关联 O(1) 个参数。最近邻情形(每个训练示例可用于定义至多一个区域)如图 5.10 所示。有没有办法表示一种函数,使其要区分的区域数远多于训练样本数?显然仅假设底层函数平滑不容许学习者做到这点。例如想象目标函数是某种棋盘格。棋盘格含许多变化但它们有简单结构。想象当训练样本数实质上小于棋盘格上黑白方块数时会发生什么。基于仅局部泛化与平滑/局部常量先验,我们将被保证能正确猜新点的颜色——若新点位于与某训练样本相同的棋盘格内。学习者不能保证能把棋盘格模式正确推广到位于不含训练样本的格内的点。仅用此先验,样本告诉我们的唯一信息是其格的颜色,而要获得整张棋盘格右半边的颜色唯一方法是用至少一个样本覆盖每个格。平滑假设及相应非参数学习算法在有足够样本让学习算法能观察真底层函数大多数峰上高点与大多数谷上低点时工作得极好。这通常在要学的函数足够平滑且在足够少维数上变化时为真。在高维即使非常平滑的函数也能沿各维以不同方式平滑变化。若函数还在不同区域行为不同,它会变得极难用一组训练样本描述。若函数复杂(我们想区分极多区域相对于样本数),还有没有任何希望泛化良好?对两个问题——能否高效表示复杂函数、估计函数能否泛化良好像新输入——的答案是肯定的。关键洞见是:极大数量的区域,例如 O(2^k),可由 O(k) 个样本定义——只要我们通过对底层数据生成分布的额外假设引入区域间一些依赖。这样我们实际上能非局部地泛化(Bengio and Monperrus, 2005; Bengio et al., 2006c)。许多不同深度学习算法提供对 AI 任务广泛范围合理(显式或隐式)的假设以捕获这些优势。其它机器学习方法常做更强的、任务特定的假设。例如我们可通过提供"目标函数是周期性的"假设轻松解决棋盘格任务。通常我们不在神经网络中包含如此强、任务特定的假设,使它们能泛化到更宽种类的结构。AI 任务的结构过于复杂不能限于像周期性这样简单的、手工指定的性质,因此我们想要学习算法体现更多通用假设。深度学习的核心思想是我们假设数据由因子或特征的组合生成,可能在层次中的多个层级*。许多其它类似通用假设可进一步改进深度学习算法。这些貌似温和的假设允许在样本数与可区分区域数之间关系上获得指数增益。深度分布式表示带来的指数优势抵消维度灾难提出的指数挑战。
棋盘格比喻的精确数学化:假设目标函数 f(x_1, x_2) = 1[x_1 + x_2 是偶数](棋盘格模式),训练样本数 m 远小于棋盘格数 2k(k 维输入)。k-NN/核方法在每个格内没有样本时无法猜测该格颜色——因为仅靠"局部常量先验"没有给出格间颜色的传递规则。但深度网络通过学习"奇偶"这种全局结构(即 f(x) = (1 + (-1)^{x_1 + x_2})/2),用 O(k) 参数就编码了 O(2^k) 区域。这正是 Bengio et al.(2006b,c)分布式表示理论的具体实例。
深度学习引入的额外先验包括:分层表示(hierarchy of features)、分布式表示(distributed representations)、非线性激活带来的局部性破坏、卷积的平移不变性、循环网络的时间不变性、注意力机制的稀疏交互等。这些先验都不是"目标函数是周期性的"那种强任务特定假设——它们足够通用可应用于广泛 AI 任务,又能提供强大的归纳偏置。
5.11.3 流形学习(Manifold Learning)
机器学习中许多思想背后的一个重要概念是流形(manifold)。流形是一个连通区域。数学上它是与每个点的邻域关联的一组点。从任一给定点出发流形局部看起来像欧氏空间。在日常生活中我们把世界表面体验为 2-D 平面,但它实际上是 3-D 空间中的球形流形。每个点周围邻域的定义蕴含存在可被应用以在流形上从一位置移到相邻位置的变换。在世界表面作为流形的例子中我们可向北、南、东、西走。虽然"流形"一词有形式数学含义,在机器学习中它倾向于更宽松地用于指定"一组连通点,可通过只考虑少量自由度或维数(嵌入在更高维空间中)很好逼近"。每维对应一个局部变化方向。图 5.11 给出一维流形嵌入二维空间中训练数据的一个例子。在机器学习情形我们允许流形维数从一点到另一点变化。这常在流形自身相交时发生。例如 8 字形是一个流形,在大多数地方有一维但在中心交点处有二维。
许多机器学习问题若我们期望机器学习算法学在所有 R^n 上有有趣变化的函数则看似无望。流形学习算法通过假设 R^n 大多数由无效输入组成、有趣输入只沿一族流形(含小子集的点)出现、学函数输出的有趣变化只沿位于流形上的方向发生或有趣变化只在我们从一流形移到另一流形时才发生来克服这一障碍。流形学习在连续值数据和无监督学习设置中被引入,虽然这一概率集中思想可推广到离散数据和监督学习设置:关键假设仍是概率质量高度集中。数据沿低维流形分布的假设可能并不总是正确或有用。我们论证在 AI 任务上下文——如那些涉及处理图像、声音或文本的任务——流形假设至少近似正确。支持这一假设的证据由两类观察组成。支持流形假设的第一个观察是图像、文本字符串、声音上在真实生命中出现的概率分布是高度集中的。均匀噪声本质上从不类似于这些领域中结构化输入。图 5.12 展示均匀采样点看起来像无信号时模拟电视屏上出现的静态图案。类似地若通过均匀随机挑字母生成文档,你得到一段有意义的英语文本的概率是多少?几乎为零,因为大多数长字母序列不对应自然语言序列:自然语言序列分布占据字母序列总空间中非常小的体积。当然集中概率分布不足以证明数据位于合理小数量的流形上。我们还必须建立我们遇到的示例彼此通过其它示例相连——每个示例被其它高度相似示例(可通过应用变换以遍历流形到达)围绕。支持流形假设的第二个论证是我们也能非形式化想象这种邻域和变换。在图像情形我们当然能想出许多可能变换允许我们在图像空间追踪流形:我们可逐渐调亮或调暗灯光、逐渐移动或旋转图像中的物体、逐渐改变物体表面颜色等。仍可能在大多数应用中涉及多个流形。例如人脸图像流形可能与猫脸图像流形不相连。这些支持流形假设的思维实验传达一些支持它的直观原因。更严格的实验(Cayton, 2005; Narayanan and Mitter, 2010; Schölkopf et al., 1998; Roweis and Saul, 2000; Tenenbaum et al., 2000; Brand, 2003; Belkin and Niyogi, 2003; Donoho and Grimes, 2003; Weinberger and Saul, 2004)清楚支持 AI 中感兴趣的大量数据集的假设。当数据位于低维流形上时对机器学习算法来说最自然的是用流形上的坐标而非 R^n 中的坐标表示数据。在日常生活中我们可把道路想成嵌入 3-D 空间的 1-D 流形。我们按这些 1-D 道路上的地址号给具体地址指路,而不是按 3-D 空间中的坐标。提取这些流形坐标是挑战性的但有望改进许多机器学习算法。这一通用原则在许多上下文中应用。图 5.13 展示由人脸组成的数据集的流形结构。本书末时我们将已开发必要方法学这样的流形结构。图 20.6 将看到机器学习算法如何能成功完成这一目标。第一部分——它提供了贯穿本书剩下部分的数学与机器学习基础概念——到此结束。你现在准备好开始你的深度学习研究了。
本章个人批注
读完第 5 章最直观的感受是:这一章在"为深度学习做铺垫"这件事上极其称职。Goodfellow 等人选择的叙事策略是先给一个非常宽的机器学习全景——从任务、性能度量、经验三大基本元素的拆解,到线性回归这个最简单的具体算法,再到容量/过拟合/欠拟合、偏差-方差、最大似然、贝叶斯统计,最后以"传统机器学习为什么不行"作为深度学习的引子。这条主线跟 Bishop《Pattern Recognition and Machine Learning》的开场极其神似,但本书比 Bishop 更早引入了流形假设(manifold hypothesis)作为深度学习的合法化依据——这其实是给 Ch13-20 的表示学习和生成模型铺路。
第 5.4.5 节"一致性"给出的反例(用 x^(1) 作 μ 的估计量,是无偏但不一致的)给我留下特别深的印象。这是把"无偏性"和"一致性"区分开的最干净例子——无偏只关乎 E[θ̂] 是否等于 θ,一致性是 plim_{m→∞} θ̂_m = θ。统计效率与 Cramér-Rao 下界的连接也是我喜欢的内容:它解释了为什么最大似然在渐近意义上是"最好"的——而不是说它在有限样本下"最好",这就给正则化(在 5.5.2 末尾提到)留了理论位置:正则化是用偏差换方差,与频率派和贝叶斯派都兼容。
关于 5.2.2 节的正则化:作者把"在假设空间内排除函数"等价于"对该函数表达无限强偏好",这一句把 L1/L2 正则化、Hard constraint、Soft penalty 三种形式在概念上统一了。我做计算生物力学时常用的 L2/Tikhonov 正则化其实就是 5.18 式的特例。
5.11.2 节的棋盘格比喻是这一章最强的修辞——它用一个二维视觉化例子让"局部常量先验为何不够"变得不可辩驳。如果数据按棋盘格模式分布而训练样本数少于格数,k-近邻/核方法/决策树都学不到棋盘格模式。但深度学习用 O(k) 样本能学 O(2^k) 区域——这种"指数增益"是 Bengio et al. 2006 提出的分布式表示理论的核心论点,本书 6.4.1、15.4、15.5 节会再回到这一点。我对这部分"是否真在实践中成立"仍然持开放态度——棋盘格是合成的,真实数据流形结构可能更弱。
5.11.3 的流形假设我有些保留意见。作者说"在 AI 任务上下文……流形假设至少近似正确",给出的两个论据是(1)图像/文本/声音的均匀采样极不可能产生有意义的样本,(2)人能想出许多局部变换使数据样本在流形上移动。但严格地说这两个都不是"数据位于低维流形"的证明;它们充其量支持"数据集中于低维子集"。流形假设在实践上是有用的归纳偏置(inductive bias),但其正确性是悬而未决的经验问题——尤其是"概率质量集中"和"流形维数低"之间还有一段逻辑距离。不过作为深度学习表示学习的动机,manifold learning 仍然是目前最有说服力的故事。
第 5.11.3 节结尾说"第一部分到此结束"——意味着 Ch1-5 是 Part I(应用数学与机器学习基础)的最后一章。Part II 是"深度网络:现代实践",从 Ch6 前馈深度网络开始。下一章会从线性回归这一线性模型跳跃到深度前馈网络,意味着我们会离开"凸优化"的安全区,进入非凸优化的领域——这正是 4.3 节铺垫的内容。
与上下章的衔接(一段话)
第 5 章是 Part I(应用数学与机器学习基础)的收官章,它与第 4 章"数值计算"的衔接处非常自然:第 4 章末尾讨论的基于梯度的优化方法、约束优化、KKT 条件,到本章 5.9 节随机梯度下降里直接被使用为深度学习的主力优化器;同时第 4 章关于病态条件、局部极小、梯度消失/爆炸的警告也在本章 5.2 容量、5.4 偏差-方差、5.11 高维挑战中得到回应——非凸优化的非全局最优与机器学习避免过拟合的需求是同一枚硬币的两面。本章结尾 5.11 节承上启下的功能特别强:5.11.1 维度灾难、5.11.2 平滑先验局限、5.11.3 流形假设这三点共同构成了"为什么需要深度学习"的三段式论证——传统机器学习算法在面对高维 AI 任务时受限于局部模板匹配、要求 O(k) 样本才能区分 O(k) 区域、无法利用数据的低维流形结构。这一论证链直接催生了 Part II 的开篇第 6 章"深度前馈网络"——Ch6 用神经网络突破参数共享和分层表示的瓶颈,5.11.2 末尾提到的"用 O(k) 样本定义 O(2^k) 区域"的目标正是深度网络在表达力上的核心承诺。