尽管你可能听过很多不同的机器学习系统,但它们都可以通过两个维度进行分类:
- 是否需要在人类的监管下进行学习(supervised / unsupervised)?
- 是否可以增量式学习(online / batch)?
当然,这些维度之间,并不是孤立的。一个我们熟悉的例子,就是垃圾邮件识别系统,可以想象一下,它就可以是一个supervised,online机器学习系统。
对它们有了一个大致的印象之后,我们稍微详细一点来了解一下这些维度。
什么是supervised learning
所谓supervised learning,就是指我们在训练模型的时候,要明确告诉算法,可以根据哪些特征,推算得到什么结果。其中,我们提供的特征,叫做Features,得到的结果,叫做Label。
这种学习方式最适合完成的任务有两种,一种叫做分类(Classification):例如,识别垃圾邮件:
除了这种是非判断外,我们还可以进行更复杂的分类,例如,判断鸢尾花的类型:
总之,Classification类型的任务有一个共性,就是Label的取值范围,是固定的。
另一种,叫做预测(Predication),也叫做回归(Regression)。我们可以根据已知Features和Label的对应关系,找到它们的规则,并用这个规则,来推测未知Features对应的Label,例如,我们要预测的房价,就属于这类问题;
显然,Predication类型的任务,Label的取值范围,是不固定的(相对Classification而言)。
无论是Classification还是Predication类型的任务,在学习的过程中,我们都可以采用不同的学习算法来训练模型,例如:
- k-Nearest Neighbors
- Linear Regression
- Logistic Regression
- Support Vector Machines
- 部分Neural networks
当然,现在,我们完全没必要理解这些东西都是什么,只要知道它们都是属于supervised learning算法就好了。在后面的内容里,我们会逐一提到这些算法。
什么是unsupervised learning
理解了supervised learning之后,就不难理解什么是unsupervised learning了。简单来说,就是完全不需要人为干预的学习方法。我们无须给它指定Features,自然也就无须定义Label。这种学习方式的一个主要的用途,就是从庞大的数据中,找到样本之间难以发现的潜在关联。
例如,假设我们对泊学网站的用户性别、年龄、工作、爱好等信息等进行了收集。现在如果我们已经找到了足够多的样本,当我们用unsupervised learning类型的系统学习这些数据时,也许就能到60%的用户都喜欢动漫,并且在晚上8点以后看泊学视频这样的结论:
除了发现事物内在的联系之外,unsupervised learning另外一类用途是识别异常情况,原理上,其实和发现规律是类似的,也就是说,对于那些明显不在学习到的规律之中的行为,就会识别为异常。
例如,如果学习到的某个账号的登录习惯都分布在橘黄色点的位置,如果忽然遇到了一个红色点位置的Feature,就可认为很大概率这是个异常事件:
当然,unsupervised learning也有一些自己的学习算法,例如:
- k-Means
- Hierarchical Cluster Analysis
- Expection Maximization
同样,我们只要理解unsupervised learning就好了,现在,没必要了解这些算法的细节。
什么是semi-supervised learning
除了supervised和unsupervised learning之外,还有一种介于它们两者之间的学习方式,叫做semi-supervised learning。简单来说,这种方式可以用unsupervised方式进行学习,然后,我们通过sueprvised方式对学习的结果进行进一步的改良。
其中,最典型的一类应用,就是照片处理。
在图中,最左边是我们收集的照片,通过unsupervised learning,计算机可以识别到哪些是相同的人,这可以帮助我们进行内容分组,但是,计算机并不真正意义上认识他们。于是,我们可以通过supervised learning的方式,为这样的学习结果,打上标签,告诉计算机,有这样特征的人叫2b,而有那样特征的人叫9s。这样,在接下来的学习中,计算机就可以更可以更加精准的识别照片了。
于是,当它不太确定的时候,就可以问你,这是9s么?
什么是reinforcement learing
最后要介绍的一类学习方式,叫做reinforcement learning,它是一种基于规则的学习方式,不属于supervised或者unsupervised的范畴。其中,最简单易懂的例子,就是扫地机器人。假设它只有一个规则,就是碰壁之后,减10分。而机器人的最终学习目标,就是学习到房屋的边缘,并且在不减分的条件下工作:
可以看到,假设机器人从房屋中间出发,每次碰壁之后,就触发了减分规则,让它记住走到这里就不能继续前进了,而要顺时针转90度。这样,在往复6次之后,机器人就可以了解到房间的区域了。
Batch or online
了解完主要的学习方式之后,我们来了解两种机器学习系统自我更新的方法。一种是通过线下更新的,叫做batch learning,也叫offline learning。这种方式要提前用准备好的数据训练模型,然后把模型拿到生产环境中使用。例如,我们在iOS 11 CoreML中加载的模型就属于batch learning。一旦原始数据更新了,要想让模型进化,我们必须整个重新训练,然后更新生产环境中,使用的模型。
另外一种,叫做online learning,这种学习系统有两个特性:增量性和实时性。一方面,如果要参与最初训练的数据集过大,无法一次性加载的时候,就可以把这些数据切分成一块块小的数据序列,依次喂给学习算法;另一方面,一旦系统上线之后,学习算法还可以随着接受到的新数据不断改进自身的学习质量。不过,这种学习方式也有缺点,就是,一旦有人恶意提供了干扰学习的数据,系统的工作效率就会受到影响。因此,我们对这个持续工作的系统严加监控,及早发现这类情况。
理解评估房价的模型
以上就是和学习方式有关的常见分类,至此,我们已经可以对之前的房价评估项目进行一下归类了。显然,它属于supervised learning,因为我们需要喂给它历史数据供它学习;其次,它要完成的任务属于Predication类型,并且是基于多个变量进行回归的预测模型(因为我们采集了可能影响房价的诸多因素);第三,由于我们的数据量并不大,可以全部加载到内存处理。并且,这份数据也不会得到频繁的更新,因此,我们的学习系统采用batch mode learning进行学习就可以了。