Bishop的Pattern Recognition and Machine Learning读书笔记。
转载自:http://1.kaopuer.applinzi.com/?cat=11
什么是模式识别(Pattern Recognition)?
按照Bishop的定义,模式识别就是用机器学习的算法从数据中挖掘出有用的pattern。
人们很早就开始学习如何从大量的数据中发现隐藏在背后的pattern。例如,16世纪的Kepler从他的老师Tycho搜集的大量有关于行星运动的数据中发现了天体运行的规律,并直接导致了牛顿经典力学的诞生。然而,这种依赖于人类经验的、启发式的模式识别过程很难复制到其他的领域中。例如手写数字的识别。这就需要机器学习的技术了。(顺便提一下,开普勒定律在物理学中只是一种唯象的理论,它只对物理事实抽象出概括性的描述,而没有解释内在的原因,也就是牛顿的万有引力定律(其实在更高的层次上,万有引力也是一种唯象的理论,它的解释由量子引力理论给出)。这也意味着,在大数据的机器学习时代,我们挖掘出来的知识更多的也只是一种相关性的规律。)
在手写数字识别的问题中,一部分手写图片作为训练集(training set),被用来学习一个事先给定的模型的参数。另一部分图片作为测试集(test set),被用来评估学习到的模型在新数据上的泛化能力(generalization)。训练集与测试集里的手写图片对应的数字都是已知的。这些数字又被称之为目标向量(target vector),是模型学习的分类目标。一个机器学习算法最终得到的结果,就是一个将输入变量(这里的手写数字图片)映射到目标向量空间里的函数[Math Processing Error]。
一般来说,在模型训练之前,都有一个数据预处理(preprocess)的过程。例如,在识别手写数字的问题中,我们需要先将训练集里的图片变换到同一个尺寸下,从而使模型的训练更加统一。这个过程也被称之为特征提取(feature extraction)。同时,预处理后的特征往往也会使模型的计算更加高效。要注意的是,如果我们对训练集里的数据进行了预处理,那么对于测试集里的数据,我们也要进行同样的操作。
对于那些训练样本中带有目标向量的机器学习问题,我们称之为有监督学习(supervised learning)。例如前面提到的手写数字识别问题。进一步地,如果目标向量是离散的,我们称之为分类(classification)问题;反之,如果目标向量是连续的,我们称之为回归(regression)问题。
另一类机器学习问题的训练样本仅有输入变量的特征,我们称之为无监督学习。例如对数据中相似样本的归并(聚类)问题。
最后一类机器学习问题被称之为强化学习(reinforcement learning)。它是寻求在一个给定状态下的行为决策,以最大化最终的收益。象棋AI就是一个典型的强化学习的例子。与有监督学习不同,强化学习要解决的问题没有标记好的输出;但往往会通过与环境的互动来改变自己的状态和收益,并因此而学习到什么是一个好的输出。注意,强化学习的每一步决策不仅会影响到当下的收益,还会影响未来的回报。这就涉及到一个信用分配(credit assignment)的问题:即如何将最终的回报分配到导致该回报的每一步的决策上?强化学习另一个特征是在exploration和exploitation之间的trade-off:对任意一个的过度偏向都会产生较差的结果。
接下来,我们将从一个具体的例子入手展现机器学习过程里的一些基本概念;然后,我们将简单介绍机器学习理论的三大基础:概率论(probability theory),决策论(decision theory),和信息论(information theory)。
作为例子,我们通过一个带随机噪声的产生函数[Math Processing Error]来构造训练数据,并期望一个机器学习算法能从有限的数据中学习到这个正弦函数。这种数据的构造方式暗合真实世界的法则:即数据在遵循一条潜在的规律同时也充满了不确定性。(后面我们会看到,我们是如何在一个概率论的框架下描述这种不确定性,同时给出一个最好的预测。)

