台湾大学林轩田机器学习笔记-全-
台湾大学林轩田机器学习笔记(全)
机器学习基石
9 -- Linear Regression
上节课,我们主要介绍了在有noise的情况下,VC Bound理论仍然是成立的。同时,介绍了不同的error measure方法。本节课介绍机器学习最常见的一种算法:Linear Regression.
一、线性回归问题
在之前的Linear Classification课程中,讲了信用卡发放的例子,利用机器学习来决定是否给用户发放信用卡。本节课仍然引入信用卡的例子,来解决给用户发放信用卡额度的问题,这就是一个线性回归(Linear Regression)问题。

令用户特征集为d维的
,加上常数项,维度为
,与权重
的线性组合即为Hypothesis,记为
。线性回归的预测函数取值在整个实数空间,这跟线性分类不同。

根据上图,在一维或者多维空间里,线性回归的目标是找到一条直线(对应一维)、一个平面(对应二维)或者更高维的超平面,使样本集中的点更接近它,也就是残留误差Residuals最小化。
一般最常用的错误测量方式是基于最小二乘法,其目标是计算误差的最小平方和对应的权重w,即上节课介绍的squared error:

这里提一点,最小二乘法可以解决线性问题和非线性问题。线性最小二乘法的解是closed-form,即
,而非线性最小二乘法没有closed-form,通常用迭代法求解。本节课的解就是closed-form的。关于最小二乘法的一些介绍,请参见我的另一篇博文:
二、线性回归算法
样本数据误差
是权重
的函数,因为
和
都是已知的。我们的目标就是找出合适的
,使
能够最小。那么如何计算呢?
首先,运用矩阵转换的思想,将
计算转换为矩阵的形式。

然后,对于此类线性回归问题,
一般是个凸函数。凸函数的话,我们只要找到一阶导数等于零的位置,就找到了最优解。那么,我们将
对每个
求偏导,偏导为零的
,即为最优化的权重值分布。

根据梯度的思想,对
进行矩阵话求偏导处理:

令偏导为零,最终可以计算出权重向量
为:

最终,我们推导得到了权重向量
,这是上文提到的closed-form解。其中,
又称为伪逆矩阵pseudo-inverse,记为
,维度是(d+1)xN。
但是,我们注意到,伪逆矩阵中有逆矩阵的计算,逆矩阵
是否一定存在?一般情况下,只要满足样本数量N远大于样本特征维度d+1,就能保证矩阵的逆是存在的,称之为非奇异矩阵。但是如果是奇异矩阵,不可逆怎么办呢?其实,大部分的计算逆矩阵的软件程序,都可以处理这个问题,也会计算出一个逆矩阵。所以,一般伪逆矩阵是可解的。
三、泛化问题
现在,可能有这样一个疑问,就是这种求解权重向量的方法是机器学习吗?或者说这种方法满足我们之前推导VC Bound,即是否泛化能力强
?

有两种观点:1、这不属于机器学习范畴。因为这种closed-form解的形式跟一般的机器学习算法不一样,而且在计算最小化误差的过程中没有用到迭代。2、这属于机器学习范畴。因为从结果上看,
和
都实现了最小化,而且实际上在计算逆矩阵的过程中,也用到了迭代。
其实,只从结果来看,这种方法的确实现了机器学习的目的。下面通过介绍一种更简单的方法,证明linear regression问题是可以通过线下最小二乘法方法计算得到好的
和
的。

首先,我们根据平均误差的思想,把
写成如图的形式,经过变换得到:
我们称
为帽子矩阵,用H表示。
下面从几何图形的角度来介绍帽子矩阵H的物理意义。

图中,y是N维空间的一个向量,粉色区域表示输入矩阵X乘以不同权值向量w所构成的空间,根据所有w的取值,预测输出都被限定在粉色的空间中。向量
就是粉色空间中的一个向量,代表预测的一种。y是实际样本数据输出值。
机器学习的目的是在粉色空间中找到一个
,使它最接近真实的y,那么我们只要将y在粉色空间上作垂直投影即可,投影得到的
即为在粉色空间内最接近y的向量。这样即使平均误差
最小。
从图中可以看出,
是y的投影,已知
,那么H表示的就是将y投影到
的一种操作。图中绿色的箭头
是向量y与
相减,
垂直于粉色区域。已知
那么I-H表示的就是将y投影到
即垂直于粉色区域的一种操作。这样的话,我们就赋予了H和I-H不同但又有联系的物理意义。
这里trace(I-H)称为I-H的迹,值为N-(d+1)。这条性质很重要,一个矩阵的 trace等于该矩阵的所有特征值(Eigenvalues)之和。下面给出简单证明:




介绍下该I-H这种转换的物理意义:原来有一个有N个自由度的向量y,投影到一个有d+1维的空间x(代表一列的自由度,即单一输入样本的参数,如图中粉色区域),而余数剩余的自由度最大只有N-(d+1)种。
在存在noise的情况下,上图变为:

图中,粉色空间的红色箭头是目标函数f(x),虚线箭头是noise,可见,真实样本输出y由f(x)和noise相加得到。由上面推导,已知向量y经过I-H转换为
,而noise与y是线性变换关系,那么根据线性函数知识,我们推导出noise经过I-H也能转换为
。则对于样本平均误差,有下列推导成立:
即
同样,对
有如下结论:
这个证明有点复杂,但是我们可以这样理解:
与
形式上只差了
项,从哲学上来说,
是我们看得到的样本的平均误差,如果有noise,我们把预测往noise那边偏一点,让
好看一点点,所以减去
项。那么同时,新的样本
是我们看不到的,如果noise在反方向,那么
就应该加上
项。
我们把
与
画出来,得到学习曲线:

当N足够大时,
与
逐渐接近,满足
,且数值保持在noise level。这就类似VC理论,证明了当N足够大的时候,这种线性最小二乘法是可以进行机器学习的,算法有效!
四、Linear Regression方法解决Linear Classification问题
之前介绍的Linear Classification问题使用的Error Measure方法用的是0/1 error,那么Linear Regression的squared error是否能够应用到Linear Classification问题?

下图展示了两种错误的关系,一般情况下,squared error曲线在0/1 error曲线之上。即
.

根据之前的VC理论,
的上界满足:

从图中可以看出,用
代替
,
仍然有上界,只不过是上界变得宽松了。也就是说用线性回归方法仍然可以解决线性分类问题,效果不会太差。二元分类问题得到了一个更宽松的上界,但是也是一种更有效率的求解方式。
五、总结
本节课,我们主要介绍了Linear Regression。首先,我们从问题出发,想要找到一条直线拟合实际数据值;然后,我们利用最小二乘法,用解析形式推导了权重w的closed-form解;接着,用图形的形式得到
,证明了linear regression是可以进行机器学习的,;最后,我们证明linear regressin这种方法可以用在binary classification上,虽然上界变宽松了,但是仍然能得到不错的学习方法。
注明:
文章中所有的图片均来自台湾大学林轩田《机器学习基石》课程
10 -- Logistic Regression
上一节课,我们介绍了Linear Regression线性回归,以及用平方错误来寻找最佳的权重向量w,获得最好的线性预测。本节课将介绍Logistic Regression逻辑回归问题。
一、Logistic Regression Problem
一个心脏病预测的问题:根据患者的年龄、血压、体重等信息,来预测患者是否会有心脏病。很明显这是一个二分类问题,其输出y只有{-1,1}两种情况。
二元分类,一般情况下,理想的目标函数f(x)>0.5,则判断为正类1;若f(x)<0.5,则判断为负类-1。

但是,如果我们想知道的不是患者有没有心脏病,而是到底患者有多大的几率是心脏病。这表示,我们更关心的是目标函数的值(分布在0,1之间),表示是正类的概率(正类表示是心脏病)。这跟我们原来讨论的二分类问题不太一样,我们把这个问题称为软性二分类问题(’soft’ binary classification)。这个值越接近1,表示正类的可能性越大;越接近0,表示负类的可能性越大。

对于软性二分类问题,理想的数据是分布在[0,1]之间的具体值,但是实际中的数据只可能是0或者1,我们可以把实际中的数据看成是理想数据加上了噪声的影响。

如果目标函数是
的话,我们如何找到一个好的Hypothesis跟这个目标函数很接近呢?
首先,根据我们之前的做法,对所有的特征值进行加权处理。计算的结果s,我们称之为’risk score’:

但是特征加权和
,如何将s值限定在[0,1]之间呢?一个方法是使用sigmoid Function,记为
。那么我们的目标就是找到一个hypothesis:
。

Sigmoid Function函数记为
,满足
,
,
。这个函数是平滑的、单调的S型函数。则对于逻辑回归问题,hypothesis就是这样的形式:
那我们的目标就是求出这个预测函数h(x),使它接近目标函数f(x)。
二、Logistic Regression Error
现在我们将Logistic Regression与之前讲的Linear Classification、Linear Regression做个比较:

这三个线性模型都会用到线性scoring function
。linear classification的误差使用的是0/1 err;linear regression的误差使用的是squared err。那么logistic regression的误差该如何定义呢?
先介绍一下“似然性”的概念。目标函数
,如果我们找到了hypothesis很接近target function。也就是说,在所有的Hypothesis集合中找到一个hypothesis与target function最接近,能产生同样的数据集D,包含y输出label,则称这个hypothesis是最大似然likelihood。

logistic function:
满足一个性质:
。那么,似然性h:
因为
对所有的h来说,都是一样的,所以我们可以忽略它。那么我们可以得到logistic h正比于所有的
乘积。我们的目标就是让乘积值最大化。

如果将w代入的话:

为了把连乘问题简化计算,我们可以引入ln操作,让连乘转化为连加:

接着,我们将maximize问题转化为minimize问题,添加一个负号就行,并引入平均数操作
:

将logistic function的表达式带入,那么minimize问题就会转化为如下形式:

至此,我们得到了logistic regression的err function,称之为cross-entropy error交叉熵误差:

三、Gradient of Logistic Regression Error
我们已经推导了
的表达式,那接下来的问题就是如何找到合适的向量w,让
最小。

Logistic Regression的
是连续、可微、二次可微的凸曲线(开口向上),根据之前Linear Regression的思路,我们只要计算
的梯度为零时的w,即为最优解。

对
计算梯度,学过微积分的都应该很容易计算出来:

最终得到的梯度表达式为:

为了计算
最小值,我们就要找到让
等于0的位置。

上式可以看成
是
的线性加权。要求
与
的线性加权和为0,那么一种情况是线性可分,如果所有的权重
为0,那就能保证
为0。
是sigmoid function,根据其特性,只要让
,即
。
表示对于所有的点,
与
都是同号的,这表示数据集D必须是全部线性可分的才能成立。
然而,保证所有的权重
为0是不太现实的,总有不等于0的时候,那么另一种常见的情况是非线性可分,只能通过使加权和为零,来求解w。这种情况没有closed-form解,与Linear Regression不同,只能用迭代方法求解。

之前所说的Linear Regression有closed-form解,可以说是“一步登天”的;但是PLA算法是一步一步修正迭代进行的,每次对错误点进行修正,不断更新w值。PLA的迭代优化过程表示如下:

w每次更新包含两个内容:一个是每次更新的方向
,用
表示,另一个是每次更新的步长
。参数
和终止条件决定了我们的迭代优化算法。

四、Gradient Descent
根据上一小节PLA的思想,迭代优化让每次w都有更新:

我们把
曲线看做是一个山谷的话,要求
最小,即可比作下山的过程。整个下山过程由两个因素影响:一个是下山的单位方向
;另外一个是下山的步长
。

利用微分思想和线性近似,假设每次下山我们只前进一小步,即
很小,那么根据泰勒Taylor一阶展开,可以得到:
关于Taylor展开的介绍,可参考我另一篇博客:
多元函数的泰勒(Taylor)展开式
迭代的目的是让
越来越小,即让
。
是标量,因为如果两个向量方向相反的话,那么他们的内积最小(为负),也就是说如果方向
与梯度
反向的话,那么就能保证每次迭代
都成立。则,我们令下降方向
为:
是单位向量,
每次都是沿着梯度的反方向走,这种方法称为梯度下降(gradient descent)算法。那么每次迭代公式就可以写成:
下面讨论一下
的大小对迭代优化的影响:
如果太小的话,那么下降的速度就会很慢;
如果太大的话,那么之前利用Taylor展开的方法就不准了,造成下降很不稳定,甚至会上升。因此,
应该选择合适的值,一种方法是在梯度较小的时候,选择小的
,梯度较大的时候,选择大的
,即
正比于
。这样保证了能够快速、稳定地得到最小值
。

对学习速率
做个更修正,梯度下降算法的迭代公式可以写成:
其中:
总结一下基于梯度下降的Logistic Regression算法步骤如下:
- 初始化
![]()
- 计算梯度
![]()
- 迭代跟新
![]()
- 满足
或者达到迭代次数,迭代结束
五、总结
我们今天介绍了Logistic Regression。首先,从逻辑回归的问题出发,将
作为目标函数,将
作为hypothesis。接着,我们定义了logistic regression的err function,称之为cross-entropy error交叉熵误差。然后,我们计算logistic regression error的梯度,最后,通过梯度下降算法,计算
时对应的
值。
注明:
文章中所有的图片均来自台湾大学林轩田《机器学习基石》课程
11 -- Linear Models for Classification
上一节课,我们介绍了Logistic Regression问题,建立cross-entropy error,并提出使用梯度下降算法gradient descnt来获得最好的logistic hypothesis。本节课继续介绍使用线性模型来解决分类问题。
一、Linear Models for Binary Classification
之前介绍几种线性模型都有一个共同点,就是都有样本特征x的加权运算,我们引入一个线性得分函数s:
三种线性模型,第一种是linear classification。线性分类模型的hypothesis为
,取值范围为{-1,+1}两个值,它的err是0/1的,所以对应的
是离散的,并不好解,这是个NP-hard问题。第二种是linear regression。线性回归模型的hypothesis为
,取值范围为整个实数空间,它的err是squared的,所以对应的
是开口向上的二次曲线,其解是closed-form的,直接用线性最小二乘法求解即可。第三种是logistic regression。逻辑回归模型的hypothesis为
,取值范围为(-1,1)之间,它的err是cross-entropy的,所有对应的
是平滑的凸函数,可以使用梯度下降算法求最小值。

从上图中,我们发现,linear regression和logistic regression的error function都有最小解。那么可不可以用这两种方法来求解linear classification问题呢?下面,我们来对这三种模型的error function进行分析,看看它们之间有什么联系。
对于linear classification,它的error function可以写成:
对于linear regression,它的error function可以写成:
对于logistic regression,它的error function可以写成:
上述三种模型的error function都引入了ys变量,那么ys的物理意义是什么?ys就是指分类的正确率得分,其值越大越好,得分越高。

下面,我们用图形化的方式来解释三种模型的error function到底有什么关系:

从上图中可以看出,ys是横坐标轴,
是呈阶梯状的,在ys>0时,
恒取最小值0。
呈抛物线形式,在ys=1时,取得最小值,且在ys=1左右很小区域内,
和
近似。
是呈指数下降的单调函数,ys越大,其值越小。同样在ys=1左右很小区域内,
和
近似。但是我们发现
并不是始终在
之上,所以为了计算讨论方便,我们把
做幅值上的调整,引入
,这样能保证
始终在
上面,如下图所示:

由上图可以看出:
那么由VC理论可以知道:
从0/1出发:
从CE出发:

通过上面的分析,我们看到err 0/1是被限定在一个上界中。这个上界是由logistic regression模型的error function决定的。而linear regression其实也是linear classification的一个upper bound,只是随着sy偏离1的位置越来越远,linear regression的error function偏差越来越大。综上所述,linear regression和logistic regression都可以用来解决linear classification的问题。
下图列举了PLA、linear regression、logistic regression模型用来解linear classification问题的优点和缺点。通常,我们使用linear regression来获得初始化的
,再用logistic regression模型进行最优化解。

二、Stochastic Gradient Descent
之前介绍的PLA算法和logistic regression算法,都是用到了迭代操作。PLA每次迭代只会更新一个点,它每次迭代的时间复杂度是O(1);而logistic regression每次迭代要对所有N个点都进行计算,它的每时间复杂度是O(N)。为了提高logistic regression中gradient descent算法的速度,可以使用另一种算法:随机梯度下降算法(Stochastic Gradient Descent)。
随机梯度下降算法每次迭代只找到一个点,计算该点的梯度,作为我们下一步更新w的依据。这样就保证了每次迭代的计算量大大减小,我们可以把整体的梯度看成这个随机过程的一个期望值。

随机梯度下降可以看成是真实的梯度加上均值为零的随机噪声方向。单次迭代看,好像会对每一步找到正确梯度方向有影响,但是整体期望值上看,与真实梯度的方向没有差太多,同样能找到最小值位置。随机梯度下降的优点是减少计算量,提高运算速度,而且便于online学习;缺点是不够稳定,每次迭代并不能保证按照正确的方向前进,而且达到最小值需要迭代的次数比梯度下降算法一般要多。

对于logistic regression的SGD,它的表达式为:
我们发现,SGD与PLA的迭代公式有类似的地方,如下图所示:

我们把SGD logistic regression称之为’soft’ PLA,因为PLA只对分类错误的点进行修正,而SGD logistic regression每次迭代都会进行或多或少的修正。另外,当
,且
足够大的时候,PLA近似等于SGD。

除此之外,还有两点需要说明:1、SGD的终止迭代条件。没有统一的终止条件,一般让迭代次数足够多;2、学习速率
。
的取值是根据实际情况来定的,一般取值0.1就可以了。
三、Multiclass via Logistic Regression
之前我们一直讲的都是二分类问题,本节主要介绍多分类问题,通过linear classification来解决。假设平面上有四个类,分别是正方形、菱形、三角形和星形,如何进行分类模型的训练呢?
首先我们可以想到这样一个办法,就是先把正方形作为正类,其他三种形状都是负类,即把它当成一个二分类问题,通过linear classification模型进行训练,得出平面上某个图形是不是正方形,且只有{-1,+1}两种情况。然后再分别以菱形、三角形、星形为正类,进行二元分类。这样进行四次二分类之后,就完成了这个多分类问题。

但是,这样的二分类会带来一些问题,因为我们只用{-1,+1}两个值来标记,那么平面上某些可能某些区域都被上述四次二分类模型判断为负类,即不属于四类中的任何一类;也可能会出现某些区域同时被两个类甚至多个类同时判断为正类,比如某个区域又判定为正方形又判定为菱形。那么对于这种情况,我们就无法进行多类别的准确判断,所以对于多类别,简单的binary classification不能解决问题。
针对这种问题,我们可以使用另外一种方法来解决:soft软性分类,即不用{-1,+1}这种binary classification,而是使用logistic regression,计算某点属于某类的概率、可能性,去概率最大的值为那一类就好。
soft classification的处理过程和之前类似,同样是分别令某类为正,其他三类为负,不同的是得到的是概率值,而不是{-1,+1}。最后得到某点分别属于四类的概率,取最大概率对应的哪一个类别就好。效果如下图所示:

