机器学习精讲 全彩印刷

978-7-115-51853-8
作者: [加拿大] 安德烈·布可夫(Andriy Burkov)
译者: 韩江雷
编辑: 陈冀康

图书目录:

详情

内容提要 本书用简短的篇幅、精炼的语言,讲授机器学习领域必备的知识和技能。全书共11章和一个术语表,依次介绍了机器学习的基本概念、符号和定义、算法、基本实践方法、神经网络和深度学习、问题与解决方案、进阶操作、非监督学习以及其他学习方式等,涵盖了监督学习和非监督学习、支持向量机、神经网络、集成学习、梯度下降、聚类分析、维度降低、自编码器、迁移学习、强化学习、特征工程、超参数调试等众多核心概念和方法。全书最后给出了一个较为详尽的术语表。 本书能够帮助读者了解机器学习是如何工作的,为进一步理解该领域的复杂问题和进行深入研究打好基础。本书适合想要学习和掌握机器学习的软件从业人员、想要运用机器学习技术的数据科学家阅读,也适合想要了解机器学习的一般读者参考。

图书摘要

版权信息

书名:机器学习精讲

ISBN:978-7-115-51853-8

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。

著    [加拿大] 安德烈·布可夫(Andriy Burkov)

译    韩江雷

责任编辑 陈冀康

人民邮电出版社出版发行  北京市丰台区成寿寺路11号

邮编 100164  电子邮件 315@ptpress.com.cn

网址 http://www.ptpress.com.cn

读者服务热线:(010)81055410

反盗版热线:(010)81055315


Simplified Chinese translation copyright ©2019 by Posts and Telecommunications Press.

ALL RIGHTS RESERVED.

The Hundred-Page Machine Learning Book by Andriy Burkov. Copyright © 2019 Andriy Burkov.

本书中文简体版由作者Andriy Burkov授权人民邮电出版社出版。未经出版者书面许可,对本书的任何部分不得以任何方式或任何手段复制和传播。

版权所有,侵权必究。


本书用简短的篇幅、精炼的语言,讲授机器学习领域必备的知识和技能。全书共11章和一个术语表,依次介绍了机器学习的基本概念、符号和定义、算法、基本实践方法、神经网络和深度学习、问题与解决方案、进阶操作、非监督学习以及其他学习方式等,涵盖了监督学习和非监督学习、支持向量机、神经网络、集成学习、梯度下降、聚类分析、维度降低、自编码器、迁移学习、强化学习、特征工程、超参数调试等众多核心概念和方法。全书最后给出了一个较为详尽的术语表。

本书能够帮助读者了解机器学习是如何工作的,为进一步理解该领域的复杂问题和进行深入研究打好基础。本书适合想要学习和掌握机器学习的软件从业人员、想要运用机器学习技术的数据科学家阅读,也适合想要了解机器学习的一般读者参考。

致我的父母:塔提亚娜,瓦雷里

还有我的家人:凯瑟琳,爱娃和德米特里


我与“机器学习”的初次邂逅是在5年前,那时我刚刚决定于新加坡南洋理工大学攻读计算机博士学位。比起计算机学院的主流课程,如数据库、软件开发、嵌入式系统等,“机器学习”这个“新领域”既令人好奇,又让人望而生畏。当时,“学习”还没那么深度, “数据科学家”刚刚被《哈佛商业评论》宣布为“二十一世纪最吸引人的职业”。回头看来,差不多同一时间,“人工智能”正在为一次空前的崛起积累能量、蓄势待发。

我在新加坡南洋理工大学的研究项目属于工业界的应用问题,因此得以接触各种工业界数据和工具,并在研究工作中尝试部分机器学习模型。与此同时,与机器学习相关的各种文献、资料、开源项目在网络上大量涌现。作为从业者,我一方面受益于大量信息所带来的便利,另一方面却也时常因为信息量太大而不知从何入手。

2018年下半年,一次偶然的机会,我在职业社交平台上发现本书作者的贴子。安德烈是个职场“网红”,经常发些妙趣横生、却可能只有程序员才能理解的段子和图片。当时,他正积极地为新书做宣传,包括不定期连载和提供免费试读。泛读之后,我被作者精巧的构思和精炼的语言深深吸引。

在本书之前,我接触过一些关于机器学习技术的教科书。这些书的共同特点是:深、厚、难。首先,它们普遍内容深奥,阅读门槛较高。严谨的论证和详细的数学推导,需要很强的理论基础才能看懂。其次,很多教科书篇幅动辄上千页,让刚入门的读者望而却步。最后,实现书中所介绍的算法所需要的工程量较大,很难快速应用于实际问题。相比专业教科书,本书更像是一本科普读物,任何具备基本代数知识的读者都可以理解其大部分内容。本书篇幅较短、章节清晰,适合通读与精读。书中介绍的很多实用技巧也可以帮助读者快速上手实践。

