龙星计划机器学习笔记
前言
最近几周花了点时间学习了下今年暑假龙星计划的机器学习课程,具体的课程资料参考见附录。本课程选讲了写ML中的基本模型,同时还介绍了最近几年比较热门,比较新的算法,另外也将ML理论和实际问题结合了起来,比如将其应用在视觉上,web上的等。总之,虽然课程内容讲得不是特别细(毕竟只有那么几节课),但是内容还算比较新和比较全的。学完这些课后,收获还算不少的,至少了解到了自己哪方面的知识比较弱,下面是课程中做的一些简单笔记。
第1课 绪论课
机器学习中3个比不可少的元素,数据,模型和算法。现在数据来源比较广泛,每天都可以产生T级以上的数据。模型的话就是机器学习课程中需要研究的各种模型,算法就是怎样通过数据和模型来学习出模型中的参数。但是余老师在课堂上提出一个观点就是这3个元素都不重要,最重要的是需求,一旦有了需求,就会采用各种方法取求解问题了。不愧是百度公司的技术副总监。另外机器学习的主要应用场合包括计算机视觉,语音识别,自然语音处理,搜索,推荐系统,无人驾驶,问答系统等。
第2课 线性模型
线性回归模型需要解决下面3个问题:
1. 怎样从训练数据估计线性模型的参数?即截距和斜率。
2. 学习到的线性模型性能怎样?我们是否可以找到更好的模型?
3. 模型中2个参数的重要性怎么估计?
解决第1个问题是一个优化问题,即求得使损失函数最小的参数。这里的损失函数是平方项的,也称为线性最小二乘思想。线性模型的表达式为:
其中噪声参数为0均值的高斯噪声。如果后面求出的噪声不是一个均值为0,方差相同的类似高斯分布的随机变量,则说明这个模型还可以被改进。比如说将x首先映射到非线性函数中去,然后对非线性函数用最小二乘法做线性回归。至于怎样得到非线性映射函数f(x)则要么通过人为观察推测,要么通过机器学习中的特征学习来自动获得。
更广义的线性模型并不一定是一个线性方程。只是其参数可能是线性的。线性模型能够模拟非线性函数。
残差可以看做是噪声的近似。但是一般来说残差要比噪声小。所以在线性模型中,噪声项就可以用残差来估计,不过其分母不是1/n,而是1/(n-p),因为需要达一个无偏估计。
特征向量元素属性的重要性评价常见的有以下2种方法:第一是抽掉一个特征想,然后计算其残差变化值与全部特征都用上的比值,所得到的分数为F-score,F-score越大,说明该属性越重要。第2种方法是采用t分布来假设检验得到Z-score,即假设对应特征属性不存在(即其值为0)时,出现样本数据的概率为Z-score,如果Z-score越大,说明该属性越不重要。
第3课 过拟合和规则项
Regularization中文意思是规则,指的是在overfitting和underfitting之间做平衡,通过限制参数空间来控制模型的复杂度。测试误差和训练误差之间差一个规则项,其公式为:
模型越复杂说明模型越不稳定,学习到的目标函数越不光滑,也就越容易over-fitting。所以需要控制模型的复杂度,一般来说有2种方法,即减少模型中参数的个数或者减小参数的空间大小,目前用得最多的就是减小参数的空间大小,是通过规则项达到的。规则项的引入同时也需要引入一个调节的参数,该参数的大小一般通过交叉验证获得。如果规则项是2次的,则也称为ridge回归,规则项是一次的则称为lasso回归。Ridge回归的优点是解比较稳定,且允许参数的个数大于样本的个数。Lasson回归的优点是有稀疏解,不过解不一定稳定。
如果碰到参数个数大于样本个数,这时候就不能够用参数个数来做规则化了,而是采用缩小参数空间的方法,这样的话既在统计学上对特征数量集大时有鲁棒性,同时在数值计算上方程解也具备稳定性。
第4课 线性分类器
很好的理解线性分类器,可以理解很多ml的概念,以及非线性问题。线性分类器是在实际应用过程中最有用的模型。
据余老师讲,从06年开始,人工神经网络又开始热起来了,主要体现在deep learning领域。
svm理论很完美,应用场合也很广,同理,logistic回归应用场合也非常广,和svm差不多。
当数据为大样本数据时,用线性SVM模型比较好。
第5课 非线性svm
RKHS表示定理:即模型的参数是在训练样本的线性子空间中,是训练样本的线性组合。这不仅适用于svm,对其他的模型,比如感知机,RBF网络,LVQ,boosting,logistic回归等模型都成立。
Kernel可以简单理解为表示2个值相似度的测量。通过核函数可以更好的了解regularization。所需优化的目标函数可以写成参数形式,参数形式的对偶形式和非参数形式这3种。如果在非参数形式中,其规则项是由所学习到的函数f(x)来控制的,它的模与对应核函数进行特征函数分解时的特征值系数成反比。即特征函数分解中非主成分的函数对应的特征系数小,得到的惩罚就大,就会更加被抑制。因此我们保留的主要是主成分的那些特征函数。从上面可以看出,核函数是有一定的结构的,该结构决定了最终的目标函数f(x)长得什么样。
逻辑回归和svm的区别只是loss函数的不同,logstic回归的loss函数为logstic函数,核svm的loss函数为hinge loss。两者有着相同的性能,逻辑回归是带概率的输出,更容易用于多分类问题。不过目前,这2种方法都是旧方法了。
LVQ中文名为学习矢量化,它是一个基于模型的有监督学习分类器。
因此我们在设计一个模型时,需要考虑采用什么样的loss函数?采用什么样的基函数h(x)?h(x)是有限维的还是无限维的?是否需要学习h(x)?用什么样的方法来优化目标函数,QP,LBFGS,还是梯度下降等?
理论上使用kernel理论可以实现用有限的计算完成无限空间的学习问题,但是在实际问题中,由于其复杂度是样本个数N的3次方,所以当样本数据很多时,基本上是无法实现的。
参数模型和非参数模型的区别不是看模型中是否有参数,所有的模型都是有参数的,非参数模型是指随着样本数的增加,其模型中的参数的个数也跟着增加。反之就为参数模型了。常见的非参数模型有高斯过程,核svm,dirichlet过程等。
第6课 模型选择
模型选择在实际应用过程中非常有用,一般把与模型有关的数据分为3部分,训练数据,验证数据和测试数据,如下图所示:
其中训练数据和验证数据都是已有的样本数据,即已观察到了的数据。测试数据是未来实际应用中产生的数据,是事先不知道的。
模型的参数分为2部分,第一部分是模型确定后通过训练样本学习得到的参数。另一部分是手动输入的参数,也叫做超参数,是用来控制模型的复杂度的,也就是来控制模型本身长什么样的,它是由验证数据来调节的。
模型选择问题就是说怎样验证一个模型是否好。模型的好坏最终是要看它在测试数据集上的表现。因此在未观测到测试数据时,我们只能用验证数据集来代替它进行测试。一般采用的方法为交叉验证,比如说LOOCV,即留一法交叉验证,类似的还有k折交叉验证。交叉验证的主要目的是防止训练出来的模型过拟合。但是在当今由于数据都是海量的,交叉验证方法使用越来越少了,因为如果训练数据集非常大的话,一般不会产生过拟合现象。
还有一些方法是不需要通过验证而直接来评价模型好坏的,比如是AIC,BIC,MDL,SRM等。
第7课 模型平均
本文中讲的model是指的一个learning algorithm,甚至比learning algorithm所指的范围还要小,因为在一个learning algorithm里,不同的参数调节和不同的输入特征都会导致不同的model。模型选择的目标是使模型有更好的可解释性和更好的性能,而模型平均的目标只需要使模型有更好的性能即可,因为模型平均过程中用到了很多模型,而模型个数越多则其可解释性就越低。模型平均的英文名称有model ensemble,model blending, model combination, model averaging.
Model selection 和 model combination的不同使用体现在,如果某个模型以绝对的优势好于其他所有模型,那么这时候我们就采用model selection,因为不仅有好的性能,还可以获得好的可解释性。如果所有的模型在性能表现上都差不多,没有所谓的好坏,且模型本身又有很大的不同,这时候就可以采用model combination来大大提高其性能了。通常来说,model combination比model selection要稳定些。
那么该怎样构造差异性大的模型呢?可以从下面四个方面入手:
1. 不同的学习算法。
2. 不同参数调整。
3. 有差异的输入特征。
4. 引入随机思想,比如bagging。
关于指数权值的模型平均只是在均一模型平均(即采用投票的方式)的基础上将投票权值改为模型误差的指数形式,而不是相同的均值。如果所学习到的一个模型的误差越大,则其权值越低,理论上比较完美。不过在张老师讲他自己实验的时候发现并没有什么提高,有时候效果还不如voting。
Stacking和指数权值的模型平均有点类似,也是先学习出各个模型,然后把学习出的模型作为第二层学习的输入,优化最小的第二层的误差来学习模型的权值。
Bagging也是一种均一模型平均,它的所有模型的学习算法一样,只是输入样本采用bootstrip获得。因为是采用boostrip获得的,所以其训练样本有些不一定用到了,而有些则重复用到了。这样每个学习出来的model不是很稳定,因而这也扩大了model之间的差异性,提高了集群学习的性能。Bagging是减小学习的方差,而boosting是减小学习的偏差。
最后模型平均的一个比较出名的应用场合就是把决策树改造成随机森林的例子。因为单颗决策树虽然有可解释性,能够很好的处理非均匀的特征以及是一种非线性的方法,但是它的最大缺点就是分类结果不准确,因此在样本选择和输入特征选择方面采用了随机的方法得到不同的模型后,再做平均就成了随机森林,理论和实验表明随机森林的效果要比决策树好很多。
第8课 Boosting
Boosting既可以看做是signal learning也可以看做是ensemble learning,本课中将其看做是ensemble learning。它是由多个弱分类器组合成一个强分类器,但是这里所指的弱分类器满足的条件其实并不弱,因为它需要满足对样本的所以加权情况的分类效果都要大于0.5,因此现在有不少学者不称这些为弱分类器了,而称为基本分类器。Boosting中最常用的算法是AdaBoosting,AdaBoosting是对分类错误的样本加大其权重来达到resamble的效果。且采用贪婪算法进行loss的函数的优化。
VC维的传统定义为: 对一个指标函数集,如果存在H个样本能够被函数集中的函数按所有可能的2的K次方种形式分开,则称函数集能够把H个样本打散;函数集的VC维就是它能打散的最大样本数目H。
AdaBoosting不是最大margin的,但为什么比最大marign的boosting效果要好呢?课程中从传统的boosting分析来做了一定的解释,但是仍不能够解释当训练误差为0时,其泛化误差还在减小这一问题,后面的学者又提出了从margin bound方面来解释这个问题。另外从另一个角度来更好的理解boosing的方法是greedy boosting,即寻找样本权重d和弱分类器权重w的过程是一个贪婪过程。最后老师讲了一个general loss函数以及利用这个函数进行的general boosting。
第9课 学习理论概论
这节课的内容比较理论化,听不太懂。机器学习理论的主要目标是平均一个学习算法的好坏,即怎样通过训练误差来估计测试误差。可以通过一致性收敛来估计训练误差和测试误差之间的关系,即测试误差以大概率事件小于训练误差加上某个值,这个值的大小与训练样本数以及概率值有关。证明上面的一致性收敛需要用到切比雪夫不等式,VC维,covering numbers这几种技术。其中covering numbers定义为attain训练样本的预测函数的个数(具体是什么没有理解清楚)。我们可以用VC维来估计convering number。最后老师还讲了一个Rademacher复杂度并说了下它和VC维之间的关系,真心不懂Rademacher是个什么东东!
第10课 机器学习中的优化问题
机器学习中大部分问题都可以归结为参数优化问题,即找到最适合目标函数的参数,该参数一般满足使目标函数最大或者最小。
常见的优化方法有梯度下降法,该方法是每次沿着梯度下降最快的那个方向寻找函数值,不断迭代就可以寻找到近似的极值。该方法的学习速率(即每次沿梯度方向前进的距离)和收敛速率是最值得关注的。一般来讲,如果函数是光滑且是严格为凸函数的,则其收敛速度最快,其实是光滑但不严格凸的,最慢的要数非光滑函数。因此当函数有一部分是光滑,而另一部分不光滑时,我们可以采用Proximal 梯度下降法,该方法是最近几年热门起来的,效果比梯度下降要好,更新的类似的算法还有Nestervo这个学者的Accelerated 梯度法(全是数学公式,完全看不懂)。为了求出局部极值点,一般可以采用近似泰勒展开中的H矩阵来求得,典型的算法有LBFGS。另外当需要优化的参数为一个向量时,不一定需要把这个向量的元素对等考虑,我们可以分开优化,即每次只优化参数向量中的一个,其它的保持不变,这样循环直到收敛。最后老师讲了凸函数的优化问题还可以采用Dual 梯度下降法。
实话说,这种纯数学公式的东西太乏味了!
第11课 Online learning
Online learning指的是每当来一个数据,就会学习一个最优的预测函数,其最优的准则是当前位置loss函数值最小,因此每一步的预测函数都有可能不同,这就是Online learning。其实很早前就有online learning的例子,比如说感知机学习规则。
在了解Online learning之前需要了解regret 分析这个概率,regret指的是,Online learning中每次学习的误差减去使用用当前为止的最优函数而产生的误差的平均值,当然我们希望regret越小越好。
Online learning的关键是需要更不断新状态。其实Online learning也是一个优化问题,我们可以把第10讲的优化问题全部转换成对应的Online learning。比如说凸优化,梯度下降法,proximal descent。其中将proximal descent转换成online版本可以采用L1规则化,Dual averaging, 保持second order信息等。统计梯度下降可以用来优化大规模的数据,它的不同变种主要来源于不同的proximal 函数,不同的学习率,是否是dual averaging, 是否是averaging, 是否是acceleration等。
第12课 sparsity model
Sparsity model的出现时为了解决统计学习中的维数灾难问题的,即样本的个数远远小于特征的维数。解决标准的稀疏回归模型可以采用greedy算法和convex relaxation。Greedy 算法中比较有代表性的是OMP。要从稀疏的参数重建参数需要有2个条件,即irrepresentable和RIP。稀疏模型一个代表性的问题是Lasso的求解。老师从上面2个条件介绍了lasso的求解。Lasso是基于L1规则化的。其它一些比较复杂的规则项对应的sparsity model有比如structured sparsity(比如说group structure), graphical model, matrix regularization. 这又是一堂纯数学的课程。
第13课 Graphical model
Graphical model是一个应用比较广泛的模型,不过比较复杂,因为里面涉及到了很多概率的知识。但是这节课的内容还算比较表面,没有过多的细节。主要从3个方面介绍graphical model,即model本身,推理方法和模型的结构学习。概率模型中一大部分就是graphic model,而graphic model中又分为有向图和无向图,有向图中比较有代表的是贝叶斯网络,无向图中比较有代表的是MRF。本节内容主要是讲的有向图。任何一个复杂的贝叶斯网络都可以由causal chains,common cause, common effect这3部分构成。Graphical model应用很广,比如说常见的线性回归问题也可以转换成graphical model问题,如果是分段线性回归问题还可以转换成带有隐变量的graphical model。贝叶斯网络中的推理一般是给定一些观测数据,求出在此观测数据下出现某些中间状态的概率。当网络是简单的链或者是树状时,推理起来比较简单,当模型含有环状结构时,对应的推理就非常复杂了。 Graphical model中最后一个问题是模型结构的学习,可以将其看做是结构的搜索问题,对应的很多AI搜索算法此时也可以派上用场。结构学习的问题主要包括发现模型中的隐变量,因果关系直接从数据中学习其结构。
第14课 structured learning
结构学习的方法和理论包括结构输入,结构输出和结构模型。其中结构模型分为conditional model 和 generative model。Generative model包括HMM,HMM有观察值独立性的假设,为了解决该假设带来的问题,后来有学长提出了MEMM算法,不过MEMM本身又带来了标注偏置问题,最后面的改进算法CRF成功的解决了标注偏置问题。CRF模型可以看做是logistic 回归在结构学习框架下的扩展.同理M3N可以看做是SVM在结构化框架下的扩展。最后课堂上老师比较了CRFs和M3N两种算法。
第15课 deep learning
这节课讲的内容比较容易激发人的兴趣,一是因为deep learning最近非常火热,二是因为用deep learning来做一些视觉问题,其效果能提高不少。本次课程没有讲具体的细节,主要是介绍了一些deep learning的概念和应用。Deep learning的意思是可以自动来学习一些特征,比如说在视觉的分类或者识别中,一般都是特征提取+分类器设计,并且提取到的特征的好坏直接影响了分类器的分类效果,但是在目前的计算机视觉领域,其特征的提取都是我们人工设计的,需要针对不同的应用场合来提取不同的特征,余老师开玩笑的说,计算机视觉最近10年的最大成就就是有了个SIFT特征,但是它是基于RGB图像提出的,而今各种传感器,比如Kinect等。我们又得去重新设计它的特征,难道我们还要等10年么?因此可以看出,一个通用的特征提取框架需要给出,这就是deep learning,也叫做feature learning,也就是说给了很多样本,系统能够自动去学习这些样本的特征,而不是依靠人工来设计。听起来是多么的诱人!这就更类似于AI了。Deep learning主要是确定一个算法的层次结构,这个层次结构非常重要,它的想法和人体大脑皮层的工作机制类似,因为人大脑在识别某些东西的时候也是一个层次结构的。课件中主要接受了multi-scale models和hierarchical model,structure spectrum等,但没有具体展开,只是做了一个综述性的介绍。
第16课 Transfer learning & Semi-supervised learning
一方面由于有些问题的训练样本数据非常少,且样本的获取代价非常高,或者是模型的训练时间特别长,另一方面由于很多问题之间有相似性,所以TL(transfer learning)就产生了。TL主要是把多个相似的task放在一起来解决,它们共享同一个输入空间和输出空间,TL常见的例子有传感器网络预测,推荐系统,图像分类等。常见的用来解决TL问题有下面几个模型,HLM(层次线性模型),NN,回归线性模型,这些模型本质上都是学校一个隐含的相同的特征空间。另外老师也讲到了TL和GP(高斯过程)的对比,高斯过程是一个贝叶斯核机器的非线性算法,通过对先验样本的采用学习可以得到尖锐的后验概率模型,它是一种非参数的模型。TL方法主要分为4大类:样本之间的迁移,特征表达的迁移,模型的迁移和相关领域知识的迁移。其中特征表达的迁移和模型的迁移在数学本质上是类似的,也是学者们研究的重点。
SSL(Semi-supervised learning)是为了达到用少量标注了的样本+大量没有标注的样本,来学习一个比单独用少量标注样本效果更好的模型。老师举了一个混合高斯分布的例子来解释SSL学习的效果,通过这个例子引出了SSL的一个通用模型。本课还简单的介绍了co-training 方法,所谓co-training,就是把表组好的数据分成几类,每一类都train一个model,然后把这些model作用到unlabel的样本上,通过优化方法达到输出一致的效果。最后介绍的Graph Laplacian以及它的harmonic 解就完全木有看懂。
第17课 Recommendation Systems
Recommendation Systems一个简单的应用就是会根据用户的购买历史来退算出用户可能喜欢的产品,然后推荐给用户,目前很多互联网公司都在做这方面的研究,因为可以带来大量的经济效益。Recommendation Systems是一个协同滤波问题,本课程主要围绕不同用户给不同电影评分这个例子来介绍。首先要解决的是历史数据偏差不同的问题,即要对数据做预处理实现归一化。
在对Recommendation Systems进行设计的一个主流方法之一是将Recommendation Systems问题看做是一个分类问题,即把用户i对所有电影打分看做是要预测的标签,而其他所有人对电影的打分看做是特征,主要采用的方法是朴素贝叶斯,KNN等(其他大部分的分类算法都可以派上用场)。Recommendation Systems问题的另一主流方法是把它看成矩阵分解(MF)问题,这在实际应用中是效果最好的。因为我们观察到的数据是很稀疏的,很多位置都是missing的,且这些数据之间内部是存在一个简单结构的,因此我们可以把需要填充的矩阵R分解成2个低秩矩阵的乘积,这可以采用SVD或者SVD+一些优化的方法来解决。
由此可以看出,Recommendation Systems是一个典型的ML问题。
第18课 computer vision
本课简单的介绍了下computer vision中的基本问题,比如说什么事computer vison, computer vison的难点,computer vison问题的分类:特征检测,边缘检测,目标检测,图像分割,拼图,3D重建,计算机图形学,目标识别等等。
第19课 learning on the web
机器学习在web上的应用比较广泛,比如前面讲过的推荐系统,另外还有一些搜索结果排序,分类问题,社区行为分析,用户行为模型等等。本课程主要从分类和排序做了一些介绍。网络上存在着各种垃圾信息,例如垃圾邮件,垃圾网页,垃圾广告等,分类问题就是采用ML的方法过滤掉这些垃圾信息。另外一个比较常见的分类问题是文本分类,找出文本描述的主题,其中BOW算法既简单,又取得了很好的效果。最后老师对Web-search问题也做了个简单的介绍。总之本课大概介绍了下ML在web上的简单应用和挑战。
总结:
ML给我的感觉就是规则项和最优化贯穿了本次课程的所有章节。
参考资料:
http://bigeye.au.tsinghua.edu.cn/DragonStar2012/index.html