这种多分类的处理方式,我们称之为One-Versus-All(OVA) Decomposition。这种方法的优点是简单高效,可以使用logistic regression模型来解决;缺点是如果数据类别很多时,那么每次二分类问题中,正类和负类的数量差别就很大,数据不平衡unbalanced,这样会影响分类效果。但是,OVA还是非常常用的一种多分类算法。

四、Multiclass via Binary Classification
上一节,我们介绍了多分类算法OVA,但是这种方法存在一个问题,就是当类别k很多的时候,造成正负类数据unbalanced,会影响分类效果,表现不好。现在,我们介绍另一种方法来解决当k很大时,OVA带来的问题。
这种方法呢,每次只取两类进行binary classification,取值为{-1,+1}。假如k=4,那么总共需要进行
次binary classification。那么,六次分类之后,如果平面有个点,有三个分类器判断它是正方形,一个分类器判断是菱形,另外两个判断是三角形,那么取最多的那个,即判断它属于正方形,我们的分类就完成了。这种形式就如同k个足球对进行单循环的比赛,每场比赛都有一个队赢,一个队输,赢了得1分,输了得0分。那么总共进行了
次的比赛,最终取得分最高的那个队就可以了。

这种区别于OVA的多分类方法叫做One-Versus-One(OVO)。这种方法的优点是更加高效,因为虽然需要进行的分类次数增加了,但是每次只需要进行两个类别的比较,也就是说单次分类的数量减少了。而且一般不会出现数据unbalanced的情况。缺点是需要分类的次数多,时间复杂度和空间复杂度可能都比较高。

五、总结
本节课主要介绍了分类问题的三种线性模型:linear classification、linear regression和logistic regression。首先介绍了这三种linear models都可以来做binary classification。然后介绍了比梯度下降算法更加高效的SGD算法来进行logistic regression分析。最后讲解了两种多分类方法,一种是OVA,另一种是OVO。这两种方法各有优缺点,当类别数量k不多的时候,建议选择OVA,以减少分类次数。
注明:
文章中所有的图片均来自台湾大学林轩田《机器学习基石》课程
12 -- Nonlinear Transformation
上一节课,我们介绍了分类问题的三种线性模型,可以用来解决binary classification和multiclass classification问题。本节课主要介绍非线性的模型来解决分类问题。
一、Quadratic Hypothesis
之前介绍的线性模型,在2D平面上是一条直线,在3D空间中是一个平面。数学上,我们用线性得分函数s来表示:
。其中,x为特征值向量,w为权重,s是线性的。

线性模型的优点就是,它的VC Dimension比较小,保证了
。但是缺点也很明显,对某些非线性问题,可能会造成
很大,虽然
,但是也造成
很大,分类效果不佳。

为了解决线性模型的缺点,我们可以使用非线性模型来进行分类。例如数据集D不是线性可分的,而是圆形可分的,圆形内部是正类,外面是负类。假设它的hypotheses可以写成:
基于这种非线性思想,我们之前讨论的PLA、Regression问题都可以有非线性的形式进行求解。

下面介绍如何设计这些非线性模型的演算法。还是上面介绍的平面圆形分类例子,它的h(x)的权重w0=0.6,w1=-1,w2=-1,但是h(x)的特征不是线性模型的
,而是
。我们令
,
,
,那么,h(x)变成:
这种
的转换可以看成是x空间的点映射到z空间中去,而在z域中,可以用一条直线进行分类,也就是从x空间的圆形可分映射到z空间的线性可分。z域中的直线对应于x域中的圆形。因此,我们把
这个过程称之为特征转换(Feature Transform)。通过这种特征转换,可以将非线性模型转换为另一个域中的线性模型。

已知x域中圆形可分在z域中是线性可分的,那么反过来,如果在z域中线性可分,是否在x域中一定是圆形可分的呢?答案是否定的。由于权重向量w取值不同,x域中的hypothesis可能是圆形、椭圆、双曲线等等多种情况。

目前讨论的x域中的圆形都是圆心过原点的,对于圆心不过原点的一般情况,
映射公式包含的所有项为:
也就是说,对于二次hypothesis,它包含二次项、一次项和常数项1,z域中每一条线对应x域中的某二次曲线的分类方式,也许是圆,也许是椭圆,也许是双曲线等等。那么z域中的hypothesis可以写成:

二、Nonlinear Transform
上一部分我们定义了什么了二次hypothesis,那么这部分将介绍如何设计一个好的二次hypothesis来达到良好的分类效果。那么目标就是在z域中设计一个最佳的分类线。

其实,做法很简单,利用映射变换的思想,通过映射关系,把x域中的最高阶二次的多项式转换为z域中的一次向量,也就是从quardratic hypothesis转换成了perceptrons问题。用z值代替x多项式,其中向量z的个数与x域中x多项式的个数一致(包含常数项)。这样就可以在z域中利用线性分类模型进行分类训练。训练好的线性模型之后,再将z替换为x的多项式就可以了。具体过程如下:

整个过程就是通过映射关系,换个空间去做线性分类,重点包括两个:
-
特征转换
-
训练线性模型
其实,我们以前处理机器学习问题的时候,已经做过类似的特征变换了。比如数字识别问题,我们从原始的像素值特征转换为一些实际的concrete特征,比如密度、对称性等等,这也用到了feature transform的思想。

三、Price of Nonlinear Transform
若x特征维度是d维的,也就是包含d个特征,那么二次多项式个数,即z域特征维度是:
如果x特征维度是2维的,即
,那么它的二次多项式为
,有6个。
现在,如果阶数更高,假设阶数为Q,那么对于x特征维度是d维的,它的z域特征维度为:
由上式可以看出,计算z域特征维度个数的时间复杂度是Q的d次方,随着Q和d的增大,计算量会变得很大。同时,空间复杂度也大。也就是说,这种特征变换的一个代价是计算的时间、空间复杂度都比较大。

另一方面,z域中特征个数随着Q和d增加变得很大,同时权重w也会增大,即自由度增加,VC Dimension增大。令z域中的特征维度是
,则在在域中,任何
的输入都不能被shattered;同样,在x域中,任何
的输入也不能被shattered。
是VC Dimension的上界,如果
很大的时候,相应的VC Dimension就会很大。根据之前章节课程的讨论,VC Dimension过大,模型的泛化能力会比较差。

下面通过一个例子来解释为什么VC Dimension过大,会造成不好的分类效果:

上图中,左边是用直线进行线性分类,有部分点分类错误;右边是用四次曲线进行非线性分类,所有点都分类正确,那么哪一个分类效果好呢?单从平面上这些训练数据来看,四次曲线的分类效果更好,但是四次曲线模型很容易带来过拟合的问题,虽然它的
比较小,从泛化能力上来说,还是左边的分类器更好一些。也就是说VC Dimension过大会带来过拟合问题,
不能太大了。
那么如何选择合适的Q,来保证不会出现过拟合问题,使模型的泛化能力强呢?一般情况下,为了尽量减少特征自由度,我们会根据训练样本的分布情况,人为地减少、省略一些项。但是,这种人为地删减特征会带来一些“自我分析”代价,虽然对训练样本分类效果好,但是对训练样本外的样本,不一定效果好。所以,一般情况下,还是要保存所有的多项式特征,避免对训练样本的人为选择。

四、Structured Hypothesis Sets
下面,我们讨论一下从x域到z域的多项式变换。首先,如果特征维度只有1维的话,那么变换多项式只有常数项:
如果特征维度是两维的,变换多项式包含了一维的
:
如果特征维度是三维的,变换多项式包含了二维的
:
以此类推,如果特征维度是Q次,那么它的变换多项式为:
那么对于不同阶次构成的hypothesis有如下关系:
我们把这种结构叫做Structured Hypothesis Sets:

那么对于这种Structured Hypothesis Sets,它们的VC Dimension满足下列关系:
它的
满足下列关系:

从上图中也可以看到,随着变换多项式的阶数增大,虽然
逐渐减小,但是model complexity会逐渐增大,造成
很大,所以阶数不能太高。
那么,如果选择的阶数很大,确实能使
接近于0,但是泛化能力通常很差,我们把这种情况叫做tempting sin。所以,一般最合适的做法是先从低阶开始,如先选择一阶hypothesis,看看
是否很小,如果
足够小的话就选择一阶,如果
大的话,再逐渐增加阶数,直到满足要求为止。也就是说,尽量选择低阶的hypothes,这样才能得到较强的泛化能力。

五、总结
这节课主要介绍了非线性分类模型,通过非线性变换,将非线性模型映射到另一个空间,转换为线性模型,再来进行线性分类。本节课完整介绍了非线性变换的整体流程,以及非线性变换可能会带来的一些问题:时间复杂度和空间复杂度的增加。最后介绍了在要付出代价的情况下,使用非线性变换的最安全的做法,尽可能使用简单的模型,而不是模型越复杂越好。
注明:
文章中所有的图片均来自台湾大学林轩田《机器学习基石》课程
13 -- Hazard of Overfitting
上节课我们主要介绍了非线性分类模型,通过非线性变换,将非线性模型映射到另一个空间,转换为线性模型,再来进行分类,分析了非线性变换可能会使计算复杂度增加。本节课介绍这种模型复杂度增加带来机器学习中一个很重要的问题:过拟合(overfitting)。
一、What is Overfitting?
首先,我们通过一个例子来介绍什么bad generalization。假设平面上有5个点,目标函数f(x)是2阶多项式,如果hypothesis是二阶多项式加上一些小的noise的话,那么这5个点很靠近这个hypothesis,
很小。如果hypothesis是4阶多项式,那么这5点会完全落在hypothesis上,
。虽然4阶hypothesis的
比2阶hypothesis的要好很多,但是它的
很大。因为根据VC Bound理论,阶数越大,即VC Dimension越大,就会让模型复杂度更高,
更大。我们把这种
很小,
很大的情况称之为bad generation,即泛化能力差。

我们回过头来看一下VC曲线:

hypothesis的阶数越高,表示VC Dimension越大。随着VC Dimension增大,
是一直减小的,而
先减小后增大。在
位置,
取得最小值。在
右侧,随着VC Dimension越来越大,
越来越小,接近于0,
越来越大。即当VC Dimension很大的时候,这种对训练样本拟合过分好的情况称之为过拟合(overfitting)。另一方面,在
左侧,随着VC Dimension越来越小,
和
都越来越大,这种情况称之为欠拟合(underfitting),即模型对训练样本的拟合度太差,VC Dimension太小了。

bad generation和overfitting的关系可以理解为:overfitting是VC Dimension过大的一个过程,bad generation是overfitting的结果。

一个好的fit,
和
都比较小,尽管
没有足够接近零;而对overfitting来说,
,但是
很大。那么,overfitting的原因有哪些呢?
我们举个开车的例子,把发生车祸比作成overfitting,那么造成车祸的原因包括:
-
车速太快(VC Dimension太大);
-
道路崎岖(noise);
-
对路况的了解程度(训练样本数量N不够);
也就是说,VC Dimension、noise、N这三个因素是影响过拟合现象的关键。

二、The Role of Noise and Data Size
为了尽可能详细地解释overfitting,我们进行这样一个实验,试验中的数据集不是很大。首先,在二维平面上,一个模型的分布由目标函数f(x)(x的10阶多项式)加上一些noise构成,下图中,离散的圆圈是数据集,目标函数是蓝色的曲线。数据没有完全落在曲线上,是因为加入了noise。

然后,同样在二维平面上,另一个模型的分布由目标函数f(x)(x的50阶多项式)构成,没有加入noise。下图中,离散的圆圈是数据集,目标函数是蓝色的曲线。可以看出由于没有noise,数据集完全落在曲线上。

现在,有两个学习模型,一个是2阶多项式,另一个是10阶多项式,分别对上面两个问题进行建模。首先,对于第一个目标函数是10阶多项式包含noise的问题,这两个学习模型的效果如下图所示:

由上图可知,2阶多项式的学习模型
,
;10阶多项式的学习模型
,
。虽然10阶模型的
比2阶的小,但是其
要比2阶的大得多,而2阶的
和
相差不大,很明显用10阶的模型发生了过拟合。
然后,对于第二个目标函数是50阶多项式没有noise的问题,这两个学习模型的效果如下图所示:

由上图可知,2阶多项式的学习模型
,
;10阶多项式的学习模型
,
。虽然10阶模型的
比2阶的小,但是其
要比2阶的大得多的多,而2阶的
和
相差不大,很明显用10阶的模型仍然发生了明显的过拟合。
上面两个问题中,10阶模型都发生了过拟合,反而2阶的模型却表现得相对不错。这好像违背了我们的第一感觉,比如对于目标函数是10阶多项式,加上noise的模型,按道理来说应该是10阶的模型更能接近于目标函数,因为它们阶数相同。但是,事实却是2阶模型泛化能力更强。这种现象产生的原因,从哲学上来说,就是“以退为进”。有时候,简单的学习模型反而能表现的更好。
下面从learning curve来分析一下具体的原因,learning curve描述的是
和
随着数据量N的变化趋势。下图中左边是2阶学习模型的learning curve,右边是10阶学习模型的learning curve。

我们的第9次课的笔记 NTU林轩田机器学习基石课程学习笔记9 – Linear Regression已经介绍过了learning curve。在learning curve中,横轴是样本数量N,纵轴是Error。
和
可表示为:
其中d为模型阶次,左图中d=2,右图中d=10。
本节的实验问题中,数据量N不大,即对应于上图中的灰色区域。左图的灰色区域中,因为d=2,
和
相对来说比较接近;右图中的灰色区域中,d=10,根据
和
的表达式,
很小,而
很大。这就解释了之前2阶多项式模型的
更接近
,泛化能力更好。
值得一提的是,如果数据量N很大的时候,上面两图中
和
都比较接近,但是对于高阶模型,z域中的特征很多的时候,需要的样本数量N很大,且容易发生维度灾难。关于维度灾难的详细生动解释,请参考我另一篇博文:
另一个例子中,目标函数是50阶多项式,且没有加入noise。这种情况下,我们发现仍然是2阶的模型拟合的效果更好一些,明明没有noise,为什么是这样的结果呢?
实际上,我们忽略了一个问题:这种情况真的没有noise吗?其实,当模型很复杂的时候,即50阶多项式的目标函数,无论是2阶模型还是10阶模型,都不能学习的很好,这种复杂度本身就会引入一种‘noise’。所以,这种高阶无noise的问题,也可以类似于10阶多项式的目标函数加上noise的情况,只是二者的noise有些许不同,下面一部分将会详细解释。
三、Deterministic Noise
下面我们介绍一个更细节的实验来说明 什么时候小心overfit会发生。假设我们产生的数据分布由两部分组成:第一部分是目标函数f(x),
阶多项式;第二部分是噪声
,服从Gaussian分布。接下来我们分析的是noise强度不同对overfitting有什么样的影响。总共的数据量是N。

那么下面我们分析不同的
和
对overfit的影响。overfit可以量化为
。结果如下:

上图中,红色越深,代表overfit程度越高,蓝色越深,代表overfit程度越低。先看左边的图,左图中阶数
固定为20,横坐标代表样本数量N,纵坐标代表噪声水平
。红色区域集中在N很小或者
很大的时候,也就是说N越大,
越小,越不容易发生overfit。右边图中
,横坐标代表样本数量N,纵坐标代表目标函数阶数
。红色区域集中在N很小或者
很大的时候,也就是说N越大,
越小,越不容易发生overfit。上面两图基本相似。
从上面的分析,我们发现
对overfit是有很大的影响的,我们把这种noise称之为stochastic noise。同样地,
即模型复杂度也对overfit有很大影响,而且二者影响是相似的,所以我们把这种称之为deterministic noise。之所以把它称为noise,是因为模型高复杂度带来的影响。
总结一下,有四个因素会导致发生overfitting:
-
data size N
![]()
-
stochastic noise
![]()
-
deterministic noise
![]()
-
excessive power
![]()
我们刚才解释了如果目标函数f(x)的复杂度很高的时候,那么跟有noise也没有什么两样。因为目标函数很复杂,那么再好的hypothesis都会跟它有一些差距,我们把这种差距称之为deterministic noise。deterministic noise与stochastic noise不同,但是效果一样。其实deterministic noise类似于一个伪随机数发生器,它不会产生真正的随机数,而只产生伪随机数。它的值与hypothesis有关,且固定点x的deterministic noise值是固定的。
四、Dealing with Overfitting
现在我们知道了什么是overfitting,和overfitting产生的原因,那么如何避免overfitting呢?避免overfitting的方法主要包括:
-
start from simple model
-
data cleaning/pruning
-
data hinting
-
regularization
-
validataion
这几种方法类比于之前举的开车的例子,对应如下:

regularization和validation我们之后的课程再介绍,本节课主要介绍简单的data cleaning/pruning和data hinting两种方法。
data cleaning/pruning就是对训练数据集里label明显错误的样本进行修正(data cleaning),或者对错误的样本看成是noise,进行剔除(data pruning)。data cleaning/pruning关键在于如何准确寻找label错误的点或者是noise的点,而且如果这些点相比训练样本N很小的话,这种处理效果不太明显。
data hinting是针对N不够大的情况,如果没有办法获得更多的训练集,那么data hinting就可以对已知的样本进行简单的处理、变换,从而获得更多的样本。举个例子,数字分类问题,可以对已知的数字图片进行轻微的平移或者旋转,从而让N丰富起来,达到扩大训练集的目的。这种额外获得的例子称之为virtual examples。但是要注意一点的就是,新获取的virtual examples可能不再是iid某个distribution。所以新构建的virtual examples要尽量合理,且是独立同分布的。
五、总结
本节课主要介绍了overfitting的概念,即当
很小,
很大的时候,会出现overfitting。详细介绍了overfitting发生的四个常见原因data size N、stochastic noise、deterministic noise和excessive power。解决overfitting的方法有很多,本节课主要介绍了data cleaning/pruning和data hinting两种简单的方法,之后的课程将会详细介绍regularization和validataion两种更重要的方法。
注明:
文章中所有的图片均来自台湾大学林轩田《机器学习基石》课程
14 -- Regularization
上节课我们介绍了过拟合发生的原因:excessive power, stochastic/deterministic noise 和limited data。并介绍了解决overfitting的简单方法。本节课,我们将介绍解决overfitting的另一种非常重要的方法:Regularization规则化。
一、Regularized Hypothesis Set
先来看一个典型的overfitting的例子:

如图所示,在数据量不够大的情况下,如果我们使用一个高阶多项式(图中红色曲线所示),例如10阶,对目标函数(蓝色曲线)进行拟合。拟合曲线波动很大,虽然
很小,但是
很大,也就造成了过拟合现象。
那么如何对过拟合现象进行修正,使hypothesis更接近于target function呢?一种方法就是regularized fit。

这种方法得到的红色fit曲线,要比overfit的红色曲线平滑很多,更接近与目标函数,它的阶数要更低一些。那么问题就变成了我们要把高阶(10阶)的hypothesis sets转换为低阶(2阶)的hypothesis sets。通过下图我们发现,不同阶数的hypothesis存在如下包含关系:

我们发现10阶多项式hypothesis sets里包含了2阶多项式hypothesis sets的所有项,那么在
中加入一些限定条件,使它近似为
即可。这种函数近似曾被称之为不适定问题(ill-posed problem)。
如何从10阶转换为2阶呢?首先,
可表示为:
而
可表示为:
所以,如果限定条件是
,那么就有
。也就是说,对于高阶的hypothesis,为了防止过拟合,我们可以将其高阶部分的权重w限制为0,这样,就相当于从高阶的形式转换为低阶,fit波形更加平滑,不容易发生过拟合。

那有一个问题,令
高阶权重w为0,为什么不直接使用
呢?这样做的目的是拓展我们的视野,为即将讨论的问题做准备。刚刚我们讨论的限制是
高阶部分的权重w限制为0,这是比较苛刻的一种限制。下面,我们把这个限制条件变得更宽松一点,即令任意8个权重w为0,并不非要限定
,这个Looser Constraint可以写成:
也就只是限定了w不为0的个数,并不限定必须是高阶的w。这种hypothesis记为
,称为sparse hypothesis set,它与
和
的关系为:

Looser Constraint对应的hypothesis应该更好解一些,但事实是sparse hypothesis set
被证明也是NP-hard,求解非常困难。所以,还要转换为另一种易于求解的限定条件。
那么,我们寻找一种更容易求解的宽松的限定条件Softer Constraint,即:
其中,C是常数,也就是说,所有的权重w的平方和的大小不超过C,我们把这种hypothesis sets记为
。
与
的关系是,它们之间有重叠,有交集的部分,但是没有完全包含的关系,也不一定相等。对应
,C值越大,限定的范围越大,即越宽松:
当C无限大的时候,即限定条件非常宽松,相当于没有加上任何限制,就与
没有什么两样。
称为regularized hypothesis set,这种形式的限定条件是可以进行求解的,我们把求解的满足限定条件的权重w记为
。接下来就要探讨如何求解
。
二、Weight Decay Regularization
现在,针对H(c),即加上限定条件,我们的问题变成:

我们的目的是计算
的最小值,限定条件是
。这个限定条件从几何角度上的意思是,权重w被限定在半径为
的圆内,而球外的w都不符合要求,即便它是靠近
梯度为零的w。

下面用一张图来解释在限定条件下,最小化
的过程:

如上图所示,假设在空间中的一点w,根据梯度下降算法,w会朝着
的方向移动(图中蓝色箭头指示的方向),在没有限定条件的情况下,w最终会取得最小值
,即“谷底”的位置。现在,加上限定条件,即w被限定在半径为
的圆内,w距离原点的距离不能超过圆的半径,球如图中红色圆圈所示
。那么,这种情况下,w不能到达
的位置,最大只能位于圆上,沿着圆的切线方向移动(图中绿色箭头指示的方向)。与绿色向量垂直的向量(图中红色箭头指示的方向)是圆切线的法向量,即w的方向,w不能靠近红色箭头方向移动。那么随着迭代优化过程,只要
与w点切线方向不垂直,那么根据向量知识,
一定在w点切线方向上有不为零的分量,即w点会继续移动。只有当
与绿色切线垂直,即与红色法向量平行的时候,
在切线方向上没有不为零的分量了,也就表示这时w达到了最优解的位置。
有了这个平行的概念,我们就得到了获得最优解需要满足的性质:
上面公式中的
称为Lagrange multiplier,是用来解有条件的最佳化问题常用的数学工具,
是方便后面公式推导。那么我们的目标就变成了求解满足上面公式的
。
之前我们推导过,线性回归的
的表达式为:
计算
梯度,并代入到平行条件中,得到:
这是一个线性方程式,直接得到
为:
上式中包含了求逆矩阵的过程,因为
是半正定矩阵,如果
大于零,那么
一定是正定矩阵,即一定可逆。另外提一下,统计学上把这叫做ridge regression,可以看成是linear regression的进阶版。
如果对于更一般的情况,例如逻辑回归问题中,
不是线性的,那么将其代入平行条件中得到的就不是一个线性方程式,
不易求解。下面我们从另一个角度来看一下平行等式:
已知
是
对
的导数,而
也可以看成是
的导数。那么平行等式左边可以看成一个函数的导数,导数为零,即求该函数的最小值。也就是说,问题转换为最小化该函数:
该函数中第二项就是限定条件regularizer,也称为weight-decay regularization。我们把这个函数称为Augmented Error,即
。
如果
不为零,对应于加上了限定条件,若
等于零,则对应于没有任何限定条件,问题转换成之前的最小化
。
下面给出一个曲线拟合的例子,
取不同的值时,得到的曲线也不相同:

从图中可以看出,当
时,发生了过拟合;当
时,拟合的效果很好;当
和
时,发生了欠拟合。我们可以把
看成是一种penality,即对hypothesis复杂度的惩罚,
越大,w就越小,对应于C值越小,即这种惩罚越大,拟合曲线就会越平滑,高阶项就会削弱,容易发生欠拟合。
一般取比较小的值就能达到良好的拟合效果,过大过小都有问题,但究竟取什么值,要根据具体训练数据和模型进行分析与调试。

事实上,这种regularization不仅可以用在多项式的hypothesis中,还可以应用在logistic regression等其他hypothesis中,都可以达到防止过拟合的效果。
我们目前讨论的多项式是形如
的形式,若x的范围限定在[-1,1]之间,那么可能导致
相对于低阶的值要小得多,则其对于的w非常大,相当于要给高阶项设置很大的惩罚。为了避免出现这种数据大小差别很大的情况,可以使用Legendre Polynomials代替
这种形式,Legendre Polynomials各项之间是正交的,用它进行多项式拟合的效果更好。关于Legendre Polynomials的概念这里不详细介绍,有兴趣的童鞋可以看一下维基百科。
三、Regularization and VC Theory
下面我们研究一下Regularization与VC理论之间的关系。Augmented Error表达式如下:
VC Bound表示为:
其中
表示的是单个hypothesis的复杂度,记为
;而
表示整个hypothesis set的复杂度。根据Augmented Error和VC Bound的表达式,
包含于
之内,所以,
比
更接近于
,即更好地代表
,
与
之间的误差更小。

根据VC Dimension理论,整个hypothesis set的
,这是因为所有的w都考虑了,没有任何限制条件。而引入限定条件的
,即有效的VC dimension。也就是说,
比较大,因为它代表了整个hypothesis set,但是
比较小,因为由于regularized的影响,限定了w只取一小部分。其中A表示regularized算法。当
时,有:
这些与实际情况是相符的,比如对多项式拟合模型,当
时,所有的w都给予考虑,相应的
很大,容易发生过拟合。当
且越来越大时,很多w将被舍弃,
减小,拟合曲线越来越平滑,容易发生欠拟合。
四、General Regularizers
那么通用的Regularizers,即
,应该选择什么样的形式呢?一般地,我们会朝着目标函数的方向进行选取。有三种方式:
-
target-dependent
-
plausible
-
friendly

其实这三种方法跟之前error measure类似,其也有三种方法:
-
user-dependent
-
plausible
-
friendly
regularizer与error measure是机器学习模型设计中的重要步骤。

接下来,介绍两种Regularizer:L2和L1。L2 Regularizer一般比较通用,其形式如下:
这种形式的regularizer计算的是w的平方和,是凸函数,比较平滑,易于微分,容易进行最优化计算。
L1 Regularizer的表达式如下:
L1计算的不是w的平方和,而是绝对值和,即长度和,也是凸函数。已知
围成的是圆形,而
围成的是正方形,那么在正方形的四个顶点处,是不可微分的(不像圆形,处处可微分)。根据之前介绍的平行等式推导过程,对应这种正方形,它的解大都位于四个顶点处(不太理解,欢迎补充赐教),因为正方形边界处的w绝对值都不为零,若
不与其平行,那么w就会向顶点处移动,顶点处的许多w分量为零,所以,L1 Regularizer的解是稀疏的,称为sparsity。优点是计算速度快。

下面来看一下
如何取值,首先,若stochastic noise不同,那么一般情况下,
取值有如下特点:

从图中可以看出,stochastic noise越大,
越大。
另一种情况,不同的deterministic noise,
取值有如下特点:

从图中可以看出,deterministic noise越大,
越大。
以上两种noise的情况下,都是noise越大,相应的
也就越大。这也很好理解,如果在开车的情况下,路况也不好,即noise越多,那么就越会踩刹车,这里踩刹车指的就是regularization。但是大多数情况下,noise是不可知的,这种情况下如何选择
?这部分内容,我们下节课将会讨论。
五、总结
本节课主要介绍了Regularization。首先,原来的hypothesis set加上一些限制条件,就成了Regularized Hypothesis Set。加上限制条件之后,我们就可以把问题转化为
最小化问题,即把w的平方加进去。这种过程,实际上回降低VC Dimension。最后,介绍regularization是通用的机器学习工具,设计方法通常包括target-dependent,plausible,friendly等等。下节课将介绍如何选取合适的
来建立最佳拟合模型。
注明:
文章中所有的图片均来自台湾大学林轩田《机器学习基石》课程
15 -- Validation
上节课我们主要讲了为了避免overfitting,可以使用regularization方法来解决。在之前的
上加上一个regularizer,生成
,将其最小化,这样可以有效减少模型的复杂度,避免过拟合现象的发生。那么,机器学习领域还有许多选择,如何保证训练的模型具有良好的泛化能力?本节课将介绍一些概念和方法来解决这个选择性的问题。
一、Model Selection Problem
机器学习模型建立的过程中有许多选择,例如对于简单的二元分类问题,首先是算法A的选择,有PLA,pocket,linear regression,logistic regression等等;其次是迭代次数T的选择,有100,1000,10000等等;之后是学习速率
的选择,有1,0.01,0.0001等等;接着是模型特征转换
的选择,有linear,quadratic,poly-10,Legendre-poly-10等等;然后是正则化regularizer的选择,有L2,L1等等;最后是正则化系数
的选择,有0,0.01,1等等。不同的选择搭配,有不同的机器学习效果。我们的目标就是找到最合适的选择搭配,得到一个好的矩g,构建最佳的机器学习模型。

假设有M个模型,对应有
,即有M个hypothesis set,演算法为
,共M个。我们的目标是从这M个hypothesis set中选择一个模型
,通过演算法
对样本集D的训练,得到一个最好的矩
,使其
最小。所以,问题的关键就是机器学习中如何选择到最好的矩
。
考虑有这样一种方法,对M个模型分别计算使
最小的矩g,再横向比较,取其中能使
最小的模型的矩
:

但是
足够小并不能表示模型好,反而可能表示训练的矩
发生了过拟合,泛化能力很差。而且这种“模型选择+学习训练”的过程,它的VC Dimension是
,模型复杂度增加。总的来说,泛化能力差,用
来选择模型是不好的。
另外一种方法,如果有这样一个独立于训练样本的测试集,将M个模型在测试集上进行测试,看一下
的大小,则选取
最小的模型作为最佳模型:

这种测试集验证的方法,根据finite-bin Hoffding不等式,可以得到:
由上式可以看出,模型个数M越少,测试集数目越大,那么
越小,即
越接近于
。
下面比较一下之前讲的两种方法,第一种方法使用
作为判断基准,使用的数据集就是训练集D本身;第二种方法使用
作为判断基准,使用的是独立于训练集D之外的测试集。前者不仅使用D来训练不同的
,而且又使用D来选择最好的
,那么
对未知数据并不一定泛化能力好。举个例子,这相当于老师用学生做过的练习题再来对学生进行考试,那么即使学生得到高分,也不能说明他的学习能力强。所以最小化
的方法并不科学。而后者使用的是独立于D的测试集,相当于新的考试题能更好地反映学生的真实水平,所以最小化
更加理想。

但是,我们拿到的一都是训练集D,测试集是拿不到的。所以,寻找一种折中的办法,我们可以使用已有的训练集D来创造一个验证集validation set,即从D中划出一部分
作为验证集。D另外的部分作为训练模型使用,
独立开来,用来测试各个模型的好坏,最小化
,从而选择最佳的
。

二、Validation
从训练集D中抽出一部分K个数据作为验证集
,
对应的error记为
。这样做的一个前提是保证
独立同分布(iid)于P(x,y),也就是说
的选择是从D中平均随机抽样得到的,这样能够把
与
联系起来。D中去除
后的数据就是供模型选择的训练数据
,其大小为N-k。从
中选择最好的矩,记为
。

假如D共有1000个样本,那么可以选择其中900个
,剩下的100个作为
。使用
训练模型,得到最佳的
,使用
对
进行验证,得到如下Hoffding不等式:
假设有M种模型hypothesis set,
的数量为K,那么从每种模型m中得到一个在
上表现最好的矩,再横向比较,从M个矩中选择一个最好的
作为我们最终得到的模型。

现在由于数量为N的总样本D的一部分K作为验证集,那么只有N-k个样本可供训练。从
中得到最好的
,而总样本D对应的最好的矩为
。根据之前的leraning curve很容易知道,训练样本越多,得到的模型越准确,其hypothesis越接近target function,即D的
比
的
要小:

所以,我们通常的做法是通过
来选择最好的矩
对应的模型
,再对整体样本集D使用该模型进行训练,最终得到最好的矩
。
总结一下,使用验证集进行模型选择的整个过程为:先将D分成两个部分,一个是训练样本
,一个是验证集
。若有M个模型,那么分别对每个模型在
上进行训练,得到矩
,再用
对每个
进行验证,选择表现最好的矩
,则该矩对应的模型被选择。最后使用该模型对整个D进行训练,得到最终的
。下图展示了整个模型选择的过程:

不等式关系满足:
下面我们举个例子来解释这种模型选择的方法的优越性,假设有两个模型:一个是5阶多项式
,一个是10阶多项式
。通过不使用验证集和使用验证集两种方法对模型选择结果进行比较,分析结果如下:

图中,横坐标表示验证集数量K,纵坐标表示
大小。黑色水平线表示没有验证集,完全使用
进行判断基准,那么
更好一些,但是这种方法的
比较大,而且与K无关。黑色虚线表示测试集非常接近实际数据,这是一种理想的情况,其
很小,同样也与K无关,实际中很难得到这条虚线。红色曲线表示使用验证集,但是最终选取的矩是
,其趋势是随着K的增加,它对应的
先减小再增大,当K大于一定值的时候,甚至会超过黑色水平线。蓝色曲线表示也使用验证集,最终选取的矩是
,其趋势是随着K的增加,它对应的
先缓慢减小再缓慢增大,且一直位于红色曲线和黑色直线之下。从此可见,蓝色曲线对应的方法最好,符合我们之前讨论的使用验证集进行模型选择效果最好。
这里提一点,当K大于一定的值时,红色曲线会超过黑色直线。这是因为随着K的增大,
增大,但可供模型训练的
在减小,那得到的
不具有很好的泛化能力,即对应的
会增大,甚至当K增大到一定值时,比
模型更差。
那么,如何设置验证集K值的大小呢?根据之前的分析:

当K值很大时,
,但是
与
相差很大;当K值很小是,
,但是
与
可能相差很大。所以有个折中的办法,通常设置
。值得一提的是,划分验证集,通常并不会增加整体时间复杂度,反而会减少,因为
减少了。
三、Leave-One-Out Cross Validation
假如考虑一个极端的例子,k=1,也就是说验证集大小为1,即每次只用一组数据对
进行验证。这样做的优点是
,但是
与
可能相差很大。为了避免
与
相差很大,每次从D中取一组作为验证集,直到所有样本都作过验证集,共计算N次,最后对验证误差求平均,得到
,这种方法称之为留一法交叉验证,表达式为:
这样求平均的目的是为了让
尽可能地接近
。
下面用一个例子图解留一法的过程:

如上图所示,要对二维平面上的三个点做拟合,上面三个图表示的是线性模型,下面三个图表示的是常数模型。对于两种模型,分别使用留一交叉验证法来计算
,计算过程都是每次将一个点作为验证集,其他两个点作为训练集,最终将得到的验证误差求平均值,就得到了
和
,比较两个值的大小,取值小对应的模型即为最佳模型。

接下来,我们从理论上分析Leave-One-Out方法的可行性,即
是否能保证
的矩足够好?假设有不同的数据集D,它的期望分布记为
,则其
可以通过推导,等于
的平均值。由于N-1近似为N,
的平均值也近似等于
的平均值。具体推导过程如下:

最终我们得到的结论是
的期望值和
的期望值是相近的,这代表得到了比较理想的
,Leave-One-Out方法是可行的。
举一个例子,使用两个特征:Average Intensity和Symmetry加上这两个特征的非线性变换(例如高阶项)来进行手写数字识别。平面特征分布如下图所示:

Error与特征数量的关系如下图所示:

从图中我们看出,随着特征数量的增加,
不断减小,
先减小再增大,虽然
是不断减小的,但是它与
的差距越来越大,发生了过拟合,泛化能力太差。而
与
的分布基本一致,能较好地反映
的变化。所以,我们只要使用Leave-One-Out方法得到使
最小的模型,就能保证其
足够小。下图是分别使用
和
进行训练得到的分类曲线:

很明显可以看出,使用
发生了过拟合,而
分类效果更好,泛化能力强。
四、V-Fold Cross Validation
接下来我们看看Leave-One-Out可能的问题是什么。首先,第一个问题是计算量,假设N=1000,那么就需要计算1000次的
,再计算其平均值。当N很大的时候,计算量是巨大的,很耗费时间。第二个问题是稳定性,例如对于二分类问题,取值只有0和1两种,预测本身存在不稳定的因素,那么对所有的
计算平均值可能会带来很大的数值跳动,稳定性不好。所以,这两个因素决定了Leave-One-Out方法在实际中并不常用。
针对Leave-One-Out的缺点,我们对其作出了改进。Leave-One-Out是将N个数据分成N分,那么改进措施是将N个数据分成V份(例如V=10),计算过程与Leave-One-Out相似。这样可以减少总的计算量,又能进行交叉验证,得到最好的矩,这种方法称为V-折交叉验证。其实Leave-One-Out就是V-折交叉验证的一个极端例子。
所以呢,一般的Validation使用V-折交叉验证来选择最佳的模型。值得一提的是Validation的数据来源也是样本集中的,所以并不能保证交叉验证的效果好,它的模型一定好。只有样本数据越多,越广泛,那么Validation的结果越可信,其选择的模型泛化能力越强。
五、总结
本节课主要介绍了Validation验证。先从如何选择一个好的模型开始切入,例如使用
、
都是不太好的,最终使用
来进行模型选择。然后详细介绍了Validation的过程。最后,介绍了Leave-One-Out和V-Fold Cross两种验证方法,比较它们各自的优点和缺点,实际情况下,V-Fold Cross更加常用。
注明:
文章中所有的图片均来自台湾大学林轩田《机器学习基石》课程
16 -- Three Learning Principles
上节课我们讲了一个机器学习很重要的工具——Validation。我们将整个训练集分成两部分:
和
,一部分作为机器学习模型建立的训练数据,另一部分作为验证模型好坏的数据,从而选择到更好的模型,实现更好的泛化能力。这节课,我们主要介绍机器学习中非常实用的三个“锦囊妙计”。
一、Occam’s Razor
奥卡姆剃刀定律(Occam’s Razor),是由14世纪逻辑学家、圣方济各会修士奥卡姆的威廉(William of Occam,约1285年至1349年)提出。奥卡姆(Ockham)在英格兰的萨里郡,那是他出生的地方。他在《箴言书注》2卷15题说“切勿浪费较多东西去做用较少的东西同样可以做好的事情。” 这个原理称为“如无必要,勿增实体”(Entities must not be multiplied unnecessarily),就像剃刀一样,将不必要的部分去除掉。
Occam’s Razor反映到机器学习领域中,指的是在所有可能选择的模型中,我们应该选择能够很好地解释已知数据并且十分简单的模型。

