机器学习呓语
这是我的第一篇博客,算是对自己这段时间学习的一个总结,信马由缰,自得喜乐。如有谬误之处,也希望大家能够多多拍砖。
机器学习说到底是一门数据科学,说白了就是对数据进行建模(等于没说)。但是我认为就是对数据看待方式的不同,造成了如今机器学习算法百花齐放的局面(个人目前不倾向于深度学习会一直独步天下,深度学习强大在于自身构建feature的能力,未来的趋势或许是可以将传统机器学习对feature的分析方式结合深度学习的feature学习能力,历史或许本身就是否定之否定,谁知道呢)。
- 哲学上有个最根本的问题,这个世界到底能否被认识。这里我觉得所谓的认识,在于人们希望找到事物的本质属性,人们希望通过简单的几条公理,去推演出这纷繁复杂的世界。但是事与愿违,人们不可能等到对世界有个完整的认识,再去改造世界,人类通常的做法就是猜测,实用就好。对应到机器学习中来可能就产生了生成方式和判别方式。生成方式个人理解在于追纠数据本身的产生机理,所以总的来说比较难。判别方式反正你给我一个表象(特征),我给你一个判别,具体里面的机理我就不管了。从这种程度上说,生成方式精益求精,判别方式"稀里糊涂"给个结论。生成方式是个追求满分的好学生,判别方式是个60分万岁的普通学生。事实告诉我们,混的好的往往是60分万岁的普通的学生。因为生成方式要求太高了,判别方式从目前来看占据了主流的地位。但是目前随着神经网络学习能力的提高,出现了VAE,GAN这类对抗网络,生成方式的春天也出现了。
- 我们究竟在与数据的对话中扮演什么样的角色。如果我们需要数据完全自己说话,那么就产生了无监督的学习方式;如果觉得数据需要人的帮助,那么就产生了有监督的学习方式。这可能对应于一个学生的不同阶段,上小学时,我们的学习能力不够,所以需要老师给与更多的指导,随着我们的成长,我们自学能力在慢慢地变强,直到自己可以独立学习。现在慢慢有监督学习也在向半监督学习过渡,个人以为随着学习能力的增强,机器学习会慢慢产生自身的思辨能力,这样无监督学习也会大放光彩。
以上面两个维度为横纵坐标,便可以分别产生四个象限,下面分别进行讨论。
1,有监督判别方式
这是传统机器学习最为发力的地方,我们给定数据及其标签,我们不在乎如何通过标签能生成数据,只要知道怎么把给定的数据判断为某一个标签即可。能想到最简单的方法就是把数据映射到坐标系中,在不同类型的数据中划出一道分界线即可。这里面有两个地方可以改进算法,改进数据的映射方式或改进数据的划分方法。在现实工作中,我们很难找到一个合理的边界模型去划这道线,因为可以选择的函数太多,也没有理由保证一个就优于另外一个。在这种情况下我们往往会选择一些简单的模型,然后在数据映射上下功夫。能想到的比较简单的模型包括线性模型和折线模型。最有名的线性模型莫过于logistics regression 和SVM,而折线模型可以理解为各种树结构。
logistics regression采用S型曲线将每个样本线性模型负无穷到正无穷的值域映射到[0,1],并赋予概率的意义。logistics regression给我的感觉是比较软,采用了相对光滑的损失函数,这也导致了最终的模型依赖于每一个训练数据。而SVM出发点在于我只需要找到一些有代表性点来support我的分类器就好了,通过最大化最小点到分割面的距离,经过一系列复杂的公式变化,最终的损失函数中出现了L1的loss(松弛化后的),最终产生了稀疏的效果。(关于L1我想补充几句,L1产生稀疏可以从三个方面理解: 1,L1代表先验分布是拉普拉斯分布,L2代表先验分布是高斯分布,拉普拉斯分布本身在0附近就比较集中。2,L1分布求梯度后会在0处产生断裂,从而导致在0处容易产生极值。3,L1的等位面比较在0附近比较尖锐,容易和未加正则的损失函数相交)。SVM还有一个最妙的地方在于通过核函数的引进,可以将特征的维度扩充到无限维。我个人很喜欢SVM理论的一个地方在于,SVM可以产生很多层的理解,每一层都会有不一样的风景。从最简单的最大分割距离,到产生L1的loss与logistics做对比,再往上通过核函数来判断样本之间的相似性,并引入Hilbert泛函空间和RHKS理论,将核函数映射为泛函空间中的一个矩阵,将训练样本转换成核函数矩阵的特征向量。整个这一个系列下来,颠覆了我对线性分类器的认知,也产生了美不胜收的感觉。题外话,网上都说SVM中常用的核函数是高斯核函数,抛开高维空间理论不谈,我个人理解就是高斯核函数的概率密度函数可以快速衰减,这样在support vector周围可以形成局部的影响区域,这样就可以用更多的support vector 来拟合更加复杂的曲面。(不知道这样理解对不对)
除了线性模型,现在最火的莫过于折线模型中的各种树及森林了。树这块我觉得其实就是考虑怎么生成树和怎么剪枝。ID3是一个分类树,采用信息增益生成树,没有剪枝;C4.5是一个分类树,采用信息增益率生成树,采用悲观剪枝法;CART既是分类树又是回归树,采用基尼系数,采用复杂度剪枝法。悲观剪枝法只用到局部信息,所以容易剪多了。复杂度剪枝法会考虑全局信息,所以相对来说计算复杂度更高。
单棵树的表达能极其有限,所以出现各种集成方式。主要有bagging和boosting两种。bagging说白了就是每棵树自己学自己的,然后大家在一起商量,这样肯定更鲁棒。而boosting就是站在前人的肩膀上,我只学习你们还没学到的,这样肯定对于训练集能更快拟合,但是也容易过拟合。bagging中的典型代表就是random forest,每次用一部分样本和一部分特征在一起生成一些树,这样就起到了平均的效果。boosting中的代表为gbdt和xgboost。他们都是回归树,这也很好理解,分类树值都离散化了我怎么知道你没学到什么。gbdt和xgboost最大的差别个人理解在与一阶导和二阶导的关系,XGBOOST再多考虑一点正则化。现在kaggle上面感觉都在说XGBOOST是一把利器,有时候我在想要是来一个三阶导甚至更高阶的拟合,会不会更好?
说实话,树这部分从理论分析上看不到有太多美的地方,但是没办法,人家通过折线想怎么分怎么分,所以也更灵活,所以效果自然容易好起来。(是这样吗?欢迎拍砖)
剩下来的包括kNN,神经网络等等,就暂略不表,有空补充上。
2,有监督生成模型
有监督生成模型我觉得最具代表性的莫过于贝叶斯模型了。贝叶斯模型我觉得也是特别美的一个算法分支。其核心只在于两个公式,概率生成公式和后验概率公式。有监督生成模型中所给数据都自带标签,所以我们可以很方便的优化这两个公式,甚至直接采用最大似然估计进行简化。我认为贝叶斯模型最美的地方在于通过引入概率的方式,可以让先验概率与后验概率相互之间不断彼此优化。
3, 无监督生成模型
其实贝叶斯模型是很早之前学习概率机器人的时候遇到的,当时很困惑我一点在于,输入的是X,为什么还要引入y,自己给自己找麻烦。后来慢慢领悟到,这相当于把一个复杂的问题分成简单的基本来解决,我一步一个脚印。有的时候体察到算法背后的设计逻辑也会让人觉得悟道了一样。对应到机器学习中来,应该就是无监督生成模型了。我觉得无监督学习模型的最核心莫过于EM了。这个很好理解,你就给我一堆数据,啥也没告诉我,我只能自己摸着石头过河。先基于已有的知识,我去猜测,不符再改呗。这样算来,这应该是无监督学习生成模型唯一的路径了,毕竟先验知识太少。K-means, mean-shift, VAE, GAN之类的我觉得都可以在这个框架下思考,有篇文章叫EM的九层理解,对我启发很大。但是里面提到Gibbs采样也算是EM的特例,我觉得就有点牵强了。以为如果把EM扩大到这个地步,那所有的迭代方式都可以理解为EM了。EM我个人理解还是要放在寻找藏在生成数据的背后核心产生机制这点上面,也就是无监督生成模型要做的事情。
4,无监督判别模型
额,没想到什么模型属于这块的。没监督判别啥?
下面想再讨论几个问题,可能不属于上述的各个模型,我个人更愿意理解为数据的处理方式和模型的表达方式。
1, 降维
提到降维,最线想到的是应该就是PCA了。PCA最大的好处在于理论简单,形式优美,最大的问题我个人认为在于没有考虑数据的内部形态。所以在此基础上产生了流形学习。我觉得流型学习的出发点在于希望考虑的更细致一点,在我们进行降维的时候,最好还能考虑数据的内部形态。流型学习产生的很多算法在我看来,说到底在于你希望保持哪种内部结构,比如说LLE我觉得尽可能保证样本之间互相表示的能力, LE我觉得保证样本之间的距离结构不被坍塌,LPP是线性化的LE,ISOMAP保留的是点到测地线的距离不变。这里面我觉得最美是LE,通过引入拉普拉斯矩阵使得整个表达式显得很干净。
2,图模型
图模型是我最近在看的内容,但是始终没能找到说服自己的一个点,如果能找到那个点,我再来逼逼。
以上是我最近一段时间关于机器学习常见算法的一些思考,谨作记录,欢迎拍砖与探讨。