我们可以用一个多项式函数来拟合训练数据(这是因为任意一个连续可导的函数总可以通过多项式展开来逼近):[Math Processing Error]
注意,尽管这个函数是关于[Math Processing Error]的非线性函数,但却是关于系数[Math Processing Error]的线性函数。类似多项式函数这种相对于未知参数是线性的模型,具有一些重要的性质,我们称之为线性模型(linear model)。
我们通过最小化一个误差函数(error function)来求解模型的参数。误差函数是关于参数[Math Processing Error]的一个函数;它衡量我们的预测值[Math Processing Error]与真实值[Math Processing Error]的差距。一个常用的误差函数是误差平方和,它的基本形式如下:[Math Processing Error]
(在后面介绍到最大似然法时,我们会看到误差函数为什么会取这种形式)
令这个函数对[Math Processing Error]的一阶偏导等于0,得到[Math Processing Error]个一阶方程组,就可以求解出最优拟合参数[Math Processing Error]了。
然而,我们还有一个问题:如何确定模型的阶数[Math Processing Error]?这也被称之为模型选择(model comparison or model selection)问题。我们可以通过评估模型在新数据集上的泛化能力来衡量模型的好坏。具体来说,我们从训练集中抽取一部分数据作为验证集(validation set);对于[Math Processing Error]的每一种可能取值,我们先用余下的训练集找到最优的参数[Math Processing Error],然后再在验证集上评估这个模型的误差[Math Processing Error](或者是root-mean-square error:[Math Processing Error])。我们将选择泛化误差最小的模型作为最终的模型。
通过这种方式,我们发现,[Math Processing Error]取值过低,模型有可能会欠拟合(under-fitting);而[Math Processing Error]取值过高,模型又有可能会过拟合(over-fitting)。
这是为什么呢?
理论上,一个低阶的多项式函数只是更高阶的多项式函数的一个特例;而一个高阶的多项式也更加逼近真实的产生函数[Math Processing Error]。因此,高阶的模型似乎没道理比低阶模型的表现更差。
但是,如果我们仔细观察那些过拟合的高阶模型学习到的参数[Math Processing Error],会发现它们的量纲往往异乎寻常的大。这使得模型虽然可以准确地预估训练集中的数据,但也展现出了巨大的波动性。换句话说,强大的高阶模型过多地学习了训练数据中的噪声。如果我们引入更多的训练数据,这种过拟合的问题会得到一定程度的缓解。
简而言之,虽然模型越复杂,解释能力也越强,但我们往往需要更多的数据来训练一个复杂的模型。(后面会发现,这种过拟合本质上是由于最大似然法这类对模型参数进行点估计的算法所带来的bias造成的。通过一种贝叶斯的方法,我们可以从根本上避免过拟合的问题。)
一种在有限的数据集下也能训练一个高阶模型的技术是正则化(regularization),即在传统的误差函数中引入一个对参数[Math Processing Error]量纲的惩罚项,以抑制[Math Processing Error]的过度发散:[Math Processing Error]
其中,[Math Processing Error],参数[Math Processing Error]控制正则项和误差项的相对权重。对于一个合适的[Math Processing Error]取值,我们用较少的数据也可以训练出一个泛化的高阶模型。
然而,过低或过高的[Math Processing Error]依然会导致过拟合或欠拟合的问题。本质上,正则化只是将对模型复杂度的控制由模型的阶数[Math Processing Error]转移到了惩罚因子[Math Processing Error]上。我们依然需要一个验证集来优化模型的复杂度。
在模式识别和机器学习的研究领域里,不确定性(uncertainty)是一个非常核心的概念。接下来要介绍的概率论为不确定性的量化提供了一个统一的框架,因此也构成了整个机器学习研究的理论基础。
概率的基本定义由频率学派给出:在一系列试验中某一事件发生的频率称之为该事件发生的概率。从这个定义出发,我们很容易得到概率论的两个基本法则:sum rule和product rule:
[Math Processing Error]
[Math Processing Error]
其中,[Math Processing Error]对应[Math Processing Error]发生的边际概率(marginal probability);[Math Processing Error]对应[Math Processing Error]和[Math Processing Error]同时发生的联合概率(joint probability);[Math Processing Error]对应给定[Math Processing Error]下[Math Processing Error]发生的条件概率(conditional probability)。这两个公式构成了我们将要用到的所有概率论知识的基础。
由product rule出发,同时结合联合概率的对称性,我们立即得到一个十分重要的公式,贝叶斯定理(Bayes' theorem):
[Math Processing Error]
贝叶斯定理给出了后验概率(posterior probability)——[Math Processing Error]和先验概率(prior probability)——[Math Processing Error]之间的关系。
然而,并非所有随机事件的发生都是可重复的。因此,我们很难用频率学派的观点解释诸如明天有雨这类事件发生的概率。对这类事件的不确定性的衡量,就是概率的贝叶斯解释(Bayesian view)。
回到之前的多项式拟合的例子。从频率学派的角度来看,我们将目标变量[Math Processing Error]视为一个随机变量似乎更加合理(可以通过固定输入变量[Math Processing Error]的值统计[Math Processing Error]的频率分布)。而从贝叶斯学派的观点来看,我们可以将模型的参数[Math Processing Error](甚至是整个模型)视为一个随机变量,衡量它们的不确定性(尽管[Math Processing Error]是不可重复的)。
具体来说,假设我们知道了[Math Processing Error]的先验概率分布[Math Processing Error],那么,通过贝叶斯公式,我们可以将这一先验概率转化为给定观测数据后的后验概率[Math Processing Error]:
[Math Processing Error]
从而,我们得到了一个已知数据[Math Processing Error]下关于模型参数[Math Processing Error]的不确定性的定量表达。
在这个公式里,概率分布[Math Processing Error]又被称为似然函数(likilihood function),它给出了不同[Math Processing Error]下数据集[Math Processing Error]发生的概率。从而,贝叶斯定理又可以写成:[Math Processing Error]
无论是在频率学派还是贝叶斯学派的框架下,似然函数都扮演着重要的角色。不同的是,频率学派认为,模型的参数是固定的,观测到的数据则是给定参数下的一个随机事件。因此,他们通过一种叫做最大似然法(maximum likelihood)的方法来预估参数:即寻找使观测到的数据集[Math Processing Error]发生的概率最大的参数[Math Processing Error](后面我们将会看到最大似然法与前面提到的最小化误差函数的关系)。而贝叶斯学派则认为模型的参数服从一个概率分布,因此,似然函数只是获取后验概率的桥梁。
(关于频率学派和贝叶斯学派孰优孰劣的问题,各家各执一言,此处不做讨论。只需知道,PRML这本书更多的是介绍贝叶斯学派的观点,而Andrew在Coursera上的课则是频率学派的经典观点。)
关于高斯分布的定义和性质,很多概率论的书上都有介绍,这里不再赘述。本小节主要介绍如何运用频率学派的最大似然法从一堆服从高斯分布的数据中拟合出分布的参数:[Math Processing Error]与[Math Processing Error]。
由独立同分布假定,我们的数据集[Math Processing Error]在给定参数[Math Processing Error]和[Math Processing Error]下的条件概率分布为:
[Math Processing Error]
这就是高斯分布的似然函数。

对这个似然函数取对数(后面我们会看到如何从信息熵的角度来解释这一行为),我们得到:[Math Processing Error]
将上式分别对[Math Processing Error]和[Math Processing Error]求导,并令其等于0,我们得到了[Math Processing Error]和[Math Processing Error]的最大似然预估:
[Math Processing Error]
[Math Processing Error]
等式右边都是关于数据集[Math Processing Error]的函数。
可以证明,通过这种方法得到的参数预估是有偏(bias)的:
[Math Processing Error]
[Math Processing Error]
也就是说,我们会低估(underestimate)真实的分布方差。一般来说,模型的参数越多(复杂度越高),由最大似然法预估出来的参数越不准确。而这种有偏的预估,是导致模型过拟合的根本原因(过度拟合了训练样本,而偏离了真实世界)。不过,注意到随着样本数[Math Processing Error]的增长,这种偏差会越来越小。这就解释了,为什么增大训练样本的容量可以一定程度上缓解过拟合的问题。
接下来,我们将回到多项式拟合的例子,看看在统计学的视角下,频率学派和贝叶斯学派各自是如何解决这个问题的。
在多项式拟合的问题中,我们的目标是,在由[Math Processing Error]个输入变量[Math Processing Error]及其对应的目标值[Math Processing Error]构成的训练集的基础上,对新输入变量[Math Processing Error]的目标值[Math Processing Error]做出预测。用概率语言来描述,我们可以将目标变量[Math Processing Error]的这种不确定性用一个概率分布来表达。我们假定,[Math Processing Error]服从以[Math Processing Error]为均值的高斯分布:
[Math Processing Error]

有了[Math Processing Error]的概率分布,我们就可以用最大似然法在训练集上求解模型的参数([Math Processing Error]和[Math Processing Error]):
[Math Processing Error]
我们发现,略去与[Math Processing Error]无关的后两项后,我们得到了前文提到的误差函数!也就是说,对于[Math Processing Error]的求解而言,最大似然法等价于最小化误差平方和!我们的误差函数是在目标变量服从高斯分布的假定下用最大似然法推导出来的一个自然结果!(注意这一结论与[Math Processing Error]的具体形式无关)
一旦得到了[Math Processing Error]和[Math Processing Error]的最大似然估计,我们就可以对新变量[Math Processing Error]的目标值做出预估。注意,这里是对[Math Processing Error]的分布预估(predictive distribution),而非点估计(point estimate)。(在后面的decision theory章节中会介绍如何从预估的分布得到预测值)
以上是频率学派对多项式拟合算法的解释。
而在贝叶斯学派看来,参数[Math Processing Error]也是一个随机变量。假定[Math Processing Error]的先验分布是一个服从均值为0的多元高斯分布:
[Math Processing Error]
其中,[Math Processing Error]被称为模型的超验参数(hyperparameters)。
则由贝叶斯定理,[Math Processing Error]在给定训练集上的后验分布为:
[Math Processing Error]
我们可以通过最大化这个后验概率来找出最合适的[Math Processing Error]。这个方法被称之为最大后验概率法(maximum posterior,简称MAP)。对上式取对数,并代入似然函数和先验概率的分布函数后,我们发现,最大后验概率等价于最小化带正则项的平方误差函数:
[Math Processing Error]
(这句话也可以这么理解:通过引入均值为0的高斯分布先验函数,我们对[Math Processing Error]的大小进行了限定。)
也就是说,带正则项的误差函数,是在目标变量、模型参数均服从高斯分布的假定下,用最大后验概率法推导出来的一个自然结果!同样的,这个结论与[Math Processing Error]的具体形式无关。
不过,虽然我们引入了[Math Processing Error]的先验概率分布,MAP依然只是对[Math Processing Error]的点估计(类似最大似然法,这种方法最大的问题在于给出的估计值往往是有偏的,即[Math Processing Error])。而贝叶斯学派的精髓在于,从[Math Processing Error]的后验概率分布出发,我们可以进一步得到在给定训练集[Math Processing Error]和[Math Processing Error]的条件下,新变量[Math Processing Error]的目标值[Math Processing Error]的后验概率分布[Math Processing Error]:
[Math Processing Error]
(假定[Math Processing Error]和[Math Processing Error]都是模型的超验参数)
总结一下频率学派和贝叶斯学派的区别:
频率学派 | 贝叶斯学派 | |
---|---|---|
目标变量[Math Processing Error] | [Math Processing Error] | [Math Processing Error] |
模型参数[Math Processing Error] | 显式;常量 | 隐式;随机变量 |
模型优化算法 | 最大似然法 | 最大后验概率法 1 |
优化目标函数 | [Math Processing Error] | [Math Processing Error] |
一个具体的机器学习问题的解决包括两个过程:推断(inference)和决策(decision)。前者在概率学的框架下告诉我们[Math Processing Error]的分布;后者则借助决策理论(decision theory)告诉我们在这个联合概率分布下的最优反应(例如对[Math Processing Error]的预估等)。
一旦解决了推断的问题,决策的过程就显得异常简单。
对于分类问题而言,我们寻求一个将输入变量[Math Processing Error]映射到某一个分类上的法则。这个法则将[Math Processing Error]的向量空间划分成了不同的区域[Math Processing Error]:我们称之为decision region;位于[Math Processing Error]里的点[Math Processing Error]都被映射到类[Math Processing Error]上。相应的,decision region之间的边界我们称之为decision boundaries或decision surfaces。
如何找到这个决策面呢?
假定我们的决策目标是使得误分类的概率尽可能地小,借助概率论,我们有:
[Math Processing Error]
显然,为了让[Math Processing Error]尽可能地小,[Math Processing Error]应是由那些使得[Math Processing Error]最大的点构成的集合(即对于[Math Processing Error],满足[Math Processing Error])。由于[Math Processing Error],也就是说我们应将[Math Processing Error]映射到后验概率[Math Processing Error]最大的类[Math Processing Error]上。
但真实的问题也许要更复杂一些。例如对癌症患者的诊断:错误的将一个癌症患者诊断为健康,远比将一个健康的人误诊为癌症要严重的多。因此,就有了损失矩阵(loss function)的概念:损失矩阵[Math Processing Error]中的元素[Math Processing Error]用来评估当类[Math Processing Error]被误分类为[Math Processing Error]时带来的损失。显然,对任意的类[Math Processing Error],总有[Math Processing Error]。
此时,我们的决策目标是最小化期望损失函数。同样地借助概率论的知识,我们有:
[Math Processing Error]
类似地,我们选取那些使[Math Processing Error]最小的点[Math Processing Error]构成的集合为类[Math Processing Error]的decision region [Math Processing Error](即对于[Math Processing Error]里的[Math Processing Error],总有[Math Processing Error])。
在前面对分类问题决策阶段的讨论中,我们发现,我们可以在推断阶段预估[Math Processing Error]和[Math Processing Error]的联合概率分布[Math Processing Error],也可以预估[Math Processing Error]的后验条件概率[Math Processing Error]。事实上,我们也可以将两个阶段整合为一个过程,直接学习[Math Processing Error]到[Math Processing Error]的映射。这三种不同的解决问题的思路,对应了三种不同的模型:
总的来说,三类模型各有利弊。相对来讲,产生式模型最为复杂,也需要最多的训练数据;但是由于可以对输入变量的分布进行预估,功能上也最为强大。而我们用的最多的一般是判别式模型。由于引入了对后验概率的预估,使得我们可以方便的处理非平衡样本问题,以及多模型的融合。这是简单的判别式函数所不具备的。
与分类问题类似,回归问题的决策阶段也是要从目标变量的概率分布中选择一个特定的预估值,以最小化某个损失函数。回归问题的损失函数为:[Math Processing Error] 积分项的意思是,对于输入变量[Math Processing Error]和真实目标值[Math Processing Error],我们的预估目标值[Math Processing Error]带来的期望损失。一般[Math Processing Error]被定义为平方误差和的形式。
最小化这个损失函数我们得到解:[Math Processing Error]。这个条件期望也被称之为回归函数(regression function)。在前面的多项式拟合的问题中,我们假定了目标变量[Math Processing Error]服从一个高斯分布,并用最大似然法(或Bayesian的方法)估计出了模型的参数;而通过这里的回归函数,我们才最终得到了[Math Processing Error]的一个预估值。
类似地,回归问题也有三种建模方式:产生式模型,判别式模型,和判别式函数。这里不再赘述。
如果说概率论给出了对不确定性的一个描述,信息论则给出了对不确定性程度的一种度量。这种度量就是信息熵。
我们可以从三种不同的角度理解信息熵的定义。
我们也可以将信息熵的定义拓展到连续型的随机变量,定义为微分熵(differential entropy):[Math Processing Error] (如果从信息熵的原始定义出发,我们会发现微分熵的定义和信息熵相差了一个极大项:[Math Processing Error];这意味着连续变量本质上不可能做到精确的编码。)
结合拉格朗日法,我们可以推导出信息熵和微分熵最大时对应的分布:对于离散的随机变量,信息熵最大时对应着一个均匀分布;对于连续的随机变量,微分熵最大时对应着一个高斯分布(注意对于微分熵的最大值求解需要增加一阶矩和二阶矩两个约束条件)。
从信息熵的第一定义,我们很容易写出条件信息熵的计算公式:[Math Processing Error]
容易证明,[Math Processing Error]。也就是说,[Math Processing Error]、[Math Processing Error]联合分布的不确定度,等于[Math Processing Error]的不确定度与知道[Math Processing Error]后[Math Processing Error]的不确定度之和。
交叉熵(relative entropy),又被称为KL divergence,衡量了两个分布的不相似性。它定义了用一个预估分布[Math Processing Error]近似一个未知分布[Math Processing Error]时,对[Math Processing Error]进行编码所需要的额外期望信息量:[Math Processing Error]
交叉熵越大,两个分布越不相似。可以证明,交叉熵不满足对称性([Math Processing Error]);且[Math Processing Error](当且仅当[Math Processing Error]时等号成立)。
我们可以用交叉熵的概念来对一个机器学习模型的参数进行预估。假设我们有一堆抽样自某未知分布[Math Processing Error]的数据,我们试图用一个带参数的模型[Math Processing Error]去拟合它。一条可行的思路是选择使[Math Processing Error]和[Math Processing Error]的交叉熵尽可能小的参数[Math Processing Error]。虽然我们不知道[Math Processing Error]的真实分布,但由蒙特卡洛方法,我们可以从抽样数据中得到[Math Processing Error]的近似值:
[Math Processing Error]
略去与[Math Processing Error]无关项,我们发现,我们得到的是一个似然函数的负对数!也就是说,最小化模型预估分布与真实分布的交叉熵等价于前面提到的最大似然法!这也从信息熵的角度解释了为什么要对似然函数取对数的原因。
另一个重要的概念是互信息(mutual information),用来衡量两个随机变量[Math Processing Error]、[Math Processing Error]的相关性。互信息有两种定义方式:
1. [Math Processing Error]和[Math Processing Error]的交叉熵定义:[Math Processing Error] 当[Math Processing Error]、[Math Processing Error]相互独立时,[Math Processing Error];此时,[Math Processing Error]。
2. 由KL定义出发,我们可以推导出互信息的条件熵定义:[Math Processing Error] 因此,[Math Processing Error]、[Math Processing Error]的互信息可以理解为知道其中一个随机变量的取值后,另一个随机变量的不确定度的降低(当[Math Processing Error]时意味着[Math Processing Error]的发生确定了[Math Processing Error]的发生,即两个随机变量完全相关)。
通常,贝叶斯学派不会对模型的参数进行点估计,因此也不会用MAP算法优化模型。把最大后验概率算法和下面的优化目标函数放在这里,只是为了和频率学派的最大似然法进行对比。 ↩