ntu-hsuantienlin-ml-merge-1

台湾大学林轩田机器学习笔记(二)

课程中还介绍了一个AdaBoost-Stump在人脸识别方面的应用:

这里写图片描述

总结

本节课主要介绍了Adaptive Boosting。首先通过讲一个老师教小学生识别苹果的例子,来引入Boosting的思想,即把许多“弱弱”的hypotheses合并起来,变成很强的预测模型。然后重点介绍这种算法如何实现,关键在于每次迭代时,给予样本不同的系数u,宗旨是放大错误样本,缩小正确样本,得到不同的小矩g。并且在每次迭代时根据错误值的大小,给予不同不同的权重。最终由不同的进行组合得到整体的预测模型G。实际证明,Adaptive Boosting能够得到有效的预测模型。

注明:

文章中所有的图片均来自台湾大学林轩田《机器学习技法》课程

9 -- Decision Tree

上节课我们主要介绍了Adaptive Boosting。AdaBoost演算法通过调整每笔资料的权重,得到不同的hypotheses,然后将不同的hypothesis乘以不同的系数进行线性组合。这种演算法的优点是,即使底层的演算法g不是特别好(只要比乱选好点),经过多次迭代后算法模型会越来越好,起到了boost提升的效果。本节课将在此基础上介绍一种新的aggregation算法:决策树(Decision Tree)。

Decision Tree Hypothesis

从第7节课开始,我们就一直在介绍aggregation model。aggregation的核心就是将许多可供选择使用的比较好的hypothesis融合起来,利用集体的智慧组合成G,使其得到更好的机器学习预测模型。下面,我们先来看看已经介绍过的aggregation type有哪些。

这里写图片描述

aggregation type有三种:uniform,non-uniform,conditional。它有两种情况,一种是所有的g是已知的,即blending。对应的三种类型分别是voting/averaging,linear和stacking。另外一种情况是所有g未知,只能通过手上的资料重构g,即learning。其中uniform和non-uniform分别对应的是Bagging和AdaBoost算法,而conditional对应的就是我们本节课将要介绍的Decision Tree算法。

决策树(Decision Tree)模型是一种传统的算法,它的处理方式与人类思维十分相似。例如下面这个例子,对下班时间、约会情况、提交截止时间这些条件进行判断,从而决定是否要进行在线课程测试。如下图所示,整个流程类似一个树状结构。

这里写图片描述

图中每个条件和选择都决定了最终的结果,Y or N。蓝色的圆圈表示树的叶子,即最终的决定。

把这种树状结构对应到一个hypothesis G(x)中,G(x)的表达式为:

G(x)由许多组成,即aggregation的做法。每个就代表上图中的蓝色圆圈(树的叶子)。这里的是常数,因为是处理简单的classification问题。我们把这些称为base hypothesis。表示每个成立的条件,代表上图中橘色箭头的部分。不同的对应于不同的,即从树的根部到顶端叶子的路径不同。图中中的菱形代表每个简单的节点。所以,这些base hypothesis和conditions就构成了整个G(x)的形式,就像一棵树一样,从根部到顶端所有的叶子都安全映射到上述公式上去了。

这里写图片描述

决策树实际上就是在模仿人类做决策的过程。一直以来,决策树的应用十分广泛而且分类预测效果都很不错,而它在数学上的理论完备性不充分,倒也不必在意。

如果从另外一个方面来看决策树的形式,不同于上述G(x)的公式,我们可以利用条件分支的思想,将整体G(x)分成若干个,也就是把整个大树分成若干个小树,如下所示:

上式中,G(x)表示完整的大树,即full-tree hypothesis,b(x)表示每个分支条件,即branching criteria,表示第c个分支下的子树,即sub-tree。这种结构被称为递归型的数据结构,即将大树分割成不同的小树,再将小树继续分割成更小的子树。所以,决策树可以分为两部分:root和sub-trees。

这里写图片描述

在详细推导决策树算法之前,我们先来看一看它的优点和缺点。首先,decision tree的优点有:

  • 模型直观,便于理解,应用广泛

  • 算法简单,容易实现

  • 训练和预测时,效率较高

然而,decision tree也有相应的缺点:

  • 缺少足够的理论支持

  • 如何选择合适的树结构对初学者来说比较困惑

  • 决策树代表性的演算法比较少

这里写图片描述

Decision Tree Algorithm

我们可以用递归形式将decision tree表示出来,它的基本的算法可以写成:

这里写图片描述

这个Basic Decision Tree Algorithm的流程可以分成四个部分,首先学习设定划分不同分支的标准和条件是什么;接着将整体数据集D根据分支个数C和条件,划为不同分支下的子集Dc;然后对每个分支下的Dc进行训练,得到相应的机器学习模型Gc;最后将所有分支下的Gc合并到一起,组成大矩G(x)。但值得注意的是,这种递归的形式需要终止条件,否则程序将一直进行下去。当满足递归的终止条件之后,将会返回基本的hypothesis 。

这里写图片描述

所以,决策树的基本演算法包含了四个选择:

  • 分支个数(number of branches)

  • 分支条件(branching criteria)

  • 终止条件(termination criteria)

  • 基本算法(base hypothesis)

下面我们来介绍一种常用的决策树模型算法,叫做Classification and Regression Tree(C&RT)。C&RT算法有两个简单的设定,首先,分支的个数C=2,即二叉树(binary tree)的数据结构;然后,每个分支最后的(数的叶子)是一个常数。按照最小化的目标,对于binary/multiclass classification(0/1 error)问题,看正类和负类哪个更多,取所占比例最多的那一类;对于regression(squared error)问题,则取所有的平均值。

这里写图片描述

对于决策树的基本演算法流程,C&RT还有一些简单的设定。首先,C&RT分支个数C=2,一般采用上节课介绍过的decision stump的方法进行数据切割。也就是每次在一个维度上,只对一个特征feature将数据一分为二,左子树和右子树,分别代表不同的类别。然而,怎么切割才能让数据划分得最好呢(error最小)?C&RT中使用纯净度purifying这个概念来选择最好的decision stump。purifying的核心思想就是每次切割都尽可能让左子树和右子树中同类样本占得比例最大或者都很接近(regression),即错误率最小。比如说classifiacation问题中,如果左子树全是正样本,右子树全是负样本,那么它的纯净度就很大,说明该分支效果很好。

这里写图片描述

根据C&RT中purifying的思想,我们得到选择合适的分支条件b(x)的表达式如上所示。最好的decision stump重点包含两个方面:一个是刚刚介绍的分支纯净度purifying,purifying越大越好,而这里使用purifying相反的概念impurity,则impurity越小越好;另外一个是左右分支纯净度所占的权重,权重大小由该分支的数据量决定,分支包含的样本个数越多,则所占权重越大,分支包含的样本个数越少,则所占权重越小。上式中的代表了分支c所占的权重。这里b(x)类似于error function(这也是为什么使用impurity代替purifying的原因),选择最好的decision stump,让所有分支的不纯度最小化,使b(x)越小越好。

不纯度Impurity如何用函数的形式量化?一种简单的方法就是类比于,看预测值与真实值的误差是多少。对于regression问题,它的impurity可表示为:

其中,表示对应分支下所有的均值。

对应classification问题,它的impurity可表示为:

其中,表示对应分支下所占比例最大的那一类。

这里写图片描述

以上这些impurity是基于原来的regression error和classification error直接推导的。进一步来看classification的impurity functions,如果某分支条件下,让其中一个分支纯度最大,那么就选择对应的decision stump,即得到的classification error为:

其中,K为分支个数。

上面这个式子只考虑纯度最大的那个分支,更好的做法是将所有分支的纯度都考虑并计算在内,用基尼指数(Gini index)表示:

Gini index的优点是将所有的class在数据集中的分布状况和所占比例全都考虑了,这样让decision stump的选择更加准确。

这里写图片描述

对于决策树C&RT算法,通常来说,上面介绍的各种impurity functions中,Gini index更适合求解classification问题,而regression error更适合求解regression问题。

C&RT算法迭代终止条件有两种情况,第一种情况是当前各个分支下包含的所有样本都是同类的,即不纯度impurity为0,表示该分支已经达到了最佳分类程度。第二种情况是该特征下所有的相同,无法对其进行区分,表示没有decision stumps。遇到这两种情况,C&RT算法就会停止迭代。

这里写图片描述

所以,C&RT算法遇到迭代终止条件后就成为完全长成树(fully-grown tree)。它每次分支为二,是二叉树结构,采用purify来选择最佳的decision stump来划分,最终得到的叶子()是常数。

Decision Tree Heuristics in C&RT

现在我们已经知道了C&RT算法的基本流程:

这里写图片描述

可以看到C&RT算法在处理binary classification和regression问题时非常简单实用,而且,处理muti-class classification问题也十分容易。

考虑这样一个问题,有N个样本,如果我们每次只取一个样本点作为分支,那么在经过N-1次分支之后,所有的样本点都能完全分类正确。最终每片叶子上只有一个样本,有N片叶子,即必然能保证。这样看似是完美的分割,但是不可避免地造成VC Dimension无限大,造成模型复杂度增加,从而出现过拟合现象。为了避免overfit,我们需要在C&RT算法中引入正则化,来控制整个模型的复杂度。

考虑到避免模型过于复杂的方法是减少叶子()的数量,那么可以令regularizer就为决策树中叶子的总数,记为。正则化的目的是尽可能减少的值。这样,regularized decision tree的形式就可以表示成:

我们把这种regularized decision tree称为pruned decision tree。pruned是修剪的意思,通过regularization来修剪决策树,去掉多余的叶子,更简洁化,从而达到避免过拟合的效果。

那么如何确定修剪多少叶子,修剪哪些叶子呢?假设由C&RT算法得到一棵完全长成树(fully-grown tree),总共10片叶子。首先分别减去其中一片叶子,剩下9片,将这10种情况比较,取最小的那个模型;然后再从9片叶子的模型中分别减去一片,剩下8片,将这9种情况比较,取最小的那个模型。以此类推,继续修建叶子。这样,最终得到包含不同叶子的几种模型,将这几个使用regularized decision tree的error function来进行选择,确定包含几片叶子的模型误差最小,就选择该模型。另外,参数可以通过validation来确定最佳值。

这里写图片描述

我们一直讨论决策树上的叶子(features)都是numerical features,而实际应用中,决策树的特征值可能不是数字量,而是类别(categorical features)。对于numerical features,我们直接使用decision stump进行数值切割;而对于categorical features,我们仍然可以使用decision subset,对不同类别进行“左”和“右”,即是与不是(0和1)的划分。numerical features和categorical features的具体区别如下图所示:

这里写图片描述

在决策树中预测中,还会遇到一种问题,就是当某些特征缺失的时候,没有办法进行切割和分支选择。一种常用的方法就是surrogate branch,即寻找与该特征相似的替代feature。如何确定是相似的feature呢?做法是在决策树训练的时候,找出与该特征相似的feature,如果替代的feature与原feature切割的方式和结果是类似的,那么就表明二者是相似的,就把该替代的feature也存储下来。当预测时遇到原feature缺失的情况,就用替代feature进行分支判断和选择。

这里写图片描述

Decision Tree in Action

最后我们来举个例子看看C&RT算法究竟是如何进行计算的。例如下图二维平面上分布着许多正负样本,我们使用C&RT算法来对其进行决策树的分类。

这里写图片描述

第一步:

这里写图片描述

第二步:

这里写图片描述

第三步:

这里写图片描述

第四步:

这里写图片描述

在进行第四步切割之后,我们发现每个分支都已经非常纯净了,没有办法继续往下切割。此时表明已经满足了迭代终止条件,这时候就可以回传base hypothesis,构成sub tree,然后每个sub tree再往上整合形成tree,最后形成我们需要的完全决策树。如果将边界添加上去,可得到下图:

这里写图片描述

得到C&RT算法的切割方式之后,我们与AdaBoost-Stump算法进行比较:

这里写图片描述

我们之前就介绍过,AdaBoost-Stump算法的切割线是横跨整个平面的;而C&RT算法的切割线是基于某个条件的,所以一般不会横跨整个平面。比较起来,虽然C&RT和AdaBoost-Stump都采用decision stump方式进行切割,但是二者在细节上还是有所区别。

再看一个数据集分布比较复杂的例子,C&RT和AdaBoost-Stump的切割方式对比效果如下图所示:

这里写图片描述

通常来说,由于C&RT是基于条件进行切割的,所以C&RT比AdaBoost-Stump分类切割更有效率。总结一下,C&RT决策树有以下特点:

这里写图片描述

总结:

本节课主要介绍了Decision Tree。首先将decision tree hypothesis对应到不同分支下的矩。然后再介绍决策树算法是如何通过递归的形式建立起来。接着详细研究了决策树C&RT算法对应的数学模型和算法架构流程。最后通过一个实际的例子来演示决策树C&RT算法是如何一步一步进行分类的。

注明:

文章中所有的图片均来自台湾大学林轩田《机器学习技法》课程

10 -- Random Forest

上节课我们主要介绍了Decision Tree模型。Decision Tree算法的核心是通过递归的方式,将数据集不断进行切割,得到子分支,最终形成数的结构。C&RT算法是决策树比较简单和常用的一种算法,其切割的标准是根据纯度来进行,每次切割都是为了让分支内部纯度最大。最终,决策树不同的分支得到不同的(即树的叶子,C&RT算法中,是常数)。本节课将介绍随机森林(Random Forest)算法,它是我们之前介绍的Bagging和上节课介绍的Decision Tree的结合。

Random Forest Algorithm

首先我们来复习一下之前介绍过的两个机器学习模型:Bagging和Decision Tree。Bagging是通过bootstrap的方式,从原始的数据集D中得到新的;然后再使用一些base algorithm对每个都得到相应的;最后将所有的通过投票uniform的形式组合成一个G,G即为我们最终得到的模型。Decision Tree是通过递归形式,利用分支条件,将原始数据集D切割成一个个子树结构,长成一棵完整的树形结构。Decision Tree最终得到的G(x)是由相应的分支条件b(x)和分支树递归组成。

这里写图片描述

Bagging和Decison Tree算法各自有一个很重要的特点。Bagging具有减少不同的方差variance的特点。这是因为Bagging采用投票的形式,将所有uniform结合起来,起到了求平均的作用,从而降低variance。而Decision Tree具有增大不同的方差variance的特点。这是因为Decision Tree每次切割的方式不同,而且分支包含的样本数在逐渐减少,所以它对不同的资料D会比较敏感一些,从而不同的D会得到比较大的variance。

所以说,Bagging能减小variance,而Decision Tree能增大variance。如果把两者结合起来,能否发挥各自的优势,起到优势互补的作用呢?这就是我们接下来将要讨论的aggregation of aggregation,即使用Bagging的方式把众多的Decision Tree进行uniform结合起来。这种算法就叫做随机森林(Random Forest),它将完全长成的C&RT决策树通过bagging的形式结合起来,最终得到一个庞大的决策模型。

这里写图片描述

Random Forest算法流程图如下所示:

这里写图片描述

Random Forest算法的优点主要有三个。第一,不同决策树可以由不同主机并行训练生成,效率很高;第二,随机森林算法继承了C&RT的优点;第三,将所有的决策树通过bagging的形式结合起来,避免了单个决策树造成过拟合的问题。

这里写图片描述

以上是基本的Random Forest算法,我们再来看一下如何让Random Forest中决策树的结构更有多样性。Bagging中,通过bootstrap的方法得到不同于D的D’,使用这些随机抽取的资料得到不同的。除了随机抽取资料获得不同的方式之外,还有另外一种方法,就是随机抽取一部分特征。例如,原来有100个特征,现在只从中随机选取30个来构成决策树,那么每一轮得到的树都由不同的30个特征构成,每棵树都不一样。假设原来样本维度是d,则只选择其中的d’(d’小于d)个维度来建立决策树结构。这类似是一种从d维到d’维的特征转换,相当于是从高维到低维的投影,也就是说d’维z空间其实就是d维x空间的一个随机子空间(subspace)。通常情况下,d’远小于d,从而保证算法更有效率。Random Forest算法的作者建议在构建C&RT每个分支b(x)的时候,都可以重新选择子特征来训练,从而得到更具有多样性的决策树。

这里写图片描述

所以说,这种增强的Random Forest算法增加了random-subspace。

这里写图片描述

上面我们讲的是随机抽取特征,除此之外,还可以将现有的特征x,通过数组p进行线性组合,来保持多样性:

这种方法使每次分支得到的不再是单一的子特征集合,而是子特征的线性组合(权重不为1)。好比在二维平面上不止得到水平线和垂直线,也能得到各种斜线。这种做法使子特征选择更加多样性。值得注意的是,不同分支i下的是不同的,而且向量中大部分元素为零,因为我们选择的只是一部分特征,这是一种低维映射。

这里写图片描述

所以,这里的Random Forest算法又有增强,由原来的random-subspace变成了random-combination。顺便提一下,这里的random-combination类似于perceptron模型。

这里写图片描述

Out-Of-Bag Estimate

上一部分我们已经介绍了Random Forest算法,而Random Forest算法重要的一点就是Bagging。接下来将继续探讨bagging中的bootstrap机制到底蕴含了哪些可以为我们所用的东西。

通过bootstrap得到新的样本集D’,再由D’训练不同的。我们知道D’中包含了原样本集D中的一些样本,但也有些样本没有涵盖进去。如下表所示,不同的下,红色的_表示在中没有这些样本。例如对来说,和没有包含进去,对来说,和没有包含进去,等等。每个中,红色_表示的样本被称为out-of-bag(OOB) example。

这里写图片描述

首先,我们来计算OOB样本到底有多少。假设bootstrap的数量N’=N,那么某个样本是OOB的概率是:

其中,e是自然对数,N是原样本集的数量。由上述推导可得,每个中,OOB数目大约是,即大约有三分之一的样本没有在bootstrap中被抽到。

然后,我们将OOB与之前介绍的Validation进行对比:

这里写图片描述

在Validation表格中,蓝色的用来得到不同的,而红色的用来验证各自的。与没有交集,一般是的数倍关系。再看左边的OOB表格,之前我们也介绍过,蓝色的部分用来得到不同的,而红色的部分是OOB样本。而我们刚刚也推导过,红色部分大约占N的。通过两个表格的比较,我们发现OOB样本类似于,那么是否能使用OOB样本来验证的好坏呢?答案是肯定的。但是,通常我们并不需要对单个进行验证。因为我们更关心的是由许多组合成的G,即使表现不太好,只要G表现足够好就行了。那么问题就转化成了如何使用OOB来验证G的好坏。方法是先看每一个样本是哪些的OOB资料,然后计算其在这些上的表现,最后将所有样本的表现求平均即可。例如,样本是,,的OOB,则可以计算在上的表现为:

这种做法我们并不陌生,就像是我们之前介绍过的Leave-One-Out Cross Validation,每次只对一个样本进行的验证一样,只不过这里选择的是每个样本是哪些的OOB,然后再分别进行的验证。每个样本都当成验证资料一次(与留一法相同),最后计算所有样本的平均表现:

估算的就是G的表现好坏。我们把称为bagging或者Random Forest的self-validation。