上图就是一个模型选择的例子,左边的模型很简单,可能有分错的情况;而右边的模型非常复杂,所有的训练样本都分类正确。但是,我们会选择左边的模型,它更简单,符合人类直觉的解释方式。这样的结果带来两个问题:一个是什么模型称得上是简单的?另一个是为什么简单模型比复杂模型要好?
简单的模型一方面指的是简单的hypothesis h,简单的hypothesis就是指模型使用的特征比较少,例如多项式阶数比较少。简单模型另一方面指的是模型H包含的hypothesis数目有限,不会太多,这也是简单模型包含的内容。

其实,simple hypothesis h和simple model H是紧密联系的。如果hypothesis的特征个数是l,那么H中包含的hypothesis个数就是
,也就是说,hypothesis特征数目越少,H中hypothesis数目也就越少。
所以,为了让模型简单化,我们可以一开始就选择简单的model,或者用regularization,让hypothesis中参数个数减少,都能降低模型复杂度。
那为什么简单的模型更好呢?下面从哲学的角度简单解释一下。机器学习的目的是“找规律”,即分析数据的特征,总结出规律性的东西出来。假设现在有一堆没有规律的杂乱的数据需要分类,要找到一个模型,让它的
,是很难的,大部分时候都无法正确分类,但是如果是很复杂的模型,也有可能将其分开。反过来说,如果有另一组数据,如果可以比较容易找到一个模型能完美地把数据分开,那表明数据本身应该是有某种规律性。也就是说杂乱的数据应该不可以分开,能够分开的数据应该不是杂乱的。如果使用某种简单的模型就可以将数据分开,那表明数据本身应该符合某种规律性。相反地,如果用很复杂的模型将数据分开,并不能保证数据本身有规律性存在,也有可能是杂乱的数据,因为无论是有规律数据还是杂乱数据,复杂模型都能分开。这就不是机器学习模型解决的内容了。所以,模型选择中,我们应该尽量先选择简单模型,例如最简单的线性模型。
二、Sampling Bias
首先引入一个有趣的例子:1948年美国总统大选的两位热门候选人是Truman和Dewey。一家报纸通过电话采访,统计人们把选票投给了Truman还是Dewey。经过大量的电话统计显示,投给Dewey的票数要比投个Truman的票数多,所以这家报纸就在选举结果还没公布之前,信心满满地发表了“Dewey Defeats Truman”的报纸头版,认为Dewey肯定赢了。但是大选结果公布后,让这家报纸大跌眼镜,最终Truman赢的了大选的胜利。
为什么会出现跟电话统计完全相反的结果呢?是因为电话统计数据出错还是投票运气不好?都不是。其实是因为当时电话比较贵,有电话的家庭比较少,而正好是有电话的美国人支持Dewey的比较多,而没有电话的支持Truman比较多。也就是说样本选择偏向于有钱人那边,可能不具有广泛的代表性,才造成Dewey支持率更多的假象。
这个例子表明,抽样的样本会影响到结果,用一句话表示“If the data is sampled in a biased way, learning will produce a similarly biased outcome.”意思是,如果抽样有偏差的话,那么学习的结果也产生了偏差,这种情形称之为抽样偏差Sampling Bias。
从技术上来说,就是训练数据和验证数据要服从同一个分布,最好都是独立同分布的,这样训练得到的模型才能更好地具有代表性。
三、Data Snooping
之前的课程,我们介绍过在模型选择时应该尽量避免偷窥数据,因为这样会使我们人为地倾向于某种模型,而不是根据数据进行随机选择。所以,
应该自由选取,最好不要偷窥到原始数据,这会影响我们的判断。
事实上,数据偷窥发生的情况有很多,不仅仅指我们看到了原始数据。什么意思呢?其实,当你在使用这些数据的任何过程,都是间接地偷看到了数据本身,然后你会进行一些模型的选择或者决策,这就增加了许多的model complexity,也就是引入了污染。
下面举个例子来说明。假如我们有8年的货比交易数据,我们希望从这些数据中找出规律,来预测货比的走势。如果选择前6年数据作为训练数据,后2年数据作为测试数据的话,来训练模型。现在我们有前20天的数据,根据之前训练的模型,来预测第21天的货比交易走势。

现在有两种训练模型的方法,如图所示,一种是使用前6年数据进行模型训练,后2年数据作为测试,图中蓝色曲线表示后2年的预测收益;另一种是直接使用8年数据进行模型训练,图中红色曲线表示后2年的预测收益情况。图中,很明显,使用8年数据进行训练的模型对后2年的预测的收益更大,似乎效果更好。但是这是一种自欺欺人的做法,因为训练的时候已经拿到了后2年的数据,用这样的模型再来预测后2年的走势是不科学的。这种做法也属于间接偷窥数据的行为。直接偷窥和间接偷窥数据的行为都是不科学的做法,并不能表示训练的模型有多好。

还有一个偷窥数据的例子,比如对于某个基准数据集D,某人对它建立了一个模型H1,并发表了论文。第二个人看到这篇论文后,又会对D,建立一个新的好的模型H2。这样,不断地有人看过前人的论文后,建立新的模型。其实,后面人选择模型时,已经被前人影响了,这也是偷窥数据的一种情况。也许你能对D训练很好的模型,但是可能你仅仅只根据前人的模型,成功避开了一些错误,甚至可能发生了overfitting或者bad generalization。所以,机器学习领域有这样一句有意思的话“If you torture the data long enough, it will confess.”所以,我们不能太“折磨”我们的数据了,否则它只能“妥协”了~哈哈。
在机器学习过程中,避免“偷窥数据”非常重要,但实际上,完全避免也很困难。实际操作中,有一些方法可以帮助我们尽量避免偷窥数据。第一个方法是“看不见”数据。就是说当我们在选择模型的时候,尽量用我们的经验和知识来做判断选择,而不是通过数据来选择。先选模型,再看数据。第二个方法是保持怀疑。就是说时刻保持对别人的论文或者研究成果保持警惕与怀疑,要通过自己的研究与测试来进行模型选择,这样才能得到比较正确的结论。

四、Power of Three
本小节,我们对16节课做个简单的总结,用“三的威力”进行概括。因为课程中我们介绍的很多东西都与三有关。
首先,我们介绍了跟机器学习相关的三个领域:
-
Data Mining
-
Artificial Intelligence
-
Statistics

我们还介绍了三个理论保证:
-
Hoeffding
-
Multi-Bin Hoeffding
-
VC

然后,我们又介绍了三种线性模型:
-
PLA/pocket
-
linear regression
-
logistic regression

同时,我们介绍了三种重要的工具:
-
Feature Transform
-
Regularization
-
Validation

还有我们本节课介绍的三个锦囊妙计:
-
Occam’s Razer
-
Sampling Bias
-
Data Snooping

最后,我们未来机器学习的方向也分为三种:
-
More Transform
-
More Regularization
-
Less Label

五、总结
本节课主要介绍了机器学习三个重要的锦囊妙计:Occam’s Razor, Sampling Bias, Data Snooping。并对《机器学习基石》课程中介绍的所有知识和方法进行“三的威力”这种形式的概括与总结,“三的威力”也就构成了坚固的机器学习基石。
整个机器学习基石的课程笔记总结完毕!后续将会推出机器学习技法的学习笔记,谢谢!
注明:
文章中所有的图片均来自台湾大学林轩田《机器学习基石》课程
机器学习技法
1 -- Linear Support Vector Machine
关于台湾大学林轩田老师的《机器学习基石》课程,我们已经总结了16节课的笔记。这里附上基石第一节课的博客地址:
台湾大学林轩田机器学习基石课程学习笔记1 – The Learning Problem
本系列同样分成16节课,将会介绍《机器学习基石》的进阶版《机器学习技法》,更深入地探讨机器学习一些高级算法和技巧。
Large-Margin Separating Hyperplane
回顾一下我们之前介绍了linear classification,对于线性可分的情况,我们可以使用PLA/pocket算法在平面或者超平面上把正负类分开。

例如对平面2D这种情况,我们可以找到一条直线,能将正类和负类完全分开。但是,这样的直线通常不止一条,如下图所示。那么,下图中的三条分类线都能将数据分开,但是哪条线更好呢?

这三条直线都是由PLA/pocket算法不断修正错误点而最终产生的,整个确定直线形状的过程是随机的。单从分类效果上看,这三条直线都满足要求,而且都满足VC bound要求,模型复杂度
是一样的,即具有一定的泛化能力。但是,如果要选择的话,凭第一感觉,我们还是会选择第三条直线,感觉它的分类效果更好一些。那这又是为什么呢?
先给个简单解释,一般情况下,训练样本外的测量数据应该分布在训练样本附近,但与训练样本的位置有一些偏差。若要保证对未知的测量数据也能进行正确分类,最好让分类直线距离正类负类的点都有一定的距离。这样能让每个样本点附近的圆形区域是“安全”的。圆形区域越大,表示分类直线对测量数据误差的容忍性越高,越“安全”。

如上图所示,左边的点距离分类直线的最小距离很小,它的圆形区域很小。那么,这种情况下,分类线对测量数据误差的容忍性就很差,测量数据与样本数据稍有偏差,很有可能就被误分。而右边的点距离分类直线的最小距离更大一些,其圆形区域也比较大。这种情况下,分类线对测量数据误差的容忍性就相对来说大很多,不容易误分。也就是说,左边分类线和右边分类线的最大区别是对这类测量误差的容忍度不同。
那么,如果每一笔训练资料距离分类线越远的话,就表示分类型可以忍受更多的测量误差(noise)。我们之前在《机器学习基石》中介绍过,noise是造成overfitting的主要原因,而测量误差也是一种noise。所以,如果分类线对测量误差的容忍性越好的话,表示这是一条不错的分类线。那么,我们的目标就是找到这样一条最“健壮”的线,即距离数据点越远越好。

上面我们用圆形区域表示分类线能够容忍多少误差,也就相当于计算点到直线的距离。距离越大,表示直线越“胖”,越能容忍误差;距离越小,表示直线越“瘦”,越不能容忍误差。越胖越好(像杨贵妃那样的哦~)。

如何定义分类线有多胖,就是看距离分类线最近的点与分类线的距离,我们把它用margin表示。分类线由权重w决定,目的就是找到使margin最大时对应的w值。整体来说,我们的目标就是找到这样的分类线并满足下列条件:
-
分类正确,即
![]()
-
margin最大化

Standard Large-Margin Problem
要让margin最大,即让离分类线最近的点到分类线距离最大,我们先来看一下如何计算点到分类线的距离。
首先,我们将权重
中的
拿出来,用b表示。同时省去
项。这样,hypothesis就变成了
。

下面,利用图解的方式,详细推导如何计算点到分类平面的距离:

如上图所示,平面上有两个点:x’和x”。因为这两个点都在分类平面上,所以它们都满足:


同时可以得到:
,
,则有:

(x”-x’)是平面上的任一向量,(x”-x’)与w内积为0,表示(x”-x’)垂直于w,那么w就是平面的法向量。
现在,若要计算平面外一点x到该平面的距离,做法是只要将向量(x-x’)投影到垂直于该平面的方向(即w方向)上就可以了。那么,令(x”-x’)与w的夹角为
,距离就可以表示为:

代入
,可得:

点到分类面(Separating Hyperplane)的距离已经算出来了。基于这个分类面,所有的点均满足:
,表示所有点都分类正确,则distance公式就可以变换成:

那么,我们的目标形式就转换为:

对上面的式子还不容易求解,我们继续对它进行简化。我们知道分类面
和
其实是一样的。也就是说,对w和b进行同样的缩放还会得到同一分类面。所以,为了简化计算,我们令距离分类满最近的点满足
。那我们所要求的margin就变成了:

这样,目标形式就简化为:

这里可以省略条件:
,因为满足条件
必然满足大于零的条件。我们的目标就是根据这个条件,计算
的最大值。
刚刚我们讲的距离分类满最近的点满足
,也就是说对所有的点满足
。另外,因为最小化问题我们最熟悉也最好解,所以可以把目标
最大化转化为计算
的最小化问题。

如上图所示,最终的条件就是
,而我们的目标就是最小化
值。
Support Vector Machine
现在,条件和目标变成:

现在,举个例子,假如平面上有四个点,两个正类,两个负类:

不同点的坐标加上条件
,可以得到:

最终,我们得到的条件是:


而我们的目标是:

目标最小值为1,即
,那么这个例子就得到了最佳分类面的解,如图所示,且
。分类面的表达式为:

最终我们得到的矩的表达式为:

Support Vector Machine(SVM)这个名字从何而来?为什么把这种分类面解法称为支持向量机呢?这是因为分类面仅仅由分类面的两边距离它最近的几个点决定的,其它点对分类面没有影响。决定分类面的几个点称之为支持向量(Support Vector),好比这些点“支撑”着分类面。而利用Support Vector得到最佳分类面的方法,称之为支持向量机(Support Vector Machine)。
下面介绍SVM的一般求解方法。先写下我们的条件和目标:

这是一个典型的二次规划问题,即Quadratic Programming(QP)。因为SVM的目标是关于w的二次函数,条件是关于w和b的一次函数,所以,它的求解过程还是比较容易的,可以使用一些软件(例如Matlab)自带的二次规划的库函数来求解。下图给出SVM与标准二次规划问题的参数对应关系:

那么,线性SVM算法可以总结为三步:
-
计算对应的二次规划参数Q,p,A,c
-
根据二次规划库函数,计算b,w
-
将b和w代入
,得到最佳分类面

这种方法称为Linear Hard-Margin SVM Algorithm。如果是非线性的,例如包含x的高阶项,那么可以使用我们之前在《机器学习基石》课程中介绍的特征转换的方法,先作
的特征变换,从非线性的x域映射到线性的z域空间,再利用Linear Hard-Margin SVM Algorithm求解即可。
Reasons behind Large-Margin Hyperplane
从视觉和直觉的角度,我们认为Large-Margin Hyperplane的分类效果更好。SVM的这种思想其实与我们之前介绍的机器学习非常重要的正则化regularization思想很类似。regularization的目标是将
最小化,条件是
;SVM的目标是
最小化,条件是
,即保证了
。有趣的是,regularization与SVM的目标和限制条件分别对调了。其实,考虑的内容是类似的,效果也是相近的。SVM也可以说是一种weight-decay regularization,限制条件是
。

从另一方面来看,Large-Margin会限制Dichotomies的个数。这从视觉上也很好理解,假如一条分类面越“胖”,即对应Large-Margin,那么它可能shtter的点的个数就可能越少:

之前的《机器学习基石》课程中介绍过,Dichotomies与VC Dimension是紧密联系的。也就是说如果Dichotomies越少,那么复杂度就越低,即有效的VC Dimension就越小,得到
,泛化能力强。
下面我们从概念的角度推导一下为什么dichotomies越少,VC Dimension就越少。首先我们考虑一下Large-Margin演算法的VC Dimension,记为
。
与数据有关,而我们之前介绍的
与数据无关。
假如平面上有3个点分布在单位圆上,如果Margin为0,即
,这条细细的直线可以很容易将圆上任意三点分开(shatter),就能得到它的
。如果
,这条粗粗的线无论如何都不能将圆上的任一三点全完分开(no shatter),因为圆上必然至少存在两个点的距离小于
,那么其对应d的
。

那么,一般地,在d维空间,当数据点分布在半径为R的超球体内时,得到的
满足下列不等式:

之前介绍的Perceptrons的VC Dimension为d+1,这里得到的结果是Large-Margin演算法的
。所以,由于Large-Margin,得到的dichotomies个数减少,从而VC Dimension也减少了。VC Dimension减少降低了模型复杂度,提高了泛化能力。
总结
本节课主要介绍了线性支持向量机(Linear Support Vector Machine)。我们先从视觉角度出发,希望得到一个比较“胖”的分类面,即满足所有的点距离分类面都尽可能远。然后,我们通过一步步推导和简化,最终把这个问题转换为标准的二次规划(QP)问题。二次规划问题可以使用Matlab等软件来进行求解,得到我们要求的w和b,确定分类面。这种方法背后的原理其实就是减少了dichotomies的种类,减少了有效的VC Dimension数量,从而让机器学习的模型具有更好的泛化能力。
注明:
文章中所有的图片均来自台湾大学林轩田《机器学习技法》课程
1 -- The Learning Problem
最近在看NTU林轩田的《机器学习基石》课程,个人感觉讲的非常好。整个基石课程分成四个部分:
-
When Can Machine Learn?
-
Why Can Machine Learn?
-
How Can Machine Learn?
-
How Can Machine Learn Better?
每个部分由四节课组成,总共有16节课。那么,从这篇开始,我们将连续对这门课做课程笔记,共16篇,希望能对正在看这们课的童鞋有所帮助。下面开始第一节课的笔记:The Learning Problem。
一、What is Machine Learning
什么是“学习”?学习就是人类通过观察、积累经验,掌握某项技能或能力。就好像我们从小学习识别字母、认识汉字,就是学习的过程。而机器学习(Machine Learning),顾名思义,就是让机器(计算机)也能向人类一样,通过观察大量的数据和训练,发现事物规律,获得某种分析问题、解决问题的能力。

机器学习可以被定义为:Improving some performance measure with experence computed from data. 也就是机器从数据中总结经验,从数据中找出某种规律或者模型,并用它来解决实际问题。

什么情况下会使用机器学习来解决问题呢?其实,目前机器学习的应用非常广泛,基本上任何场合都能够看到它的身影。其应用场合大致可归纳为三个条件:
-
事物本身存在某种潜在规律
-
某些问题难以使用普通编程解决
-
有大量的数据样本可供使用

二、Applications of Machine Learning
机器学习在我们的衣、食、住、行、教育、娱乐等各个方面都有着广泛的应用,我们的生活处处都离不开机器学习。比如,打开购物网站,网站就会给我们自动推荐我们可能会喜欢的商品;电影频道会根据用户的浏览记录和观影记录,向不同用户推荐他们可能喜欢的电影等等,到处都有机器学习的影子。
三、Components of Machine Learning
本系列的课程对机器学习问题有一些基本的术语需要注意一下:
-
输入x
-
输出y
-
目标函数f,即最接近实际样本分布的规律
-
训练样本data
-
假设hypothesis,一个机器学习模型对应了很多不同的hypothesis,通过演算法A,选择一个最佳的hypothesis对应的函数称为矩g,g能最好地表示事物的内在规律,也是我们最终想要得到的模型表达式。