虽然篇幅较短,但本书涵盖了关于机器学习的大部分精华要点,并将知识点系统地串联在一起。书中凝炼了大量学术文献的中心内容和结论,权威性很强。同时,作者将多年研究和工程项目中所总结的经验以最容易理解的方式与读者分享,可读性和实用性都非常强。由于篇幅所限,书中省去了大量数学推导过程以及文献引用。不过,有深入研究需要的读者仍可通过配套的网页获取更多内容。

当得知作者有意向将本书翻译成其他语言并在各国出版时,我主动联系作者和出版社,并通过试译,得到了翻译本书的机会。对我个人来说,翻译一本专业著作是个全新的挑战。当时主要的考量有二:一方面,将原书内容翻译成另一种语言的过程,也是加深对各种技术概念的印象、在精读中发现新的视角和问题的过程;另一方面,随着越来越多的行业正加入人工智能的革新浪潮,对机器学习人才的需求会继续增加,我也希望通过自己的绵薄之力,让更多对机器学习感兴趣却又望而却步的中文读者接触到这本书。

翻译这样一本书需要多次精读,并同时与作者保持沟通,查阅中英文资料以确保表述清晰、准确。当英文原文有多种含义时,就需要译者对比最佳契合度和应用的广泛性,决定最终译文方案。在此过程中,我深深感慨在该技术领域,中文用户社区蓬勃发展、高人众多。同时,鉴于本人在新加坡成长受教、工作科研,中文表述及使用与中国读者难免存在某些差异,翻译的过程中也难免会有遗漏或不周之处,敬请各位读者谅解、指教,一起学习。

人工智能技术发展之快令人难以置信。在我翻译本书的几个月时间里,就有多个重要研究成果被发表,基准测试被刷新。以这种速度发展下去,我很好奇未来的世界会是什么样子?人工智能到底会给人类社会带来怎样的改变?如果未来有读者拾起本书,是否会觉得安德烈探讨的“机器学习”早已成为常识?

谨以此书,献给求索无止的人类,还有热爱学习的机器!

韩江雷

2019年夏

新加坡


在开始之前,我们要澄清一个事实——机器根本不会学习。所谓的“机器学习”,只是在寻找一个数学公式。找到之后,我们可以利用该公式和一组输入数据(训练数据)进行运算,并与正确结果进行比较。我们希望该公式能对大多数新的(不同于训练数据)、取自相同或相似统计分布的输入数据进行正确运算。

为什么我们认为这不算学习呢?原因是,如果输入数据发生微小改变,那么新的运算结果可能与正确结果截然不同。相比之下,动物的学习就完全不同。比如,很多人喜欢在计算机或手机上玩游戏。如果在正常的屏幕上会玩这个游戏,那么屏幕稍微倾斜或者旋转时也不太会影响我们玩游戏。如果换成一个机器学习的算法来玩呢?除非它是专门用来识别屏幕变化的算法,否则很可能无法在屏幕发生变化的情况下正常游戏。

既然如此,我们为什么还要叫它“机器学习”呢?这个名称在很大程度上是一个市场宣传噱头。“机器学习”概念由美国计算机游戏和人工智能领域先驱之一亚瑟·塞缪尔(Arther Samuel)在1959年首次提出。当时他就职于IBM。这个在当时很酷炫的概念帮助公司吸引了客户和高水平员工。后来,IBM又在2010年左右提出了“认知计算”(Cognitive Computing)的概念,再次助公司在激烈的竞争中占得先机。

正如人工智能不是真正的智能,机器也不能真正学习。然而,这并不影响“机器学习”逐渐成为一个被广泛接受的名词——构建一种计算机系统的科学和工程方法。使用“机器学习”构建的系统,无须明确地用指令编程,即可输出正确结果。总而言之,机器的“学习”只是一种比喻,并非实际意义上的学习。

自20世纪60年代以来,学术界与工业界涌现了大量与机器学习有关的材料。在本书中,我们只选择其中公认的最精华的部分。通过阅读本书,初学者能够较全面地了解机器学习的基础知识,为理解该领域的复杂问题和进一步深入研究打好基础。

与此同时,本书为有从业经验的读者提供了多种自我进修的方向。作为一本工具书,它同样适用于项目初期的头脑风暴阶段,比如评估机器学习是否适用于解决某个技术或业务问题,以及具体的解决思路。

由于本书篇幅精简,因此我们建议初学者按照章节顺序阅读。如果读者对某一课题特别感兴趣,想了解更多,可以通过扫描章节后附带的二维码获取附加资料(英文)。