这种self-validation相比于validation来说还有一个优点就是它不需要重复训练。如下图左边所示,在通过选择到表现最好的之后,还需要在和组成的所有样本集D上重新对该模型训练一次,以得到最终的模型系数。但是self-validation在调整随机森林算法相关系数并得到最小的之后,就完成了整个模型的建立,无需重新训练模型。随机森林算法中,self-validation在衡量G的表现上通常相当准确。

这里写图片描述

Feature Selection

如果样本资料特征过多,假如有10000个特征,而我们只想从中选取300个特征,这时候就需要舍弃部分特征。通常来说,需要移除的特征分为两类:一类是冗余特征,即特征出现重复,例如“年龄”和“生日”;另一类是不相关特征,例如疾病预测的时候引入的“保险状况”。这种从d维特征到d’维特征的subset-transform 称为Feature Selection,最终使用这些d’维的特征进行模型训练。

这里写图片描述

特征选择的优点是:

  • 提高效率,特征越少,模型越简单

  • 正则化,防止特征过多出现过拟合

  • 去除无关特征,保留相关性大的特征,解释性强

同时,特征选择的缺点是:

  • 筛选特征的计算量较大

  • 不同特征组合,也容易发生过拟合

  • 容易选到无关特征,解释性差

这里写图片描述

值得一提的是,在decision tree中,我们使用的decision stump切割方式也是一种feature selection。

那么,如何对许多维特征进行筛选呢?我们可以通过计算出每个特征的重要性(即权重),然后再根据重要性的排序进行选择即可。

这里写图片描述

这种方法在线性模型中比较容易计算。因为线性模型的score是由每个特征经过加权求和而得到的,而加权系数的绝对值正好代表了对应特征的重要性为多少。越大,表示对应特征越重要,则该特征应该被选择。w的值可以通过对已有的数据集建立线性模型而得到。

这里写图片描述

然而,对于非线性模型来说,因为不同特征可能是非线性交叉在一起的,所以计算每个特征的重要性就变得比较复杂和困难。例如,Random Forest就是一个非线性模型,接下来,我们将讨论如何在RF下进行特征选择。

RF中,特征选择的核心思想是random test。random test的做法是对于某个特征,如果用另外一个随机值替代它之后的表现比之前更差,则表明该特征比较重要,所占的权重应该较大,不能用一个随机值替代。相反,如果随机值替代后的表现没有太大差别,则表明该特征不那么重要,可有可无。所以,通过比较某特征被随机值替代前后的表现,就能推断出该特征的权重和重要性。

那么random test中的随机值如何选择呢?通常有两种方法:一是使用uniform或者gaussian抽取随机值替换原特征;一是通过permutation的方式将原来的所有N个样本的第i个特征值重新打乱分布(相当于重新洗牌)。比较而言,第二种方法更加科学,保证了特征替代值与原特征的分布是近似的(只是重新洗牌而已)。这种方法叫做permutation test(随机排序测试),即在计算第i个特征的重要性的时候,将N个样本的第i个特征重新洗牌,然后比较D和表现的差异性。如果差异很大,则表明第i个特征是重要的。

这里写图片描述

知道了permutation test的原理后,接下来要考虑的问题是如何衡量上图中的performance,即替换前后的表现。显然,我们前面介绍过performance可以用来衡量。但是,对于N个样本的第i个特征值重新洗牌重置的,要对它进行重新训练,而且每个特征都要重复训练,然后再与原D的表现进行比较,过程非常繁琐。为了简化运算,RF的作者提出了一种方法,就是把permutation的操作从原来的training上移到了OOB validation上去,记为。也就是说,在训练的时候仍然使用D,但是在OOB验证的时候,将所有的OOB样本的第i个特征重新洗牌,验证G的表现。这种做法大大简化了计算复杂度,在RF的feature selection中应用广泛。

这里写图片描述

Random Forest in Action

最后,我们通过实际的例子来看一下RF的特点。首先,仍然是一个二元分类的例子。如下图所示,左边是一个C&RT树没有使用bootstrap得到的模型分类效果,其中不同特征之间进行了随机组合,所以有斜线作为分类线;中间是由bootstrap(N’=N/2)后生成的一棵决策树组成的随机森林,图中加粗的点表示被bootstrap选中的点;右边是将一棵决策树进行bagging后的分类模型,效果与中间图是一样的,都是一棵树。

这里写图片描述

当t=100,即选择了100棵树时,中间的模型是第100棵决策树构成的,还是只有一棵树;右边的模型是由100棵决策树bagging起来的,如下图所示:

这里写图片描述

当t=200时:

这里写图片描述

当t=300时:

这里写图片描述

当t=400时:

这里写图片描述

当t=500时:

这里写图片描述

当t=600时:

这里写图片描述

当t=700时:

这里写图片描述

当t=800时:

这里写图片描述

当t=900时:

这里写图片描述

当t=1000时:

这里写图片描述

随着树木个数的增加,我们发现,分界线越来越光滑而且得到了large-margin-like boundary,类似于SVM一样的效果。也就是说,树木越多,分类器的置信区间越大。

然后,我们再来看一个比较复杂的例子,二维平面上分布着许多离散点,分界线形如sin函数。当只有一棵树的时候(t=1),下图左边表示单一树组成的RF,右边表示所有树bagging组合起来构成的RF。因为只有一棵树,所以左右两边效果一致。

这里写图片描述

当t=6时:

这里写图片描述

当t=11时:

这里写图片描述

当t=16时:

这里写图片描述

当t=21时:

这里写图片描述

可以看到,当RF由21棵树构成的时候,分界线就比较平滑了,而且它的边界比单一树构成的RF要robust得多,更加平滑和稳定。

最后,基于上面的例子,再让问题复杂一点:在平面上添加一些随机噪声。当t=1时,如下图所示:

这里写图片描述

当t=6时:

这里写图片描述

当t=11时:

这里写图片描述

当t=16时:

这里写图片描述

当t=21时:

这里写图片描述

从上图中,我们发现21棵树的时候,随机noise的影响基本上能够修正和消除。这种bagging投票的机制能够保证较好的降噪性,从而得到比较稳定的结果。

经过以上三个例子,我们发现RF中,树的个数越多,模型越稳定越能表现得好。在实际应用中,应该尽可能选择更多的树。值得一提的是,RF的表现同时也与random seed有关,即随机的初始值也会影响RF的表现。

这里写图片描述

总结:

本节课主要介绍了Random Forest算法模型。RF将bagging与decision tree结合起来,通过把众多的决策树组进行组合,构成森林的形式,利用投票机制让G表现最佳,分类模型更稳定。其中为了让decision tree的随机性更强一些,可以采用randomly projected subspaces操作,即将不同的features线性组合起来,从而进行各式各样的切割。同时,我们也介绍了可以使用OOB样本来进行self-validation,然后可以使用self-validation来对每个特征进行permutaion test,得到不同特征的重要性,从而进行feature selection。总的来说,RF算法能够得到比较平滑的边界,稳定性强,前提是有足够多的树。

注明:

文章中所有的图片均来自台湾大学林轩田《机器学习技法》课程

11 -- Gradient Boosted Decision Tree

上节课我们主要介绍了Random Forest算法模型。Random Forest就是通过bagging的方式将许多不同的decision tree组合起来。除此之外,在decision tree中加入了各种随机性和多样性,比如不同特征的线性组合等。RF还可以使用OOB样本进行self-validation,而且可以通过permutation test进行feature selection。本节课将使用Adaptive Boosting的方法来研究decision tree的一些算法和模型。

Adaptive Boosted Decision Tree

Random Forest的算法流程我们上节课也详细介绍过,就是先通过bootstrapping“复制”原样本集D,得到新的样本集D’;然后对每个D’进行训练得到不同的decision tree和对应的;最后再将所有的通过uniform的形式组合起来,即以投票的方式得到G。这里采用的Bagging的方式,也就是把每个的预测值直接相加。现在,如果将Bagging替换成AdaBoost,处理方式有些不同。首先每轮bootstrap得到的D’中每个样本会赋予不同的权重;然后在每个decision tree中,利用这些权重训练得到最好的;最后得出每个所占的权重,线性组合得到G。这种模型称为AdaBoost-D Tree。

这里写图片描述

但是在AdaBoost-DTree中需要注意的一点是每个样本的权重。我们知道,在Adaptive Boosting中进行了bootstrap操作,表示D中每个样本在D’中出现的次数。但是在决策树模型中,例如C&RT算法中并没有引入。那么,如何在决策树中引入这些权重来得到不同的而又不改变原来的决策树算法呢?

在Adaptive Boosting中,我们使用了weighted algorithm,形如:

每个犯错误的样本点乘以相应的权重,求和再平均,最终得到了。如果在决策树中使用这种方法,将当前分支下犯错误的点赋予权重,每层分支都这样做,会比较复杂,不易求解。为了简化运算,保持决策树算法本身的稳定性和封闭性,我们可以把决策树算法当成一个黑盒子,即不改变其结构,不对算法本身进行修改,而从数据来源D’上做一些处理。按照这种思想,我们来看权重u实际上表示该样本在bootstrap中出现的次数,反映了它出现的概率。那么可以根据u值,对原样本集D进行一次重新的随机sampling,也就是带权重的随机抽样。sampling之后,会得到一个新的D’,D’中每个样本出现的几率与它权重u所占的比例应该是差不多接近的。因此,使用带权重的sampling操作,得到了新的样本数据集D’,可以直接代入决策树进行训练,从而无需改变决策树算法结构。sampling可看成是bootstrap的反操作,这种对数据本身进行修改而不更改算法结构的方法非常重要!

这里写图片描述

所以,AdaBoost-DTree结合了AdaBoost和DTree,但是做了一点小小的改变,就是使用sampling替代权重,效果是相同的。

这里写图片描述

上面我们通过使用sampling,将不同的样本集代入决策树中,得到不同的。除此之外,我们还要确定每个所占的权重。之前我们在AdaBoost中已经介绍过,首先算出每个的错误率,然后计算权重:

如果现在有一棵完全长成的树(fully grown tree),由所有的样本训练得到。若每个样本都不相同的话,一刀刀切割分支,直到所有的都被完全分开。这时候,,加权的而且也为0,从而得到权重。表示该所占的权重无限大,相当于它一个就决定了G结构,是一种autocracy,而其它的对G没有影响。

这里写图片描述

显然不是我们想看到的,因为autocracy总是不好的,我们希望使用aggregation将不同的结合起来,发挥集体智慧来得到最好的模型G。首先,我们来看一下什么原因造成了。有两个原因:一个是使用了所有的样本进行训练;一个是树的分支过多,fully grown。针对这两个原因,我们可以对树做一些修剪(pruned),比如只使用一部分样本,这在sampling的操作中已经起到这类作用,因为必然有些样本没有被采样到。除此之外,我们还可以限制树的高度,让分支不要那么多,从而避免树fully grown。

这里写图片描述

因此,AdaBoost-DTree使用的是pruned DTree,也就是说将这些预测效果较弱的树结合起来,得到最好的G,避免出现autocracy。

这里写图片描述

刚才我们说了可以限制树的高度,那索性将树的高度限制到最低,即只有1层高的时候,有什么特性呢?当树高为1的时候,整棵树只有两个分支,切割一次即可。如果impurity是binary classification error的话,那么此时的AdaBoost-DTree就跟AdaBoost-Stump没什么两样。也就是说AdaBoost-Stump是AdaBoost-DTree的一种特殊情况。

这里写图片描述

值得一提是,如果树高为1时,通常较难遇到的情况,且一般不采用sampling的操作,而是直接将权重u代入到算法中。这是因为此时的AdaBoost-DTree就相当于是AdaBoost-Stump,而AdaBoost-Stump就是直接使用u来优化模型的。

Optimization View of AdaBoost

接下来,我们继续将继续探讨AdaBoost算法的一些奥妙之处。我们知道AdaBoost中的权重的迭代计算如下所示:

这里写图片描述

之前对于incorrect样本和correct样本,的表达式不同。现在,把两种情况结合起来,将写成一种简化的形式:

其中,对于incorrect样本,,对于correct样本,。从上式可以看出,由与某个常数相乘得到。所以,最后一轮更新的可以写成的级联形式,我们之前令,则有如下推导:

上式中被称为voting score,最终的模型。可以看出,在AdaBoost中,与成正比。

这里写图片描述

接下来我们继续看一下voting score中蕴含了哪些内容。如下图所示,voting score由许多乘以各自的系数线性组合而成。从另外一个角度来看,我们可以把看成是对的特征转换,就是线性模型中的权重。看到这里,我们回忆起之前SVM中,w与的乘积再除以w的长度就是margin,即点到边界的距离。另外,乘积项再与相乘,表示点的位置是在正确的那一侧还是错误的那一侧。所以,回过头来,这里的voting score实际上可以看成是没有正规化(没有除以w的长度)的距离,即可以看成是该点到分类边界距离的一种衡量。从效果上说,距离越大越好,也就是说voting score要尽可能大一些。

这里写图片描述

我们再来看,若voting score与相乘,则表示一个有对错之分的距离。也就是说,如果二者相乘是负数,则表示该点在错误的一边,分类错误;如果二者相乘是正数,则表示该点在正确的一边,分类正确。所以,我们算法的目的就是让与voting score的乘积是正的,而且越大越好。那么在刚刚推导的中,得到越小越好,从而得到越小越好。也就是说,如果voting score表现不错,与的乘积越大的话,那么相应的应该是最小的。

这里写图片描述

那么在AdaBoost中,随着每轮学习的进行,每个样本的是逐渐减小的,直到最小。以上是从单个样本点来看的。总体来看,所有样本的之和应该也是最小的。我们的目标就是在最后一轮(T+1)学习后,让所有样本的之和尽可能地小。之和表示为如下形式:

这里写图片描述

上式中,被称为linear score,用s表示。对于0/1 error:若ys<0,则;若ys>=0,则。如下图右边黑色折线所示。对于上式中提到的指数error,即,随着ys的增加,error单调下降,且始终落在0/1 error折线的上面。如下图右边蓝色曲线所示。很明显,可以看成是0/1 error的上界。所以,我们可以使用来替代0/1 error,能达到同样的效果。从这点来说,可以看成是一种error measure,而我们的目标就是让其最小化,求出最小值时对应的各个和。

这里写图片描述

下面我们来研究如何让取得最小值,思考是否能用梯度下降(gradient descent)的方法来进行求解。我们之前介绍过gradient descent的核心是在某点处做一阶泰勒展开:

这里写图片描述

其中,是泰勒展开的位置,v是所要求的下降的最好方向,它是梯度的反方向,而是每次前进的步长。则每次沿着当前梯度的反方向走一小步,就会不断逼近谷底(最小值)。这就是梯度下降算法所做的事情。

现在,我们对做梯度下降算法处理,区别是这里的方向是一个函数,而不是一个向量。其实,函数和向量的唯一区别就是一个下标是连续的,另一个下标是离散的,二者在梯度下降算法应用上并没有大的区别。因此,按照梯度下降算法的展开式,做出如下推导:

这里写图片描述

上式中,表示当前的方向,它是一个矩,是沿着当前方向前进的步长。我们要求出这样的和,使得是在不断减小的。当取得最小值的时候,那么所有的方向即最佳的和就都解出来了。上述推导使用了在处的一阶泰勒展开近似。这样经过推导之后,被分解为两个部分,一个是前N个u之和,也就是当前所有的之和;另外一个是包含下一步前进的方向和步进长度的项。的这种形式与gradient descent的形式基本是一致的。

那么接下来,如果要最小化的话,就要让第二项越小越好。则我们的目标就是找到一个好的(即好的方向)来最小化,此时先忽略步进长度。

这里写图片描述

对于binary classification,和均限定取值-1或+1两种。我们对做一些推导和平移运算:

这里写图片描述

最终化简为两项组成,一项是;另一项是。则最小化就转化为最小化。要让最小化,正是由AdaBoost中的base algorithm所做的事情。所以说,AdaBoost中的base algorithm正好帮我们找到了梯度下降中下一步最好的函数方向。

这里写图片描述

以上就是从数学上,从gradient descent角度验证了AdaBoost中使用base algorithm得到的就是让减小的方向,只不过这个方向是一个函数而不是向量。

在解决了方向问题后,我们需要考虑步进长度如何选取。方法是在确定方向后,选取合适的,使取得最小值。也就是说,把看成是步进长度的函数,目标是找到最小化时对应的值。

这里写图片描述

目的是找到在最佳方向上的最大步进长度,也就是steepest decent。我们先把表达式写下来:

上式中,有两种情况需要考虑:

  • : correct

  • : incorrect

经过推导,可得:

这里写图片描述

然后对求导,令,得:

由此看出,最大的步进长度就是,即AdaBoost中计算所占的权重。所以,AdaBoost算法所做的其实是在gradient descent上找到下降最快的方向和最大的步进长度。这里的方向就是,它是一个函数,而步进长度就是。也就是说,在AdaBoost中确定和的过程就相当于在gradient descent上寻找最快的下降方向和最大的步进长度。

Gradient Boosting

前面我们从gradient descent的角度来重新介绍了AdaBoost的最优化求解方法。整个过程可以概括为:

这里写图片描述

以上是针对binary classification问题。如果往更一般的情况进行推广,对于不同的error function,比如logistic error function或者regression中的squared error function,那么这种做法是否仍然有效呢?这种情况下的GradientBoost可以写成如下形式:

这里写图片描述

仍然按照gradient descent的思想,上式中,是下一步前进的方向,是步进长度。此时的error function不是前面所讲的exp了,而是任意的一种error function。因此,对应的hypothesis也不再是binary classification,最常用的是实数输出的hypothesis,例如regression。最终的目标也是求解最佳的前进方向和最快的步进长度。

这里写图片描述

接下来,我们就来看看如何求解regression的GradientBoost问题。它的表达式如下所示:

这里写图片描述

利用梯度下降的思想,我们把上式进行一阶泰勒展开,写成梯度的形式:

这里写图片描述

上式中,由于regression的error function是squared的,所以,对s的导数就是。其中标注灰色的部分表示常数,对最小化求解并没有影响,所以可以忽略。很明显,要使上式最小化,只要令是梯度的反方向就行了,即。但是直接这样赋值,并没有对的大小进行限制,一般不直接利用这个关系求出。

这里写图片描述

实际上的大小并不重要,因为有步进长度。那么,我们上面的最小化问题中需要对的大小做些限制。限制的一种简单做法是把的大小当成一个惩罚项()添加到上面的最小化问题中,这种做法与regularization类似。如下图所示,经过推导和整理,忽略常数项,我们得到最关心的式子是:

上式是一个完全平方项之和,表示当前第n个样本真实值和预测值的差,称之为余数。余数表示当前预测能够做到的效果与真实值的差值是多少。那么,如果我们想要让上式最小化,求出对应的的话,只要让尽可能地接近余数即可。在平方误差上尽可能接近其实很简单,就是使用regression的方法,对所有N个点做squared-error的regression,得到的回归方程就是我们要求的。

这里写图片描述

以上就是使用GradientBoost的思想来解决regression问题的方法,其中应用了一个非常重要的概念,就是余数。根据这些余数做regression,得到好的矩,方向函数也就是由余数决定的。

这里写图片描述

在求出最好的方向函数之后,就要来求相应的步进长度。表达式如下:

这里写图片描述

同样,对上式进行推导和化简,得到如下表达式:

这里写图片描述

上式中也包含了余数,其中可以看成是的特征转换,是已知量。那么,如果我们想要让上式最小化,求出对应的的话,只要让尽可能地接近余数即可。显然,这也是一个regression问题,而且是一个很简单的形如y=ax的线性回归,只有一个未知数。只要对所有N个点做squared-error的linear regression,利用梯度下降算法就能得到最佳的。

将上述这些概念合并到一起,我们就得到了一个最终的演算法Gradient Boosted Decision Tree(GBDT)。可能有人会问,我们刚才一直没有说到Decison Tree,只是讲到了GradientBoost啊?下面我们来看看Decison Tree究竟是在哪出现并使用的。其实刚刚我们在计算方向函数的时候,是对所有N个点做squared-error的regression。那么这个回归算法就可以是决策树C&RT模型(决策树也可以用来做regression)。这样,就引入了Decision Tree,并将GradientBoost和Decision Tree结合起来,构成了真正的GBDT算法。GBDT算法的基本流程图如下所示:

这里写图片描述

值得注意的是,的初始值一般均设为0,即。每轮迭代中,方向函数通过C&RT算法做regression,进行求解;步进长度通过简单的单参数线性回归进行求解;然后每轮更新的值,即。T轮迭代结束后,最终得到。

值得一提的是,本节课第一部分介绍的AdaBoost-DTree是解决binary classification问题,而此处介绍的GBDT是解决regression问题。二者具有一定的相似性,可以说GBDT就是AdaBoost-DTree的regression版本。

这里写图片描述

Summary of Aggregation Models

从机器学习技法课程的第7节课笔记到现在的第11节课笔记,我们已经介绍完所有的aggregation模型了。接下来,我们将对这些内容进行一个简单的总结和概括。

首先,我们介绍了blending。blending就是将所有已知的 aggregate结合起来,发挥集体的智慧得到G。值得注意的一点是这里的都是已知的。blending通常有三种形式:

  • uniform:简单地计算所有的平均值

  • non-uniform:所有的线性组合

  • conditional:所有的非线性组合

其中,uniform采用投票、求平均的形式更注重稳定性;而non-uniform和conditional追求的更复杂准确的模型,但存在过拟合的危险。

这里写图片描述

刚才讲的blending是建立在所有已知的情况。那如果所有未知的情况,对应的就是learning模型,做法就是一边学,一边将它们结合起来。learning通常也有三种形式(与blending的三种形式一一对应):

  • Bagging:通过bootstrap方法,得到不同,计算所有的平均值

  • AdaBoost:通过bootstrap方法,得到不同,所有的线性组合

  • Decision Tree:通过数据分割的形式得到不同的,所有的非线性组合

然后,本节课我们将AdaBoost延伸到另一个模型GradientBoost。对于regression问题,GradientBoost通过residual fitting的方式得到最佳的方向函数和步进长度。

这里写图片描述

除了这些基本的aggregation模型之外,我们还可以把某些模型结合起来得到新的aggregation模型。例如,Bagging与Decision Tree结合起来组成了Random Forest。Random Forest中的Decision Tree是比较“茂盛”的树,即每个树的都比较强一些。AdaBoost与Decision Tree结合组成了AdaBoost-DTree。AdaBoost-DTree的Decision Tree是比较“矮弱”的树,即每个树的都比较弱一些,由AdaBoost将所有弱弱的树结合起来,让综合能力更强。同样,GradientBoost与Decision Tree结合就构成了经典的算法GBDT。

这里写图片描述

Aggregation的核心是将所有的结合起来,融合到一起,即集体智慧的思想。这种做法之所以能得到很好的模型G,是因为aggregation具有两个方面的优点:cure underfitting和cure overfitting。

第一,aggregation models有助于防止欠拟合(underfitting)。它把所有比较弱的结合起来,利用集体智慧来获得比较好的模型G。aggregation就相当于是feature transform,来获得复杂的学习模型。

第二,aggregation models有助于防止过拟合(overfitting)。它把所有进行组合,容易得到一个比较中庸的模型,类似于SVM的large margin一样的效果,从而避免一些极端情况包括过拟合的发生。从这个角度来说,aggregation起到了regularization的效果。

由于aggregation具有这两个方面的优点,所以在实际应用中aggregation models都有很好的表现。

这里写图片描述

总结

本节课主要介绍了Gradient Boosted Decision Tree。首先讲如何将AdaBoost与Decision Tree结合起来,即通过sampling和pruning的方法得到AdaBoost-D Tree模型。然后,我们从optimization的角度来看AdaBoost,找到好的hypothesis也就是找到一个好的方向,找到权重也就是找到合适的步进长度。接着,我们从binary classification的0/1 error推广到其它的error function,从Gradient Boosting角度推导了regression的squared error形式。Gradient Boosting其实就是不断迭代,做residual fitting。并将其与Decision Tree算法结合,得到了经典的GBDT算法。最后,我们将所有的aggregation models做了总结和概括,这些模型有的能防止欠拟合有的能防止过拟合,应用十分广泛。

注明:

文章中所有的图片均来自台湾大学林轩田《机器学习技法》课程

2 -- Learning to Answer Yes/No

上节课,我们主要简述了机器学习的定义及其重要性,并用流程图的形式介绍了机器学习的整个过程:根据模型H,使用演算法A,在训练样本D上进行训练,得到最好的h,其对应的g就是我们最后需要的机器学习的模型函数,一般g接近于目标函数f。本节课将继续深入探讨机器学习问题,介绍感知机Perceptron模型,并推导课程的第一个机器学习算法:Perceptron Learning Algorithm(PLA)。

一、Perceptron Hypothesis Set

引入这样一个例子:某银行要根据用户的年龄、性别、年收入等情况来判断是否给该用户发信用卡。现在有训练样本D,即之前用户的信息和是否发了信用卡。这是一个典型的机器学习问题,我们要根据D,通过A,在H中选择最好的h,得到g,接近目标函数f,也就是根据先验知识建立是否给用户发信用卡的模型。银行用这个模型对以后用户进行判断:发信用卡(+1),不发信用卡(-1)。

在这个机器学习的整个流程中,有一个部分非常重要:就是模型选择,即Hypothesis Set。选择什么样的模型,很大程度上会影响机器学习的效果和表现。下面介绍一个简单常用的Hypothesis Set:感知机(Perceptron)。

还是刚才银行是否给用户发信用卡的例子,我们把用户的个人信息作为特征向量x,令总共有d个特征,每个特征赋予不同的权重w,表示该特征对输出(是否发信用卡)的影响有多大。那所有特征的加权和的值与一个设定的阈值threshold进行比较:大于这个阈值,输出为+1,即发信用卡;小于这个阈值,输出为-1,即不发信用卡。感知机模型,就是当特征加权和与阈值的差大于或等于0,则输出h(x)=1;当特征加权和与阈值的差小于0,则输出h(x)=-1,而我们的目的就是计算出所有权值w和阈值threshold。

这里写图片描述

为了计算方便,通常我们将阈值threshold当做,引入一个的量与相乘,这样就把threshold也转变成了权值,简化了计算。h(x)的表达式做如下变换:

这里写图片描述

为了更清晰地说明感知机模型,我们假设Perceptrons在二维平面上,即。其中,是平面上一条分类直线,直线一侧是正类(+1),直线另一侧是负类(-1)。权重w不同,对应于平面上不同的直线。

这里写图片描述

那么,我们所说的Perceptron,在这个模型上就是一条直线,称之为linear(binary) classifiers。注意一下,感知器线性分类不限定在二维空间中,在3D中,线性分类用平面表示,在更高维度中,线性分类用超平面表示,即只要是形如的线性模型就都属于linear(binary) classifiers。

同时,需要注意的是,这里所说的linear(binary) classifiers是用简单的感知器模型建立的,线性分类问题还可以使用logistic regression来解决,后面将会介绍。

二、Perceptron Learning Algorithm(PLA)

根据上一部分的介绍,我们已经知道了hypothesis set由许多条直线构成。接下来,我们的目的就是如何设计一个演算法A,来选择一个最好的直线,能将平面上所有的正类和负类完全分开,也就是找到最好的g,使。

如何找到这样一条最好的直线呢?我们可以使用逐点修正的思想,首先在平面上随意取一条直线,看看哪些点分类错误。然后开始对第一个错误点就行修正,即变换直线的位置,使这个错误点变成分类正确的点。接着,再对第二个、第三个等所有的错误分类点就行直线纠正,直到所有的点都完全分类正确了,就得到了最好的直线。这种“逐步修正”,就是PLA思想所在。

这里写图片描述

下面介绍一下PLA是怎么做的。首先随机选择一条直线进行分类。然后找到第一个分类错误的点,如果这个点表示正类,被误分为负类,即,那表示w和x夹角大于90度,其中w是直线的法向量。所以,x被误分在直线的下侧(相对于法向量,法向量的方向即为正类所在的一侧),修正的方法就是使w和x夹角小于90度。通常做法是,如图右上角所示,一次或多次更新后的与x夹角小于90度,能保证x位于直线的上侧,则对误分为负类的错误点完成了直线修正。

同理,如果是误分为正类的点,即,那表示w和x夹角小于90度,其中w是直线的法向量。所以,x被误分在直线的上侧,修正的方法就是使w和x夹角大于90度。通常做法是,如图右下角所示,一次或多次更新后的与x夹角大于90度,能保证x位于直线的下侧,则对误分为正类的错误点也完成了直线修正。

按照这种思想,遇到个错误点就进行修正,不断迭代。要注意一点:每次修正直线,可能使之前分类正确的点变成错误点,这是可能发生的。但是没关系,不断迭代,不断修正,最终会将所有点完全正确分类(PLA前提是线性可分的)。这种做法的思想是“知错能改”,有句话形容它:“A fault confessed is half redressed.”

实际操作中,可以一个点一个点地遍历,发现分类错误的点就进行修正,直到所有点全部分类正确。这种被称为Cyclic PLA。

这里写图片描述

下面用图解的形式来介绍PLA的修正过程:

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

对PLA,我们需要考虑以下两个问题:

  • PLA迭代一定会停下来吗?如果线性不可分怎么办?

  • PLA停下来的时候,是否能保证?如果没有停下来,是否有?

三、Guarantee of PLA

PLA什么时候会停下来呢?根据PLA的定义,当找到一条直线,能将所有平面上的点都分类正确,那么PLA就停止了。要达到这个终止条件,就必须保证D是线性可分(linear separable)。如果是非线性可分的,那么,PLA就不会停止。

这里写图片描述

对于线性可分的情况,如果有这样一条直线,能够将正类和负类完全分开,令这时候的目标权重为,则对每个点,必然满足,即对任一点:

这里写图片描述

PLA会对每次错误的点进行修正,更新权重的值,如果与越来越接近,数学运算上就是内积越大,那表示是在接近目标权重,证明PLA是有学习效果的。所以,我们来计算与的内积:

这里写图片描述

从推导可以看出,与的内积跟与的内积相比更大了。似乎说明了更接近,但是内积更大,可能是向量长度更大了,不一定是向量间角度更小。所以,下一步,我们还需要证明与向量长度的关系:

这里写图片描述

只会在分类错误的情况下更新,最终得到的相比的增量值不超过。也就是说,的增长被限制了,与向量长度不会差别太大!

如果令初始权值,那么经过T次错误修正后,有如下结论:

下面贴出来该结论的具体推导过程:

这里写图片描述

这里写图片描述

上述不等式左边其实是与夹角的余弦值,随着T增大,该余弦值越来越接近1,即与越来越接近。同时,需要注意的是,,也就是说,迭代次数T是有上界的。根据以上证明,我们最终得到的结论是:与的是随着迭代次数增加,逐渐接近的。而且,PLA最终会停下来(因为T有上界),实现对线性可分的数据集完全分类。

四、Non-Separable Data

上一部分,我们证明了线性可分的情况下,PLA是可以停下来并正确分类的,但对于非线性可分的情况,实际上并不存在,那么之前的推导并不成立,PLA不一定会停下来。所以,PLA虽然实现简单,但也有缺点:

这里写图片描述

对于非线性可分的情况,我们可以把它当成是数据集D中掺杂了一下noise,事实上,大多数情况下我们遇到的D,都或多或少地掺杂了noise。这时,机器学习流程是这样的:

这里写图片描述

在非线性情况下,我们可以把条件放松,即不苛求每个点都分类正确,而是容忍有错误点,取错误点的个数最少时的权重w:

这里写图片描述

事实证明,上面的解是NP-hard问题,难以求解。然而,我们可以对在线性可分类型中表现很好的PLA做个修改,把它应用到非线性可分类型中,获得近似最好的g。

修改后的PLA称为Packet Algorithm。它的算法流程与PLA基本类似,首先初始化权重,计算出在这条初始化的直线中,分类错误点的个数。然后对错误点进行修正,更新w,得到一条新的直线,在计算其对应的分类错误的点的个数,并与之前错误点个数比较,取个数较小的直线作为我们当前选择的分类直线。之后,再经过n次迭代,不断比较当前分类错误点个数与之前最少的错误点个数比较,选择最小的值保存。直到迭代次数完成后,选取个数最少的直线对应的w,即为我们最终想要得到的权重值。

这里写图片描述

如何判断数据集D是不是线性可分?对于二维数据来说,通常还是通过肉眼观察来判断的。一般情况下,Pocket Algorithm要比PLA速度慢一些。

五、总结

本节课主要介绍了线性感知机模型,以及解决这类感知机分类问题的简单算法:PLA。我们详细证明了对于线性可分问题,PLA可以停下来并实现完全正确分类。对于不是线性可分的问题,可以使用PLA的修正算法Pocket Algorithm来解决。

注明:

文章中所有的图片均来自台湾大学林轩田《机器学习基石》课程。

12 -- Neural Network

上节课我们主要介绍了Gradient Boosted Decision Tree。GBDT通过使用functional gradient的方法得到一棵一棵不同的树,然后再使用steepest descent的方式给予每棵树不同的权重,最后可以用来处理任何而定error measure。上节课介绍的GBDT是以regression为例进行介绍的,使用的是squared error measure。本节课讲介绍一种出现时间较早,但当下又非常火的一种机器算法模型,就是神经网络(Neural Network)。

Motivation

在之前的机器学习基石课程中,我们就接触过Perceptron模型了,例如PLA算法。Perceptron就是在矩外面加上一个sign函数,取值为{-1,+1}。现在,如果把许多perceptrons线性组合起来,得到的模型G就如下图所示:

这里写图片描述

将左边的输入与T个不同的权重相乘(每个是d+1维的),得到T个不同的perceptrons为。最后,每个给予不同的权重,线性组合得到G。G也是一个perceptron模型。

从结构上来说,上面这个模型包含了两层的权重,分别是和。同时也包含了两层的sign函数,分别是和G。那么这样一个由许多感知机linear aggregation的模型能实现什么样的boundary呢?

举个简单的例子,如下图所示,和分别是平面上两个perceptrons。其中,红色表示-1,蓝色表示+1。这两个perceptrons线性组合可能得到下图右侧的模型,这表示的是和进行与(AND)的操作,蓝色区域表示+1。

这里写图片描述

如何通过感知机模型来实现上述的逻辑操作呢?一种方法是令第二层中的。这样,G(x)就可表示为:

和的取值是{-1,+1},当时,G(x)=0;当时,G(x)=0;当时,G(x)=0;当时,G(x)=1。感知机模型如下所示:

这里写图片描述

这个例子说明了一些简单的线性边界,如上面的和,在经过一层感知机模型,经线性组合后,可以得到一些非线性的复杂边界(AND运算)G(x)。

除此之外,或(OR)运算和非(NOT)运算都可以由感知机建立相应的模型,非常简单。

所以说,linear aggregation of perceptrons实际上是非常powerful的模型同时也是非常complicated模型。再看下面一个例子,如果二维平面上有个圆形区域,圆内表示+1,圆外表示-1。这样复杂的圆形边界是没有办法使用单一perceptron来解决的。如果使用8个perceptrons,用刚才的方法线性组合起来,能够得到一个很接近圆形的边界(八边形)。如果使用16个perceptrons,那么得到的边界更接近圆形(十六边形)。因此,使用的perceptrons越多,就能得到各种任意的convex set,即凸多边形边界。之前我们在机器学习基石中介绍过,convex set的VC Dimension趋向于无穷大()。这表示只要perceptrons够多,我们能得到任意可能的情况,可能的模型。但是,这样的坏处是模型复杂度可能会变得很大,从而造成过拟合(overfitting)。

这里写图片描述

总的来说,足够数目的perceptrons线性组合能够得到比较平滑的边界和稳定的模型,这也是aggregation的特点之一。

但是,也有单层perceptrons线性组合做不到的事情。例如刚才我们将的AND、OR、NOT三种逻辑运算都可以由单层perceptrons做到,而如果是异或(XOR)操作,就没有办法只用单层perceptrons实现。这是因为XOR得到的是非线性可分的区域,如下图所示,没有办法由和线性组合实现。所以说linear aggregation of perceptrons模型的复杂度还是有限制的。

这里写图片描述

那么,为了实现XOR操作,可以使用多层perceptrons,也就是说一次transform不行,我们就用多层的transform,这其实就是Basic Neural Network的基本原型。下面我们就尝试使用两层perceptrons来实现XOR的操作。

首先,根据布尔运算,异或XOR操作可以拆分成:

这种拆分实际上就包含了两层transform。第一层仅有AND操作,第二层是OR操作。这种两层的感知机模型如下所示:

这里写图片描述

这样,从AND操作到XOR操作,从简单的aggregation of perceptrons到multi-layer perceptrons,感知机层数在增加,模型的复杂度也在增加,使最后得到的G能更容易解决一些非线性的复杂问题。这就是基本神经网络的基本模型。

这里写图片描述

顺便提一下,这里所说的感知机模型实际上就是在模仿人类的神经元模型(这就是Neural Network名称的由来)。感知机模型每个节点的输入就对应神经元的树突dendrite,感知机每个节点的输出就对应神经元的轴突axon。

Neural Network Hypothesis

上一部分我们介绍的这种感知机模型其实就是Neural Network。输入部分经过一层一层的运算,相当于一层一层的transform,最后通过最后一层的权重,得到一个分数score。即在OUTPUT层,输出的就是一个线性模型。得到s后,下一步再进行处理。

这里写图片描述

我们之前已经介绍过三种线性模型:linear classification,linear regression,logistic regression。那么,对于OUTPUT层的分数s,根据具体问题,可以选择最合适的线性模型。如果是binary classification问题,可以选择linear classification模型;如果是linear regression问题,可以选择linear regression模型;如果是soft classification问题,则可以选择logistic regression模型。本节课接下来将以linear regression为例,选择squared error来进行衡量。

这里写图片描述

上面讲的是OUTPUT层,对于中间层,每个节点对应一个perceptron,都有一个transform运算。上文我们已经介绍过的transformation function是阶梯函数sign()。那除了sign()函数外,有没有其他的transformation function呢?

如果每个节点的transformation function都是线性运算(跟OUTPUT端一样),那么由每个节点的线性模型组合成的神经网络模型也必然是线性的。这跟直接使用一个线性模型在效果上并没有什么差异,模型能力不强,反而花费了更多不必要的力气。所以一般来说,中间节点不会选择线性模型。