实际中,机器学习的流程图可以表示为:

对于理想的目标函数f,我们是不知道的,我们手上拿到的是一些训练样本D,假设是监督式学习,其中有输入x,也有输出y。机器学习的过程,就是根据先验知识选择模型,该模型对应的hypothesis set(用H表示),H中包含了许多不同的hypothesis,通过演算法A,在训练样本D上进行训练,选择出一个最好的hypothes,对应的函数表达式g就是我们最终要求的。一般情况下,g能最接近目标函数f,这样,机器学习的整个流程就完成了。
四、Machine Learning and Other Fields
与机器学习相关的领域有:
-
数据挖掘(Data Mining)
-
人工智能(Artificial Intelligence)
-
统计(Statistics)
其实,机器学习与这三个领域是相通的,基本类似,但也不完全一样。机器学习是这三个领域中的有力工具,而同时,这三个领域也是机器学习可以广泛应用的领域,总得来说,他们之间没有十分明确的界线。
五、总结
本节课主要介绍了什么是机器学习,什么样的场合下可以使用机器学习解决问题,然后用流程图的形式展示了机器学习的整个过程,最后把机器学习和数据挖掘、人工智能、统计这三个领域做个比较。本节课的内容主要是概述性的东西,比较简单,所以笔记也相对比较简略。
这里附上林轩田(Hsuan-Tien Lin)关于这门课的主页:
http://www.csie.ntu.edu.tw/~htlin/
注明:
文章中所有的图片均来自台湾大学林轩田《机器学习基石》课程。
2 -- Dual Support Vector Machine
上节课我们主要介绍了线性支持向量机(Linear Support Vector Machine)。Linear SVM的目标是找出最“胖”的分割线进行正负类的分离,方法是使用二次规划来求出分类线。本节课将从另一个方面入手,研究对偶支持向量机(Dual Support Vector Machine),尝试从新的角度计算得出分类线,推广SVM的应用范围。
Motivation of Dual SVM
首先,我们回顾一下,对于非线性SVM,我们通常可以使用非线性变换将变量从x域转换到z域中。然后,在z域中,根据上一节课的内容,使用线性SVM解决问题即可。上一节课我们说过,使用SVM得到large-margin,减少了有效的VC Dimension,限制了模型复杂度;另一方面,使用特征转换,目的是让模型更复杂,减小
。所以说,非线性SVM是把这两者目的结合起来,平衡这两者的关系。那么,特征转换下,求解QP问题在z域中的维度设为
,如果模型越复杂,则
越大,相应求解这个QP问题也变得很困难。当
无限大的时候,问题将会变得难以求解,那么有没有什么办法可以解决这个问题呢?一种方法就是使SVM的求解过程不依赖
,这就是我们本节课所要讨论的主要内容。

比较一下,我们上一节课所讲的Original SVM二次规划问题的变量个数是
,有N个限制条件;而本节课,我们把问题转化为对偶问题(’Equivalent’ SVM),同样是二次规划,只不过变量个数变成N个,有N+1个限制条件。这种对偶SVM的好处就是问题只跟N有关,与
无关,这样就不存在上文提到的当
无限大时难以求解的情况。

如何把问题转化为对偶问题(’Equivalent’ SVM),其中的数学推导非常复杂,本文不做详细数学论证,但是会从概念和原理上进行简单的推导。
还记得我们在《机器学习基石》课程中介绍的Regularization中,在最小化
的过程中,也添加了限制条件:
。我们的求解方法是引入拉格朗日因子
,将有条件的最小化问题转换为无条件的最小化问题:
,最终得到的w的最优化解为:

所以,在regularization问题中,
是已知常量,求解过程变得容易。那么,对于dual SVM问题,同样可以引入
,将条件问题转换为非条件问题,只不过
是未知参数,且个数是N,需要对其进行求解。

如何将条件问题转换为非条件问题?上一节课我们介绍的SVM中,目标是:
,条件是:
。首先,我们令拉格朗日因子为
(区别于regularization),构造一个函数:

这个函数右边第一项是SVM的目标,第二项是SVM的条件和拉格朗日因子
的乘积。我们把这个函数称为拉格朗日函数,其中包含三个参数:b,w,
。

下面,我们利用拉格朗日函数,把SVM构造成一个非条件问题:

该最小化问题中包含了最大化问题,怎么解释呢?首先我们规定拉格朗日因子
,根据SVM的限定条件可得:
,如果没有达到最优解,即有不满足
的情况,因为
,那么必然有
。对于这种大于零的情况,其最大值是无解的。如果对于所有的点,均满足
,那么必然有
,则当
时,其有最大值,最大值就是我们SVM的目标:
。因此,这种转化为非条件的SVM构造函数的形式是可行的。
Lagrange Dual SVM
现在,我们已经将SVM问题转化为与拉格朗日因子
有关的最大最小值形式。已知
,那么对于任何固定的
,且
,一定有如下不等式成立:

对上述不等式右边取最大值,不等式同样成立:

上述不等式表明,我们对SVM的min和max做了对调,满足这样的关系,这叫做Lagrange dual problem。不等式右边是SVM问题的下界,我们接下来的目的就是求出这个下界。
已知
是一种弱对偶关系,在二次规划QP问题中,如果满足以下三个条件:
-
函数是凸的(convex primal)
-
函数有解(feasible primal)
-
条件是线性的(linear constraints)
那么,上述不等式关系就变成强对偶关系,
变成=,即一定存在满足条件的解
,使等式左边和右边都成立,SVM的解就转化为右边的形式。
经过推导,SVM对偶问题的解已经转化为无条件形式:

其中,上式括号里面的是对拉格朗日函数
计算最小值。那么根据梯度下降算法思想:最小值位置满足梯度为零。首先,令
对参数b的梯度为零:

也就是说,最优解一定满足
。那么,我们把这个条件代入计算max条件中(与
同为条件),并进行化简:

这样,SVM表达式消去了b,问题化简了一些。然后,再根据最小值思想,令
对参数w的梯度为零:

即得到:

也就是说,最优解一定满足
。那么,同样我们把这个条件代入并进行化简:

这样,SVM表达式消去了w,问题更加简化了。这时候的条件有3个:
-
all
![]()
-
![]()
-
![]()
SVM简化为只有
的最佳化问题,即计算满足上述三个条件下,函数
最小值时对应的
是多少。
总结一下,SVM最佳化形式转化为只与
有关:

其中,满足最佳化的条件称之为Karush-Kuhn-Tucker(KKT):

在下一部分中,我们将利用KKT条件来计算最优化问题中的
,进而得到b和w。
Solving Dual SVM
上面我们已经得到了dual SVM的简化版了,接下来,我们继续对它进行一些优化。首先,将max问题转化为min问题,再做一些条件整理和推导,得到:

显然,这是一个convex的QP问题,且有N个变量
,限制条件有N+1个。则根据上一节课讲的QP解法,找到Q,p,A,c对应的值,用软件工具包进行求解即可。

求解过程很清晰,但是值得注意的是,
,大部分值是非零的,称为dense。当N很大的时候,例如N=30000,那么对应的
的计算量将会很大,存储空间也很大。所以一般情况下,对dual SVM问题的矩阵
,需要使用一些特殊的方法,这部分内容就不再赘述了。

得到
之后,再根据之前的KKT条件,就可以计算出w和b了。首先利用条件
得到w,然后利用条件
,取任一
即
>0的点,得到
,进而求得
。

值得注意的是,计算b值,
>0时,有
成立。
正好表示的是该点在SVM分类线上,即fat boundary。也就是说,满足
>0的点一定落在fat boundary上,这些点就是Support Vector。这是一个非常有趣的特性。
Messages behind Dual SVM
回忆一下,上一节课中,我们把位于分类线边界上的点称为support vector(candidates)。本节课前面介绍了
>0的点一定落在分类线边界上,这些点称之为support vector(注意没有candidates)。也就是说分类线上的点不一定都是支持向量,但是满足
>0的点,一定是支持向量。

SV只由
>0的点决定,根据上一部分推导的w和b的计算公式,我们发现,w和b仅由SV即
>0的点决定,简化了计算量。这跟我们上一节课介绍的分类线只由“胖”边界上的点所决定是一个道理。也就是说,样本点可以分成两类:一类是support vectors,通过support vectors可以求得fattest hyperplane;另一类不是support vectors,对我们求得fattest hyperplane没有影响。

回过头来,我们来比较一下SVM和PLA的w公式:

我们发现,二者在形式上是相似的。
由fattest hyperplane边界上所有的SV决定,
由所有当前分类错误的点决定。
和
都是原始数据点
的线性组合形式,是原始数据的代表。

总结一下,本节课和上节课主要介绍了两种形式的SVM,一种是Primal Hard-Margin SVM,另一种是Dual Hard_Margin SVM。Primal Hard-Margin SVM有
个参数,有N个限制条件。当
很大时,求解困难。而Dual Hard_Margin SVM有N个参数,有N+1个限制条件。当数据量N很大时,也同样会增大计算难度。两种形式都能得到w和b,求得fattest hyperplane。通常情况下,如果N不是很大,一般使用Dual SVM来解决问题。

这节课提出的Dual SVM的目的是为了避免计算过程中对
的依赖,而只与N有关。但是,Dual SVM是否真的消除了对
的依赖呢?其实并没有。因为在计算
的过程中,由z向量引入了
,实际上复杂度已经隐藏在计算过程中了。所以,我们的目标并没有实现。下一节课我们将继续研究探讨如何消除对
的依赖。

总结
本节课主要介绍了SVM的另一种形式:Dual SVM。我们这样做的出发点是为了移除计算过程对
的依赖。Dual SVM的推导过程是通过引入拉格朗日因子
,将SVM转化为新的非条件形式。然后,利用QP,得到最佳解的拉格朗日因子
。再通过KKT条件,计算得到对应的w和b。最终求得fattest hyperplane。下一节课,我们将解决Dual SVM计算过程中对
的依赖问题。
注明:
文章中所有的图片均来自台湾大学林轩田《机器学习技法》课程
3 -- Kernel Support Vector Machine
上节课我们主要介绍了SVM的对偶形式,即dual SVM。Dual SVM也是一个二次规划问题,可以用QP来进行求解。之所以要推导SVM的对偶形式是因为:首先,它展示了SVM的几何意义;然后,从计算上,求解过程“好像”与所在维度
无关,规避了
很大时难以求解的情况。但是,上节课的最后,我们也提到dual SVM的计算过程其实跟
还是有关系的。那么,能不能完全摆脱对
的依赖,从而减少SVM计算量呢?这就是我们本节课所要讲的主要内容。
Kernel Trick
我们上节课推导的dual SVM是如下形式:

其中
是拉格朗日因子,共N个,这是我们要求解的,而条件共有N+1个。我们来看向量
中的
,看似这个计算与
无关,但是
的内积中不得不引入
。也就是说,如果
很大,计算
的复杂度也会很高,同样会影响QP问题的计算效率。可以说,
这一步是计算的瓶颈所在。
其实问题的关键在于
内积求解上。我们知道,z是由x经过特征转换而来:

如果从x空间来看的话,
分为两个步骤:1. 进行特征转换
和
;2. 计算
与
的内积。这种先转换再计算内积的方式,必然会引入
参数,从而在
很大的时候影响计算速度。那么,若把这两个步骤联合起来,是否可以有效地减小计算量,提高计算速度呢?
我们先来看一个简单的例子,对于二阶多项式转换,各种排列组合为:

这里提一下,为了简单起见,我们把
包含进来,同时将二次项
和
也包含进来。转换之后再做内积并进行推导,得到:

其中
是x空间中特征向量的内积。所以,
与
的内积的复杂度由原来的
变成
,只与x空间的维度d有关,而与z空间的维度
无关,这正是我们想要的!
至此,我们发现如果把特征转换和z空间计算内积这两个步骤合并起来,有可能会简化计算。因为我们只是推导了二阶多项式会提高运算速度,这个特例并不具有一般推论性。但是,我们还是看到了希望。
我们把合并特征转换和计算内积这两个步骤的操作叫做Kernel Function,用大写字母K表示。例如刚刚讲的二阶多项式例子,它的kernel function为:


有了kernel function之后,我们来看看它在SVM里面如何使用。在dual SVM中,二次项系数
中有z的内积计算,就可以用kernel function替换:

所以,直接计算出
,再代入上式,就能得到
的值。
值计算之后,就能通过QP得到拉格朗日因子
。然后,下一步就是计算b(取
>0的点,即SV),b的表达式中包含z,可以作如下推导:

这样得到的b就可以用kernel function表示,而与z空间无关。
最终我们要求的矩
可以作如下推导:

至此,dual SVM中我们所有需要求解的参数都已经得到了,而且整个计算过程中都没有在z空间作内积,即与z无关。我们把这个过程称为kernel trick,也就是把特征转换和计算内积两个步骤结合起来,用kernel function来避免计算过程中受
的影响,从而提高运算速度。

那么总结一下,引入kernel funtion后,SVM算法变成:

分析每个步骤的时间复杂度为:

我们把这种引入kernel function的SVM称为kernel SVM,它是基于dual SVM推导而来的。kernel SVM同样只用SV(
>0)就能得到最佳分类面,而且整个计算过程中摆脱了
的影响,大大提高了计算速度。
Polynomial Kernel
我们刚刚通过一个特殊的二次多项式导出了相对应的kernel,其实二次多项式的kernel形式是多种的。例如,相应系数的放缩构成完全平方公式等。下面列举了几种常用的二次多项式kernel形式:

比较一下,第一种
(蓝色标记)和第三种
(绿色标记)从某种角度来说是一样的,因为都是二次转换,对应到同一个z空间。但是,它们系数不同,内积就会有差异,那么就代表有不同的距离,最终可能会得到不同的SVM margin。所以,系数不同,可能会得到不同的SVM分界线。通常情况下,第三种
(绿色标记)简单一些,更加常用。

不同的转换,对应到不同的几何距离,得到不同的距离,这是什么意思呢?举个例子,对于我们之前介绍的一般的二次多项式kernel,它的SVM margin和对应的SV如下图(中)所示。对于上面介绍的完全平方公式形式,自由度
,它的SVM margin和对应的SV如下图(左)所示。比较发现,这种SVM margin比较简单一些。对于自由度
,它的SVM margin和对应的SV如下图(右)所示。与前两种比较,margin和SV都有所不同。

通过改变不同的系数,得到不同的SVM margin和SV,如何选择正确的kernel,非常重要。
归纳一下,引入
和
,对于Q次多项式一般的kernel形式可表示为:

所以,使用高阶的多项式kernel有两个优点:
-
得到最大SVM margin,SV数量不会太多,分类面不会太复杂,防止过拟合,减少复杂度
-
计算过程避免了对
的依赖,大大简化了计算量。

顺便提一下,当多项式阶数Q=1时,那么对应的kernel就是线性的,即本系列课程第一节课所介绍的内容。对于linear kernel,计算方法是简单的,而且也是我们解决SVM问题的首选。还记得机器学习基石课程中介绍的奥卡姆剃刀定律(Occam’s Razor)吗?
Gaussian Kernel
刚刚我们介绍的Q阶多项式kernel的阶数是有限的,即特征转换的
是有限的。但是,如果是无限多维的转换
,是否还能通过kernel的思想,来简化SVM的计算呢?答案是肯定的。
先举个例子,简单起见,假设原空间是一维的,只有一个特征x,我们构造一个kernel function为高斯函数:

构造的过程正好与二次多项式kernel的相反,利用反推法,先将上式分解并做泰勒展开:

将构造的K(x,x’)推导展开为两个
和
的乘积,其中:

通过反推,我们得到了
,
是无限多维的,它就可以当成特征转换的函数,且
是无限的。这种
得到的核函数即为Gaussian kernel。
更一般地,对于原空间不止一维的情况(d>1),引入缩放因子
,它对应的Gaussian kernel表达式为:

那么引入了高斯核函数,将有限维度的特征转换拓展到无限的特征转换中。根据本节课上一小节的内容,由K,计算得到
和b,进而得到矩
。将其中的核函数K用高斯核函数代替,得到:

通过上式可以看出,
有n个高斯函数线性组合而成,其中n是SV的个数。而且,每个高斯函数的中心都是对应的SV。通常我们也把高斯核函数称为径向基函数(Radial Basis Function, RBF)。

总结一下,kernel SVM可以获得large-margin的hyperplanes,并且可以通过高阶的特征转换使
尽可能地小。kernel的引入大大简化了dual SVM的计算量。而且,Gaussian kernel能将特征转换扩展到无限维,并使用有限个SV数量的高斯函数构造出矩
。

值得注意的是,缩放因子
取值不同,会得到不同的高斯核函数,hyperplanes不同,分类效果也有很大的差异。举个例子,
分别取1, 10, 100时对应的分类效果如下:

从图中可以看出,当
比较小的时候,分类线比较光滑,当
越来越大的时候,分类线变得越来越复杂和扭曲,直到最后,分类线变成一个个独立的小区域,像小岛一样将每个样本单独包起来了。为什么会出现这种区别呢?这是因为
越大,其对应的高斯核函数越尖瘦,那么有限个高斯核函数的线性组合就比较离散,分类效果并不好。所以,SVM也会出现过拟合现象,
的正确选择尤为重要,不能太大。
Comparison of Kernels
目前为止,我们已经介绍了几种kernel,下面来对几种kernel进行比较。
首先,Linear Kernel是最简单最基本的核,平面上对应一条直线,三维空间里对应一个平面。Linear Kernel可以使用上一节课介绍的Dual SVM中的QP直接计算得到。

Linear Kernel的优点是计算简单、快速,可以直接使用QP快速得到参数值,而且从视觉上分类效果非常直观,便于理解;缺点是如果数据不是线性可分的情况,Linear Kernel就不能使用了。

然后,Polynomial Kernel的hyperplanes是由多项式曲线构成。

Polynomial Kernel的优点是阶数Q可以灵活设置,相比linear kernel限制更少,更贴近实际样本分布;缺点是当Q很大时,K的数值范围波动很大,而且参数个数较多,难以选择合适的值。

对于Gaussian Kernel,表示为高斯函数形式。

Gaussian Kernel的优点是边界更加复杂多样,能最准确地区分数据样本,数值计算K值波动较小,而且只有一个参数,容易选择;缺点是由于特征转换到无限维度中,w没有求解出来,计算速度要低于linear kernel,而且可能会发生过拟合。

除了这三种kernel之外,我们还可以使用其它形式的kernel。首先,我们考虑kernel是什么?实际上kernel代表的是两笔资料x和x’,特征变换后的相似性即内积。但是不能说任何计算相似性的函数都可以是kernel。有效的kernel还需满足几个条件:
-
K是对称的
-
K是半正定的
这两个条件不仅是必要条件,同时也是充分条件。所以,只要我们构造的K同时满足这两个条件,那它就是一个有效的kernel。这被称为Mercer 定理。事实上,构造一个有效的kernel是比较困难的。