扫描这些二维码将打开与本书配套的维基页面,其中包括大量推荐阅读、视频、问答、代码、习题等。本书的原作者,协同分布在世界各地的志愿者们,将会持续更新这些内容。可以说,本书犹如一坛美酒,越陈越香。

对于没有二维码的章节,它们很有可能也有对应的页面。读者可以在维基中搜索标题,以获取更多资料。


作为计算机科学的一个分支,机器学习致力于研究如何利用代表某现象的样本数据构建算法。这些数据可能是自然产生的,可能是人工生成的,也可能来自于其他算法的输出。

同时,机器学习也可以定义为一套解决实际问题的流程,具体步骤包括收集数据、利用算法对收集到的数据进行统计建模以及利用构建好的统计模型解决具体问题。

为节省篇幅,本书中交替使用名词“学习”和“机器学习”。

机器学习的方法主要有4种:监督(supervised)、半监督(semi⁃supervised)、非监督(unsupervised)及强化(reinforcement)学习。

监督学习(supervised learning)[1]需要一个数据集(dataset),其中全部样本是有标签样本(labeled example)[2],表示为。数据集中有N个元素,每个元素xi为一个特征向量(feature vector)。特征向量的每个维度j=1,…,D可以理解为描述某样本的一个角度。每个维度的值称为特征(feature),表示为x(j)。举个例子,如果每个样本x代表一个人,那么第一个特征x(1)可能对应身高,第二个特征x(2)对应体重,第三个特征x(3)表示性别,诸如此类。一个数据集中的所有样本,特征向量的同一个位置j必须包含同类信息。如果某样本xi的第二个特征表示质量(千克),其他所有样本的第二个特征都是以千克为单位的质量值。另一方面,标签(label)yi可能是一个有限类别(class)集合里的一个元素{1,2,…,C},既可能是一个实数,也可能具有更复杂的结构,比如向量、矩阵、树或者图。本书重点讨论前两种情况,即类别和实数标记[3]。类别可以理解为一个样本的某个属性。例如,如果我们想用监督学习方法检测垃圾邮件,标签就有两类——{“垃圾邮件”,“非垃圾邮件”}。

监督学习算法(supervised learning algorithm)利用有标签数据集生成一个模型。以一个样本的特征向量作为输入,模型可以输出用于判断该样本标记的信息。例如,一个癌症预测模型可以利用某患者的特征向量,输出该患者患有癌症的概率。

有别于监督学习,进行非监督学习(unsupervised learning)只需要包含无标签样本的数据集,表示为非监督学习算法(unsupervised learning algorithm)所产生的模型(model)同样接受一个特征向量x为输入信息,并通过数学变换使其变成另外一个对其他任务更有用的向量或数值。举几个例子:聚类(clustering)模型输出代表数据集中每个特征向量所在类簇(cluster)的标记;降维(dimensionality reduction)模型将输入的高维度特征向量x转化为一个低维度的输出向量;异常值检测(outlier detection)模型的输出是一个实数值,代表x在多大程度上不同于数据集中的“标准”样本。

半监督学习(semi⁃supervised learning)可利用掺杂着有标签和无标签样本的数据集进行学习。通常情况下,无标签样本的数量远超过有标签样本。半监督学习算法(semi⁃supervised learning algorithm)的功能和原理与监督学习算法大同小异,区别在于,我们希望算法可以利用大量无标注的样本学得更好的模型。

乍看之下,这个思路可能不太靠谱。难道加入大量无标签样本不会使问题变得更复杂吗?其实,在加入无标签样本的同时,我们也加入了大量新的信息:更多的样本可以更好地反映数据总体的概率分布。从理论上来看,一个算法应可以通过利用这些额外的信息而更好地学习。

强化学习(reinforcement learning)这个分支领域中,我们假设机器“生活”在一个环境中,并可以感知当前环境的状态(state)。环境的状态表示为特征向量。在每个状态下,机器可以通过执行不同动作而获取相应的奖励,同时进入另一个环境状态。强化学习的目的是学习选择行动的策略(policy)。

与监督学习模型相似的是,强化学习中的策略同样是一个函数,以某状态的特征向量作为输入,输出一个在当前状态下最优的可执行动作。“最优”是指平均期望奖励最大。

强化学习专门解决需要按顺序做决策,并具有长期目标的问题,例如电子游戏、机器人控制、资源管理、物流管理等。本书重点介绍对相互独立的输入样本进行预测的一次性决策问题,所以关于强化学习的具体内容将不会出现在书中。

在深入探讨之前,我们先大概解释一下监督学习的工作原理。我们从监督学习开始,因为它是最常见的机器学习方法。