如果每个节点的transformation function都是阶梯函数(即sign()函数)。这是一个非线性模型,但是由于阶梯函数是离散的,并不是处处可导,所以在优化计算时比较难处理。所以,一般也不选择阶梯函数作为transformation function。

既然线性函数和阶梯函数都不太适合作为transformation function,那么最常用的一种transformation function就是tanh(s),其表达式如下:

tanh(s)函数是一个平滑函数,类似“s”型。当|s|比较大的时候,tanh(s)与阶梯函数相近;当|s|比较小的时候,tanh(s)与线性函数比较接近。从数学上来说,由于处处连续可导,便于最优化计算。而且形状上类似阶梯函数,具有非线性的性质,可以得到比较复杂强大的模型。

顺便提一下,tanh(x)函数与sigmoid函数存在下列关系:

其中,

这里写图片描述

那么,接下来我们就使用tanh函数作为神经网络中间层的transformation function,所有的数学推导也基于此。实际应用中,可以选择其它的transformation function,不同的transformation function,则有不同的推导过程。

下面我们将仔细来看看Neural Network Hypothesis的结构。如下图所示,该神经网络左边是输入层,中间两层是隐藏层,右边是输出层。整体上来说,我们设定输入层为第0层,然后往右分别是第一层、第二层,输出层即为第3层。

这里写图片描述

Neural Network Hypothesis中,分别表示神经网络的第几层,其中L为总层数。例如上图所示的是3层神经网络,L=3。我们先来看看每一层的权重,上标l满足,表示是位于哪一层。下标i满足,表示前一层输出的个数加上bias项(常数项)。下标j满足,表示该层节点的个数(不包括bias项)。

对于每层的分数score,它的表达式为:

对于每层的transformation function,它的表达式为:

因为是regression模型,所以在输出层(l=L)直接得到。

这里写图片描述

介绍完Neural Network Hypothesis的结构之后,我们来研究下这种算法结构到底有什么实际的物理意义。还是看上面的神经网络结构图,每一层输入到输出的运算过程,实际上都是一种transformation,而转换的关键在于每个权重值。每层网络利用输入x和权重w的乘积,在经过tanh函数,得到该层的输出,从左到右,一层一层地进行。其中,很明显,x和w的乘积越大,那么tanh(wx)就会越接近1,表明这种transformation效果越好。再想一下,w和x是两个向量,乘积越大,表明两个向量内积越大,越接近平行,则表明w和x有模式上的相似性。从而,更进一步说明了如果每一层的输入向量x和权重向量w具有模式上的相似性,比较接近平行,那么transformation的效果就比较好,就能得到表现良好的神经网络模型。也就是说,神经网络训练的核心就是pattern extraction,即从数据中找到数据本身蕴含的模式和规律。通过一层一层找到这些模式,找到与输入向量x最契合的权重向量w,最后再由G输出结果。

这里写图片描述

Neural Network Learning

我们已经介绍了Neural Network Hypothesis的结构和算法流程。确定网络结构其实就是确定各层的权重值。那如何根据已有的样本数据,找到最佳的权重使error最小化呢?下面我们将详细推导。

这里写图片描述

首先,我们的目标是找到最佳的让最小化。如果只有一层隐藏层,就相当于是aggregation of perceptrons。可以使用我们上节课介绍的gradient boosting算法来一个一个确定隐藏层每个神经元的权重,输入层到隐藏层的权重可以通过C&RT算法计算的到。这不是神经网络常用的算法。如果隐藏层个数有两个或者更多,那么aggregation of perceptrons的方法就行不通了。就要考虑使用其它方法。

根据error function的思想,从输出层来看,我们可以得到每个样本神经网络预测值与实际值之间的squared error:,这是单个样本点的error。那么,我们只要能建立与每个权重的函数关系,就可以利用GD或SGD算法对求偏微分,不断迭代优化值,最终得到使最小时对应的。

这里写图片描述

为了建立与各层权重的函数关系,求出对的偏导数,我们先来看输出层如何计算。与的函数关系为:

这里写图片描述

计算对的偏导数,得到:

这里写图片描述

以上是输出层求偏导的结果。如果是其它层,即,偏导计算可以写成如下形式:

这里写图片描述

上述推导中,令与第l层第j个神经元的分数的偏导数记为。即:

当时,;当时,是未知的,下面我们将进行运算推导,看看不同层之间的是否有递推关系。

这里写图片描述

如上图所示,第l层第j个神经元的分数经过tanh函数,得到该层输出,再与下一层权重相乘,得到第l+1层的分数,直到最后的输出层。

那么,利用上面到这样的递推关系,我们可以对偏导数做一些中间变量替换处理,得到如下表达式:

这里写图片描述

值得一提的是,上式中有个求和项,其中k表示下一层即l+1层神经元的个数。表明l层的与l+1层的所有都有关系。因为参与到每个的运算中了。

这样,我们得到了与的递推关系。也就是说如果知道了的值,就能推导出的值。而最后一层,即输出层的,那么就能一层一层往前推导,得到每一层的,从而可以计算出对各个的偏导数。计算完偏微分之后,就可以使用GD或SGD算法进行权重的迭代优化,最终得到最优解。

神经网络中,这种从后往前的推导方法称为Backpropagation Algorithm,即我们常常听到的BP神经网络算法。它的算法流程如下所示:

这里写图片描述

上面采用的是SGD的方法,即每次迭代更新时只取一个点,这种做法一般不够稳定。所以通常会采用mini-batch的方法,即每次选取一些数据,例如,来进行训练,最后求平均值更新权重w。这种做法的实际效果会比较好一些。

Optimization and Regularization

经过以上的分析和推导,我们知道神经网络优化的目标就是让最小化。本节课我们采用error measure是squared error,当然也可以采用其它的错误衡量方式,只要在推导上做稍稍修改就可以了,此处不再赘述。

这里写图片描述

下面我们将主要分析神经网络的优化问题。由于神经网络由输入层、多个隐藏层、输出层构成,结构是比较复杂的非线性模型,因此可能有许多局部最小值,是non-convex的,找到全局最小值(globalminimum)就会困难许多。而我们使用GD或SGD算法得到的很可能就是局部最小值(local minimum)。

基于这个问题,不同的初始值权重通常会得到不同的local minimum。也就是说最终的输出G与初始权重有很大的关系。在选取上有个技巧,就是通常选择比较小的值,而且最好是随机random选择。这是因为,如果权重很大,那么根据tanh函数,得到的值会分布在两侧比较平缓的位置(类似于饱和saturation),这时候梯度很小,每次迭代权重可能只有微弱的变化,很难在全局上快速得到最优解。而随机选择的原因是通常对权重如何选择没有先验经验,只能通过random,从普遍概率上选择初始值,随机性避免了人为因素的干预,可以说更有可能经过迭代优化得到全局最优解。

这里写图片描述

下面从理论上看一下神经网络模型的VC Dimension。对于tanh这样的transfer function,其对应的整个模型的复杂度。其中V是神经网络中神经元的个数(不包括bias点),D表示所有权值的数量。所以,如果V足够大的时候,VC Dimension也会非常大,这样神经网络可以训练出非常复杂的模型。但同时也可能会造成过拟合overfitting。所以,神经网络中神经元的数量V不能太大。

为了防止神经网络过拟合,一个常用的方法就是使用regularization。之前我们就介绍过可以在error function中加入一个regularizer,例如熟悉的L2 regularizer :

但是,使用L2 regularizer 有一个缺点,就是它使每个权重进行等比例缩小(shrink)。也就是说大的权重缩小程度较大,小的权重缩小程度较小。这会带来一个问题,就是等比例缩小很难得到值为零的权重。而我们恰恰希望某些权重,即权重的解是松散(sparse)的。因为这样能有效减少VC Dimension,从而减小模型复杂度,防止过拟合发生。

那么为了得到sparse解,有什么方法呢?我们之前就介绍过可以使用L1 regularizer:,但是这种做法存在一个缺点,就是包含绝对值不容易微分。除此之外,另外一种比较常用的方法就是使用weight-elimination regularizer。weight-elimination regularizer类似于L2 regularizer,只不过是在L2 regularizer上做了尺度的缩小,这样能使large weight和small weight都能得到同等程度的缩小,从而让更多权重最终为零。weight-elimination regularizer的表达式如下:

这里写图片描述

除了weight-elimination regularizer之外,还有另外一个很有效的regularization的方法,就是Early Stopping。简而言之,就是神经网络训练的次数t不能太多。因为,t太大的时候,相当于给模型寻找最优值更多的可能性,模型更复杂,VC Dimension增大,可能会overfitting。而t不太大时,能有效减少VC Dimension,降低模型复杂度,从而起到regularization的效果。和随训练次数t的关系如下图右下角所示:

这里写图片描述

那么,如何选择最佳的训练次数t呢?可以使用validation进行验证选择。

总结

本节课主要介绍了Neural Network模型。首先,我们通过使用一层甚至多层的perceptrons来获得更复杂的非线性模型。神经网络的每个神经元都相当于一个Neural Network Hypothesis,训练的本质就是在每一层网络上进行pattern extraction,找到最合适的权重,最终得到最佳的G。本课程以regression模型为例,最终的G是线性模型,而中间各层均采用tanh函数作为transform function。计算权重的方法就是采用GD或者SGD,通过Backpropagation算法,不断更新优化权重值,最终使得最小化,即完成了整个神经网络的训练过程。最后,我们提到了神经网络的可以使用一些regularization来防止模型过拟合。这些方法包括随机选择较小的权重初始值,使用weight-elimination regularizer或者early stopping等。

注明:

文章中所有的图片均来自台湾大学林轩田《机器学习技法》课程

13 -- Deep Learning

上节课我们主要介绍了神经网络Neural Network。神经网络是由一层一层的神经元构成,其作用就是帮助提取原始数据中的模式即特征,简称为pattern feature extraction。神经网络模型的关键是计算出每个神经元的权重,方法就是使用Backpropagation算法,利用GD/SGD,得到每个权重的最优解。本节课我们将继续对神经网络进行深入研究,并介绍层数更多、神经元个数更多、模型更复杂的神经网络模型,即深度学习模型。

Deep Neural Network

总的来说,根据神经网络模型的层数、神经元个数、模型复杂度不同,大致可分为两类:Shallow Neural Networks和Deep Neural Networks。上节课介绍的神经网络模型层数较少,属于Shallow Neural Networks,而本节课将着重介绍Deep Neural Networks。首先,比较一下二者之间的优缺点有哪些:

这里写图片描述

值得一提的是,近些年来,deep learning越来越火,尤其在电脑视觉和语音识别等领域都有非常广泛的应用。原因在于一层一层的神经网络有助于提取图像或者语音的一些物理特征,即pattern feature extraction,从而帮助人们掌握这些问题的本质,建立准确的模型。

下面举个例子,来看一下深度学习是如何提取出问题潜在的特征从而建立准确的模型的。如下图所示,这是一个手写识别的问题,简单地识别数字1和数字5。

这里写图片描述

如何进行准确的手写识别呢?我们可以将写上数字的图片分解提取出一块一块不同部位的特征。例如左边三幅图每张图代表了数字1的某个部位的特征,三幅图片组合起来就是完整的数字1。右边四幅图也是一样,每张图代表了数字5的某个部位的特征,五幅图组合起来就是完整的数字5。对计算机来说,图片由许多像素点组成。要达到识别的目的,每层神经网络从原始像素中提取出更复杂的特征,再由这些特征对图片内容进行匹配和识别。层数越多,提取特征的个数和深度就越大,同时解决复杂问题的能量就越强,其中每一层都具有相应的物理意义。以上就是深度学习的作用和意义。

深度学习很强大,同时它也面临很多挑战和困难:

  • difficult structural decisions

  • high model complexity

  • hard optimization problem

  • huge computational complexity

面对以上深度学习的4个困难,有相应的技术和解决的办法:

这里写图片描述

其中,最关键的技术就是regularization和initialization。

深度学习中,权重的初始化选择很重要,好的初始值能够帮助避免出现局部最优解的出现。常用的方法就是pre-train,即先权重进行初始值的选择,选择之后再使用backprop算法训练模型,得到最佳的权重值。在接下来的部分,我们将重点研究pre-training的方法。

这里写图片描述

Autoencoder

我们已经介绍了深度学习的架构,那么从算法模型上来说,如何进行pre-training,得到较好的权重初始值呢?首先,我们来看看,权重是什么?神经网络模型中,权重代表了特征转换(feature transform)。从另一个方面也可以说,权重表示一种编码(encoding),就是把数据编码成另外一些数据来表示。因为神经网络是一层一层进行的,有先后顺序,所以就单一层来看,好的权重初始值应该是尽可能地包含了该层输入数据的所有特征,即类似于information-preserving encoding。也就是说,能够把第i层的输入数据的特征传输到第i+1层,再把第i+1层的输入数据的特征传输到第i+2层,一层一层进行下去。这样,每层的权重初始值起到了对该层输入数据的编码作用,能够最大限度地保持其特征。

举个例子,上一小节我们讲了简单的手写识别的例子。从原始的一张像素图片转换到分解的不同笔画特征,那么反过来,这几个笔画特征也可以组合成原来的数字。这种可逆的转换被称为information-preserving,即转换后的特征保留了原输入的特征,而且转换是可逆的。这正是pre-train希望做到的,通过encoding将输入转换为一些特征,而这些特征又可以复原原输入x,实现information-preserving。所以,pre-training得到的权重初始值就应该满足这样的information-preserving特性。

这里写图片描述

如何在pre-training中得到这样的权重初始值(即转换特征)呢?方法是建立一个简单的三层神经网络(一个输入层、一个隐藏层、一个输出层),如下图所示。

这里写图片描述

该神经网络中,输入层是原始数据(即待pre-training的数据),经过权重得到隐藏层的输出为原始数据新的表达方式(即转换特征)。这些转换特征再经过权重得到输出层,输出层的结果要求跟原始数据类似,即输入层和输出层是近似相等的。整个网络是 NNet结构。其核心在于“重构性”,从输入层到隐藏层实现特征转换,从隐藏层到输出层实现重构,满足上文所说的information-preserving的特性。这种结构的神经网络我们称之为autoencoder,输入层到隐藏层对应编码,而隐藏层到输出层对应解码。其中,表示编码权重,而表示解码权重。整个过程类似于在学习如何近似逼近identity function。

这里写图片描述

那么为什么要使用这样的结构来逼近identity function,有什么好处呢?首先对于监督式学习(supervised learning),这种的NNet结构中含有隐藏层。隐藏层的输出实际上就是对原始数据合理的特征转换,例如手写识别中隐藏层分解的各个笔画,包含了有用的信息。这样就可以从数据中学习得到一些有用的具有代表性的信息。然后,对于非监督式学习(unsupervised learning),autoencoder也可以用来做density estimation。如果网络最终的输出,则表示密度较大;如果g(x)与x相差甚远,则表示密度较小。也就是说可以根据g(x)与x的接近程度来估计测试数据是落在密度较大的地方还是密度较小的地方。这种方法同样适用于outlier detection,异常检测。这样就可以从数据中学习得到一些典型的具有代表性的信息,找出哪些是典型资料,哪些不是典型资料。所以说,通过autoencoder不断逼近identity function,对监督式学习和非监督式学习都具有深刻的物理意义和非常广泛的应用。

这里写图片描述

其实,对于autoencoder来说,我们更关心的是网络中间隐藏层,即原始数据的特征转换以及特征转换的编码权重。

Basic Autoencoder一般采用的NNet结构,对应的error function是squared error,即。

这里写图片描述

basic autoencoder在结构上比较简单,只有三层网络,容易训练和优化。各层之间的神经元数量上,通常限定,便于数据编码。数据集可表示为:,即输入输出都是x,可以看成是非监督式学习。一个重要的限制条件是,即编码权重与解码权重相同。这起到了regularization的作用,但是会让计算复杂一些。

这里写图片描述

以上就是basic autoencoder的结构和一些限定条件。深度学习中,basic autoencoder的过程也就对应着pre-training的过程,使用这种方法,对无label的原始数据进行编码和解码,得到的编码权重就可以作为pre-trained的比较不错的初始化权重,也就是作为深度学习中层与层之间的初始化权重。

这里写图片描述

我们在本节课第一部分就说了深度学习中非常重要的一步就是pre-training,即权重初始化,而autoencoder可以作为pre-training的一个合理方法。Pre-training的整个过程是:首先,autoencoder会对深度学习网络第一层(即原始输入)进行编码和解码,得到编码权重,作为网络第一层到第二层的的初始化权重;然后再对网络第二层进行编码和解码,得到编码权重,作为网络第二层到第三层的初始化权重,以此类推,直到深度学习网络中所有层与层之间都得到初始化权重。值得注意的是,对于l-1层的网络,autoencoder中的应与下一层(即l层)的神经元个数相同。

这里写图片描述

当然,除了basic autoencoder之外还有许多其它表现不错的pre-training方法。这些方法大都采用不同的结构和正则化技巧来得到不同的’fancier’ autoencoders,这里不再赘述。

Denoising Autoencoder

上一部分,我们使用autoencoder解决了deep learning中pre-training的问题。接下来,我们将讨论deep learning中有什么样的regularization方式来控制模型的复杂度。

这里写图片描述

由于深度学习网络中神经元和权重的个数非常多,相应的模型复杂度就会很大,因此,regularization非常必要。之前我门也介绍过一些regularization的方法,包括:

  • structural decisions/constraints

  • weight decay or weight elimination regularizers

  • early stopping

这里写图片描述

下面我们将介绍另外一种regularization的方式,它在deep learning和autoencoder中都有很好的效果。

首先我们来复习一下之前介绍的overfitting产生的原因有哪些。如下图所示,我们知道overfitting与样本数量、噪声大小都有关系,数据量减少或者noise增大都会造成overfitting。如果数据量是固定的,那么noise的影响就非常大,此时,实现regularization的一个方法就是消除noise的影响。

这里写图片描述

去除noise的一个简单方法就是对数据进行cleaning/pruning的操作。但是,这种方法通常比较麻烦,费时费力。此处,有一种比较“疯狂”的方法,就是往数据中添加一些noise。注意是添加noise!下面我们来解释这样做到底有什么作用。

这里写图片描述

这种做法的idea来自于如何建立一个健壮(robust)的autoencoder。在autoencoder中,编码解码后的输出g(x)会非常接近真实样本值x。此时,如果对原始输入加入一些noise,对于健壮的autoencoder,编码解码后的输出g(x)同样会与真实样本值x很接近。举个例子,手写识别中,通常情况下,写的很规范的数字1经过autoencoder后能够复原为数字1。如果原始图片数字1歪斜或加入噪声,经过autoencoder后应该仍然能够解码为数字1。这表明该autoencoder是robust的,一定程度上起到了抗噪声和regularization的作用,这正是我们希望看到的。

所以,这就引出了denoising autoencoder的概念。denoising autoencoder不仅能实现编码和解码的功能,还能起到去噪声、抗干扰的效果,即输入一些混入noise的数据,经过autoencoder之后能够得到较纯净的数据。这样,autoencoder的样本集为:

其中,为混入噪声的样本,而为纯净样本。