总结
本节课主要介绍了Kernel Support Vector Machine。首先,我们将特征转换和计算内积的操作合并到一起,消除了
的影响,提高了计算速度。然后,分别推导了Polynomial Kernel和Gaussian Kernel,并列举了各自的优缺点并做了比较。对于不同的问题,应该选择合适的核函数进行求解,以达到最佳的分类效果。
注明:
文章中所有的图片均来自台湾大学林轩田《机器学习技法》课程
4 -- Soft-Margin Support Vector Machine
上节课我们主要介绍了Kernel SVM。先将特征转换和计算内积这两个步骤合并起来,简化计算、提高计算速度,再用Dual SVM的求解方法来解决。Kernel SVM不仅能解决简单的线性分类问题,也可以求解非常复杂甚至是无限多维的分类问题,关键在于核函数的选择,例如线性核函数、多项式核函数和高斯核函数等等。但是,我们之前讲的这些方法都是Hard-Margin SVM,即必须将所有的样本都分类正确才行。这往往需要更多更复杂的特征转换,甚至造成过拟合。本节课将介绍一种Soft-Margin SVM,目的是让分类错误的点越少越好,而不是必须将所有点分类正确,也就是允许有noise存在。这种做法很大程度上不会使模型过于复杂,不会造成过拟合,而且分类效果是令人满意的。
Motivation and Primal Problem
上节课我们说明了一点,就是SVM同样可能会造成overfit。原因有两个,一个是由于我们的SVM模型(即kernel)过于复杂,转换的维度太多,过于powerful了;另外一个是由于我们坚持要将所有的样本都分类正确,即不允许错误存在,造成模型过于复杂。如下图所示,左边的图
是线性的,虽然有几个点分类错误,但是大部分都能完全分开。右边的图
是四次多项式,所有点都分类正确了,但是模型比较复杂,可能造成过拟合。直观上来说,左边的图是更合理的模型。

如何避免过拟合?方法是允许有分类错误的点,即把某些点当作是noise,放弃这些noise点,但是尽量让这些noise个数越少越好。回顾一下我们在机器学习基石笔记中介绍的pocket算法,pocket的思想不是将所有点完全分开,而是找到一条分类线能让分类错误的点最少。而Hard-Margin SVM的目标是将所有点都完全分开,不允许有错误点存在。为了防止过拟合,我们可以借鉴pocket的思想,即允许有犯错误的点,目标是让这些点越少越好。

为了引入允许犯错误的点,我们将Hard-Margin SVM的目标和条件做一些结合和修正,转换为如下形式:

修正后的条件中,对于分类正确的点,仍需满足
,而对于noise点,满足
,即没有限制。修正后的目标除了
项,还添加了
,即noise点的个数。参数C的引入是为了权衡目标第一项和第二项的关系,即权衡large margin和noise tolerance的关系。
我们再对上述的条件做修正,将两个条件合并,得到:

这个式子存在两个不足的地方。首先,最小化目标中第二项是非线性的,不满足QP的条件,所以无法使用dual或者kernel SVM来计算。然后,对于犯错误的点,有的离边界很近,即error小,而有的离边界很远,error很大,上式的条件和目标没有区分small error和large error。这种分类效果是不完美的。

为了改正这些不足,我们继续做如下修正:

修正后的表达式中,我们引入了新的参数
来表示每个点犯错误的程度值,
。通过使用error值的大小代替是否有error,让问题变得易于求解,满足QP形式要求。这种方法类似于我们在机器学习基石笔记中介绍的0/1 error和squared error。这种soft-margin SVM引入新的参数
。
至此,最终的Soft-Margin SVM的目标为:

条件是:


其中,
表示每个点犯错误的程度,
,表示没有错误,
越大,表示错误越大,即点距离边界(负的)越大。参数C表示尽可能选择宽边界和尽可能不要犯错两者之间的权衡,因为边界宽了,往往犯错误的点会增加。large C表示希望得到更少的分类错误,即不惜选择窄边界也要尽可能把更多点正确分类;small C表示希望得到更宽的边界,即不惜增加错误点个数也要选择更宽的分类边界。
与之对应的QP问题中,由于新的参数
的引入,总共参数个数为
,限制条件添加了
,则总条件个数为2N。

Dual Problem
接下来,我们将推导Soft-Margin SVM的对偶dual形式,从而让QP计算更加简单,并便于引入kernel算法。首先,我们把Soft-Margin SVM的原始形式写出来:

然后,跟我们在第二节课中介绍的Hard-Margin SVM做法一样,构造一个拉格朗日函数。因为引入了
,原始问题有两类条件,所以包含了两个拉格朗日因子
和
。拉格朗日函数可表示为如下形式:

接下来,我们跟第二节课中的做法一样,利用Lagrange dual problem,将Soft-Margin SVM问题转换为如下形式:

根据之前介绍的KKT条件,我们对上式进行简化。上式括号里面的是对拉格朗日函数
计算最小值。那么根据梯度下降算法思想:最小值位置满足梯度为零。
我们先对
做偏微分:

根据上式,得到
,因为有
,所以限制
。将
代入到dual形式中并化简,我们发现
和
都被消去了:

这个形式跟Hard-Margin SVM中的dual形式是基本一致的,只是条件不同。那么,我们分别令拉个朗日函数L对b和w的偏导数为零,分别得到:


经过化简和推导,最终标准的Soft-Margin SVM的Dual形式如下图所示:

Soft-Margin SVM Dual与Hard-Margin SVM Dual基本一致,只有一些条件不同。Hard-Margin SVM Dual中
,而Soft-Margin SVM Dual中
,且新的拉格朗日因子
。在QP问题中,Soft-Margin SVM Dual的参数
同样是N个,但是,条件由Hard-Margin SVM Dual中的N+1个变成2N+1个,这是因为多了N个
的上界条件。
对于Soft-Margin SVM Dual这部分推导不太清楚的同学,可以看下第二节课的笔记:2 – Dual Support Vector Machine
Messages behind Soft-Margin SVM
推导完Soft-Margin SVM Dual的简化形式后,就可以利用QP,找到Q,p,A,c对应的值,用软件工具包得到
的值。或者利用核函数的方式,同样可以简化计算,优化分类效果。Soft-Margin SVM Dual计算
的方法过程与Hard-Margin SVM Dual的过程是相同的。

但是如何根据
的值计算b呢?在Hard-Margin SVM Dual中,有complementary slackness条件:
,找到SV,即
的点,计算得到
。
那么,在Soft-Margin SVM Dual中,相应的complementary slackness条件有两个(因为两个拉格朗日因子
和
):


找到SV,即
的点,由于参数
的存在,还不能完全计算出b的值。根据第二个complementary slackness条件,如果令
,即
,则一定有
,代入到第一个complementary slackness条件,即可计算得到
。我们把
的点称为free SV。引入核函数后,b的表达式为:

上面求解b提到的一个假设是
,这个假设是否一定满足呢?如果没有free SV,所有
大于零的点都满足
怎么办?一般情况下,至少存在一组SV使
的概率是很大的。如果出现没有free SV的情况,那么b通常会由许多不等式条件限制取值范围,值是不确定的,只要能找到其中满足KKT条件的任意一个b值就可以了。这部分细节比较复杂,不再赘述。

接下来,我们看看C取不同的值对margin的影响。例如,对于Soft-Margin Gaussian SVM,C分别取1,10,100时,相应的margin如下图所示:

从上图可以看出,C=1时,margin比较粗,但是分类错误的点也比较多,当C越来越大的时候,margin越来越细,分类错误的点也在减少。正如前面介绍的,C值反映了margin和分类正确的一个权衡。C越小,越倾向于得到粗的margin,宁可增加分类错误的点;C越大,越倾向于得到高的分类正确率,宁可margin很细。我们发现,当C值很大的时候,虽然分类正确率提高,但很可能把noise也进行了处理,从而可能造成过拟合。也就是说Soft-Margin Gaussian SVM同样可能会出现过拟合现象,所以参数
的选择非常重要。
我们再来看看
取不同值是对应的物理意义。已知
满足两个complementary slackness条件:


若
,得
。
表示该点没有犯错,
表示该点不是SV。所以对应的点在margin之外(或者在margin上),且均分类正确。
若
,得
,且
。
表示该点没有犯错,
表示该点在margin上。这些点即free SV,确定了b的值。
若
,不能确定
是否为零,且得到
,这个式表示该点偏离margin的程度,
越大,偏离margin的程度越大。只有当
时,该点落在margin上。所以这种情况对应的点在margin之内负方向(或者在margin上),有分类正确也有分类错误的。这些点称为bounded SV。
所以,在Soft-Margin SVM Dual中,根据
的取值,就可以推断数据点在空间的分布情况。

Model Selection
在Soft-Margin SVM Dual中,kernel的选择、C等参数的选择都非常重要,直接影响分类效果。例如,对于Gaussian SVM,不同的参数
,会得到不同的margin,如下图所示。

其中横坐标是C逐渐增大的情况,纵坐标是
逐渐增大的情况。不同的
组合,margin的差别很大。那么如何选择最好的
等参数呢?最简单最好用的工具就是validation。
validation我们在机器学习基石课程中已经介绍过,只需要将由不同
等参数得到的模型在验证集上进行cross validation,选取
最小的对应的模型就可以了。例如上图中各种
组合得到的
如下图所示:

因为左下角的
最小,所以就选择该
对应的模型。通常来说,
并不是
的连续函数,很难使用最优化选择(例如梯度下降)。一般做法是选取不同的离散的
值进行组合,得到最小的
,其对应的模型即为最佳模型。这种算法就是我们之前在机器学习基石中介绍过的V-Fold cross validation,在SVM中使用非常广泛。
V-Fold cross validation的一种极限就是Leave-One-Out CV,也就是验证集只有一个样本。对于SVM问题,它的验证集Error满足:

也就是说留一法验证集Error大小不超过支持向量SV占所有样本的比例。下面做简单的证明。令样本总数为N,对这N个点进行SVM分类后得到margin,假设第N个点
的
,不是SV,即远离margin(正距离)。这时候,如果我们只使用剩下的N-1个点来进行SVM分类,那么第N个点
必然是分类正确的点,所得的SVM margin跟使用N个点的到的是完全一致的。这是因为我们假设第N个点是non-SV,对SV没有贡献,不影响margin的位置和形状。所以前N-1个点和N个点得到的margin是一样的。
那么,对于non-SV的点,它的
,即对第N个点,它的Error必然为零:

另一方面,假设第N个点
,即对于SV的点,它的Error可能是0,也可能是1,必然有:

综上所述,即证明了
。这符合我们之前得到的结论,即只有SV影响margin,non-SV对margin没有任何影响,可以舍弃。
SV的数量在SVM模型选择中也是很重要的。一般来说,SV越多,表示模型可能越复杂,越有可能会造成过拟合。所以,通常选择SV数量较少的模型,然后在剩下的模型中使用cross-validation,比较选择最佳模型。
总结
本节课主要介绍了Soft-Margin SVM。我们的出发点是与Hard-Margin SVM不同,不一定要将所有的样本点都完全分开,允许有分类错误的点,而使margin比较宽。然后,我们增加了
作为分类错误的惩罚项,根据之前介绍的Dual SVM,推导出了Soft-Margin SVM的QP形式。得到的
除了要满足大于零,还有一个上界C。接着介绍了通过
值的大小,可以将数据点分为三种:non-SVs,free SVs,bounded SVs,这种更清晰的物理解释便于数据分析。最后介绍了如何选择合适的SVM模型,通常的办法是cross-validation和利用SV的数量进行筛选。
注明:
文章中所有的图片均来自台湾大学林轩田《机器学习技法》课程
5 -- Kernel Logistic Regression
上节课我们主要介绍了Soft-Margin SVM,即如果允许有分类错误的点存在,那么在原来的Hard-Margin SVM中添加新的惩罚因子C,修正原来的公式,得到新的
值。最终的到的
有个上界,上界就是C。Soft-Margin SVM权衡了large-margin和error point之前的关系,目的是在尽可能犯更少错误的前提下,得到最大分类边界。本节课将把Soft-Margin SVM和我们之前介绍的Logistic Regression联系起来,研究如何使用kernel技巧来解决更多的问题。
Soft-Margin SVM as Regularized Model
先复习一下我们已经介绍过的内容,我们最早开始讲了Hard-Margin Primal的数学表达式,然后推导了Hard-Margin Dual形式。后来,为了允许有错误点的存在(或者noise),也为了避免模型过于复杂化,造成过拟合,我们建立了Soft-Margin Primal的数学表达式,并引入了新的参数C作为权衡因子,然后也推导了其Soft-Margin Dual形式。因为Soft-Margin Dual SVM更加灵活、便于调整参数,所以在实际应用中,使用Soft-Margin Dual SVM来解决分类问题的情况更多一些。

Soft-Margin Dual SVM有两个应用非常广泛的工具包,分别是Libsvm和Liblinear。 Libsvm和Liblinear都是国立台湾大学的Chih-Jen Lin博士开发的,Chih-Jen Lin的个人网站为:Welcome to Chih-Jen Lin’s Home Page
下面我们再来回顾一下Soft-Margin SVM的主要内容。我们的出发点是用
来表示margin violation,即犯错值的大小,没有犯错对应的
。然后将有条件问题转化为对偶dual形式,使用QP来得到最佳化的解。
从另外一个角度来看,
描述的是点
距离
的边界有多远。第一种情况是violating margin,即不满足
。那么
可表示为:
。第二种情况是not violating margin,即点
在边界之外,满足
的条件,此时
。我们可以将两种情况整合到一个表达式中,对任意点:

上式表明,如果有voilating margin,则
,
;如果not violating margin,则
,
。整合之后,我们可以把Soft-Margin SVM的最小化问题写成如下形式:

经过这种转换之后,表征犯错误值大小的变量
就被消去了,转而由一个max操作代替。

为什么要将把Soft-Margin SVM转换为这种unconstrained form呢?我们再来看一下转换后的形式,其中包含两项,第一项是w的内积,第二项关于y和w,b,z的表达式,似乎有点像一种错误估计
,则类似这样的形式:

看到这样的形式我们应该很熟悉,因为之前介绍的L2 Regularization中最优化问题的表达式跟这个是类似的:


这里提一下,既然unconstrained form SVM与L2 Regularization的形式是一致的,而且L2 Regularization的解法我们之前也介绍过,那么为什么不直接利用这种方法来解决unconstrained form SVM的问题呢?有两个原因。一个是这种无条件的最优化问题无法通过QP解决,即对偶推导和kernel都无法使用;另一个是这种形式中包含的max()项可能造成函数并不是处处可导,这种情况难以用微分方法解决。
我们在第一节课中就介绍过Hard-Margin SVM与Regularization Model是有关系的。Regularization的目标是最小化
,条件是
,而Hard-Margin SVM的目标是最小化
,条件是
,即它们的最小化目标和限制条件是相互对调的。对于L2 Regularization来说,条件和最优化问题结合起来,整体形式写成:

而对于Soft-Margin SVM来说,条件和最优化问题结合起来,整体形式写成:


通过对比,我们发现L2 Regularization和Soft-Margin SVM的形式是相同的,两个式子分别包含了参数
和C。Soft-Margin SVM中的large margin对应着L2 Regularization中的short w,也就是都让hyperplanes更简单一些。我们使用特别的
来代表可以容忍犯错误的程度,即soft margin。L2 Regularization中的
和Soft-Margin SVM中的C也是相互对应的,
越大,w会越小,Regularization的程度就越大;C越小,
会越大,相应的margin就越大。所以说增大C,或者减小
,效果是一致的,Large-Margin等同于Regularization,都起到了防止过拟合的作用。

建立了Regularization和Soft-Margin SVM的关系,接下来我们将尝试看看是否能把SVM作为一个regularized的模型进行扩展,来解决其它一些问题。
SVM versus Logistic Regression
上一小节,我们已经把Soft-Margin SVM转换成无条件的形式:

上式中第二项的
倍设置为
。下面我们来看看
与之前再二元分类中介绍过的
有什么关系。
对于
,它的linear score
,当
时,
;当
时,
,呈阶梯状,如下图所示。而对于
,当
时,
;当
时,
,呈折线状,如下图所示,通常把
称为hinge error measure。比较两条error曲线,我们发现
始终在
的上面,则
可作为
的上界。所以,可以使用
来代替
,解决二元线性分类问题,而且
是一个凸函数,使它在最佳化问题中有更好的性质。

紧接着,我们再来看一下logistic regression中的error function。逻辑回归中,
,当ys=0时,
。它的err曲线如下所示。

很明显,
也是
的上界,而
与
也是比较相近的。因为当ys趋向正无穷大的时候,
和
都趋向于零;当ys趋向负无穷大的时候,
和
都趋向于正无穷大。正因为二者的这种相似性,我们可以把SVM看成是L2-regularized logistic regression。
总结一下,我们已经介绍过几种Binary Classification的Linear Models,包括PLA,Logistic Regression和Soft-Margin SVM。PLA是相对简单的一个模型,对应的是
,通过不断修正错误的点来获得最佳分类线。它的优点是简单快速,缺点是只对线性可分的情况有用,线性不可分的情况需要用到pocket算法。Logistic Regression对应的是
,通常使用GD/SGD算法求解最佳分类线。它的优点是凸函数
便于最优化求解,而且有regularization作为避免过拟合的保证;缺点是
作为
的上界,当ys很小(负值)时,上界变得更宽松,不利于最优化求解。Soft-Margin SVM对应的是
,通常使用QP求解最佳分类线。它的优点和Logistic Regression一样,凸优化问题计算简单而且分类线比较“粗壮”一些;缺点也和Logistic Regression一样,当ys很小(负值)时,上界变得过于宽松。其实,Logistic Regression和Soft-Margin SVM都是在最佳化
的上界而已。

至此,可以看出,求解regularized logistic regression的问题等同于求解soft-margin SVM的问题。反过来,如果我们求解了一个soft-margin SVM的问题,那这个解能否直接为regularized logistic regression所用?来预测结果是正类的几率是多少,就像regularized logistic regression做的一样。我们下一小节将来解答这个问题。
SVM for Soft Binary Classification
接下来,我们探讨如何将SVM的结果应用在Soft Binary Classification中,得到是正类的概率值。
第一种简单的方法是先得到SVM的解
,然后直接代入到logistic regression中,得到
。这种方法直接使用了SVM和logistic regression的相似性,一般情况下表现还不错。但是,这种形式过于简单,与logistic regression的关联不大,没有使用到logistic regression中好的性质和方法。
第二种简单的方法是同样先得到SVM的解
,然后把
作为logistic regression的初始值,再进行迭代训练修正,速度比较快,最后,将得到的b和w代入到g(x)中。这种做法有点显得多此一举,因为并没有比直接使用logistic regression快捷多少。