监督学习的第一步是采集数据。每个数据点需要以(输入,输出)的形式成对出现。输入文件的格式可以是多样的,比如电子邮件、图片或者传感器读数等。输出格式则通常为一个实数值,或者代表类别的标签(例如,“垃圾邮件”“非垃圾邮件”“猫”“狗”“老鼠”等)。某些情况下,输出也可能是向量(例如,一个图片中人物所在区域的4点坐标)、序列[例如“一只猫”所对应的词性(“数词”“量词”“名词”)]或其他形式。

我们还是用过滤垃圾邮件为例说明。假设现在我们已经收集了一万封邮件,并将每个邮件标记为“垃圾邮件”或“非垃圾邮件”(可以请人帮忙,也可以自己动手标注)。接下来,我们要把每个邮件转变成特征向量。

如何用特征向量表示一个客观存在的事物(如一封邮件),通常由数据分析师通过经验来决定。一种常用的将文字转化为特征向量的模型叫作“词袋模型”(bag of words)。举个例子,我们可以使用3 500个常用汉字表[4](按笔画排列)作为一个词袋模型的特征。

通过以上过程,每个收集来的邮件都可以转变成一个3 500维的特征向量,每个维度的值是1或0。

现在,输入数据就可以被计算机识别了,不过标签仍是文字。大多数机器学习算法要求将标签转化为数字格式才能正常运行,比如用数字0和1表示“非垃圾邮件”和“垃圾邮件”。接下来,我们要以支持向量机(Support Vector Machine,SVM)算法为例进行具体解释。该算法需要用数字+1(正数1)表示阳性标签(“垃圾邮件”),而阴性标签(“非垃圾邮件”)为-1(负数1)。

转化之后,我们就有了一个数据集和一个算法。下一个问题是,如何利用这个算法从该数据集中学习模型。

SVM算法将每个特征向量看成一个高维度空间中的一个点(在我们的例子中,该空间有3 500维)。算法把所有的点画在一个3 500维的空间中,再用一个3 499维的超平面(hyperplane)将阳性样本和阴性样本分开。在机器学习术语中,分隔两类样本的边界叫作决策边界(decision boundary)。

该超平面可以用以下线性方程来描述。该方程中含有两个参数,一个实数向量w,与输入特征向量x具有的维度相同,以及一个实数b:

wx-b=0

其中,wx的意义是w(1)x(1)+w(2)x(2)+…+w(D)x(D),D为特征向量x的维度。

如果读者现在对某些公式还不太理解,没关系。在第2章中,我们会系统复习机器学习所用到的数学和统计学概念。请暂且试着理解,读过第2章之后就容易多了。

现在,我们可以用以下公式来预测某个输入特征向量x的标签了:

这里的sign是一个数学运算,用来取一个数值的符号。如果数值为正,就返回+1;如果数值为负,就返回-1。

SVM算法的训练目标是利用数据集找到参数wb的最优值w*b*。找到之后,我们的模型(model)f(x)变成以下形式:

接下来,使用训练好的模型预测一封邮件是不是垃圾邮件。我们只需要把邮件文字转化成特征向量,与w*相乘,再减去b*。最后,sign运算得到了一个预测结果(+1代表“垃圾邮件”,-1代表“非垃圾邮件”)。

那么,要怎么找到最优值w*b*呢?这是一个有约束的优化(optimization)问题,可用计算机解决。

这里的约束是什么?首先,我们想要训练后的模型能准确地预测1万个样本的标签。每个样本i=1,…,10 000的格式是一对(xi,yi),其中xi是特征向量、yi是值为+1或-1的标签。那么,这里的约束可以被表示为:

与此同时,我们也希望分割正负样本的超平面间隔(margin)最大。该间隔由决策边界定义为两类样本的最近距离。间隔大的模型具有更好的泛化性(generalization),也就是模型对新样本的处理能力更强。为此,我们需要最小化w的欧几里德范数(Euclidean norm),可通过计算得出。

这样依赖,我们需要计算机解决的优化问题可以被写成:

其中,表达式yi(wxi-b)≥1同时包含了两个约束。

该优化问题的解w*b*即为统计模型(statistical model),简称为模型。我们称构建该模型的过程为训练(training)。

图1.1展示了一个SVM模型的图例。在图1.1中,特征向量为二维。其中,蓝色和红色的圆圈分别表示正负样本;红线代表决策边界,用wx-b=0表示。

图1.1 一个对二维特征向量进行分类的SVM模型实例

那么,为什么将w的范数最小化可以帮我们找到正负样本之间的最大间隔呢?如图1.1所示,wx-b=1和wx-b=-1定义了两个相互平行的超平面。在几何学中,两个超平面的距离是。因此,范数越小,超平面间的距离越大。