autoencoder训练的目的就是让经过编码解码后能够复原为纯净的样本。那么,在deep learning的pre-training中,如果使用这种denoising autoencoder,不仅能从纯净的样本中编解码得到纯净的样本,还能从混入noise的样本中编解码得到纯净的样本。这样得到的权重初始值更好,因为它具有更好的抗噪声能力,即健壮性好。实际应用中,denoising autoencoder非常有用,在训练过程中,输入混入人工noise,输出纯净信号,让模型本身具有抗噪声的效果,让模型健壮性更强,最关键的是起到了regularization的作用。

这里写图片描述

Principal Component Analysis

刚刚我们介绍的autoencoder是非线性的,因为其神经网络模型中包含了tanh()函数。这部分我们将介绍linear autoencoder。nonlinear autoencoder通常比较复杂,多应用于深度学习中;而linear autoencoder通常比较简单,我们熟知的主成分分析(Principal Component Analysis,PCA),其实跟linear autoencoder有很大的关系。

对于一个linear autoencoder,它的第k层输出不包含tanh()函数,可表示为:

其中,和分别是编码权重和解码权重。而且,有三个限制条件,分别是:

  • 移除常数项,让输入输出维度一致

  • 编码权重与解码权重一致:

这里写图片描述

这样,编码权重用W表示,维度是d x ,解码权重用表示。x的维度为d x 1。则linear autoencoder hypothesis可经过下式计算得到:

其实,linear autoencoder hypothesis就应该近似于原始输入x的值,即h(x)=x。根据这个,我们可以写出它的error function:

这里写图片描述

我们的目的是计算出最小化时对应的W。根据线性代数知识,首先进行特征值分解:

其中是半正定矩阵。V矩阵满足。是对角矩阵,对角线上有不超过个非零值(即为1),即对角线零值个数大于等于。根据特征值分解的思想,我们可以把进行类似分解:

其中,I是单位矩阵,维度为dxd。这样,通过特征值分解我们就把对W的优化问题转换成对和V的优化问题。

这里写图片描述

首先,我们来优化值,表达式如下:

这里写图片描述

要求上式的最小化,可以转化为越小越好,其结果对角线上零值越多越好,即I与越接近越好。因为的秩是小于等于的,最多有个1。所以,的最优解是其对角线上有个1。

这里写图片描述

那么,的最优解已经得出,表达式变成:

这里写图片描述

这里的最小化问题似乎有点复杂,我们可以做一些转换,把它变成最大化问题求解,转换后的表达式为:

这里写图片描述

当时,中只有第一行有用,最大化问题转化为:

引入拉格朗日因子,表达式的微分与条件微分应该是平行的,且由联系起来,即:

根据线性代数的知识,很明显能够看出,v就是矩阵的特征向量,而就是相对应的特征值。我们要求的是最大值,所以最优解v就是矩阵最大特征值对应的特征向量。

当时,求解方法是类似的,最优解就是矩阵前大的特征值对应的个特征向量。

经过以上分析,我们得到了和V的最优解。这就是linear autoencoder的编解码推导过程。

这里写图片描述

值得一提的是,linear autoencoder与PCA推导过程十分相似。但有一点不同的是,一般情况下,PCA会对原始数据x进行处理,即减去其平均值。这是为了在推导过程中的便利。这两种算法的计算流程大致如下:

这里写图片描述

linear autoencoder与PCA也有差别,PCA是基于统计学分析得到的。一般我们认为,将高维数据投影(降维)到低维空间中,应该保证数据本身的方差越大越好,而噪声方差越小越好,而PCA正是基于此原理推导的。linear autoencoder与PCA都可以用来进行数据压缩,但是PCA应用更加广泛一些。

这里写图片描述

以上关于PCA的推导基本上是从几何的角度,而没有从代数角度进行详细的数学推导。网上关于PCA的资料很多,这里附上一篇个人觉得讲解得通俗易懂的PCA原理介绍:PCA的数学原理。有兴趣的朋友可以看一看。

总结

本节课主要介绍了深度学习(deep learning)的数学模型,也是上节课讲的神经网络的延伸。由于深度学习网络的复杂性,其建模优化是比较困难的。通常,我们可以从pre-training和regularization的角度来解决这些困难。首先,autoencoder可以得到比较不错的初始化权重,起到pre-training的效果。然后,denoising autoencoder通过引入人工噪声,训练得到初始化权重,从而使模型本身抗噪声能力更强,更具有健壮性,起到了regularization的效果。最后,我们介绍了linear autoencoder并从几何角度详述了其推导过程。linear autoencoder与PCA十分类似,都可以用来进行数据压缩和数据降维处理。

注明:

文章中所有的图片均来自台湾大学林轩田《机器学习技法》课程

14 -- Radial Basis Function Network

上节课我们主要介绍了Deep Learning的概念。Deep Learing其实是Neural Networ的延伸,神经元更多,网络结构更加复杂。深度学习网络在训练的过程中最核心的问题就是pre-training和regularization。pre-training中,我们使用denoising autoencoder来对初始化权重进行选择。denoising autoencoder与统计学中经常用来进行数据处理的PCA算法具有很大的关联性。这节课我们将介绍Radial Basis Function Network,把之前介绍的adial Basis Function和Neural Network联系起来。

RBF Network Hypothesis

之前我们介绍过,在SVM中引入Gaussian Kernel就能在无限多维的特征转换中得到一条“粗壮”的分界线(或者高维分界平面、分界超平面)。从结果来看,Gaussian SVM其实就是将一些Gaussian函数进行线性组合,而Gaussian函数的中心就位于Support Vectors上,最终得到预测模型。

这里写图片描述

Gaussian kernel的另一种叫法是Radial Basis Function(RBF) kernel,即径向基函数。这个名字从何而来?首先,radial表示Gaussian函数计算结果只跟新的点x与中心点的距离有关,与其它无关。basis function就是指Gaussian函数,最终的矩就是由这些basis function线性组合而成。

从另外一个角度来看Gaussian SVM。首先,构造一个函数:

上式中,指数项表示新的点x与之间的距离大小。距离越近,即权重越大,相当于对投的票数更多;而距离越远,权重越小,相当于对投的票数更少。其物理意义是新的点与的距离远近决定了与的接近程度。如果距离越近,则对的权重影响越大;如果距离越远,则对的权重影响越小。那么整体来说,就由所有的SV组成的线性组合而成,不同对应的系数是,最后由sign函数做最后的选择。这个过程很类型我们之前介绍的aggregation中将所有较好的hypothesis线性组合,不同的有不同的权重。我们把叫做radial hypotheses,Gaussian SVM就是将所有SV对应的radial hypotheses进行线性组合(linear aggregation)。

这里写图片描述

那么,Radial Basis Function(RBF) Network其实就是上面Gaussian SVM概念的延伸,目的就是找到所有radial hypotheses的linear aggregation,得到更好的网络模型。

之所以叫作RBF Network是因为它的模型结构类似于我们之前介绍的Neural Network。

这里写图片描述

Neural Network与RBF Network在输出层基本是类似的,都是上一层hypotheses的线性组合(linear aggregation)。但是对于隐藏层的各个神经元来说,Neural Network是使用内积(inner-product)加上tanh()函数的方法,而RBF Network是使用距离(distance)加上Gaussian函数的方法。总的来说,RBF Network是Neural Network的一个分支。

这里写图片描述

至此,RBF Network Hypothesis以及网络结构可以写成如下形式:

这里写图片描述

上式中,表示每个中心点的位置,隐藏层每个神经元对应一个中心点;表示每个RBF的权重,即投票所占比重。

对应到Gaussian SVM上,上式中的RBF就是Gaussian函数。由于是分类问题,上式中的Output就是sign函数。其中,RBF的个数M就等于支持向量的个数SV,就代表每个SV的坐标,而就是在Dual SVM中推导得到的值。那我们学习的目标就是根据已知的RBF和Output,来决定最好的中心点位置和权重系数。

这里写图片描述

在之前介绍SVM的时候,我们就讲过Mercer定理:一个矩阵是Kernel的充分必要条件是它是对称的且是半正定的,条件比较苛刻。除了Gaussian kernel还有Polynomial kernel等等。Kernel实际上描述了两个向量之间的相似性,通过转换到z空间计算内积的方式,来表征二者之间的相似性。而RBF实际上是直接使用x空间的距离来描述了一种相似性,距离越近,相似性越高。因此,kernel和RBF可以看成是两种衡量相似性(similarity)的方式。本文介绍的Gaussian RBF即为二者的交集。

这里写图片描述

除了kernel和RBF之外,还有其它衡量相似性的函数。例如神经网络中的神经元就是衡量输入和权重之间的相似性。

经过以上分析,我们知道了RBF Network中distance similarity是一个很好的定义特征转换的方法。除此之外,我们还可以使用其它相似性函数来表征特征转换,从而得到更好的机器学习模型。

RBF Network Learning

我们已经介绍了RBF Network的Hypothesis可表示为:

这里写图片描述

其中表示中心点的位置。的个数M是人为决定的,如果将每个样本点都作为一个中心点,即M=N,则我们把这种结构称为full RBF Network。也就是说,对于full RBF Network,每个样本点都对最终的预测都有影响(uniform influence),影响的程度由距离函数和权重决定。如果每个样本点的影响力都是相同的,设为1,,那么相当于只根据距离的远近进行投票。最终将x与所有样本点的RBF距离线性组合,经过sign函数后,得到最终的预测分类结果。这实际上就是aggregation的过程,考虑并计入所有样本点的影响力,最后将x与所有样本点的distance similarity进行线性组合。

这里写图片描述

full RBF Network的矩可以表示为:

这里写图片描述

我们来看上式中的Gaussian函数项,当x与样本点越接近的时候,其高斯函数值越大。由于Gaussian函数曲线性质,越靠近中心点,值越大;偏离中心点,其值会下降得很快。也就是说,在所有N个中心样本点中,往往只有距离x最近的那个样本点起到关键作用,而其它距离x较远的样本点其值很小,基本可以忽略。因此,为了简化运算,我们可以找到距离x最近的中心样本点,只用这一个点来代替所有N个点,最后得到的矩也只由该最近的中心点决定。这种模型叫做nearest neighbor model,只考虑距离x最近的那一个“邻居”。

当然可以对nearest neighbor model进行扩展,如果不是只选择一个“邻居”,而是选择距离x最近的k个“邻居”,进行uniformly aggregation,得到最终的矩。这种方法通常叫做k近邻算法(k nearest neighbor)。

这里写图片描述

k nearest neighbor通常比nearest neighbor model效果更好,计算量上也比full RBF Network要简单一些。值得一提的是,k nearest neighbor与full RBF Network都是比较“偷懒”的方法。因为它们在训练模型的时候比较简单,没有太多的运算,但是在测试的时候却要花费更多的力气,找出最相近的中心点,计算相对复杂一些。

接下来,我们来看一下Full RBF Network有什么样的优点和好处。考虑一个squared error regression问题,且每个RBF的权重为而不是前面简化的。目的是计算最优化模型对应的值。该hypothesis可表示为:

这里写图片描述

很明显,这是一个简单的线性回归问题,每个RBF都可以看成是特征转换。特征转换后的向量可表示为:

那么,根据之前线性回归介绍过的最优化解公式,就能快速地得到的最优解为:

上述解的条件是矩阵是可逆的。

矩阵Z的大小是NxN,是一个方阵。而且,由于Z中每个向量表示该点与其它所有点的RBF distance,所以从形式上来说,Z也是对称矩阵。如果所有的样本点都不一样,则Z一定是可逆的。

这里写图片描述

根据Z矩阵的这些性质,我们可以对的解进行化简,得到:

将的解代入矩的计算中,以为例,得到:

结果非常有趣,模型的输出与原样本完全相同。同样,对任意的,都能得到。因此,。看起来,这个模型非常完美了,没有error。但是,我们之前就说过,机器学习中,并非好事,很可能造成模型复杂度增加及过拟合。

这里写图片描述

当然,这种方法在某些领域还是很有用的。比如在函数拟合(function approximation)中,目标就是让,使得原所有样本都尽可能地落在拟合的函数曲线上。

为了避免发生过拟合,我们可以引入正则项,得到的最优解为:

这里写图片描述

我们再来看一下Z矩阵,Z矩阵是由一系列Gaussian函数组成,每个Gaussian函数计算的是两个样本之间的distance similarity。这里的Z与之前我们介绍的Gaussian SVM中的kernel K是一致的。当时我们得到kernel ridgeregression中线性系数的解为:

比较一下kernel ridgeregression与regularized full RBF Network的解,形式上相似但不完全相同。这是因为regularization不一样,在kernel ridgeregression中,是对无限多维的特征转换做regularization,而在regularized full RBF Network中,是对有限维(N维度)的特征转换做regularization。因此,两者的公式解有细微差别。

这里写图片描述

除此之外,还有另外一种regularization的方法,就是不把所有N个样本点都拿来作中心点,而是只选择其中的M个样本点作为中心点。类似于SVM中的SV一样,只选择具有代表性的M个中心点。这样减少中心点数量的同时也就减少了权重的数量,能够起到regularization的效果,避免发生过拟合。

这里写图片描述

下一部分,我们将讨论如何选取M个中心点作为好的代表。

k-Means Algorithm

之所以要选择代表,是因为如果某些样本点很接近,那么就可以用一个中心点来代表它们。这就是聚类(cluster)的思想,从所有N个样本点中选择少数几个代表作为中心点。

这里写图片描述

聚类(clustering)问题是一种典型的非监督式学习(unsupervised learning)。它的优化问题有两个变量需要确定:一个是分类的分群值,每一类可表示为;另外一个是每一类对应的中心点。那么对于该聚类问题的优化,其error function可使用squared error measure来衡量。

这里写图片描述

那么,我们的目标就是通过选择最合适的和,使得最小化。对应的公式可表示为:

这里写图片描述

从这个最小化公式,我们能够发现这是一个组合最佳化的问题,既要优化分群值,又要求解每一类的中心点。所以,这个最小化问题是比较复杂、难优化的。通常的办法是对S和分别进行最优化求解。

首先,如果是固定的,目标就是只要对所有的进行分群归类。这个求解过程很简单,因为每个样本点只能属于一个群S,不能同时属于两个或多个群。所以,只要根据距离公式,计算选择离最近的中心点即可。

这里写图片描述

然后,如果是固定的,目标就是只要找出每个类的中心点。显然,根据上式中的error function,所有的分群是已知的,那么该最小化问题就是一个典型的数值最优化问题。对于每个类群,利用梯度下降算法,即可得到的解。

这里写图片描述

如上图所示,中心点就等于所有属于类群的平均位置处。

经过以上的推导,我们得到了一个非常有名的一种unsupervised learning算法,叫做k-Means Algorithm。这里的k就是代表上面的M,表示类群的个数。

k-Means Algorithm的流程是这样的:首先,随机选择k个中心点;然后,再由确定的中心点得到不同的类群;接着,再由确定的类群计算出新的不同的k个中心点;继续循环迭代计算,交互地对和S值进行最优化计算,不断更新和S值,直到程序收敛,实现最小化。具体算法流程图如下所示:

这里写图片描述

有一个问题是,k-Means Algorithm的循环迭代一定会停止吗?或者说一定能得到最优解吗?答案是肯定的。因为每次迭代更新,和S值都会比上一次的值更接近最优解,也就是说是不断减小的。而的下界是0,所以,最终会等于0,和S最终能得到最优解。

k-Means Algorithm已经介绍完毕。接下来,我们把k-Means Algorithm应用到RBF Network中去。首先,使用k-Means,得到原始样本的k个中心点。原始样本到k个中心点组成了RBF特征转换。然后,根据上面介绍过的线性模型,由最优化公式解计算得到权重值。最后,将所有的用线性组合,即得到矩的表达式。具体的算法流程如下所示:

这里写图片描述

值得一提的是,这里我们使用了unsupervised learning(k-Means)与我们上节课介绍的autoencoder类似,同样都是特征转换(feature transform)的方法。

在最优化求解过程中,参数有k-Means类群个数M、Gaussian函数参数等。我们可以采用validation的方法来选取最佳的参数值。

这里写图片描述

k-means and RBF Network in Action

下面这部分,我们将举几个例子,看一下k-Means Algorithm是如何处理分类问题的。

第一个例子,平面上有4个类群,k=4。首先,我们随机选择4个中心点,如下图中四种颜色的方块所示:

这里写图片描述

第一次迭代,由初始中心点,得到4个类群点的分布:

这里写图片描述

4个类群点确定后,再更新4个中心点的位置:

这里写图片描述

第二次迭代,由上面得到的4个中心点,再计算4个类群点的分布:

这里写图片描述

4个类群点确定后,再更新4个中心点的位置:

这里写图片描述

第三次迭代,由上面得到的4个中心点,再计算4个类群点的分布:

这里写图片描述

4个类群点确定后,再更新4个中心点的位置:

这里写图片描述

第四次迭代,由上面得到的4个中心点,再计算4个类群点的分布:

这里写图片描述

4个类群点确定后,再更新4个中心点的位置:

这里写图片描述

第五次迭代,由上面得到的4个中心点,再计算4个类群点的分布:

这里写图片描述

4个类群点确定后,再更新4个中心点的位置:

这里写图片描述

第六次迭代,由上面得到的4个中心点,再计算4个类群点的分布:

这里写图片描述

4个类群点确定后,再更新4个中心点的位置:

这里写图片描述

从上图我们可以看到,经过六次迭代计算后,聚类的效果已经相当不错了。从另外一个角度来说,k值的选择很重要,下面我们来看看不同的k值对应什么样的分类效果。

这里写图片描述

如上图所示,初始时,我们分别设定k为2,4,7,随机选择中心点位置。在经过多次迭代后,得到的聚类结果如下:

这里写图片描述

通过上面这个例子可以得出,不同的k值会得到不同的聚类效果。还有一点值得注意的是,初始中心点位置也可能会影响最终的聚类。例如上图中k=7的例子,初始值选取的右边三个中心点比较靠近,最后得到的右边三个聚类中心点位置也跟初始位置比较相近。所以,k值大小和初始中心点位置都会影响聚类效果。

接下来,我们把k-Means应用到RBF Network中,同样分别设定k为2,4,7,不同模型得到的分类效果如下:

这里写图片描述

很明显,k=2时,分类效果不是太好;k=4时,分类效果好一些;而k=7时,分类效果更好,能够更细致地将样本准确分类。这说明了k-Means中k值设置得是否合理,对RBF Network的分类效果起到重要的作用。

再来看一个例子,如果使用full RBF Network进行分类,即k=N,如下图左边所示,设置正则化因子。下图右边表示只考虑full RBF Network中的nearest neighbor。下图中间表示的是k=4的RBF Network的分类效果。

这里写图片描述

从上图的比较中,我们可以发现full RBF Network得到的分类线比较弯曲复杂。由于full RBF Network的计算量比较大,所以一般情况下,实际应用得不太多。

总结

本节课主要介绍了Radial Basis Function Network。RBF Network Hypothesis就是计算样本之间distance similarity的Gaussian函数,这类原型替代了神经网络中的神经元。RBF Network的训练学习过程,其实就是对所有的原型Hypotheses进行linear aggregation。然后,我们介绍了一个确定k个中心点的unsupervised learning算法,叫做k-Means Algorithm。这是一种典型的聚类算法,实现对原始样本数据的聚类分群。接着,将k-Means Algorithm应用到RBF Network中,选择合适数量的中心点,得到更好的分类模型。最后,我们列举了几个在实际中使用k-Means和RBF Network的例子,结果显示不同的类群k值对分类的效果影响很大。

