1.3 机器学习
机器学习(Machine Learning,ML)是一门既“古老”又“新兴”的计算机科学技术,隶属于人工智能(Artificial Intelligence,AI)研究与应用的一个重要分支。
早在计算机发明之初,一些科学家就开始构想拥有一台可以具备人类智慧的机器。这其中就包括计算机结构理论的先驱、人工智能之父:艾伦·麦席森·图灵(Alan Mathison Turing)。图灵在1950年发表的论文《计算机器与智能》(Computing Machinery and Intelligence)中提出了具有开创意义的“图灵测试”(Turing Test),用来判断一台计算机是否达到了具备人工智能的标准。我们将有关描述“图灵测试”(如图1.2所示)的原文节选如下。
图1.2 图灵测试示意图
The new form of the problem can be described in terms of a game which we call the “imitation game”. It is played with three people,a man (A),a woman (B),and an interrogator (C)who may be of either sex.The interrogator stays in a room apart front the other two.The object of the game for the interrogator is to determine which of the other two is the man and which is the woman.
We now ask the question,“What will happen when a machine takes the part of A in this game?”Will the interrogator decide wrongly as often when the game is played like this as he does when the game is played between a man and a woman? These questions replace our original,“Can machines think?”
这段英文原文的中心主旨是:“如果通过问答这种方式,我们已经无法区分对话的那端到底是机器还是人类;那么就可以说,这样的机器已经具备了人工智能。”
尽管目前仍然有一些科学家并不完全赞同这种测试标准,但是我们不得不承认这样一个事实:在计算机刚刚发明十年不到的时间里,图灵能够用这种具有前瞻性的构想,为我们提供了用来测试人工智能的初步蓝图,是极为难能可贵的。
机器学习,作为人工智能的重要分支之一,从20世纪50年代开始,也历经了几次具有标志性的事件。这其中包括:
(1)1959年,美国的前IBM员工塞缪尔(Arthur Samuel)开发了一个西洋棋程序。这个程序可以在与人类棋手对弈的过程中,不断改善自己的棋艺;在4年之后,这个程序战胜了设计者本人;并且又过了3年,这个程序战胜了美国一位保持8年常胜不败的专业棋手。
(2)1997年,IBM公司的深蓝(Deep Blue)超级计算机在国际象棋比赛中力克俄罗斯专业大师卡斯帕罗夫(Garry Kimovich Kasparov),自此引起了全世界从业者的瞩目。
(3)同样是IBM公司,于2011年,它的沃森深度问答系统(Waston DeepQA)在美国知名的百科知识问答电视节目(Jeopardy)中一举击败多位优秀的人类选手成功夺冠,又使得我们朝着达成“图灵测试”的目标更近了一步。
(4)最近的一轮浪潮来自深度学习(Deep Learning)和强化学习(Reinforcement Learning)的兴起。2016年,谷歌公司DeepMind研究团队正式宣布其创造和撰写的机器学习程序AlphaGo打败了世界围棋职业冠军,见证了人工智能的极大进步。
按照机器学习理论先驱塞缪尔(Arthur Samuel)的说法,他并没有编写具体的程式告诉西洋棋程序如何行棋;因为下棋的策略千变万化,我们无法通过编写完备的、哪怕是固定的执行规程来对战人类棋手。从塞缪尔的西洋棋程序,到谷歌的AlphaGo,可以总结出机器学习系统一般具备如下一些特点。
(1)许多需要机器学习系统去解决的问题,大多无法直接使用固定的规则或者流程来完成。例如,如何让一台机器去辨别一张相片中都有哪些人或者物体,这种问题对人类而言似乎非常容易;但是,我们却无法将这种辨别能力,像计算器程序一样,通过一套明确的规则告知机器。与之相对地,我们手机中的计算器程序,就不属于具备人工智能的系统;因为里面的计算方法都有清楚而且固定的规程。
(2)所谓具备“学习能力”的程序都是指:它能够不断地从其正在进行的任务数据中吸取经验教训,从而应对未来类似的任务。我们习惯地把这种能力叫作泛化力(Generalization)。
(3)机器学习系统更加诱人的地方在于,它具备不断改善自身应对具体任务的能力。我们习惯定义这种完成任务的能力为表现(Performance)。塞缪尔的西洋棋程序和谷歌的AlphaGo都是典型的,借助过去对弈的经验或者棋谱,不断提高自身表现的机器学习系统。
尽管我们通过西洋棋程序的例子,总结了一些机器学习系统所具备的特性,但是笔者仍然喜欢引述美国卡内基·梅隆大学(Carnegie Mellon University)机器学习研究领域的著名教授Tom Mitchell的经典定义来作为阐述机器学习理论的开篇:A program can be said to learn from experience E with res pect to some class of tasks T and performance measure P, if its performance at tasks in T, as measured by P, improves with experience E.
这真的是令人称道的表述,而且带有英文独特的韵脚和节律。我们来尝试翻译一下:如果一个程序在使用既有的经验(E)执行某类任务(T)的过程中,被认定为是“具备学习能力的”;那么它一定需要展现出:利用现有的经验(E),不断地提升其在任务(T)上表现(P)的特质。
下面对其中的三项关键概念,同时也是机器学习的三要素:任务(Task)、经验(Experience)、表现(Performance),分别进行剖析,并以一个“良/恶性乳腺癌肿瘤预测”的机器学习问题作为实例,对上述概念进行具体阐释。
1.3.1 任务
机器学习的任务(Task)种类有很多,经典的任务类型包括监督学习(Supervised Learning)和无监督学习(Unsupervised Learning)。其中,监督学习关注对事物未知表现的预测,一般包括分类问题(Classification)和回归问题(Regression);无监督学习则倾向于对事物本身特性的分析,常用的技术包括数据降维(Dimensionality Reduction)和聚类问题(Clustering)等。
分类(Classification)问题,顾名思义,便是对所属的类别进行预测。类别既是离散的,同时也需要预先知晓数量。例如,根据一个人的身高、体重、三围等数据,预测其性别;在这里,性别不仅是离散的(男、女),同时也预先知晓数量(两种类别)。或者,根据一朵鸢尾花的花瓣、花萼的长宽等数据,判断其属于哪个鸢尾花亚种。由于鸢尾花亚种的种类也满足“离散”和“预先知晓数量”两项条件,因此这也是一个分类预测问题。
回归(Regression)同样也是预测问题,只是预测的目标数值往往是连续变量。例如,根据房屋的面积、地理位置、建筑年代等进行销售价格的预测;价格就是一个连续变量。
数据降维(Dimensionality Reduction)是对事物的特性进行压缩和筛选,这类任务相对比较抽象。如果我们没有特定的领域知识,是无法预先确定采样哪些数据的。现如今的传感设备采样成本相对较低,相反,筛选有效信息的成本更高。例如,在识别图像中人脸的任务中,我们可以直接读取到图像的像素信息。若是直接使用这些像素信息,那么数据的维度会非常高,特别是在图像分辨率越来越高的今天。因此,我们通常会利用数据降维的技术对图像进行降维,保留最具有区分度的像素组合。
聚类(Clustering)则是依赖于数据的相似性,把相似的数据样本划分为一个簇。不同于分类问题,我们在大多数情况下不会预先知道簇的数量和每个簇的具体含义。现实生活中,大型电子商务网站经常对用户的信息和购买习惯进行聚类分析,一旦找到数量不少并且背景相似的客户群,便可以针对他们的兴趣投放广告和促销信息。
至此,根据上述对机器学习“任务”这一概念的描述,相信读者可以很快确定“良/恶性乳腺癌肿瘤预测”的问题属于二分类任务。待预测的类别分别是良性乳腺癌肿瘤与恶性乳腺癌肿瘤。
1.3.2 经验
我们习惯性地把数据视作经验(Experience);事实上,只有那些对机器学习任务有用的特定信息,才会被当作经验纳入考虑范围。通常,我们把反映数据内在规律的信息叫作特征(Feature)。例如,在前面提到的人脸图像识别任务中,我们很少直接把图像最原始的像素信息,作为经验交给机器学习系统;而是进一步通过降维,甚至一些更为复杂的数据处理方法,得到更加有助于人脸识别的轮廓特征。
对于监督学习问题,我们所拥有的经验包括特征(Feature)和标签/目标(Label/Target)两个部分。我们一般借由一个特征向量(Feature Vector)来描述一个数据样本;标签/目标(Label/Target)的表现形式则取决于监督学习任务的具体类型(如离散的标签/目标对应分类问题,连续的目标对应回归问题)。
无监督学习问题自然就没有标签/目标,因此也无法从事预测任务,但却适合对数据的内在规律进行分析。正是这个区别,我们经常可以获得大量的无监督数据;而监督数据的标签/目标,却经常因为耗费大量的时间、金钱和人力,导致数据量相对较少。
另外,更为重要的是,除了标签/目标的表现形式存在离散、连续变量的区别;将原始数据转换为特征向量的过程也会遭遇多种不同的数据类型:类别型(Categorical)特征,数值型(Numerical)特征,甚至是缺失的数据(Missing Value),等等。在实际操作过程中,我们需要把这些特征转换为具体的数值,参与到运算当中。这里暂不过多交代,当我们在后面的实践中遇到时,会具体说明。
如图1.3所示,在“良/恶性乳腺癌肿瘤预测”问题中,我们所使用的经验包含两个维度的特征:肿块厚度(Clump Thickness)和细胞大小(Cell Size)。除此之外,还有对应代表肿瘤类型的目标/标签(Type)。通常,我们使用离散的整数来代表类别(Type=1代表恶性乳腺癌肿瘤,Type=0代表良性乳腺癌肿瘤),每一行都是一个独立的数据样本。
我们所要做的便是让机器学习模型,从上述的经验中习得如何判别肿瘤的类型。我们通常把这种既有特征,同时也带有目标/标记的数据集称作训练集(Training Set),用来训练我们的学习系统。在“良/恶性乳腺癌肿瘤预测”问题中,我们一共拥有524条独立的,用于训练我们机器学习系统的乳腺癌肿瘤样本数据。
图1.3 威斯康星大学乳腺癌肿瘤部分数据样例
1.3.3 表现
所谓表现(Performance),便是对机器学习任务完成质量的评估。为了尽可能客观地评估任务的完成质量,我们需要为此收集一批与训练集来源相同的数据。我们称这样的数据集为测试集(Testing Set)。测试集不仅需要具备与训练集相同类型的特征,同时也要有相应的标准答案。这样一来,我们可以将训练集上习得的模型,应用在测试集上,并取得对应的预测结果。
将预测结果与对应的正确答案进行比对,就可以评估出机器学习任务完成的质量。更为重要的是,我们需要保证,出现在测试集中的数据样本一定不能被用于模型训练。简而言之,训练集与测试集之间必须是彼此互斥的。
对待具有预测性质的问题,我们经常关注预测的准确程度。具体来讲,对于分类问题,我们要根据预测正确类别的百分比来评价其表现的优劣,这个指标通常被称作准确率(Accuracy);回归问题则无法使用类似的指标,我们通常会衡量预测值与实际值之间的偏差大小。以“良/恶性乳腺癌肿瘤预测”问题为例,我们使用分类的准确率,作为衡量学习模型/系统表现的指标;同时,用于测试的乳腺癌肿瘤样本数据共有175条。
前面提到过,作为一个学习系统,其自身需要借助经验,不断地在某项任务上表现出自我改善的能力。为了说明这个观点,我们以“良/恶性乳腺癌肿瘤预测”问题为例,向读者朋友展示这个学习的具体过程。
(1)观察一下测试数据集中的175条肿瘤样本在二维特征空间的分布情况。如图1.4所示,X代表恶性肿瘤,O代表良性肿瘤。
图1.4 良/恶性乳腺癌肿瘤测试集的数据分布
(2)随机初始化一个二类分类器。这个分类器使用一条直线来划分良/恶性肿瘤。决定这条直线走向的因素有两个:直线的斜率和截距。这些被我们统一称为模型的参数(Parameters),也是分类器需要通过学习从训练数据中得到的。最初,使用随机初始化参数的分类器,其表现如图1.5所示,十分不理想。
图1.5 随机参数下(即无学习)的二分类器(实线)
(3)随着我们使用一定量的训练样本作为经验,分类器在肿瘤分类任务上的表现有了逐步的提升。如图1.6所示,当学习10条训练样本时,分类器的表现改善了一些,在测试集上的分类准确率为83.43%。
图1.6 学习10条训练样本得到的二分类器(虚线)
(4)在继续学习了全部训练样本之后,分类器的表现取得了大幅提升。如图1.7所示,在测试集上的分类准确率最终达到93.71%。
图1.7 学习全部训练样本得到的二分类器(虚线)
综上,我们通过一个现实生活中的例子,向读者阐释了一个学习系统的若干关键概念。在本书后续的章节中,还会有更多有趣而实用的机器学习项目等待着大家。