以上是支持向量机的基本原理。使用该算法构建的模型可称为线性模型(linear model)。之所以称为线性,是因为它的决策边界是一条直线(也可能是一个平面或超平面)。SVM也可以通过利用加入(kernel)来获得任意非线性的决策边界。很多情况下,由于数据中的噪声、错误的标注以及极端值(outlier)(与数据集中其他样本截然不同的样本),我们无法完全区分两类样本。另一个版本的SVM可以通过超参数[5]对训练样本中对某些特定类别的分类失误进行惩罚。我们会在第3章中学习更多关于SVM的具体内容。

从原则上来说,任何一个分类学习模型都直接或间接地构建一个决策边界。决策边界可能是一条直线或者弧线,可能具有更复杂的形态,也可能由多个几何形态叠加组成。该边界的形式决定了模型的准确率(accuracy,准确预测样本占总样本数的比率)。各种学习算法的区别在于计算决策边界的方法有所不同。

在实践中,还有两个区分学习算法的因素需要考虑:模型构建所需时间和预测所需时间。在许多实际案例中,我们可能因为需要一个可以快速生成的模型或者可以快速做出预测的模型,从而选择准确率偏低的模型。

为什么机器学习得到的模型可以准确预测新数据的标签呢?答案同样可以从图1.1中看出。显而易见,由于两类样本被决策边界分隔,每个类别的样本位于各自的子空间中。如果训练样本是随机抽取而且相互独立,在统计学上,新的负样本在同样空间内的位置很可能位于其他负样本附近。同理,新的正样本也更可能被其他正样本所包围。从而,决策边界有很高概率区分正负新样本。不过,我们的模型也会判断失误,不过可能性较低,远低于判断正确的情况。

可想而知,训练样本的数量越多,出现与训练样本截然不同(在图表中远离同类样本)的新样本的可能性就越低。

为将失误的概率最小化,SVM算法试图将间隔最大化。换句话说,决策边界的位置需要距离两个类别的样本都尽量远。

除此之外,模型失误还与其他因素相关,比如训练集大小、定义模型的数学方程式、模型训练时间等。想对造成模型失误的原因以及可学习性(learnability)进行更多了解的读者可以参考PAC(Probably Approximately Correct)学习。PAC理论着重分析一个学习算法在什么情况下可以生成一个近似正确的模型。

[1] 本书中加黑的术语表示该术语被收录在术语表中。

[2] 译者注:“标签”与“标注”“标记”交替使用,后同。

[3] 实数是可以用来表示距离的量,例如0、256.34、1000、1000.2等。

[4] 译者注:原作使用20000个英文单词作为案例特征。

[5] 一个超参数是一个学习算法的属性,通常(但不一定)是一个数值。数值的大小影响着算法的运行。超参数的具体取值不是通过数据学习到的,而是需要数据科学家在算法运行前预先设定。


我们在本章复习机器学习中常用到的一些数学符号。

一个标量(scalar)是单独的数值,像15或者-3.25。我们用一个斜体小写字母表示一个标量变量或者常数,例如xa

一个向量(vector)是一个由若干元素组成的有序列表(ordered list)。每个元素是一个标量,代表一个特征。我们用粗体小写字母代表一个向量,如xw。我们可以把一个向量想象成一个高维空间中的点,以及指向该点的方向。例如,图2.1中的3个向量,分别是a=[2,3]、b=[-2,5]和c=[1,0]。我们用一个斜体小写字母和一个索引一起代表向量中的元素,比如w(i)x(j)。其中,索引ij表示向量中的特定维度,也是该特征在有序列表中的位置。以图2.1中红色的向量a为例,a(1)a(2)分别等于2和3。

图2.1 3个向量可以被想象为3个方向或者3个点

需要注意的是,x(j)不是幂运算,比如x2(平方)或x3(立方)等。当我们需要对一个向量中特定元素进行幂运算时,我们用(x(j))2来表示。

一个变量可能有两个或更多索引,比如。在神经网络中,我们用表示第l层神经元中第u个单元的第j维输入特征。

一个矩阵(matrix)是一个排列由行和列组成的矩形数组(array)。下面例子中的矩阵由两行三列组成。

我们用粗体大写字母表示矩阵,比如AW

一个集合(set)是指包含多个独特元素的无序集体(unordered collection)。我们用书法体的大写字母(如S)来表示一个集合。我们可以在大括号中列出一个有限集合包括的所有元素,比如{1,3,18,23,235}和{x1,x2,x3,x4,…,xn}。此外,集合也可以包括某个范围值内的无数个元素。如果一个集合包含两个数值ab之间的所有值,包括ab本身,那么我们可以在中括号中表示为[a,b];如果ab不被包括在内,我们则在小括号表示为(a,b)。举个例子,集合[0,1]可以包括以下元素:0、0.000 1、0.25、0.784、0.999 5和1.0。此外,我们用符号表示一个常用的特殊集合,该集合包括负无穷和正无穷间的所有实数。