注明:

文章中所有的图片均来自台湾大学林轩田《机器学习技法》课程

15 -- Matrix Factorization

上节课我们主要介绍了Radial Basis Function Network。它的原理就是基于距离相似性(distance-based similarities)的线性组合(linear aggregation)。我们使用k-Means clustering算法找出具有代表性的k个中心点,然后再计算与这些中心点的distance similarity,最后应用到RBF Network中去。

LinearNetwork Hypothesis

回顾一下,我们在机器学习基石课程的第一节课就提到过,机器学习的目的就是让机器从数据data中学习到某种能力skill。我们之前举过一个典型的推荐系统的例子。就是说,假如我们手上有许多不同用户对不同电影的排名rank,通过机器学习,训练一个模型,能够对用户没有看过的某部电影进行排名预测。

这里写图片描述

一个典型的电影推荐系统的例子是2006年Netflix举办的一次比赛。数据包含了480189个用户和17770部电影,总共1亿多个排名信息。该推荐系统模型中,我们用表示第n个用户,这是一个抽象的特征,常常使用数字编号来代替具体哪个用户。输出方面,我们使用表示第n个用户对第m部电影的排名数值。

这里写图片描述

下面我们来进一步看看这些抽象的特征,是用户的ID,通常用数字表示。例如1126,5566,6211等。这些编号并没有数值大小上的意义,只是一种ID标识而已。这类特征被称为类别特征(categorical features)。常见的categorical features包括:IDs,blood type,programming languages等等。而许多机器学习模型中使用的大部分都是数值特征(numerical features)。例如linear models,NNet模型等。但决策树(decision tree)是个例外,它可以使用categorical features。所以说,如果要建立一个类似推荐系统的机器学习模型,就要把用户ID这种categorical features转换为numerical features。这种特征转换其实就是训练模型之前一个编码(encoding)的过程。

这里写图片描述

一种最简单的encoding方式就是binary vector encoding。也就是说,如果输入样本有N个,就构造一个维度为N的向量。第n个样本对应向量上第n个元素为1,其它元素都是0。下图就是一个binary vector encoding的例子。

这里写图片描述

经过encoding之后,输入是N维的binary vector,表示第n个用户。输出是M维的向量,表示该用户对M部电影的排名数值大小。注意,用户不一定对所有M部电影都作过评价,未评价的恰恰是我们要预测的(下图中问号?表示未评价的电影)。

这里写图片描述

总共有N个用户,M部电影。对于这样的数据,我们需要掌握每个用户对不同电影的喜爱程度及排名。这其实就是一个特征提取(feature extraction)的过程,提取出每个用户喜爱的电影风格及每部电影属于哪种风格,从而建立这样的推荐系统模型。可供选择使用的方法和模型很多,这里,我们使用的是NNet模型。NNet模型中的网络结构是型,其中N是输入层样本个数,是隐藏层神经元个数,M是输出层电影个数。该NNet为了简化计算,忽略了常数项。当然可以选择加上常数项,得到较复杂一些的模型。顺便提一下,这个结构跟我们之前介绍的autoencoder非常类似,都是只有一个隐藏层。

这里写图片描述

说到这里,有一个问题,就是上图NNet中隐藏层的tanh函数是否一定需要呢?答案是不需要。因为输入向量x是经过encoding得到的,其中大部分元素为0,只有一个元素为1。那么,只有一个元素与相应权重的乘积进入到隐藏层。由于,则相当于只有一个权重值进入到tanh函数进行运算。从效果上来说,tanh(x)与x是无差别的,只是单纯经过一个函数的计算,并不影响最终的结果,修改权重值即可得到同样的效果。因此,我们把隐藏层的tanh函数替换成一个线性函数y=x,得到下图所示的结构。

这里写图片描述

由于中间隐藏层的转换函数是线性的,我们把这种结构称为Linear Network(与linear autoencoder比较相似)。看一下上图这个网络结构,输入层到隐藏层的权重维度是Nx,用向量表示。隐藏层到输出层的权重维度是xM,用矩阵W表示。把权重由矩阵表示之后,Linear Network的hypothesis 可表示为:

如果是单个用户,由于X向量中只有元素为1,其它均为0,则对应矩阵V只有第n列向量是有效的,其输出hypothesis为:

这里写图片描述

Basic Matrix Factorization

刚刚我们已经介绍了linear network的模型和hypothesis。其中Vx可以看作是对用户x的一种特征转换。对于单部电影,其预测的排名可表示为:

这里写图片描述

推导完linear network模型之后,对于每组样本数据(即第n个用户第m部电影),我们希望预测的排名与实际样本排名尽可能接近。所有样本综合起来,我们使用squared error measure的方式来定义,的表达式如下所示:

这里写图片描述

上式中,灰色的部分是常数,并不影响最小化求解,所以可以忽略。接下来,我们就要求出最小化时对应的V和W解。

我们的目标是让真实排名与预测排名尽可能一致,即。把这种近似关系写成矩阵的形式:。矩阵R表示所有不同用户不同电影的排名情况,维度是NxM。这种用矩阵的方式进行处理的方法叫做Matrix Factorization。

这里写图片描述

上面的表格说明了我们希望将实际排名情况R分解成两个矩阵(V和W)的乘积形式。V的维度是xN的,N是用户个数,可以是影片类型,例如(喜剧片,爱情片,悬疑片,动作片,…)。根据用户喜欢的类型不同,赋予不同的权重。W的维度是xM,M是电影数目,同样是影片类型,该部电影属于哪一类型就在那个类型上占比较大的权重。当然,维特征不一定就是影片类型,还可以是其它特征,例如明显阵容、年代等等。

这里写图片描述

那么,Matrix Factorization的目标就是最小化函数。表达式如下所示:

这里写图片描述

中包含了两组待优化的参数,分别是和。我们可以借鉴上节课中k-Means的做法,将其中第一个参数固定,优化第二个参数,然后再固定第二个参数,优化第一个参数,一步一步进行优化。

当固定的时候,只需要对每部电影做linear regression即可,优化得到每部电影的维特征值。

当固定的时候,因为V和W结构上是对称的,同样只需要对每个用户做linear regression即可,优化得到每个用户对维电影特征的喜爱程度。

这里写图片描述

这种算法叫做alternating least squares algorithm。它的处理思想与k-Means算法相同,其算法流程图如下所示:

这里写图片描述

alternating least squares algorithm有两点需要注意。第一是initialize问题,通常会随机选取和。第二是converge问题,由于每次迭代更新都能减小,会趋向于0,则保证了算法的收敛性。

这里写图片描述

在上面的分析中,我们提过Matrix Factorization与Linear Autoencoder的相似性,下图列出了二者之间的比较。

这里写图片描述

Matrix Factorization与Linear Autoencoder有很强的相似性,都可以从原始资料汇总提取有用的特征。其实,linear autoencoder可以看成是matrix factorization的一种特殊形式。

Stochastic Gradient Descent

我们刚刚介绍了alternating least squares algorithm来解决Matrix Factorization的问题。这部分我们将讨论使用Stochastic Gradient Descent方法来进行求解。之前的alternating least squares algorithm中,我们考虑了所有用户、所有电影。现在使用SGD,随机选取一笔资料,然后只在与这笔资料有关的error function上使用梯度下降算法。使用SGD的好处是每次迭代只要处理一笔资料,效率很高;而且程序简单,容易实现;最后,很容易扩展到其它的error function来实现。

这里写图片描述

对于每笔资料,它的error function可表示为:

这里写图片描述

上式中的err是squared error function,仅与第n个用户,第m部电影有关。其对和的偏微分结果为:

这里写图片描述

很明显,和都由两项乘积构成。(忽略常数因子2)。第一项都是,即余数residual。我们在之前介绍的GBDT算法中也介绍过余数这个概念。的第二项是,而的第二项是。二者在结构上是对称的。

计算完任意一个样本点的SGD后,就可以构建Matrix Factorization的算法流程。SGD for Matrix Factorization的算法流程如下所示:

这里写图片描述

在实际应用中,由于SGD算法简单高效,Matrix Factorization大多采用这种算法。

介绍完SGD for Matrix Factorization之后,我们来看一个实际的应用例子。问题大致是这样的:根据现在有的样本资料,预测未来的趋势和结果。显然,这是一个与时间先后有关的预测模型。比如说一个用户三年前喜欢的电影可能现在就不喜欢了。所以在使用SGD选取样本点的时候有一个技巧,就是最后T次迭代,尽量选择时间上靠后的样本放入到SGD算法中。这样最后的模型受这些时间上靠后的样本点影响比较大,也相对来说比较准确,对未来的预测会比较准。

这里写图片描述

所以,在实际应用中,我们除了使用常规的机器学习算法外,还需要根据样本数据和问题的实际情况来修改我们的算法,让模型更加切合实际,更加准确。我们要学会灵活运用各种机器学习算法,而不能只是照搬。

Summary of Extraction Models

从第12节课开始到现在,我们总共用了四节课的时间来介绍Extraction Models。虽然我们没有给出Extraction Models明确的定义,但是它主要的功能就是特征提取和特征转换,将原始数据更好地用隐藏层的一些节点表征出来,最后使用线性模型将所有节点aggregation。这种方法使我们能够更清晰地抓住数据的本质,从而建立最佳的机器学习模型。

下图所示的就是我们介绍过的所有Extraction Models,除了这四节课讲的内容之外,还包括之前介绍的Adaptive/Gradient Boosting模型。因为之前笔记中都详细介绍过,这里就不再一一总结了。

这里写图片描述

除了各种Extraction Models之外,我们这四节课还介绍了不同的Extraction Techniques。下图所示的是对应于不同的Extraction Models的Extraction Techniques。

这里写图片描述

最后,总结一下这些Extraction Models有什么样的优点和缺点。从优点上来说:

  • easy:机器自己完成特征提取,减少人类工作量

  • powerful:能够处理非常复杂的问题和特征提取

另一方面,从缺点上来说:

  • hard:通常遇到non-convex的优化问题,求解较困难,容易得到局部最优解而非全局最优解

  • overfitting:模型复杂,容易造成过拟合,需要进行正则化处理

所以说,Extraction Models是一个非常强大的机器学习工具,但是使用的时候也要小心处理各种可能存在的问题。

这里写图片描述

总结

本节课主要介绍了Matrix Factorization。从电影推荐系统模型出发,首先,我们介绍了Linear Network。它从用户ID编码后的向量中提取出有用的特征,这是典型的feature extraction。然后,我们介绍了基本的Matrix Factorization算法,即alternating least squares,不断地在用户和电影之间交互地做linear regression进行优化。为了简化计算,提高运算速度,也可以使用SGD来实现。事实证明,SGD更加高效和简单。同时,我们可以根据具体的问题和需求,对固有算法进行一些简单的调整,来获得更好的效果。最后,我们对已经介绍的所有Extraction Models做个简单的总结。Extraction Models在实际应用中是个非常强大的工具,但是也要避免出现过拟合等问题。

注明:

文章中所有的图片均来自台湾大学林轩田《机器学习技法》课程

16(完结) -- Finale

上节课我们主要介绍了Matrix Factorization。通过电影推荐系统的例子,介绍Matrix Factorization其实是一个提取用户特征,关于电影的线性模型。反过来也可以看出是关于用户的线性模型。然后,我们使用SGD对模型进行最佳化。本节课我们将对机器学习技法课程介绍过的所有内容做个总结,分成三个部分:Feature Exploitation Techniques,Error Optimization Techniques和Overfitting Elimination Techniques。

Feature Exploitation Techniques

我们在本系列课程中介绍的第一个特征提取的方法就是kernel。Kernel运算将特征转换和计算内积这两个步骤合二为一,提高了计算效率。我们介绍过的kernel有:Polynormial Kernel、Gaussian Kernel、Stump Kernel等。另外,我们可以将不同的kernels相加(transform union)或者相乘(transform combination),得到不同的kernels的结合形式,让模型更加复杂。值得一提的是,要成为kernel,必须满足Mercer Condition。不同的kernel可以搭配不同的kernel模型,比如:SVM、SVR和probabilistic SVM等,还包括一些不太常用的模型:kernel ridge regression、kernel logistic regression。使用这些kernel模型就可以将线性模型扩展到非线性模型,kernel就是实现一种特征转换,从而能够处理非常复杂的非线性模型。顺便提一下,因为PCA、k-Means等算法都包含了内积运算,所以它们都对应有相应的kernel版本。

这里写图片描述

Kernel是我们利用特征转换的第一种方法,那利用特征转换的第二种方法就是Aggregation。我们之前介绍的所有的hypothesis都可以看成是一种特征转换,然后再由这些g组合成G。我们介绍过的分类模型(hypothesis)包括:Decision Stump、Decision Tree和Gaussian RBF等。如果所有的g是已知的,就可以进行blending,例如Uniform、Non-Uniform和Conditional等方式进行aggregation。如果所有的g是未知的,可以使用例如Bagging、AdaBoost和Decision Tree的方法来建立模型。除此之外,还有probabilistic SVM模型。值得一提的是,机器学习中很多模型都是类似的,我们在设计一个机器学习模型时,应该融会贯通。

这里写图片描述

除此之外,我们还介绍了利用提取的方式,找出潜藏的特征(Hidden Features)。一般通过unsupervised learning的方法,从原始数据中提取出隐藏特征,使用权重表征。相应的模型包括:Neural Network、RBF Network、Matrix Factorization等。这些模型使用的unsupervised learning方法包括:AdaBoost、k-Means和Autoencoder、PCA等。

这里写图片描述

另外,还有一种非常有用的特征转换方法是维度压缩,即将高维度的数据降低(投影)到低维度的数据。我们介绍过的维度压缩模型包括:Decision Stump、Random Forest Tree Branching、Autoencoder、PCA和Matrix Factorization等。这些从高纬度到低纬度的特征转换在实际应用中作用很大。

这里写图片描述

Error Optimization Techniques

接下来我们将总结一下本系列课程中介绍过哪些优化技巧。首先,第一个数值优化技巧就是梯度下降(Gradient Descent),即让变量沿着其梯度反方向变化,不断接近最优解。例如我们介绍过的SGD、Steepest Descent和Functional GD都是利用了梯度下降的技巧。

这里写图片描述

而对于一些更复杂的最佳化问题,无法直接利用梯度下降方法来做,往往需要一些数学上的推导来得到最优解。最典型的例子是Dual SVM,还包括Kernel LogReg、Kernel RidgeReg和PCA等等。这些模型本身包含了很多数学上的一些知识,例如线性代数等等。除此之外,还有一些boosting和kernel模型,虽然本课程中没有提到,但是都会用到类似的数学推导和转换技巧。

这里写图片描述

如果原始问题比较复杂,求解比较困难,我们可以将原始问题拆分为子问题以简化计算。也就是将问题划分为多个步骤进行求解,即Multi-Stage。例如probabilistic SVM、linear blending、RBF Network等。还可以使用交叉迭代优化的方法,即Alternating Optim。例如k-Means、alternating LeastSqr等。除此之外,还可以采样分而治之的方法,即Divide & Conquer。例如decision tree。

这里写图片描述

Overfitting Elimination Techniques

Feature Exploitation Techniques和Error Optimization Techniques都是为了优化复杂模型,减小。但是太小有很可能会造成过拟合overfitting。因此,机器学习中,Overfitting Elimination尤为重要。

首先,可以使用Regularization来避免过拟合现象发生。我们介绍过的方法包括:large-margin、L2、voting/averaging等等。

这里写图片描述

除了Regularization之外,还可以使用Validation来消除Overfitting。我们介绍过的Validation包括:SV、OOB和Internal Validation等。

这里写图片描述

Machine Learning in Action

本小节介绍了林轩田老师所在的台大团队在近几年的KDDCup国际竞赛上的表现和使用的各种机器算法。融合了我们在本系列课程中所介绍的很多机器学习技法和模型。这里不再一一赘述,将相应的图片贴出来,读者自己看看吧。

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

ICDM在2006年的时候发布了排名前十的数据挖掘算法,如下图所示。其中大部分的算法我们在本系列的课程中都有过介绍。值得一提的是Naive Bayes算法本课程中没有涉及,贝叶斯模型在实际中应用还是挺广泛的,后续可能还需要深入学习一下。

这里写图片描述

最后,我们将所有介绍过的机器学习算法和模型列举出来:

这里写图片描述

总结

本节课主要从三个方面来对机器学习技法课程做个总结:Feature Exploitation Techniques,Error Optimization Techniques和Overfitting Elimination Techniques。最后介绍了林轩田老师带领的台大团队是如何在历届KDDCup中将很多机器学习算法模型融合起来,并获得了良好的成绩。

这里写图片描述

注明:

文章中所有的图片均来自台湾大学林轩田《机器学习技法》课程、

写在最后的话

历时近4个月,终于将台湾大学林轩田老师的《机器学习基石》和《机器学习技法》这两门课程学完了。突然的想法,开始写博客记录下学习历程,通过笔记的形式加深巩固了自己的理解。如果能对读者有些许帮助的话,那便是一大快事。笔者资历尚浅,博客中难免有疏漏和错误,欢迎各位批评指正。另外,鄙人不才,建立了一个QQ群,以便讨论与该课程相关或者其它的机器学习和深度学习问题。有兴趣的朋友可以加一下,QQ群号码是223490966(红色石头机器学习小站)。后续,笔者根据学习情况,可能还会推出一些课程笔记的博客。

积跬步以致千里,积小流以成江海!

最后,特别感谢林轩田老师!您的教学风格我很喜欢,深入浅出、寓教于乐。非常有幸能够学到您的课程!再次感谢!

3 -- Types of Learning

上节课我们主要介绍了解决线性分类问题的一个简单的方法:PLA。PLA能够在平面中选择一条直线将样本数据完全正确分类。而对于线性不可分的情况,可以使用Pocket Algorithm来处理。本节课将主要介绍一下机器学习有哪些种类,并进行归纳。

一、Learning with Different Output Space Y

我们在上节课引入的银行根据用户个人情况判断是否给他发信用卡的例子,这是一个典型的二元分类(binary classification)问题。也就是说输出只有两个,一般y={-1, +1},-1代表不发信用卡(负类),+1代表发信用卡(正类)。

二元分类的问题很常见,包括信用卡发放、垃圾邮件判别、患者疾病诊断、答案正确性估计等等。二元分类是机器学习领域非常核心和基本的问题。二元分类有线性模型也有非线性模型,根据实际问题情况,选择不同的模型。

这里写图片描述

除了二元分类,也有多元分类(Multiclass Classification)问题。顾名思义,多元分类的输出多于两个,y={1, 2, … , K}, K>2. 一般多元分类的应用有数字识别、图片内容识别等等。

这里写图片描述

二元分类和多元分类都属于分类问题,它们的输出都是离散值。二对于另外一种情况,比如训练模型,预测房屋价格、股票收益多少等,这类问题的输出y=R,即范围在整个实数空间,是连续的。这类问题,我们把它叫做回归(Regression)。最简单的线性回归是一种典型的回归模型。

