《机器学习基石》课程非常棒,作为总结,本文重点是梳理课程中的知识脉络,同时尽可能说白话,让没有机器学习背景的朋友也能看懂。
这个课程好在哪里?
1、最大的好
课程内容组织非常科学,就像一个故事,有着清晰的主线。课程共16讲,基本是按照四个问题的顺序来展开的,即:
这条主线就像旅行者手中的地图,时时告诉你当前所处方位,从什么地方过来的,下一步要往哪里去。整个课程浑然一体,连贯不可分。对我这样的初学者,有了主线的帮助,能够快速构建机器学习完整的知识体系,为下一步的学习打下坚实的根基,这也是本课叫《机器学习基石》的原因。
2、其他的好
1、幽默诙谐的语言
林轩田具有传道授业的天赋,讲课风格非常轻松幽默,充满热情,享受其中,听课者很容易被感染而激发起学习的兴趣。
2、善于用图和示例化难为易
机器学习涉及许多数学知识,每当此时,林总会用很多图和浅显的例子,将数学知识背后的观念揭示出来,时刻注重数学在机器学习中的工具属性,没有陷入为数学而数学的陷阱,这对初学者是非常友好的。
3、善于总结
每课开头都会用一句话来回顾上一课内容,非常精辟准确;每课结束都会简要回顾本课的要点,同样言简意赅。尤其是对整个课程的总结:“6个3”,让人拍手叫绝!
2、以银行卡信用卡开始
向银行申请信用卡的人具有一些特征,比如性别、年龄、工作年限、工资水平、是否负债等,这些特征可以抽象为(x1, x2, ..., xd)。
在银行看来,申请人无非就是好的申请人和坏的申请人,好的申请人就给他发卡,坏的申请人就拒绝发卡。
那么问题来了,如何根据申请人的特征信息判断他是好是坏?
答案便是用机器学习,具体思路如下:
首先,假设存在一个完美的函数f,它的输入是申请人的特征信息向量X(大写的X表示向量),输出是要不要给申请人发卡,YES就代表可以发卡,NO代表不应发卡。这个完美的函数在课程中叫做target f。哇!要是能找到这个函数,发卡问题岂不是迎刃而解?
理想很丰满,现实很骨感,我们只是凭直觉感到冥冥之中有这么一个完美的f存在,但却并不知道它的真面目,所以,我更愿意称它为上帝函数(god f),因为它是我们无法得知的,只有上帝知道。
但是,上帝给你关上一道门的同时,总会给你打开一扇窗的。虽然无法看到f的庐山真面目,但它还是有一些线索的,这就是银行中已有的发卡数据,这些数据就是一个个发卡人的特征信息以及发卡后的结果好坏。这些数据称为D:{(X1,y1),(X2,y2),...,(Xn,yn)}(这里用大写的X表示这是一个竖向量),这些X可以认为是f的输入,y就是f的输出。
机器学习的核心问题就是:如何根据D找出一个函数g,使得g尽可能地接近f,此时,函数g称为假设(hypothesis)。全书都是在围绕这个问题展开的。
我的感觉,f是一个深闺中的少女,D就是深夜少女在窗户上映出的影子,我们的任务就是根据这个不完整还晃动的影子临摹出少女的模样,虽然无法达到一模一样,但求惟妙惟肖。
现在的问题是,如何找函数g?
首先,我们需要一个函数集以供我们查找挑选,这个函数集称为H,也称其为假设集(Hypothesis Set)。其次,我们需要一个算法A,它根据数据D,在H中挑出一个最好的g,所谓最好,就是指与f最像,所谓最像,是指任意给定一个输入数据d(这个d不一定是D中的数据),g和f的输出结果有很大概率是相同或相近的。
由上,可以总结出机器学习的简明概括:
算法A利用D,从H中挑出一个最好的函数g,使得g尽可能地像f。如下图所示:
3、找出函数g的第一个办法--PLA算法
为了找出函数g,我们先要确定g的范围,即H,我们发现,函数集H中的函数有一个共同的特点:输入是一个d维向量X,输出只有两个结果YES或NO,也可说是+1和-1 。这样的函数有一个专有的名字,叫感知器(Perceptron),H也就可以叫做感知器集合。
考虑银行发放信用卡,我们很自然的一个想法就是根据用户个人特征信息给用户打分,不同的特征信息有不同的权重,分数大于某个值时,就发卡,小于该值时,即拒绝发卡即:
将上式进行如下变形:
上面的式子中,X和W都是一个d+1维的竖向量,其中x0 = +1,w0 = -threshold。x1xd就是用户的d个特征信息,w1wd就是相应特征信息的权重。
上面的式子最大的作用就是帮助我们确定假设集H(Hypothesis Set)。每个W对应一个假设h(X),所有可能的W组成了所有可能的假设,所有可能的假设就是我们要从中挑选g的假设集。
现在,挑选最好的g,转变成了挑选最好的W,那么怎么挑选呢?W有无穷多个,我们必须确定一个可操作的挑选标准。
一个合理的挑选标准是,看这个W(也就是h(X))在数据D上是否与f保持一致,越一致的W越好,最理想的结果是,对于D中的任一个数据(Xn,yn),都有h(Xn)=yn=f(Xn)。PLA算法的思路就是找到一个这样的W,使它满足最理想的结果,具体步骤是从一个W0出发,不断地调整它,直到达到最理想的状态。伪代码如下:
上述代码中,对于Wt,每当发现它在一个数据上与f表现不一致时,就对它进行调整,得到Wt+1,如此循环,直到对于D中的任一个数据(Xn,yn),都有h(Xn)=yn=f(Xn),将此时的W(称作WPLA)返回,作为我们要找的函数g。
这个算法中最难理解的是对Wt调整得到Wt+1这一步,为理解它,需要我们再次审视h(X)=sign(WT*X),WT*X实际上就是向量W和向量X的内积。学过线性代数的我们知道,内积为0时,两个向量相互垂直,内积大于0时,两个向量夹角小于90度,内积小于0时,两个向量夹角大于90度。所以h(X)为+1时,表示W与X夹角小于90度,为-1时,表示W和X的夹角大于90度。
回到上面的伪代码中,假如我们发现了一个数据(Xn,yn),在这个数据上,sign(WT*Xn)与yn不相等,简便起见,我们假设sign(WT*Xn)为-1,而yn为+1(相反情况也是类似的分析)。这说明我们目前的W还不够好,需要调整,怎么调整呢?
sign(W^T*Xn)为-1 说明W和Xn的夹角大于90度,yn为+1说明我们理想的W和Xn的夹角应当是小于90度的,所以,我们要减小W和Xn的夹角,方法就是将W加上Xn作为新的W。那么,是否新的W和Xn的夹角就小于90度了呢,这不一定,不过,新的W和Xn的夹角总是变小了一点,离我们理想的W更近了一点,随着循环次数的增加,我们相信,二者夹角总会小于90度的。
上面分析的过程用图说明如下:
PLA算法有一个明显的弊端,就是理想的W不一定存在,我们有时候不可能找到一个W,它在D上与f表现完全一致,这个时候,算法中的循环将不会停止。
什么时候会存在理想的W呢?
这取决于数据集D,如果数据集D使得这样的理想W存在,我们就称D是线性可分的,否则,就说D不是线性可分的(linear separable),示意如下:
即使D是线性可分的,存在理想的W,我们的PLA算法一定能够找到理想的W并停止吗?答案是YES,但这涉及到一定的数学证明,这里不再细述,课程中有讲解。