xS表示“x属于一个集合S”。两个集合S1S2的交集(intersection)是一个新的集合S3,表示为S3S1S2。例如,{1,8}←{1,3,5,8}∩{1,8,4}。

S1S2的并集(union)也是一个新的集合S3,表示为S3S1S2。例如,{1,3,4,5,8}←{1,3,5,8}∪{1,8,4}。

对一个集合X={x1,x2,…,xn-1,xn},或一个向量x=[x(1),x(2),…,x(m-1),x(m)]中所有元素的求和运算,可以用∑表示:

或者

其中,符号的意思是“定义为”(is defined as)。

大写字母派(Π)所表示的运算与∑相似。Π运算对一个集合或向量中所有元素求积:

其中,a·b表示a乘以b。一般地,我们用更简洁的方式ab来表示a乘以b

一个集合可以通过运算衍生出新的集合。例如:S'←{x2|xS,x>3}。该表达式的意思是,把集合S中所有大于3的元素取平方值,然后组成新的集合S'。符号表示集合S中元素的个数。

向量的加法:x+z=[x(1)+z(1),x(2)+z(2),…,x(m)+z(m)]

向量的减法:x-z=[x(1)-z(1),x(2)-z(2),…,x(m)-z(m)]

一个向量与一个标量的乘积是一个向量,例如:

两个向量的点积(dot product)或内积(inner product)是一个标量,例如。有的教科书用w·x来表示点积。需注意的是,两个向量必须具有相同维度,否则它们的点积不存在。

一个矩阵W与一个向量x的乘积是一个向量。比如,给定一个矩阵:

当一个向量与一个矩阵进行运算时,我们通常用一个列向量或只有一列的矩阵来表示这个向量。只有当这个列向量的行数与矩阵的列数相等时,矩阵与向量相乘才是有效运算。假设我们的向量,则Wx的结果是一个二维向量。该运算的具体过程为:

乘积的维度与矩阵的行数相同。比如,如果W有五行,与x的乘积就是一个五维向量。

在矩阵乘法中,如果一个向量在矩阵的左侧,它需要转置(transpose)之后才能与向量相乘。我们用xT表示x的转置向量。例如:

, 则

向量x与矩阵W相乘可以表示为xTW。具体过程如下:

正如我们所看到的,矩阵的维度与矩阵的行数相同。只有这样,该乘法才是有效运算。

一个函数(function)可以定义一个集合X中的元素x,和另一个集合Y中的元素y之间的关系。我们称X是该函数的定义域(domain),Y是值域(co⁃domain)。通常每个函数都会被命名。比如说,我们将一个函数命名为f,该函数的表达式为y=f(x),读作“yx的函数”。其中,x是自变量(argument),或输入值;y是函数值,或输出值。

我们也常将输入称为函数的变量(variable)。例如:x是函数f的变量。

如果在一个与x=c临近的开区间内,所有x都满足f(x)≥f(c),我们称x=cf(x)的局部最小值(local minimum)。一个区间(interval)是一个符合以下性质的实数集合:集合中两个数之间的任意数也属于该集合。一个开区间(open interval)不包括定义该区间的两个端点,在括号内表示。譬如:(0,1)定义了一个包括所有大于0却小于1的实数开区间。所有局部最小值中的最小值是全局最小值,如图2.2所示。

图2.2 一个函数的局部和全局最小值

y=f(x)表示函数的输出为一个向量y。输入的自变量可以是一个向量或一个标量。

给定一个集合A={a1,a2,…,an},运算符的输出是:以A中所有元素为输入,f(a)可能得到的最大值。则返回使f(a)最大的元素a

如果该集合没有明确定义或是无限集合,我们写作

运算符min和argmin的用法与max和argmax相似。

运算符af(x)的意义是,变量a新的值取自函数f(x)。我们称a被赋予了新的值。同样,a←[a1,a2]表示一个向量变量被赋予了一个二维向量值[a1,a2]。

一个函数的导数(derivative)f'是一个函数或一个描述f增长(或减少)速度的值。如果导数是一个恒量,比如5或-3,那么原函数f在定义域内任意点x的增长(或减少)速度都是固定的。如果导数f'是一个函数,f在定义域内不同区域的增长速度则不同。如果导数f'在某点x的值为正,f在此处增长;如果导数为负,则f在此处减少。如果导数在x处为0,就表示原函数在x点的斜率(slope)是水平的。

计算导数的过程称为求导(differentiation)。

一些基本函数的导数是已知的。例如,如果f(x)=x2,则f'(x)=2x;如果f(x)=2x,则f'(x)=2;如果f(x)=2,则f'(x)=0(所有常值函数f(x)=c的导数都是0)。