除了分类和回归问题,在自然语言处理等领域中,还会用到一种机器学习问题:结构化学习(Structured Learning)。结构化学习的输出空间包含了某种结构在里面,它的一些解法通常是从多分类问题延伸而来的,比较复杂。本系列课程不会详细介绍Structured Learning,有兴趣的读者可以自行对它进行更深入的研究。

简单总结一下,机器学习按照输出空间划分的话,包括二元分类、多元分类、回归、结构化学习等不同的类型。其中二元分类和回归是最基础、最核心的两个类型,也是我们课程主要介绍的部分。

这里写图片描述

二、Learning with Different Data Label yn

如果我们拿到的训练样本D既有输入特征x,也有输出yn,那么我们把这种类型的学习称为监督式学习(Supervised Learning)。监督式学习可以是二元分类、多元分类或者是回归,最重要的是知道输出标签yn。与监督式学习相对立的另一种类型是非监督式学习(Unsupervised learning)。非监督式学习是没有输出标签yn的,典型的非监督式学习包括:聚类(clustering)问题,比如对网页上新闻的自动分类;密度估计,比如交通路况分析;异常检测,比如用户网络流量监测。通常情况下,非监督式学习更复杂一些,而且非监督的问题很多都可以使用监督式学习的一些算法思想来实现。

这里写图片描述

介于监督式和非监督式学习之间的叫做半监督式学习(Semi-supervised Learning)。顾名思义,半监督式学习就是说一部分数据有输出标签yn,而另一部分数据没有输出标签yn。在实际应用中,半监督式学习有时候是必须的,比如医药公司对某些药物进行检测,考虑到成本和实验人群限制等问题,只有一部分数据有输出标签yn。

监督式、非监督式、半监督式学习是机器学习领域三个主要类型。除此之外,还有一种非常重要的类型:增强学习(Reinforcement Learning)。增强学习中,我们给模型或系统一些输入,但是给不了我们希望的真实的输出y,根据模型的输出反馈,如果反馈结果良好,更接近真实输出,就给其正向激励,如果反馈结果不好,偏离真实输出,就给其反向激励。不断通过“反馈-修正”这种形式,一步一步让模型学习的更好,这就是增强学习的核心所在。增强学习可以类比成训练宠物的过程,比如我们要训练狗狗坐下,但是狗狗无法直接听懂我们的指令“sit down”。在训练过程中,我们给狗狗示意,如果它表现得好,我们就给他奖励,如果它做跟sit down完全无关的动作,我们就给它小小的惩罚。这样不断修正狗狗的动作,最终能让它按照我们的指令来行动。实际生活中,增强学习的例子也很多,比如根据用户点击、选择而不断改进的广告系统

简单总结一下,机器学习按照数据输出标签yn划分的话,包括监督式学习、非监督式学习、半监督式学习和增强学习等。其中,监督式学习应用最为广泛。

这里写图片描述

三、Learning with Different Protocol f(xn,yn)

按照不同的协议,机器学习可以分为三种类型:

  • Batch Learning

  • Online

  • Active Learning

batch learning是一种常见的类型。batch learning获得的训练数据D是一批的,即一次性拿到整个D,对其进行学习建模,得到我们最终的机器学习模型。batch learning在实际应用中最为广泛。

online是一种在线学习模型,数据是实时更新的,根据数据一个个进来,同步更新我们的算法。比如在线邮件过滤系统,根据一封一封邮件的内容,根据当前算法判断是否为垃圾邮件,再根据用户反馈,及时更新当前算法。这是一个动态的过程。之前我们介绍的PLA和增强学习都可以使用online模型。

active learning是近些年来新出现的一种机器学习类型,即让机器具备主动问问题的能力,例如手写数字识别,机器自己生成一个数字或者对它不确定的手写字主动提问。active learning优势之一是在获取样本label比较困难的时候,可以节约时间和成本,只对一些重要的label提出需求。

简单总结一下,按照不同的协议,机器学习可以分为batch, online, active。这三种学习类型分别可以类比为:填鸭式,老师教学以及主动问问题。

这里写图片描述

四、Learning with Different Input Space X

上面几部分介绍的机器学习分类都是根据输出来分类的,比如根据输出空间进行分类,根据输出y的标记进行分类,根据取得数据和标记的方法进行分类。这部分,我们将谈谈输入X有哪些类型。

输入X的第一种类型就是concrete features。比如说硬币分类问题中硬币的尺寸、重量等;比如疾病诊断中的病人信息等具体特征。concrete features对机器学习来说最容易理解和使用。

第二种类型是raw features。比如说手写数字识别中每个数字所在图片的mxn维像素值;比如语音信号的频谱等。raw features一般比较抽象,经常需要人或者机器来转换为其对应的concrete features,这个转换的过程就是Feature Transform。

第三种类型是abstract features。比如某购物网站做购买预测时,提供给参赛者的是抽象加密过的资料编号或者ID,这些特征X完全是抽象的,没有实际的物理含义。所以对于机器学习来说是比较困难的,需要对特征进行更多的转换和提取。

简单总结一下,根据输入X类型不同,可以分为concetet, raw, abstract。将一些抽象的特征转换为具体的特征,是机器学习过程中非常重要的一个环节。在《机器学习技法》课程中,我们再详细介绍。

这里写图片描述

五、总结:

本节课主要介绍了机器学习的类型,包括Out Space、Data Label、Protocol、Input Space四种类型。

这里写图片描述

注明:

文章中所有的图片均来自台湾大学林轩田《机器学习基石》课程。

4 -- Feasibility of Learning

上节课,我们主要介绍了根据不同的设定,机器学习可以分为不同的类型。其中,监督式学习中的二元分类和回归分析是最常见的也是最重要的机器学习问题。本节课,我们将介绍机器学习的可行性,讨论问题是否可以使用机器学习来解决。

一、Learning is Impossible

首先,考虑这样一个例子,如下图所示,有3个label为-1的九宫格和3个label为+1的九宫格。根据这6个样本,提取相应label下的特征,预测右边九宫格是属于-1还是+1?结果是,如果依据对称性,我们会把它归为+1;如果依据九宫格左上角是否是黑色,我们会把它归为-1。除此之外,还有根据其它不同特征进行分类,得到不同结果的情况。而且,这些分类结果貌似都是正确合理的,因为对于6个训练样本来说,我们选择的模型都有很好的分类效果。

这里写图片描述

再来看一个比较数学化的二分类例子,输入特征x是二进制的、三维的,对应有8种输入,其中训练样本D有5个。那么,根据训练样本对应的输出y,假设有8个hypothesis,这8个hypothesis在D上,对5个训练样本的分类效果效果都完全正确。但是在另外3个测试数据上,不同的hypothesis表现有好有坏。在已知数据D上,;但是在D以外的未知数据上,不一定成立。而机器学习目的,恰恰是希望我们选择的模型能在未知数据上的预测与真实结果是一致的,而不是在已知的数据集D上寻求最佳效果。

这里写图片描述

这个例子告诉我们,我们想要在D以外的数据中更接近目标函数似乎是做不到的,只能保证对D有很好的分类结果。机器学习的这种特性被称为没有免费午餐(No Free Lunch)定理。NFL定理表明没有一个学习算法可以在任何领域总是产生最准确的学习器。不管采用何种学习算法,至少存在一个目标函数,能够使得随机猜测算法是更好的算法。平常所说的一个学习算法比另一个算法更“优越”,效果更好,只是针对特定的问题,特定的先验信息,数据的分布,训练样本的数目,代价或奖励函数等。从这个例子来看,NFL说明了无法保证一个机器学习算法在D以外的数据集上一定能分类或预测正确,除非加上一些假设条件,我们以后会介绍。

二、Probability to the Rescue

从上一节得出的结论是:在训练集D以外的样本上,机器学习的模型是很难,似乎做不到正确预测或分类的。那是否有一些工具或者方法能够对未知的目标函数f做一些推论,让我们的机器学习模型能够变得有用呢?

如果有一个装有很多(数量很大数不过来)橙色球和绿色球的罐子,我们能不能推断橙色球的比例u?统计学上的做法是,从罐子中随机取出N个球,作为样本,计算这N个球中橙色球的比例v,那么就估计出罐子中橙色球的比例约为v。

这里写图片描述

这种随机抽取的做法能否说明罐子里橙色球的比例一定是v呢?答案是否定的。但是从概率的角度来说,样本中的v很有可能接近我们未知的u。下面从数学推导的角度来看v与u是否相近。

已知u是罐子里橙色球的比例,v是N个抽取的样本中橙色球的比例。当N足够大的时候,v接近于u。这就是Hoeffding’s inequality:

Hoeffding不等式说明当N很大的时候,v与u相差不会很大,它们之间的差值被限定在之内。我们把结论v=u称为probably approximately correct(PAC)。

这里写图片描述

三、Connection to Learning

下面,我们将罐子的内容对应到机器学习的概念上来。机器学习中hypothesis与目标函数相等的可能性,类比于罐子中橙色球的概率问题;罐子里的一颗颗弹珠类比于机器学习样本空间的x;橙色的弹珠类比于h(x)与f不相等;绿色的弹珠类比于h(x)与f相等;从罐子中抽取的N个球类比于机器学习的训练样本D,且这两种抽样的样本与总体样本之间都是独立同分布的。所以呢,如果样本N够大,且是独立同分布的,那么,从样本中的概率就能推导在抽样样本外的所有样本中的概率是多少。

这里写图片描述

映射中最关键的点是讲抽样中橙球的概率理解为样本数据集D上h(x)错误的概率,以此推算出在所有数据上h(x)错误的概率,这也是机器学习能够工作的本质,即我们为啥在采样数据上得到了一个假设,就可以推到全局呢?因为两者的错误率是PAC的,只要我们保证前者小,后者也就小了。

这里写图片描述

这里我们引入两个值和。表示在抽样样本中,h(x)与不相等的概率;表示实际所有样本中,h(x)与f(x)不相等的概率是多少。

这里写图片描述

同样,它的Hoeffding’s inequality可以表示为:

该不等式表明,也是PAC的。如果,很小,那么就能推断出很小,也就是说在该数据分布P下,h与f非常接近,机器学习的模型比较准确。

一般地,h如果是固定的,N很大的时候,,但是并不意味着。因为h是固定的,不能保证足够小,即使,也可能使偏大。所以,一般会通过演算法A,选择最好的h,使足够小,从而保证很小。固定的h,使用新数据进行测试,验证其错误率是多少。

这里写图片描述

四、Connection to Real Learning

这里写图片描述

假设现在有很多罐子M个(即有M个hypothesis),如果其中某个罐子抽样的球全是绿色,那是不是应该选择这个罐子呢?我们先来看这样一个例子:150个人抛硬币,那么其中至少有一个人连续5次硬币都是正面朝上的概率是

可见这个概率是很大的,但是能否说明5次正面朝上的这个硬币具有代表性呢?答案是否定的!并不能说明该硬币单次正面朝上的概率很大,其实都是0.5。一样的道理,抽到全是绿色求的时候也不能一定说明那个罐子就全是绿色球。当罐子数目很多或者抛硬币的人数很多的时候,可能引发Bad Sample,Bad Sample就是和差别很大,即选择过多带来的负面影响,选择过多会恶化不好的情形。

根据许多次抽样的到的不同的数据集D,Hoeffding’s inequality保证了大多数的D都是比较好的情形(即对于某个h,保证),但是也有可能出现Bad Data,即和差别很大的数据集D,这是小概率事件。

这里写图片描述

也就是说,不同的数据集,对于不同的hypothesis,有可能成为Bad Data。只要在某个hypothesis上是Bad Data,那么就是Bad Data。只有当在所有的hypothesis上都是好的数据,才说明不是Bad Data,可以自由选择演算法A进行建模。那么,根据Hoeffding’s inequality,Bad Data的上界可以表示为连级(union bound)的形式:

这里写图片描述

其中,M是hypothesis的个数,N是样本D的数量,是参数。该union bound表明,当M有限,且N足够大的时候,Bad Data出现的概率就更低了,即能保证D对于所有的h都有,满足PAC,演算法A的选择不受限制。那么满足这种union bound的情况,我们就可以和之前一样,选取一个合理的演算法(PLA/pocket),选择使最小的作为矩g,一般能够保证,即有不错的泛化能力。

所以,如果hypothesis的个数M是有限的,N足够大,那么通过演算法A任意选择一个矩g,都有成立;同时,如果找到一个矩g,使,PAC就能保证。至此,就证明了机器学习是可行的。

这里写图片描述

但是,如上面的学习流程图右下角所示,如果M是无数个,例如之前介绍的PLA直线有无数条,是否这些推论就不成立了呢?是否机器就不能进行学习呢?这些内容和问题,我们下节课再介绍。

五、总结

本节课主要介绍了机器学习的可行性。首先引入NFL定理,说明机器学习无法找到一个矩g能够完全和目标函数f一样。接着介绍了可以采用一些统计上的假设,例如Hoeffding不等式,建立和的联系,证明对于某个h,当N足够大的时候,和是PAC的。最后,对于h个数很多的情况,只要有h个数M是有限的,且N足够大,就能保证,证明机器学习是可行的。

注明:

文章中所有的图片均来自台湾大学林轩田《机器学习基石》课程。

5 -- Training versus Testing

上节课,我们主要介绍了机器学习的可行性。首先,由NFL定理可知,机器学习貌似是不可行的。但是,随后引入了统计学知识,如果样本数据足够大,且hypothesis个数有限,那么机器学习一般就是可行的。本节课将讨论机器学习的核心问题,严格证明为什么机器可以学习。从上节课最后的问题出发,即当hypothesis的个数是无限多的时候,机器学习的可行性是否仍然成立?

一、Recap and Preview

我们先来看一下基于统计学的机器学习流程图:

这里写图片描述

该流程图中,训练样本D和最终测试h的样本都是来自同一个数据分布,这是机器能够学习的前提。另外,训练样本D应该足够大,且hypothesis set的个数是有限的,这样根据霍夫丁不等式,才不会出现Bad Data,保证,即有很好的泛化能力。同时,通过训练,得到使最小的h,作为模型最终的矩g,g接近于目标函数。

这里,我们总结一下前四节课的主要内容:第一节课,我们介绍了机器学习的定义,目标是找出最好的矩g,使,保证;第二节课,我们介绍了如何让,可以使用PLA、pocket等演算法来实现;第三节课,我们介绍了机器学习的分类,我们的训练样本是批量数据(batch),处理监督式(supervised)二元分类(binary classification)问题;第四节课,我们介绍了机器学习的可行性,通过统计学知识,把与联系起来,证明了在一些条件假设下,成立。

这里写图片描述

这四节课总结下来,我们把机器学习的主要目标分成两个核心的问题:

  • 足够小

上节课介绍的机器学习可行的一个条件是hypothesis set的个数M是有限的,那M跟上面这两个核心问题有什么联系呢?

我们先来看一下,当M很小的时候,由上节课介绍的霍夫丁不等式,得到,即能保证第一个核心问题成立。但M很小时,演算法A可以选择的hypothesis有限,不一定能找到使足够小的hypothesis,即不能保证第二个核心问题成立。当M很大的时候,同样由霍夫丁不等式,与的差距可能比较大,第一个核心问题可能不成立。而M很大,使的演算法A的可以选择的hypothesis就很多,很有可能找到一个hypothesis,使足够小,第二个核心问题可能成立。

这里写图片描述

从上面的分析来看,M的选择直接影响机器学习两个核心问题是否满足,M不能太大也不能太小。那么如果M无限大的时候,是否机器就不可以学习了呢?例如PLA算法中直线是无数条的,但是PLA能够很好地进行机器学习,这又是为什么呢?如果我们能将无限大的M限定在一个有限的内,问题似乎就解决了。

二、Effective Number of Line

我们先看一下上节课推导的霍夫丁不等式:

其中,M表示hypothesis的个数。每个hypothesis下的BAD events 级联的形式满足下列不等式:

当时,上面不等式右边值将会很大,似乎说明BAD events很大,与也并不接近。但是BAD events 级联的形式实际上是扩大了上界,union bound过大。这种做法假设各个hypothesis之间没有交集,这是最坏的情况,可是实际上往往不是如此,很多情况下,都是有交集的,也就是说M实际上没那么大,如下图所示:

这里写图片描述

也就是说union bound被估计过高了(over-estimating)。所以,我们的目的是找出不同BAD events之间的重叠部分,也就是将无数个hypothesis分成有限个类别。

如何将无数个hypothesis分成有限类呢?我们先来看这样一个例子,假如平面上用直线将点分开,也就跟PLA一样。如果平面上只有一个点x1,那么直线的种类有两种:一种将x1划为+1,一种将x1划为-1:

这里写图片描述

如果平面上有两个点x1、x2,那么直线的种类共4种:x1、x2都为+1,x1、x2都为-1,x1为+1且x2为-1,x1为-1且x2为+1:

这里写图片描述

如果平面上有三个点x1、x2、x3,那么直线的种类共8种:

这里写图片描述

但是,在三个点的情况下,也会出现不能用一条直线划分的情况:

这里写图片描述

也就是说,对于平面上三个点,不能保证所有的8个类别都能被一条直线划分。那如果是四个点x1、x2、x3、x4,我们发现,平面上找不到一条直线能将四个点组成的16个类别完全分开,最多只能分开其中的14类,即直线最多只有14种:

这里写图片描述

经过分析,我们得到平面上线的种类是有限的,1个点最多有2种线,2个点最多有4种线,3个点最多有8种线,4个点最多有14()种线等等。我们发现,有效直线的数量总是满足,其中,N是点的个数。所以,如果我们可以用effective(N)代替M,霍夫丁不等式可以写成:

已知effective(N)<,如果能够保证effective(N)<<,即不等式右边接近于零,那么即使M无限大,直线的种类也很有限,机器学习也是可能的。

这里写图片描述

三、Effective Number of Hypotheses

接下来先介绍一个新名词:二分类(dichotomy)。dichotomy就是将空间中的点(例如二维平面)用一条直线分成正类(蓝色o)和负类(红色x)。令H是将平面上的点用直线分开的所有hypothesis h的集合,dichotomy H与hypotheses H的关系是:hypotheses H是平面上所有直线的集合,个数可能是无限个,而dichotomy H是平面上能将点完全用直线分开的直线种类,它的上界是。接下来,我们要做的就是尝试用dichotomy代替M。

这里写图片描述

再介绍一个新的名词:成长函数(growth function),记为。成长函数的定义是:对于由N个点组成的不同集合中,某集合对应的dichotomy最大,那么这个dichotomy值就是,它的上界是:

这里写图片描述

成长函数其实就是我们之前讲的effective lines的数量最大值。根据成长函数的定义,二维平面上,随N的变化关系是:

这里写图片描述

接下来,我们讨论如何计算成长函数。先看一个简单情况,一维的Positive Rays:

这里写图片描述

若有N个点,则整个区域可分为N+1段,很容易得到其成长函数。注意当N很大时,,这是我们希望看到的。

另一种情况是一维的Positive Intervals:

这里写图片描述

它的成长函数可以由下面推导得出:

这里写图片描述

这种情况下,,在N很大的时候,仍然是满足的。

再来看这个例子,假设在二维空间里,如果hypothesis是凸多边形或类圆构成的封闭曲线,如下图所示,左边是convex的,右边不是convex的。那么,它的成长函数是多少呢?