这两种方法都没有融合SVM和logistic regression各自的优势,下面构造一个模型,融合了二者的优势。构造的模型g(x)表达式为:

与上述第一种简单方法不同,我们额外增加了放缩因子A和平移因子B。首先利用SVM的解
来构造这个模型,放缩因子A和平移因子B是待定系数。然后再用通用的logistic regression优化算法,通过迭代优化,得到最终的A和B。一般来说,如果
较为合理的话,满足A>0且
。

那么,新的logistic regression表达式为:

这个表达式看上去很复杂,其实其中的
已经在SVM中解出来了,实际上的未知参数只有A和B两个。归纳一下,这种Probabilistic SVM的做法分为三个步骤:

这种soft binary classifier方法得到的结果跟直接使用SVM classifier得到的结果可能不一样,这是因为我们引入了系数A和B。一般来说,soft binary classifier效果更好。至于logistic regression的解法,可以选择GD、SGD等等。
Kernel Logistic Regression
上一小节我们介绍的是通过kernel SVM在z空间中求得logistic regression的近似解。如果我们希望直接在z空间中直接求解logistic regression,通过引入kernel,来解决最优化问题,又该怎么做呢?SVM中使用kernel,转化为QP问题,进行求解,但是logistic regression却不是个QP问题,看似好像没有办法利用kernel来解决。
我们先来看看之前介绍的kernel trick为什么会work,kernel trick就是把z空间的内积转换到x空间中比较容易计算的函数。如果w可以表示为z的线性组合,即
的形式,那么乘积项
,即其中包含了z的内积。也就是w可以表示为z的线性组合是kernel trick可以work的关键。
我们之前介绍过SVM、PLA包扩logistic regression都可以表示成z的线性组合,这也提供了一种可能,就是将kernel应用到这些问题中去,简化z空间的计算难度。

有这样一个理论,对于L2-regularized linear model,如果它的最小化问题形式为如下的话,那么最优解
。

下面给出简单的证明,假如最优解
。其中,
和
分别是平行z空间和垂直z空间的部分。我们需要证明的是
。利用反证法,假如
,考虑
与
的比较。第一步先比较最小化问题的第二项:
,即第二项是相等的。然后第二步比较第一项:
,即
对应的L2-regularized linear model值要比
大,这就说明
并不是最优解,从而证明
必然等于零,即
一定成立,
一定可以写成z的线性组合形式。

经过证明和分析,我们得到了结论是任何L2-regularized linear model都可以使用kernel来解决。
现在,我们来看看如何把kernel应用在L2-regularized logistic regression上。上面我们已经证明了
一定可以写成z的线性组合形式,即
。那么我们就无需一定求出
,而只要求出其中的
就行了。怎么求呢?直接将
代入到L2-regularized logistic regression最小化问题中,得到:


上式中,所有的w项都换成
来表示了,变成了没有条件限制的最优化问题。我们把这种问题称为kernel logistic regression,即引入kernel,将求w的问题转换为求
的问题。
从另外一个角度来看Kernel Logistic Regression(KLR):

上式中log项里的
可以看成是变量
和
的内积。上式第一项中的
可以看成是关于
的正则化项
。所以,KLR是
的线性组合,其中包含了kernel内积项和kernel regularizer。这与SVM是相似的形式。
但值得一提的是,KLR中的
与SVM中的
是有区别的。SVM中的
大部分为零,SV的个数通常是比较少的;而KLR中的
通常都是非零值。
总结
本节课主要介绍了Kernel Logistic Regression。首先把Soft-Margin SVM解释成Regularized Model,建立二者之间的联系,其实Soft-Margin SVM就是一个L2-regularization,对应着hinge error messure。然后利用它们之间的相似性,讨论了如何利用SVM的解来得到Soft Binary Classification。方法是先得到SVM的解,再在logistic regression中引入参数A和B,迭代训练,得到最佳解。最后介绍了Kernel Logistic Regression,证明L2-regularized logistic regression中,最佳解
一定可以写成z的线性组合形式,从而可以将kernel引入logistic regression中,使用kernel思想在z空间直接求解L2-regularized logistic regression问题。
注明:
文章中所有的图片均来自台湾大学林轩田《机器学习技法》课程
6 -- Support Vector Regression
上节课我们主要介绍了Kernel Logistic Regression,讨论如何把SVM的技巧应用在soft-binary classification上。方法是使用2-level learning,先利用SVM得到参数b和w,然后再用通用的logistic regression优化算法,通过迭代优化,对参数b和w进行微调,得到最佳解。然后,也介绍了可以通过Representer Theorem,在z空间中,引入SVM的kernel技巧,直接对logistic regression进行求解。本节课将延伸上节课的内容,讨论如何将SVM的kernel技巧应用到regression问题上。
Kernel Ridge Regression
首先回顾一下上节课介绍的Representer Theorem,对于任何包含正则项的L2-regularized linear model,它的最佳化解w都可以写成是z的线性组合形式,因此,也就能引入kernel技巧,将模型kernelized化。

那么如何将regression模型变成kernel的形式呢?我们之前介绍的linear/ridge regression最常用的错误估计是squared error,即
。这种形式对应的解是analytic solution,即可以使用线性最小二乘法,通过向量运算,直接得到最优化解。那么接下来我们就要研究如何将kernel引入到ridge regression中去,得到与之对应的analytic solution。
我们先把Kernel Ridge Regression问题写下来:

其中,最佳解
必然是z的线性组合。那么我们就把
代入到ridge regression中,将z的内积用kernel替换,把求
的问题转化成求
的问题,得到:

ridge regression可以写成矩阵的形式,其中第一项可以看成是
的正则项,而第二项可以看成是
的error function。这样,我们的目的就是求解该式最小化对应的
值,这样就解决了kernel ridge regression问题。
求解
的问题可以写成如下形式:

是关于
的二次多项式,要对
求最小化解,这种凸二次最优化问题,只需要先计算其梯度,再令梯度为零即可。
已经在上式中写出来了,令其等于零,即可得到一种可能的
的解析解为:

这里需要关心的问题是
的逆矩阵是否存在?答案是肯定的。因为我们之前介绍过,核函数K满足Mercer’s condition,它是半正定的,而且
,所以
一定是可逆的。从计算的时间复杂上来说,由于
是NxN大小的,所以时间复杂度是
。还有一点,
是由两项乘积构成的,另一项是K,会不会出现K=0的情况呢?其实,由于核函数K表征的是z空间的内积,一般而言,除非两个向量互相垂直,内积才为零,否则,一般情况下K不等于零。这个原因也决定了
是dense matrix,即
的解大部分都是非零值。这个性质,我们之后还会说明。
所以说,我们可以通过kernel来解决non-linear regression的问题。下面比较一下linear ridge regression和kernel ridge regression的关系。

如上图所示,左边是linear ridge regression,是一条直线;右边是kernel ridge regression,是一条曲线。大致比较一下,右边的曲线拟合的效果更好一些。这两种regression有什么样的优点和缺点呢?对于linear ridge regression来说,它是线性模型,只能拟合直线;其次,它的训练复杂度是
,预测的复杂度是
,如果N比d大很多时,这种模型就更有效率。而对于kernel ridge regression来说,它转换到z空间,使用kernel技巧,得到的是非线性模型,所以更加灵活;其次,它的训练复杂度是
,预测的复杂度是
,均只与N有关。当N很大的时候,计算量就很大,所以,kernel ridge regression适合N不是很大的场合。比较下来,可以说linear和kernel实际上是效率(efficiency)和灵活(flexibility)之间的权衡。

Support Vector Regression Primal
我们在机器学习基石课程中介绍过linear regression可以用来做classification,那么上一部分介绍的kernel ridge regression同样可以来做classification。我们把kernel ridge regression应用在classification上取个新的名字,叫做least-squares SVM(LSSVM)。
先来看一下对于某个问题,soft-margin Gaussian SVM和Gaussian LSSVM结果有哪些不一样的地方。

如上图所示,如果只看分类边界的话,soft-margin Gaussian SVM和Gaussian LSSVM差别不是很大,即的到的分类线是几乎相同的。但是如果看Support Vector的话(图中方框标注的点),左边soft-margin Gaussian SVM的SV不多,而右边Gaussian LSSVM中基本上每个点都是SV。这是因为soft-margin Gaussian SVM中的
大部分是等于零,
的点只占少数,所以SV少。而对于LSSVM,我们上一部分介绍了
的解大部分都是非零值,所以对应的每个点基本上都是SV。SV太多会带来一个问题,就是做预测的矩
,如果
非零值较多,那么g的计算量也比较大,降低计算速度。基于这个原因,soft-margin Gaussian SVM更有优势。

那么,针对LSSVM中dense
的缺点,我们能不能使用一些方法来的得到sparse
,使得SV不会太多,从而得到和soft-margin SVM同样的分类效果呢?下面我们将尝试解决这个问题。
方法是引入一个叫做Tube Regression的做法,即在分类线上下分别划定一个区域(中立区),如果数据点分布在这个区域内,则不算分类错误,只有误分在中立区域之外的地方才算error。

假定中立区的宽度为
,
,那么error measure就可以写成:
,对应上图中红色标注的距离。

通常把这个error叫做
-insensitive error,这种max的形式跟我们上节课中介绍的hinge error measure形式其实是类似的。所以,我们接下来要做的事情就是将L2-regularized tube regression做类似于soft-margin SVM的推导,从而得到sparse
。
首先,我们把tube regression中的error与squared error做个比较:

然后,将err(y,s)与s的关系曲线分别画出来:

上图中,红色的线表示squared error,蓝色的线表示tube error。我们发现,当|s-y|比较小即s比较接近y的时候,squared error与tube error是差不多大小的。而在|s-y|比较大的区域,squared error的增长幅度要比tube error大很多。error的增长幅度越大,表示越容易受到noise的影响,不利于最优化问题的求解。所以,从这个方面来看,tube regression的这种error function要更好一些。
现在,我们把L2-Regularized Tube Regression写下来:

这个最优化问题,由于其中包含max项,并不是处处可微分的,所以不适合用GD/SGD来求解。而且,虽然满足representer theorem,有可能通过引入kernel来求解,但是也并不能保证得到sparsity
。从另一方面考虑,我们可以把这个问题转换为带条件的QP问题,仿照dual SVM的推导方法,引入kernel,得到KKT条件,从而保证解
是sparse的。

所以,我们就可以把L2-Regularized Tube Regression写成跟SVM类似的形式:

值得一提的是,系数
和C是反比例相关的,
越大对应C越小,
越小对应C越大。而且该式也把
即b单独拿了出来,这跟我们之前推导SVM的解的方法是一致的。
现在我们已经有了Standard Support Vector Regression的初始形式,这还是不是一个标准的QP问题。我们继续对该表达式做一些转化和推导:

如上图右边所示,即为标准的QP问题,其中
和
分别表示upper tube violations和lower tube violations。这种形式叫做Support Vector Regression(SVR) primal。

SVR的标准QP形式包含几个重要的参数:C和
。C表示的是regularization和tube violation之间的权衡。large C倾向于tube violation,small C则倾向于regularization。
表征了tube的区域宽度,即对错误点的容忍程度。
越大,则表示对错误的容忍度越大。
是可设置的常数,是SVR问题中独有的,SVM中没有这个参数。另外,SVR的QP形式共有
个参数,2N+2N个条件。

Support Vector Regression Dual
现在我们已经得到了SVR的primal形式,接下来将推导SVR的Dual形式。首先,与SVM对偶形式一样,先令拉格朗日因子
和
,分别是与
和
不等式相对应。这里忽略了与
和
对应的拉格朗日因子。

然后,与SVM一样做同样的推导和化简,拉格朗日函数对相关参数偏微分为零,得到相应的KKT条件:

接下来,通过观察SVM primal与SVM dual的参数对应关系,直接从SVR primal推导出SVR dual的形式。(具体数学推导,此处忽略!)

最后,我们就要来讨论一下SVR的解是否真的是sparse的。前面已经推导了SVR dual形式下推导的解w为:

相应的complementary slackness为:

对于分布在tube中心区域内的点,满足
,此时忽略错误,
和
都等于零。则complementary slackness两个等式的第二项均不为零,必然得到
和
,即
。
所以,对于分布在tube内的点,得到的解
,是sparse的。而分布在tube之外的点,
。至此,我们就得到了SVR的sparse解。
Summary of Kernel Models
这部分将对我们介绍过的所有的kernel模型做个概括和总结。我们总共介绍过三种线性模型,分别是PLA/pocket,regularized logistic regression和linear ridge regression。这三种模型都可以使用国立台湾大学的Chih-Jen Lin博士开发的Liblinear库函数来解决。
另外,我们介绍了linear soft-margin SVM,其中的error function是
,可以通过标准的QP问题来求解。linear soft-margin SVM和PLA/pocket一样都是解决同样的问题。然后,还介绍了linear SVR问题,它与linear ridge regression一样都是解决同样的问题,从SVM的角度,使用
,转换为QP问题进行求解,这也是我们本节课的主要内容。

上图中相应的模型也可以转化为dual形式,引入kernel,整体的框图如下:

其中SVM,SVR和probabilistic SVM都可以使用国立台湾大学的Chih-Jen Lin博士开发的LLibsvm库函数来解决。通常来说,这些模型中SVR和probabilistic SVM最为常用。
总结
本节课主要介绍了SVR,我们先通过representer theorem理论,将ridge regression转化为kernel的形式,即kernel ridge regression,并推导了SVR的解。但是得到的解是dense的,大部分为非零值。所以,我们定义新的tube regression,使用SVM的推导方法,来最小化regularized tube errors,转化为对偶形式,得到了sparse的解。最后,我们对介绍过的所有kernel模型做个总结,简单概述了各自的特点。在实际应用中,我们要根据不同的问题进行合适的模型选择。
注明:
文章中所有的图片均来自台湾大学林轩田《机器学习技法》课程
7 -- Blending and Bagging
上节课我们主要介绍了Support Vector Regression,将kernel model引入到regression中。首先,通过将ridge regression和representer theorem结合起来,得到kernel ridge regression。但是其解是dense的,即不部分不为零。为了得到sparse解,我们将regularized tube error和Lagrange dual结合起来,利用SVM dual的推导方法,得到support vector regression的sparse解。本系列1-6节课主要介绍Kernel Models及其应用,从本节课开始,讲介绍Aggregation Models,即如何将不同的hypothesis和features结合起来,让模型更好。本节课将介绍其中的两个方法,一个是Blending,一个是Bagging。
Motivation of Aggregation
首先举个例子来说明为什么要使用Aggregation。假如你有T个朋友,每个朋友向你预测推荐明天某支股票会涨还是会跌,对应的建议分别是
,那么你该选择哪个朋友的建议呢?即最终选择对股票预测的
是什么样的?
第一种方法是从T个朋友中选择一个最受信任,对股票预测能力最强的人,直接听从他的建议就好。这是一种普遍的做法,对应的就是validation思想,即选择犯错误最小的模型。第二种方法,如果每个朋友在股票预测方面都是比较厉害的,都有各自的专长,那么就同时考虑T个朋友的建议,将所有结果做个投票,一人一票,最终决定出对该支股票的预测。这种方法对应的是uniformly思想。第三种方法,如果每个朋友水平不一,有的比较厉害,投票比重应该更大一些,有的比较差,投票比重应该更小一些。那么,仍然对T个朋友进行投票,只是每个人的投票权重不同。这种方法对应的是non-uniformly的思想。第四种方法与第三种方法类似,但是权重不是固定的,根据不同的条件,给予不同的权重。比如如果是传统行业的股票,那么给这方面比较厉害的朋友较高的投票权重,如果是服务行业,那么就给这方面比较厉害的朋友较高的投票权重。以上所述的这四种方法都是将不同人不同意见融合起来的方式,接下来我们就要讨论如何将这些做法对应到机器学习中去。Aggregation的思想与这个例子是类似的,即把多个hypothesis结合起来,得到更好的预测效果。

将刚刚举的例子的各种方法用数学化的语言和机器学习符号归纳表示出来,其中G(x)表示最终选择的模型。
第一种方法对应的模型:

第二种方法对应的模型:

第三种方法对应的模型:

第四种方法对应的模型:


注意这里提到的第一种方法是通过验证集来选择最佳模型,不能使用
来代替
。经过Validation,选择最小的
,保证
最小,从而将对应的模型作为最佳的选择。
但是第一种方法只是从众多可能的hypothesis中选择最好的模型,并不能发挥集体的智慧。而Aggregation的思想是博采众长,将可能的hypothesis优势集合起来,将集体智慧融合起来,使预测模型达到更好的效果。
下面先来看一个例子,通过这个例子说明为什么Aggregation能work得更好。

如上图所示,平面上分布着一些待分类的点。如果要求只能用一条水平的线或者垂直的线进行分类,那不论怎么选取直线,都达不到最佳的分类效果。这实际上就是上面介绍的第一种方法:validation。但是,如果可以使用集体智慧,比如一条水平线和两条垂直线组合而成的图中折线形式,就可以将所有的点完全分开,得到了最优化的预测模型。
这个例子表明,通过将不同的hypotheses均匀地结合起来,得到了比单一hypothesis更好的预测模型。这就是aggregation的优势所在,它提高了预测模型的power,起到了特征转换(feature transform)的效果。

我们再从另外一方面来看,同样是平面上分布着一些待分类的点,使用PLA算法,可以得到很多满足条件的分类线,如下图所示:

这无数条PLA选择出来的直线对应的hypothesis都是满足分类要求的。但是我们最想得到的分类直线是中间那条距离所有点都比较远的黑色直线,这与之前SVM目标是一致的。如果我们将所有可能的hypothesis结合起来,以投票的方式进行组合选择,最终会发现投票得到的分类线就是中间和黑色那条。这从哲学的角度来说,就是对各种效果较好的可能性进行组合,得到的结果一般是中庸的、最合适的,即对应图中那条黑色直线。所以,aggregation也起到了正则化(regularization)的效果,让预测模型更具有代表性。

基于以上的两个例子,我们得到了aggregation的两个优势:feature transform和regularization。我们之前在机器学习基石课程中就介绍过,feature transform和regularization是对立的,还把它们分别比作踩油门和踩刹车。如果进行feature transform,那么regularization的效果通常很差,反之亦然。也就是说,单一模型通常只能倾向于feature transform和regularization之一,在两者之间做个权衡。但是aggregation却能将feature transform和regularization各自的优势结合起来,好比把油门和刹车都控制得很好,从而得到不错的预测模型。
Uniform Blending
那对于我们已经选择的性能较好的一些矩
,如何将它们进行整合、合并,来得到最佳的预测模型呢?这个过程称为blending。
最常用的一种方法是uniform blending,应用于classification分类问题,做法是将每一个可能的矩赋予权重1,进行投票,得到的G(x)表示为:

这种方法对应三种情况:第一种情况是每个候选的矩
都完全一样,这跟选其中任意一个
效果相同;第二种情况是每个候选的矩
都有一些差别,这是最常遇到的,大都可以通过投票的形式使多数意见修正少数意见,从而得到很好的模型,如下图所示;第三种情况是多分类问题,选择投票数最多的那一类即可。