我们可以利用链式法则(chain rule)来求复合函数的导数。具体来说,令F(x)=f(g(x)),fg都是函数,则F'(x)=f'(g(x))g'(x)。举个例子,如果F(x)=(5x+1)2,那么g(x)=5x+1且f(g(x))=(g(x))2。利用链式法则,我们得到F'(x)=2(5x+1)g'(x)=2×(5x+1)×5=50x+10。

如果一个函数含有多个输入变量(或一个复杂形式的输入,如向量等),那么它的导数的推广(generalization)是梯度(gradient)。一个函数的梯度是一个向量。向量的每个元素都是一个偏导数。求一个函数的偏导函数的过程是,针对其中一个输入变量求导数,同时保持其他变量不变。

例如,我们令一个函数f([x(1),x(2)])=ax(1)+bx(2)+c,表示x(1)函数f偏导数,则:

其中,a是函数ax(1)的导数;两个0分别是bx(2)c的导数。由于我们在对x(1)求偏导时,会将x(2)视为一个恒定值,因此bx(2)的导数为0。

同样,我们用表示对x(2)求函数f的偏导数,则:

最后,函数f的梯度,表示为,是一个向量

在第4章中,我们会具体介绍如何应用链式法则求偏导数。

一个随机变量(random variable)值是一个随机现象(random phenomenon)的数量表现,通常用一个斜体大写字母(如X)表示。随机变量有两种:离散型(discrete)和连续型(continuous)。

一个离散型随机变量(discrete random variable)的可能值个数是有限的或可数无穷的。例如,红色,黄色,蓝色或者1,2,3等。

我们用一组概率描述一个离散型随机变量的概率分布(probability distribution),每个概率对应一个特定的可能值,也称为概率质量函数(probability mass function,pmf)。例如,Pr(X=红色)=0.3,Pr(X=黄色)=0.45,Pr(X=蓝色)=0.25等。概率质量函数中每个概率都大于或等于0,且满足所有概率的和为1[见图2.3(a)]。

图2.3 一个概率质量函数和一个概率密度函数

一个连续型随机变量(continuous random variable)在一定范围内的可能值不能逐个列举,如身高、体重和时间等。因为一个连续型随机变量X的可能取值有无数个,所以任何可能值c的概率Pr(X=c)都是0。我们用一个概率密度函数(probability density function,pdf)来描述它的概率分布。概率密度函数具有非负数的值域,且曲线下的面积为1[见图2.3(b)]。

我们假设一个离散型随机变量Xk种可能值,表示为。我们定义X的期望(expectation)为:

(2.1)

其中,Pr(X=xi)表示根据pmf,X值为xi的概率。一个随机变量的期望值又称为平均值(mean,average),通常用希腊字母μ表示。期望值是随机变量最重要的统计特征(statistics)之一。

另一个重要的统计特征是标准偏差(standard deviation),定义为:

方差(variance),表示为σ2或var(X),定义为:

计算一个离散型随机变量标准偏差的方法是:

(2.2)

其中,。

我们令一个连续型随机变量X的期望为:

(2.3)

其中,fX是变量X的pdf,则是函数xfX积分(integral)运算。

如果一个函数具有连续定义域,积分可以看作是该函数所有值的总和。积分也等于表示该函数曲线下的面积。概率密度函数的曲线下面积为1,该特征在数学上表示为fX(x)dx=1。

大多数时候,fX是未知的,不过我们可以观察到部分X的值。在机器学习中,我们称这些值为样本(example)。若干样本组成一个样本集(sample)或数据集(dataset)。

在大多数情况下,我们只能通过观察到的样本来理解未知的fX。因此,我们并不满足于统计特征,如期望值等。我们更感兴趣的是它们的无偏估计值(unbiased estimator)。

假如我们从一个未知的统计分布中抽取样本SX,并计算得到一些统计特征θ。只有当以下等式成立时,我们称)是一个无偏估计值。

其中,样本统计特征(sample statistic)。需要区分的是,计算只需要样本SX即可,而真正的统计特征θ只有在X已知的情况下才能得到。期待值需要从X的所有样本中获得。直观地,如果我们有无数个样本,再用每个样本计算一个无偏估计值,如,那么X的真正μ值可以通过计算所有的均值得出。

从公式2.1或2.3中我们不难看出,一个未知的可以通过计算得出[也称为样本均值(sample mean)]。

条件概率(conditional probability)是指在一个随机变量Y等于y的前提下,另一个随机变量X等于某个特定值x的概率,可表示为Pr(X=x|Y=y)。贝叶斯规则(Bayes'Rule)也称为贝叶斯定理(Bayes'Theorem),规定:

贝叶斯准则适用于一个表示X分布,且含一个向量θ为参数的模型fθ。譬如,含有两个参数μσ的高斯函数(Gaussian function)定义为

其中,。

该函数具有一个概率密度函数的全部特质。所以,我们可以用它作为一个未知分布X的模型。利用贝叶斯准则,我们可以从数据中更新参数向量θ中的参数:

其中,。

如果我们有X的样本S,且θ的可能值有限,通过迭代地应用贝叶斯准则,我们可以很容易地估计。每个迭代只需要一个样本sS的初始值可以根据预估。不同的的预估概率称为先验概率(prior)。

首先,我们对所有可能的值计算。接下来,我们利用公式2.4和x=x2S进行一次更新。不过,在更新之前,我们先用新的预估来更新先验概率

给定一个样本,我们可以利用极大似然数(maximum likelihood)原理得到最优的参数值θ*:

(2.5)

如果θ有无限个可能值,我们则需要利用数值优化方法[如梯度下降(gradient descent)等]直接优化公式2.5。具体方法我们会在第4章详细介绍。一般情况下,我们会优化公式2.5中右手边的自然对数。这是因为,两个数乘积的对数等于它们对数的和。对于计算机来说,加法运算比起乘法运算高效得多[1]

一个超参数是一个学习算法的特性,通常是一个数值(也有例外)。它可以影响算法的运行。超参数不能通过算法和数据来学习,而需要数据科学家在运行算法前设定。在第5章中我们会详细解释。

模型由学习算法学得,参数则是定义一个模型的变量。参数由学习算法根据训练数据直接修改。学习算法的目标正是找到一组可以使模型表现最优的参数。

分类(classification)问题是自动为无标签样本(unlabeled example)选择标签(label)的问题。譬如,我们之前提到的筛选垃圾邮件问题就是一个分类问题。

在机器学习中,分类问题由分类学习算法(classification algorithm)解决。这些算法利用一些有标签的样本(labeled example)作为输入,生成一个模型(model)。接着,生成的模型可以直接为无标签的样本进行标注,或者输出一个可以作为人工标注依据的数值(比如一个概率)。

分类问题中的标签是一个有限集里的类别(classe)。如果类别集里只包括两个类别(“生病”/“健康”,“垃圾”/“非垃圾”),我们称该问题为二分类问题(binary classification)[有的教科书称其为二项分类(binomial)]。如果一个分类问题有3个或更多可选类别[2],我们称该问题为多分类问题(multiclass classification)。

有些分类学习算法可以直接用于多分类,更多的算法本质上只适用于二分类。通过一些策略,我们可以用二分类算法来解决多分类问题。具体方法我们会在第7章讲解。

回归(regression)问题同样需要对无标签样本进行预测,只不过标签是个实数值(常称为目标)。比如,根据房屋的户型、面积和位置等特征预测房价的问题就是一个很典型的回归问题。

回归学习算法(regression learning algorithm)通过有标签的输入数据学习模型,并用生成的模型对无标签样本进行预测。

绝大多数的监督学习算法都是基于模型学习,包括我们在第1章中介绍的SVM算法。基于模型的学习算法从训练数据中学习模型的参数并产生模型。以SVM为例,算法学得的两个参数分别为w*b*

相比之下,基于实例学习的算法直接利用整个数据集作为模型。一个比较常用的基于实例的算法是k近邻(k⁃Nearest Neighbor,kNN)。在对一个样本进行分类时,kNN先在训练数据集中找出k个与新样本的特征数据最相似的“邻居”。从这些邻居的标签中,kNN选择占多数的为预测标签。

浅层学习(shallow learning)算法直接从训练样本的特征中学习模型的参数。大多数监督学习的算法属于这一类。神经网络(neural network)是一个例外,特别是那种输入和输出之前有很多(layer)结构的网络,我们称其为深度神经网络(deep neural networks)。深度神经网络学习(简称为“深度学习”)与浅层学习的根本区别是,绝大多数的模型参数从网络中前一层的输出学得,而不是从训练样本的特征中直接学习。

我们会在第6章中重点介绍神经网络模型。

[1] 多个数的乘积可能很大或很小,当计算机无法储存这些极限值时,就可能出现数值溢出错误。

[2] 每个样本仍只有一个标签。


相关图书

ChatGPT原理与应用开发
ChatGPT原理与应用开发
动手学机器学习
动手学机器学习
基于机器学习的个性化推荐算法及应用
基于机器学习的个性化推荐算法及应用
机器学习与数据挖掘
机器学习与数据挖掘
机器学习公式详解 第2版
机器学习公式详解 第2版
自然语言处理迁移学习实战
自然语言处理迁移学习实战

相关文章

相关课程