这里写图片描述

当数据集D按照如下的凸分布时,我们很容易计算得到它的成长函数。这种情况下,N个点所有可能的分类情况都能够被hypotheses set覆盖,我们把这种情形称为shattered。也就是说,如果能够找到一个数据分布集,hypotheses set对N个输入所有的分类情况都做得到,那么它的成长函数就是。

这里写图片描述

四、Break Point

上一小节,我们介绍了四种不同的成长函数,分别是:

这里写图片描述

其中,positive rays和positive intervals的成长函数都是polynomial的,如果用代替M的话,这两种情况是比较好的。而convex sets的成长函数是exponential的,即等于M,并不能保证机器学习的可行性。那么,对于2D perceptrons,它的成长函数究竟是polynomial的还是exponential的呢?

对于2D perceptrons,我们之前分析了3个点,可以做出8种所有的dichotomy,而4个点,就无法做出所有16个点的dichotomy了。所以,我们就把4称为2D perceptrons的break point(5、6、7等都是break point)。令有k个点,如果k大于等于break point时,它的成长函数一定小于2的k次方。

根据break point的定义,我们知道满足的k的最小值就是break point。对于我们之前介绍的四种成长函数,他们的break point分别是:

这里写图片描述

通过观察,我们猜测成长函数可能与break point存在某种关系:对于convex sets,没有break point,它的成长函数是2的N次方;对于positive rays,break point k=2,它的成长函数是O(N);对于positive intervals,break point k=3,它的成长函数是。则根据这种推论,我们猜测2D perceptrons,它的成长函数 。如果成立,那么就可以用代替M,就满足了机器能够学习的条件。关于上述猜测的证明,我们下节课再详细介绍。

五、总结

本节课,我们更深入地探讨了机器学习的可行性。我们把机器学习拆分为两个核心问题:和。对于第一个问题,我们探讨了M个hypothesis到底可以划分为多少种,也就是成长函数。并引入了break point的概念,给出了break point的计算方法。下节课,我们将详细论证对于2D perceptrons,它的成长函数与break point是否存在多项式的关系,如果是这样,那么机器学习就是可行的。

注明:

文章中所有的图片均来自台湾大学林轩田《机器学习基石》课程。

6 -- Theory of Generalization

上一节课,我们主要探讨了当M的数值大小对机器学习的影响。如果M很大,那么就不能保证机器学习有很好的泛化能力,所以问题转换为验证M有限,即最好是按照多项式成长。然后通过引入了成长函数和dichotomy以及break point的概念,提出2D perceptrons的成长函数是多项式级别的猜想。这就是本节课将要深入探讨和证明的内容。

一、Restriction of Break Point

我们先回顾一下上节课的内容,四种成长函数与break point的关系:

这里写图片描述

下面引入一个例子,如果k=2,那么当N取不同值的时候,计算其成长函数是多少。很明显,当N=1时,=2,;当N=2时,由break point为2可知,任意两点都不能被shattered(shatter的意思是对N个点,能够分解为种dichotomies);最大值只能是3;当N=3时,简单绘图分析可得其,即最多只有4种dichotomies。

这里写图片描述

所以,我们发现当N>k时,break point限制了值的大小,也就是说影响成长函数的因素主要有两个:

  • 抽样数据集N

  • break point k(这个变量确定了假设的类型)

那么,如果给定N和k,能够证明其的最大值的上界是多项式的,则根据霍夫丁不等式,就能用代替M,得到机器学习是可行的。所以,证明的上界是poly(N),是我们的目标。

这里写图片描述

二、Bounding Function: Basic Cases

现在,我们引入一个新的函数:bounding function,B(N,k)。Bound Function指的是当break point为k的时候,成长函数可能的最大值。也就是说B(N,k)是的上界,对应最多有多少种dichotomy。那么,我们新的目标就是证明:

这里值得一提的是,B(N,k)的引入不考虑是1D postive intrervals问题还是2D perceptrons问题,而只关心成长函数的上界是多少,从而简化了问题的复杂度。

这里写图片描述

求解B(N,k)的过程十分巧妙:

  • 当k=1时,B(N,1)恒为1。

  • 当N < k时,根据break point的定义,很容易得到。

  • 当N = k时,此时N是第一次出现不能被shatter的值,所以最多只能有个dichotomies,则。

这里写图片描述

到此,bounding function的表格已经填了一半了,对于最常见的N>k的情况比较复杂,推导过程下一小节再详细介绍。

三、Bounding Function: Inductive Cases

N > k的情况较为复杂,下面给出推导过程:

以B(4,3)为例,首先想着能否构建B(4,3)与B(3,x)之间的关系。

首先,把B(4,3)所有情况写下来,共有11组。也就是说再加一种dichotomy,任意三点都能被shattered,11是极限。

这里写图片描述

对这11种dichotomy分组,目前分成两组,分别是orange和purple,orange的特点是,x1,x2和x3是一致的,x4不同并成对,例如1和5,2和8等,purple则是单一的,x1,x2,x3都不同,如6,7,9三组。

这里写图片描述

将Orange去掉x4后去重得到4个不同的vector并成为,相应的purple为。那么,这个是直接转化。紧接着,由定义,B(4,3)是不能允许任意三点shatter的,所以由和构成的所有三点组合也不能shatter(alpha经过去重),即。

这里写图片描述

另一方面,由于中x4是成对存在的,且是不能被任意三点shatter的,则能推导出是不能被任意两点shatter的。这是因为,如果是不能被任意两点shatter,而x4又是成对存在的,那么x1、x2、x3、x4组成的必然能被三个点shatter。这就违背了条件的设定。这个地方的推导非常巧妙,也解释了为什么会这样分组。此处得到的结论是

这里写图片描述

由此得出B(4,3)与B(3,x)的关系为:

这里写图片描述

最后,推导出一般公式为:

这里写图片描述

根据推导公式,下表给出B(N,K)值

这里写图片描述

根据递推公式,推导出B(N,K)满足下列不等式:

这里写图片描述

上述不等式的右边是最高阶为k-1的N多项式,也就是说成长函数的上界B(N,K)的上界满足多项式分布poly(N),这就是我们想要得到的结果。

得到了的上界B(N,K)的上界满足多项式分布poly(N)后,我们回过头来看看之前介绍的几种类型它们的与break point的关系:

这里写图片描述

我们得到的结论是,对于2D perceptrons,break point为k=4,的上界是。推广一下,也就是说,如果能找到一个模型的break point,且是有限大的,那么就能推断出其成长函数有界。

四、A Pictorial Proof

我们已经知道了成长函数的上界是poly(N)的,下一步,如果能将代替M,代入到Hoffding不等式中,就能得到的结论:

这里写图片描述

实际上并不是简单的替换就可以了,正确的表达式为:

这里写图片描述

该推导的证明比较复杂,我们可以简单概括为三个步骤来证明:

这里写图片描述

这里写图片描述

这里写图片描述

这部分内容,我也只能听个大概内容,对具体的证明过程有兴趣的童鞋可以自行研究一下,研究的结果记得告诉一下我哦。

最终,我们通过引入成长函数,得到了一个新的不等式,称为Vapnik-Chervonenkis(VC) bound:

这里写图片描述

对于2D perceptrons,它的break point是4,那么成长函数。所以,我们可以说2D perceptrons是可以进行机器学习的,只要找到hypothesis能让,就能保证。

五、总结

本节课我们主要介绍了只要存在break point,那么其成长函数就满足poly(N)。推导过程是先引入的上界B(N,k),B(N,k)的上界是N的k-1阶多项式,从而得到的上界就是N的k-1阶多项式。然后,我们通过简单的三步证明,将代入了Hoffding不等式中,推导出了Vapnik-Chervonenkis(VC) bound,最终证明了只要break point存在,那么机器学习就是可行的。

注明:

文章中所有的图片均来自台湾大学林轩田《机器学习基石》课程。

7 -- The VC Dimension

前几节课着重介绍了机器能够学习的条件并做了详细的推导和解释。机器能够学习必须满足两个条件:

  • 假设空间H的Size M是有限的,即当N足够大的时候,那么对于假设空间中任意一个假设g,。

  • 利用算法A从假设空间H中,挑选一个g,使,则。

这两个条件,正好对应着test和trian两个过程。train的目的是使损失期望;test的目的是使将算法用到新的样本时的损失期望也尽可能小,即。

正因为如此,上次课引入了break point,并推导出只要break point存在,则M有上界,一定存在。

本次笔记主要介绍VC Dimension的概念。同时也是总结VC Dimension与,,Model Complexity Penalty(下面会讲到)的关系。

一、Definition of VC Dimension

首先,我们知道如果一个假设空间H有break point k,那么它的成长函数是有界的,它的上界称为Bound function。根据数学归纳法,Bound function也是有界的,且上界为。从下面的表格可以看出,比B(N,k)松弛很多。

这里写图片描述

则根据上一节课的推导,VC bound就可以转换为:

这里写图片描述

这样,不等式只与k和N相关了,一般情况下样本N足够大,所以我们只考虑k值。有如下结论:

  • 若假设空间H有break point k,且N足够大,则根据VC bound理论,算法有良好的泛化能力

  • 在假设空间中选择一个矩g,使,则其在全集数据中的错误率会较低

这里写图片描述

下面介绍一个新的名词:VC Dimension。VC Dimension就是某假设集H能够shatter的最多inputs的个数,即最大完全正确的分类能力。(注意,只要存在一种分布的inputs能够正确分类也满足)。

shatter的英文意思是“粉碎”,也就是说对于inputs的所有情况都能列举出来。例如对N个输入,如果能够将种情况都列出来,则称该N个输入能够被假设集H shatter。

根据之前break point的定义:假设集不能被shatter任何分布类型的inputs的最少个数。则VC Dimension等于break point的个数减一。

这里写图片描述

现在,我们回顾一下之前介绍的四种例子,它们对应的VC Dimension是多少:

这里写图片描述

用代替k,那么VC bound的问题也就转换为与和N相关了。同时,如果一个假设集H的确定了,则就能满足机器能够学习的第一个条件,与算法、样本数据分布和目标函数都没有关系。

这里写图片描述

二、VC Dimension of Perceptrons

回顾一下我们之前介绍的2D下的PLA算法,已知Perceptrons的k=4,即。根据VC Bound理论,当N足够大的时候,。如果找到一个g,使,那么就能证明PLA是可以学习的。

这里写图片描述

这是在2D情况下,那如果是多维的Perceptron,它对应的又等于多少呢?

已知在1D Perceptron,,在2D Perceptrons,,那么我们有如下假设:,其中d为维数。

要证明的话,只需分两步证明:

这里写图片描述

首先证明第一个不等式:。

在d维里,我们只要找到某一类的d+1个inputs可以被shatter的话,那么必然得到。所以,我们有意构造一个d维的矩阵能够被shatter就行。是d维的,有d+1个inputs,每个inputs加上第零个维度的常数项1,得到的矩阵:

这里写图片描述

矩阵中,每一行代表一个inputs,每个inputs是d+1维的,共有d+1个inputs。这里构造的很明显是可逆的。shatter的本质是假设空间H对的所有情况的判断都是对的,即总能找到权重W,满足,。由于这里我们构造的矩阵的逆矩阵存在,那么d维的所有inputs都能被shatter,也就证明了第一个不等式。

这里写图片描述

然后证明第二个不等式:。

在d维里,如果对于任何的d+2个inputs,一定不能被shatter,则不等式成立。我们构造一个任意的矩阵,其包含d+2个inputs,该矩阵有d+1列,d+2行。这d+2个向量的某一列一定可以被另外d+1个向量线性表示,例如对于向量,可表示为:

其中,假设,.

那么如果是正类,均为负类,则存在,得到如下表达式:

<font color="#0000ff"></font>+<font color="#ff0000"></font>++<font color="#ff0000"></font>

因为其中蓝色项大于0,代表正类;红色项小于0,代表负类。所有对于这种情况,一定是正类,无法得到负类的情况。也就是说,d+2个inputs无法被shatter。证明完毕!

这里写图片描述

综上证明可得。

三、Physical Intuition VC Dimension

这里写图片描述

上节公式中又名features,即自由度。自由度是可以任意调节的,如同上图中的旋钮一样,可以调节。VC Dimension代表了假设空间的分类能力,即反映了H的自由度,产生dichotomy的数量,也就等于features的个数,但也不是绝对的。

这里写图片描述

例如,对2D Perceptrons,线性分类,,则,也就是说只要3个features就可以进行学习,自由度为3。

介绍到这,我们发现M与是成正比的,从而得到如下结论:

这里写图片描述

四、Interpreting VC Dimension

下面,我们将更深入地探讨VC Dimension的意义。首先,把VC Bound重新写到这里:

这里写图片描述

根据之前的泛化不等式,如果,即出现bad坏的情况的概率最大不超过。那么反过来,对于good好的情况发生的概率最小为,则对上述不等式进行重新推导:

这里写图片描述

表现了假设空间H的泛化能力,越小,泛化能力越大。

这里写图片描述

至此,已经推导出泛化误差的边界,因为我们更关心其上界(可能的最大值),即:

这里写图片描述

上述不等式的右边第二项称为模型复杂度,其模型复杂度与样本数量N、假设空间H()、有关。由共同决定。下面绘出、model complexity、随变化的关系:

这里写图片描述

通过该图可以得出如下结论:

  • 越大,越小,越大(复杂)。

  • 越小,越大,越小(简单)。

  • 随着增大,会先减小再增大。

所以,为了得到最小的,不能一味地增大以减小,因为太小的时候,模型复杂度会增加,造成变大。也就是说,选择合适的,选择的features个数要合适。

下面介绍一个概念:样本复杂度(Sample Complexity)。如果选定,样本数据D选择多少合适呢?通过下面一个例子可以帮助我们理解:

这里写图片描述

通过计算得到N=29300,刚好满足的条件。N大约是的10000倍。这个数值太大了,实际中往往不需要这么多的样本数量,大概只需要的10倍就够了。N的理论值之所以这么大是因为VC Bound 过于宽松了,我们得到的是一个比实际大得多的上界。

这里写图片描述

值得一提的是,VC Bound是比较宽松的,而如何收紧它却不是那么容易,这也是机器学习的一大难题。但是,令人欣慰的一点是,VC Bound基本上对所有模型的宽松程度是基本一致的,所以,不同模型之间还是可以横向比较。从而,VC Bound宽松对机器学习的可行性还是没有太大影响。

五、总结

本节课主要介绍了VC Dimension的概念就是最大的non-break point。然后,我们得到了Perceptrons在d维度下的VC Dimension是d+1。接着,我们在物理意义上,将与自由度联系起来。最终得出结论不能过大也不能过小。选取合适的值,才能让足够小,使假设空间H具有良好的泛化能力。

注明:

文章中所有的图片均来自台湾大学林轩田《机器学习基石》课程

8 -- Noise and Error

上一节课,我们主要介绍了VC Dimension的概念。如果Hypotheses set的VC Dimension是有限的,且有足够多N的资料,同时能够找到一个hypothesis使它的,那么就能说明机器学习是可行的。本节课主要讲了数据集有Noise的情况下,是否能够进行机器学习,并且介绍了假设空间H下演算法A的Error估计。

一、Noise and Probablistic target

上节课推导VC Dimension的数据集是在没有Noise的情况下,本节课讨论如果数据集本身存在Noise,那VC Dimension的推导是否还成立呢?

首先,Data Sets的Noise一般有三种情况:

  • 由于人为因素,正类被误分为负类,或者负类被误分为正类;

  • 同样特征的样本被模型分为不同的类;

  • 样本的特征被错误记录和使用。

这里写图片描述

之前的数据集是确定的,即没有Noise的,我们称之为Deterministic。现在有Noise了,也就是说在某点处不再是确定分布,而是概率分布了,即对每个(x,y)出现的概率是。

因为Noise的存在,比如在x点,有0.7的概率y=1,有0.3的概率y=0,即y是按照分布的。数学上可以证明如果数据集按照概率分布且是iid的,那么以前证明机器可以学习的方法依然奏效,VC Dimension有限即可推断和是近似的。

这里写图片描述

称之为目标分布(Target Distribution)。它实际上告诉我们最好的选择是什么,同时伴随着多少noise。其实,没有noise的数据仍然可以看成“特殊”的概率分布,即概率仅是1和0.对于以前确定的数据集:

这里写图片描述

在引入noise的情况下,新的学习流程图如下所示:

这里写图片描述

二、ERROR Measure

机器学习需要考虑的问题是找出的矩g与目标函数f有多相近,我们一直使用进行误差的估计,那一般的错误测量有哪些形式呢?

我们介绍的矩g对错误的衡量有三个特性:

  • out-of-sample:样本外的未知数据

  • pointwise:对每个数据点x进行测试

  • classification:看prediction与target是否一致,classification error通常称为0/1 error

这里写图片描述

PointWise error实际上就是对数据集的每个点计算错误并计算平均,和的pointwise error的表达式为:

这里写图片描述

pointwise error是机器学习中最常用也是最简单的一种错误衡量方式,未来课程中,我们主要考虑这种方式。pointwise error一般可以分成两类:0/1 error和squared error。0/1 error通常用在分类(classification)问题上,而squared error通常用在回归(regression)问题上。

这里写图片描述

Ideal Mini-Target由和err共同决定,0/1 error和squared error的Ideal Mini-Target计算方法不一样。例如下面这个例子,分别用0/1 error和squared error来估计最理想的mini-target是多少。0/1 error中的mini-target是取P(y|x)最大的那个类,而squared error中的mini-target是取所有类的加权平方和。

这里写图片描述

有了错误衡量,就会知道当前的矩g是好还是不好,并会让演算法不断修正,得到更好的矩g,从而使得g与目标函数更接近。所以,引入error measure后,学习流程图如下所示:

这里写图片描述

三、Algorithmic Error Measure

Error有两种:false accept和false reject。false accept意思是误把负类当成正类,false reject是误把正类当成负类。 根据不同的机器学习问题,false accept和false reject应该有不同的权重,这根实际情况是符合的,比如是超市优惠,那么false reject应该设的大一些;如果是安保系统,那么false accept应该设的大一些。

这里写图片描述

机器学习演算法A的cost function error估计有多种方法,真实的err一般难以计算,常用的方法可以采用plausible或者friendly,根据具体情况而定。

这里写图片描述

引入algorithm error measure之后,学习流程图如下:

这里写图片描述

四、Weighted Classification

实际上,机器学习的Cost Function即来自于这些error,也就是算法里面的迭代的目标函数,通过优化使得Error(Ein)不断变小。

cost function中,false accept和false reject赋予不同的权重,在演算法中体现。对不同权重的错误惩罚,可以选用virtual copying的方法。

这里写图片描述

这里写图片描述

五、总结

本节课主要讲了在有Noise的情况下,即数据集按照概率分布,那么VC Dimension仍然成立,机器学习算法推导仍然有效。机器学习cost function常用的Error有0/1 error和squared error两类。实际问题中,对false accept和false reject应该选择不同的权重。

注明:

文章中所有的图片均来自台湾大学林轩田《机器学习基石》课程。

posted @ 2026-10-17 13:17  绝不原创的飞龙  阅读(4)  评论(0)    收藏  举报