如果是regression回归问题,uniform blending的做法很简单,就是将所有的矩
求平均值:

uniform blending for regression对应两种情况:第一种情况是每个候选的矩
都完全一样,这跟选其中任意一个
效果相同;第二种情况是每个候选的矩
都有一些差别,有的
,有的
,此时求平均值的操作可能会消去这种大于和小于的影响,从而得到更好的回归模型。因此,从直觉上来说,求平均值的操作更加稳定,更加准确。

对于uniform blending,一般要求每个候选的矩
都有一些差别。这样,通过不同矩
的组合和集体智慧,都能得到比单一矩
更好的模型。
刚才我们提到了uniform blending for regression中,计算
的平均值可能比单一的
更稳定,更准确。下面进行简单的推导和证明。

推导过程中注意
。经过推导,我们发现
与
之间差了
项,且是大于零的。从而得到
与目标函数f的差值要比G与f的差值大。
刚才是对单一的x进行证明,如果从期望角度,对整个x分布进行上述公式的整理,得到:

从结果上来看,
,从而证明了从平均上来说,计算
的平均值G(t)要比单一的
更接近目标函数f,regression效果更好。
我们已经知道G是数目为T的
的平均值。令包含N个数据的样本D独立同分布于
,每次从新的
中学习得到新的
,在对
求平均得到G,当做无限多次,即T趋向于无穷大的时候:


当T趋于无穷大的时候,
,则有如下等式成立:

上述等式中左边表示演算法误差的期望值;右边第二项表示不同
的平均误差共识,用偏差bias表示;右边第一项表示不同
与共识的差距是多少,反映
之间的偏差,用方差variance表示。也就是说,一个演算法的平均表现可以被拆成两项,一个是所有
的共识,一个是不同
之间的差距是多少,即bias和variance。而uniform blending的操作时求平均的过程,这样就削减弱化了上式第一项variance的值,从而演算法的表现就更好了,能得到更加稳定的表现。
Linear and Any Blending
上一部分讲的是uniform blending,即每个
所占的权重都是1,求平均的思想。下面我们将介绍linear blending,每个
赋予的权重
并不相同,其中
。我们最终得到的预测结果等于所有
的线性组合。

如何确定
的值,方法是利用误差最小化的思想,找出最佳的
,使
取最小值。例如对于linear blending for regression,
可以写成下图左边形式,其中
是带求解参数,
是每个矩得到的预测值,由已知矩得到。这种形式很类似于下图右边的形式,即加上特征转换
的linear regression模型。两个式子中的
对应于
,唯一不同的就是linear blending for regression中
,而linear regression中
没有限制。

这种求解
的方法就像是使用two-level learning,类似于我们之前介绍的probabilistic SVM。这里,我们先计算
,再进行linear regression得到
值。总的来说,linear blending由三个部分组成:LinModel,hypotheses as transform,constraints。其中值得注意的一点就是,计算过程中可以把
当成feature transform,求解过程就跟之前没有什么不同,除了
的条件限制。

我们来看一下linear blending中的constraint
。这个条件是否一定要成立呢?如果
,会带来什么后果呢?其实
并不会影响分类效果,只需要将正类看成负类,负类当成正类即可。例如分类问题,判断该点是正类对应的
,则它就表示该点是负类,且对应的
。如果我们说这个样本是正类的概率是-99%,意思也就是说该样本是负类的概率是99%。
和
的效果是等同的一致的。所以,我们可以把
这个条件舍去,这样linear blending就可以使用常规方法求解。

Linear Blending中使用的
是通过模型选择而得到的,利用validation,从
中得到
。然后将
中每个数据点经过各个矩的计算得到的值,代入到相应的linear blending计算公式中,迭代优化得到对应
值。最终,再利用所有样本数据,得到新的
代替
,则G(t)就是
的线性组合而不是
,系数是
。


除了linear blending之外,还可以使用任意形式的blending。linear blending中,G(t)是g(t)的线性组合;any blending中,G(t)可以是g(t)的任何函数形式(非线性)。这种形式的blending也叫做Stacking。any blending的优点是模型复杂度提高,更容易获得更好的预测模型;缺点是复杂模型也容易带来过拟合的危险。所以,在使用any blending的过程中要时刻注意避免过拟合发生,通过采用regularization的方法,让模型具有更好的泛化能力。
Bagging(Bootstrap Aggregation)
总结一些上面讲的内容,blending的做法就是将已经得到的矩
进行aggregate的操作。具体的aggregation形式包括:uniform,non-uniforn和conditional。

现在考虑一个问题:如何得到不同的
呢?可以选取不同模型H;可以设置不同的参数,例如
、迭代次数n等;可以由算法的随机性得到,例如PLA、随机种子等;可以选择不同的数据样本等。这些方法都可能得到不同的
。

那如何利用已有的一份数据集来构造出不同的
呢?首先,我们回顾一下之前介绍的bias-variance,即一个演算法的平均表现可以被拆成两项,一个是所有
的共识(bias),一个是不同
之间的差距是多少(variance)。其中每个
都是需要新的数据集的。只有一份数据集的情况下,如何构造新的数据集?

其中,
是在矩个数T趋向于无穷大的时候,不同的
计算平均得到的值。这里我们为了得到
,做两个近似条件:
-
有限的T;
-
由已有数据集D构造出
,独立同分布
第一个条件没有问题,第二个近似条件的做法就是bootstrapping。bootstrapping是统计学的一个工具,思想就是从已有数据集D中模拟出其他类似的样本
。

bootstrapping的做法是,假设有N笔资料,先从中选出一个样本,再放回去,再选择一个样本,再放回去,共重复N次。这样我们就得到了一个新的N笔资料,这个新的
中可能包含原D里的重复样本点,也可能没有原D里的某些样本,
与D类似但又不完全相同。值得一提的是,抽取-放回的操作不一定非要是N,次数可以任意设定。例如原始样本有10000个,我们可以抽取-放回3000次,得到包含3000个样本的
也是完全可以的。利用bootstrap进行aggragation的操作就被称为bagging。

下面举个实际中Bagging Pocket算法的例子。如下图所示,先通过bootstrapping得到25个不同样本集,再使用pocket算法得到25个不同的
,每个pocket算法迭代1000次。最后,再利用blending,将所有的
融合起来,得到最终的分类线,如图中黑线所示。可以看出,虽然bootstrapping会得到差别很大的分类线(灰线),但是经过blending后,得到的分类线效果是不错的,则bagging通常能得到最佳的分类模型。

值得注意的是,只有当演算法对数据样本分布比较敏感的情况下,才有比较好的表现。
总结
本节课主要介绍了blending和bagging的方法,它们都属于aggregation,即将不同的
合并起来,利用集体的智慧得到更加优化的G(t)。Blending通常分为三种情况:Uniform Blending,Linear Blending和Any Blending。其中,uniform blending采样最简单的“一人一票”的方法,linear blending和any blending都采用标准的two-level learning方法,类似于特征转换的操作,来得到不同
的线性组合或非线性组合。最后,我们介绍了如何利用bagging(bootstrap aggregation),从已有数据集D中模拟出其他类似的样本
,而得到不同的
,再合并起来,优化预测模型。
注明:
文章中所有的图片均来自台湾大学林轩田《机器学习技法》课程
8 -- Adaptive Boosting
上节课我们主要开始介绍Aggregation Models,目的是将不同的hypothesis得到的
集合起来,利用集体智慧得到更好的预测模型G。首先我们介绍了Blending,blending是将已存在的所有
结合起来,可以是uniformly,linearly,或者non-linearly组合形式。然后,我们讨论了在没有那么多
的情况下,使用bootstrap方式,从已有数据集中得到新的类似的数据集,从而得到不同的
。这种做法称为bagging。本节课将继续从这些概念出发,介绍一种新的演算法。
Motivation of Boosting
我们先来看一个简单的识别苹果的例子,老师展示20张图片,让6岁孩子们通过观察,判断其中哪些图片的内容是苹果。从判断的过程中推导如何解决二元分类问题的方法。
显然这是一个监督式学习,20张图片包括它的标签都是已知的。首先,学生Michael回答说:所有的苹果应该是圆形的。根据Michael的判断,对应到20张图片中去,大部分苹果能被识别出来,但也有错误。其中错误包括有的苹果不是圆形,而且圆形的水果也不一定是苹果。如下图所示:

上图中蓝色区域的图片代表分类错误。显然,只用“苹果是圆形的”这一个条件不能保证分类效果很好。我们把蓝色区域(分类错误的图片)放大,分类正确的图片缩小,这样在接下来的分类中就会更加注重这些错误样本。
然后,学生Tina观察被放大的错误样本和上一轮被缩小的正确样本,回答说:苹果应该是红色的。根据Tina的判断,得到的结果如下图所示:

上图中蓝色区域的图片一样代表分类错误,即根据这个苹果是红色的条件,使得青苹果和草莓、西红柿都出现了判断错误。那么结果就是把这些分类错误的样本放大化,其它正确的样本缩小化。同样,这样在接下来的分类中就会更加注重这些错误样本。
接着,学生Joey经过观察又说:苹果也可能是绿色的。根据Joey的判断,得到的结果如下图所示:

上图中蓝色区域的图片一样代表分类错误,根据苹果是绿色的条件,使得图中蓝色区域都出现了判断错误。同样把这些分类错误的样本放大化,其它正确的样本缩小化,在下一轮判断继续对其修正。
后来,学生Jessica又发现:上面有梗的才是苹果。得到如下结果:

经过这几个同学的推论,苹果被定义为:圆的,红色的,也可能是绿色的,上面有梗。从一个一个的推导过程中,我们似乎得到一个较为准确的苹果的定义。虽然可能不是非常准确,但是要比单一的条件要好得多。也就是说把所有学生对苹果的定义融合起来,最终得到一个比较好的对苹果的总体定义。这种做法就是我们本节课将要讨论的演算法。这些学生代表的就是简单的hypotheses
,将所有
融合,得到很好的预测模型G。例如,二维平面上简单的hypotheses(水平线和垂直线),这些简单
最终组成的较复杂的分类线能够较好地将正负样本完全分开,即得到了好的预测模型。

所以,上个苹果的例子中,不同的学生代表不同的hypotheses
;最终得到的苹果总体定义就代表hypothesis G;而老师就代表演算法A,指导学生的注意力集中到关键的例子中(错误样本),从而得到更好的苹果定义。其中的数学原理,我们下一部分详细介绍。

Diversity by Re-weighting
在介绍这个演算法之前,我们先来讲一下上节课就介绍过的bagging。Bagging的核心是bootstrapping,通过对原始数据集D不断进行bootstrap的抽样动作,得到与D类似的数据集
,每组
都能得到相应的
,从而进行aggregation的操作。现在,假如包含四个样本的D经过bootstrap,得到新的
如下:

那么,对于新的
,把它交给base algorithm,找出
最小时对应的
,如下图右边所示。

由于
完全是D经过bootstrap得到的,其中样本
出现2次,
出现1次,
出现0次,
出现1次。引入一个参数
来表示原D中第i个样本在
中出现的次数,如下图左边所示。


参数u相当于是权重因子,当
中第i个样本出现的次数越多的时候,那么对应的
越大,表示在error function中对该样本的惩罚越多。所以,从另外一个角度来看bagging,它其实就是通过bootstrap的方式,来得到这些
值,作为犯错样本的权重因子,再用base algorithn最小化包含
的error function,得到不同的
。这个error function被称为bootstrap-weighted error。
这种算法叫做Weightd Base Algorithm,目的就是最小化bootstrap-weighted error。

其实,这种weightd base algorithm我们之前就介绍过类似的算法形式。例如在soft-margin SVM中,我们引入允许犯错的项,同样可以将每个点的error乘以权重因子
。加上该项前的参数C,经过QP,最终得到
,有别于之前介绍的
。这里的
相当于每个犯错的样本的惩罚因子,并会反映到
的范围限定上。
同样在logistic regression中,同样可以对每个犯错误的样本乘以相应的
,作为惩罚因子。
表示该错误点出现的次数,
越大,则对应的惩罚因子越大,则在最小化error时就应该更加重视这些点。

其实这种example-weighted learning,我们在机器学习基石课程第8次笔记中就介绍过class-weighted的思想。二者道理是相通的。
知道了u的概念后,我们知道不同的u组合经过base algorithm得到不同的
。那么如何选取u,使得到的
之间有很大的不同呢?之所以要让所有的
差别很大,是因为上节课aggregation中,我们介绍过
越不一样,其aggregation的效果越好,即每个人的意见越不相同,越能运用集体的智慧,得到好的预测模型。
为了得到不同的
,我们先来看看
和
是怎么得到的:

如上所示,
是由
得到的,
是由
得到的。如果
这个模型在使用
的时候得到的error很大,即预测效果非常不好,那就表示由
计算的
会与
有很大不同。而
与
差异性大正是我们希望看到的。
怎么做呢?方法是利用
在使用
的时候表现很差的条件,越差越好。如果在
作用下,
中的表现(即error)近似为0.5的时候,表明
对
的预测分类没有什么作用,就像抛硬币一样,是随机选择的。这样的做法就能最大限度地保证
会与
有较大的差异性。其数学表达式如下所示:

乍看上面这个式子,似乎不好求解。但是,我们对它做一些等价处理,其中分式中分子可以看成
作用下犯错误的点,而分母可以看成犯错的点和没有犯错误的点的集合,即所有样本点。其中犯错误的点和没有犯错误的点分别用橘色方块和绿色圆圈表示:

要让分式等于0.5,显然只要将犯错误的点和没有犯错误的点的数量调成一样就可以了。也就是说,在
作用下,让犯错的
数量和没有犯错的
数量一致就行(包含权重
)。一种简单的方法就是利用放大和缩小的思想(本节课开始引入识别苹果的例子中提到的放大图片和缩小图片就是这个目的),将犯错误的
和没有犯错误的
做相应的乘积操作,使得二者值变成相等。例如
of incorrect为1126,
of correct为6211,要让
中错误比例正好是0.5,可以这样做,对于incorrect
:

对于correct
:

或者利用犯错的比例来做,令weighted incorrect rate和weighted correct rate分别设为
和
。一般求解方式是令犯错率为
,在计算
的时候,
分别乘以
和
。

Adaptive Boosting Algorithm
上一部分,我们介绍了在计算
的时候,
分别乘以
和
。下面将构造一个新的尺度因子:

那么引入这个新的尺度因子之后,对于错误的
,将它乘以
;对于正确的
,将它除以
。这种操作跟之前介绍的分别乘以
和
的效果是一样的。之所以引入
是因为它告诉我们更多的物理意义。因为如果
,得到
,那么接下来错误的
与
的乘积就相当于把错误点放大了,而正确的
与
的相除就相当于把正确点缩小了。这种scale up incorrect和scale down correct的做法与本节课开始介绍的学生识别苹果的例子中放大错误的图片和缩小正确的图片是一个原理,让学生能够将注意力更多地放在犯错误的点上。通过这种scaling-up incorrect的操作,能够保证得到不同于
的
。

值得注意的是上述的结论是建立在
的基础上,如果
,那么就做相反的推论即可。关于
的情况,我们稍后会进行说明。
从这个概念出发,我们可以得到一个初步的演算法。其核心步骤是每次迭代时,利用
把
更新为
。具体迭代步骤如下:

但是,上述步骤还有两个问题没有解决,第一个问题是初始的
应为多少呢?一般来说,为了保证第一次
最小的话,设
即可。这样最开始的
就能由此推导。第二个问题,最终的G(x)应该怎么求?是将所有的g(t)合并uniform在一起吗?一般来说并不是这样直接uniform求解,因为
是通过
得来的,二者在
上的表现差别比较大。所以,一般是对所有的g(t)进行linear或者non-linear组合来得到G(t)。

接下来的内容,我们将对上面的第二个问题进行探讨,研究一种算法,将所有的g(t)进行linear组合。方法是计算
的同时,就能计算得到其线性组合系数
,即aggregate linearly on the fly。这种算法使最终求得
的时候,所有
的线性组合系数
也求得了,不用再重新计算
了。这种Linear Aggregation on the Fly算法流程为:

如何在每次迭代的时候计算
呢?我们知道
与
是相关的:
越小,对应的
应该越大,
越大,对应的
应该越小。又因为
与
是正相关的,所以,
应该是
的单调函数。我们构造
为:

这样取值是有物理意义的,例如当
时,error很大,跟掷骰子这样的随机过程没什么两样,此时对应的
,
,即此
对G没有什么贡献,权重应该设为零。而当
时,没有error,表示该
预测非常准,此时对应的
,
,即此
对G贡献非常大,权重应该设为无穷大。

这种算法被称为Adaptive Boosting。它由三部分构成:base learning algorithm A,re-weighting factor
和linear aggregation
。这三部分分别对应于我们在本节课开始介绍的例子中的Student,Teacher和Class。

综上所述,完整的adaptive boosting(AdaBoost)Algorithm流程如下:

从我们之前介绍过的VC bound角度来看,AdaBoost算法理论上满足:

上式中,
的上界由两部分组成,一项是
,另一项是模型复杂度O(*)。模型复杂度中
是
的VC Dimension,T是迭代次数,可以证明G的
服从
。
对这个VC bound中的第一项
来说,有一个很好的性质:如果满足
,则经过
次迭代之后,
能减小到等于零的程度。而当N很大的时候,其中第二项也能变得很小。因为这两项都能变得很小,那么整个
就能被限定在一个有限的上界中。
其实,这种性质也正是AdaBoost算法的精髓所在。只要每次的
,即所选择的矩g比乱猜的表现好一点点,那么经过每次迭代之后,矩g的表现都会比原来更好一些,逐渐变强,最终得到
且
很小。

Adaptive Boosting in Action
上一小节我们已经介绍了选择一个“弱弱”的算法A(
,比乱猜好就行),就能经过多次迭代得到
。我们称这种形式为decision stump模型。下面介绍一个例子,来看看AdaBoost是如何使用decision stump解决实际问题的。
如下图所示,二维平面上分布一些正负样本点,利用decision stump来做切割。

第一步:

第二步:

第三步:

第四步:

第五步:

可以看到,经过5次迭代之后,所有的正负点已经被完全分开了,则最终得到的分类线为:

另外一个例子,对于一个相对比较复杂的数据集,如下图所示。它的分界线从视觉上看应该是一个sin波的形式。如果我们再使用AdaBoost算法,通过decision stump来做切割。在迭代切割100次后,得到的分界线如下所示。

可以看出,AdaBoost-Stump这种非线性模型得到的分界线对正负样本有较好的分离效果。
课程中还介绍了一个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应该选择不同的权重。
注明:
文章中所有的图片均来自台湾大学林轩田《机器学习基石》课程。



或者达到迭代次数,迭代结束


,独立同分布
:
correct
:
incorrect
?如果没有停下来,是否有

。
,则其在全集数据中的错误率会较低
越大(复杂)。
浙公网安备 33010602011771号