前言:
读者朋友们大家好,本书从传统的机器学习,如线性回归、逻辑回归、朴素贝叶斯、支持向量机、集成学习,到前沿的深度学习和神经网络,如DNN、CNN、BERT、ResNet等,对人工智能技术进行零基础讲解,内容涵盖数学原理、公式推导、图表展示、企业应用案例。
本书面向初,中级读者,能帮助读者迅速掌握机器学习技术的相关概念及原理。本书内容结合作者多年的科研工作经验,理论和实践并重,对科研、学习、面试等均有帮助。
如若想要《速通机器学习》与《速通深度学习数学基础》二书电子档,可以评论区留言获取;如对机器学习感兴趣想一起学习讨论也可后台留言,我看到就会回复;谢谢大家。
序
机器学习是人工智能领域最活跃的分支之一,作为多学科交叉的重要工具,为计算机领域解决实际学习问题提供了理论支撑与应用算法。近年来,机器学习在互联网应用中崭露头角,计算机视觉、自然语言处理、推荐系统、搜索系统等积累了大量的数据和丰富的场景,促进了包括机器学习在内的诸学科的发展与繁荣。与此同时,机器学习的快速发展,也让我们切实领略了人工智能给人类生活带来各种改变的潜力。
这是一本涵盖机器学习现有重要领域和关键算法的读物,主要面向人工智能、机器学习、模式识别、数据挖掘、计算机应用、数学和统计学等领域的研究生和相关技术人员。这本书为我们介绍了经典机器学习、深度学习的常见模型,涉及领域包括图像处理、自然语言处理、推荐系统等。
不同于侧重理论的机器学习读物,本书作者摒弃了复杂烦琐的数学公式和理论推导,转而采用对各类知识点给出应用实例和绘制图表等方式进行讲解。同时,书中蕴含了作者对机器学习理论及各类模型的内在关系的理解与思考,并通过细致的对比和说明,透彻地讲述了不同概念之间的传承与发展,使读者可以快速领略机器学习的精髓并掌握一定的自学能力。
本书作者勤于思考、关注技术发展,在工作中积累了丰富的机器学习实战经验,这些经验正是本书的灵感和和创意来源。难能可贵的是,书中的大量示例均源于作者亲身参与的项目,对读者具有借鉴意义,这也是本书的亮点之一;特此推荐。
中国科学院院士 樊文飞
第一章 数据的量化和特征提取
1.1 机器学习概述
1956年夏季,以麦卡赛、明斯基、罗切斯特、申农等为首的一批有远见卓识的年轻科学家举办了一次聚会,共同研究和探讨用机器模拟智能的一系列有关问题,并首次提出了“人工智能”这一术语。这次聚会标志着“人工智能”这门新兴学科的正式诞生。
经过数十年的发展,人工智能已从最初的感知机,历经逻辑回归和支持向量机,发展到目前最为火热的深度学习。人工智能的研究成果已经从实验室落地,其工程实践涉及的应用也从个别领域延伸至各行各业。目前,绝大多数人工智能都是通过机器学习实现的(这里的“机器”特指计算机),因此,在本书中,人工智能和机器学习同指一个概念。
机器学习是什么呢?通俗地讲,就是机器(计算机)使用模型进行学习,以解决特定任务。模型可以理解为一个数学运算函数。模型的输入是图像等信息(函数的自变量),模型的输出是我们想要的结果(函数的因变量),例如识别图像中的动物是“猫”还是“狗”。函数里的很多参数是未知的,学习阶段就是通过已知结果的数据来寻找合适的参数,使模型能够给出正确的输出。学习一般被形象地称为训练。模型训练完成后,我们就可以使用它对未知类别的数据进行预测。
任何一项技术都有自己的业务边界,业务边界决定了技术的应用场景。机器学习只能处理有规律的、平滑连续的任务,例如声音识别、图像识别、文本分类等,但对猜骰子点数、预测彩票等完全随机事件无能为力。平滑连续是指输入的微小改变不会影响预测结果,例如“预测一个数字是否为质数”等非连续任务,输入从12到13,仅增大了1,预测结果却完全不同(机器学习很难在这类任务上取得较好的效果)。
人工智能的目的是使用机器代替人类的脑力劳动。人类的脑力劳动一般分为创新性脑力劳动和重复性脑力劳动。识别声音、文字、图像等属于重复性脑力劳动,这类任务在不久的将来可以由机器胜任;而在创新性脑力劳动方面,例如写作、发明创造等,机器学习还有很长的路要走。
1.2 特征提取
在开展人工智能相关工作时,我们面临的业务大都是客观世界中的问题,例如图片、视频、文本的识别及推荐系统的设计等。这些业务包含各式各样的数据——图片对应的是像素值,文本对应的是字符串,语音对应的是声波,推荐系统则包含大量的用户行为数据——五花八门、无奇不有。但是,机器学习模型作为一个数学函数,接受的输入一般是浮点数数组。这个数组用专业术语表述,叫作特征向量,数组的长度叫作特征向量的维度。特征向量的某个具体位置的数值表示真实世界中某个属性的强度。因此,无论何种业务,都需要将业务特征表示为向量 x,这个过程叫作特征提取,如图1-1所示。
图1-1
如果各类业务特征统一以向量表示(不同的特征提取方法),后续的模型设计环节就可以与业务解耦。模型本身可以部分脱离业务(但不能完全脱离),仅需要针对特征向量进行研发,而这些特征向量可能来自完全不同的业务场景。
一些业务特征天然就是数值化的。例如,一个年龄30岁、身高175厘米的人,可以直接表示成特征向量 〖[30,175]〗^T。另一些业务特征不太容易直接表示成特征向量。例如,“我喜欢机器学习”这句话对应的是一个字符串,需要使用特征提取技术对其进行向量化(如转换成向量 〖[-0.1,0.3,0.2,0.4]〗^T)。特征提取有很多方法,并且往往和业务有关。即使是同一客观事物,在面向不同的业务时关注的目标也是不一样的。因此,特征的关注点千差万别。
下面介绍一些常用的特征提取方法。
在做图像识别时,首先会对输入的图片进行尺寸归一化,既将不同尺寸的图片缩放至同一尺寸,例如200像素×200像素。我们知道,图片是由大量像素点以二维方式排列而成的。在彩色图片中,每个像素点由一个3维数组组成,分别表示R、G、B(红、绿、蓝)颜色的强度,每种颜色的取值范围为0~255。例如,[255,0,0] 表示红色,[0,125,125] 则对应于黄色。因此,彩色图片对应于 200×200 的矩阵,矩阵中的每个元素都使用一个3维向量来表示颜色信息,彩色图片可以表示为 200×200×3 的向量,其中的“3”也称作通道数。黑白图片每个像素点的取值范围为0~255,0表示白色,255表示黑色,其他数值则表示从白色到黑色的渐变色(灰色)。黑白图片对应的是 200×200×1 的向量(黑白图片为单通道图片)。彩色图片和黑白图片的特征,如图1-2所示。在一些颜色不是特别重要的场景中,会将彩色图片转换成黑白图片,这时特征维度只有原来的 1/3,计算量和模型复杂度有所降低。
图1-2
在做视频处理时,一个视频其实是由多幅有序图片组成的。一幅图片称为一帧。常见的帧频是30帧/秒,即一段1秒的视频其实是快速播放30幅有序图片形成的。视频特征和图片特征类似,只不过加上了时间维度。例如,一段5秒的彩色视频(5秒×30帧/秒=150帧)所对应的特征向量的长度为 200×200×3×150。长视频往往会对应非常多的帧,这对计算来说负担很重。为了减轻计算压力,通常会使用关键帧技术,从视频中抽取一些视觉效果发生了急剧变化的帧作为特征,其他帧则会被舍弃。
除图像外,文本处理也是人工智能的一个重点领域。与文本处理相关的技术和应用主要包括文本内容理解、信息提取、智能聊天对话等,这些技术和应用称为自然语言处理(Nature Language Process,NLP)。假设词库中有a、b、c、d、e、f、g、h、i、j共10个词(实际词库中的词往往在20万个以上),每个词可以表示为一个10维向量,a~j分别对应于特征向量的1~10位,那么词a可以用10维向量 〖[1,0,0,0,0,0,0,0,0,0]〗^T 来表示,这种向量 化方法叫作one-hot。
如何对文章进行向量化呢?如果在一篇文章中,词a、b、e、f各出现了一次,则对应的特征向量为 〖[1,1,0,0,1,1,0,0,0,0]〗^T。而如果在一篇文章中,词a出现了两次,就可以进一步用词频来表示,即 〖[2,1,0,0,1,1,0,0,0,0]〗^T。这种对文章进行向量化的方法叫作multi-hot。
one-hot和multi-hot比较粗糙,有很多缺点,列举如下。
汉语的常用词有约20万个,但在一篇文章中可能仅出现几百个,因此,特征值会出现大量的0,向量稀疏,信息不紧凑,造成了存储资源的浪费。
没有考虑词的顺序问题。例如,“我借给你钱”和“你借给我钱”这种意思相反的句子的multi-hot向量是一样的。
中文的语义歧义问题。例如,“苹果手机”和“吃苹果”中的“苹果”是完全不同的事物,但这两个“苹果”所对应的one-hot和multi-hot向量是一样的。
在使用one-hot对文本进行编码时,无法体现语义的相似度。例如,“手机”“互联网”“红烧肉”三个词,在语义上,“手机”和“互联网”比较近,“红烧肉”和它们没有关系。采用one-hot编码,这三个词的对应向量为 〖[1,0,0]〗^T、〖[0,1,0]〗^T、〖[0,0,1]〗^T。从向量的角度看,这三个词彼此之间的夹角都为90°,表达不出语义上的相似性。
尽管one-hot方法有以上缺点,但在2014年之前,做自然语言处理的人基本上都在使用它——毕竟方法简单,在要求不高的场景中效果也能达标。在深度学习得到广泛应用之后,one-hot式微。目前流行的方法是让每个词对应于一个稠密低维(常见128维、256维,远低于one-hot中动辄几十万维)向量,例如词“苹果”对应于向量 〖[-0.1,1.2,3.3,2.1,4.3]〗^T。这类向量也称为词向量或Word embedding。词向量的生成方法,一般是先进行随机初始化,再进行任务驱动(例如文本分类、情感分析),从而训练模型以改变稠密向量,其经典方法是Word2vec。在使用稠密向量时,每个词所对应的embedding将会不同,具体表现为:近义词的embedding之间的夹角很小,语义无关的词的embedding之间的夹角很大。
对于包含多个词的文本,可以把每个词所对应的词向量相加作为文本向量。不过,相加(求和)忽略了词出现的顺序。为了解决这个问题,可以把词向量按顺序串联起来。例如,词向量有128维特征,一共10个词,那么该文本对应的就是 128×10 维的特征向量。可以使用配套的时序模型(例如RNN、LSTM、Transformer),将这个 128×10 维的向量转换成低维(例如128维)向量来表示文本语义。特别地,一词多义问题也可以通过BERT之类的模型来解决。从整体看,人工智能处理文字的难度远高于处理图像。目前,图像处理技术已经比较成熟了,有很多固定的方法和模式,但文字处理的难度仍然很大,技术仍然很不成熟。
除了图像、文字、语音等自然特征,还有很多业务特征需要向量化。例如,电商场景需要对每个用户进行用户画像。用户画像的一个维度是性别,而性别这个特征可以用以下两种方式表达。
男:〖[0]〗^T。女:〖[1]〗^T。
男:〖[0,1]〗^T。女:〖[1,0]〗^T。
第一种方式只有1维特征,男、女用数值来区分,但这样做是有问题的:同一位置具有可比性,从数值上看女大于男,但实际上男、女只是两个状态而已,没有大小关系。第二种方式其实就是one-hot。这样看来,第二种方式更合适——虽然存在冗余问题,但保证了男、女的平等性。在机器学习中通常会采用第二种方式。由此可见,虽然one-hot在NLP领域不适用,但并非一无是处,仍然有其适合的场景。这也说明,在机器学习领域,方法本身没有好坏之分,关键在于方法和场景是否契合。
再举个例子。在电商场景中,将年龄的取值范围设置为0~100,最简单的方法是用1维特征来表示,例如将32岁表示成 [32]。但是,在电商场景中,单纯的年龄数据并不重要,我们更关心“小孩”“年轻人”“中年人”“老年人”这种能够反映消费能力和消费习惯的特征。因此,用1维特征来表示的方法欠妥——单纯的数值特征,尽管具有数值的含义(例如,20岁和50岁的平均值是35岁,而在实际的电商场景中不会这样使用),但没有将业务的特点明确表示出来。
作为改进,我们可以把0~100岁分成四段,用一个4维向量来表示。不同年龄段有如下特征。
小孩:〖[1,0,0,0]〗^T,0<age ≤ 18。
年轻人:〖[0,1,0,0]〗^T,18<age ≤ 40。
中年人:〖[0,0,1,0]〗^T,40<age ≤ 60。
老年人:〖[0,0,0,1]〗^T,60<age。
通过这种方法提取的特征能更好地反映用户的消费能力和购物特点,例如小孩喜欢为游戏充值、年轻人愿意购买新奇的商品、中年人容易购买贵重商品、老年人经常购买保健品,与场景的贴合度很高。
从机器学习的角度看,这个方法的一个好处就是特征较为稳定。例如,25岁和26岁其实没有本质的差别,因为它们在同一区间内。这个方法的缺点在于对分段点附近的年龄过于敏感,例如17岁和19岁会被划分到两个区间。因此,这个方法对划分区间提出了较高的要求。为了缓和边界点的敏感性,可在划分时令相邻区间有交集,例如“0~18、15~40、35~60、55~100”,这样,30岁的人所对应的特征为 〖[0,1,1,0]〗^T,即同时具备中年人和年轻人的特点。
还有一个特点值得研究。电商网站一般会在后台存储用户的消费能力数据,例如:16~40岁的人购买能力比较强,消费能力为 10;女性的购买欲望比较强,消费能力为 15;若两者同时满足,例如“25岁的女性”,则其消费能力可能会飙升到100 ——不是简单的 10+15。因此,除了直接特征,还需要一些组合特征。例如,对一位26岁的女性,原来表示为性别 [1,0]^T、年龄 [0,1,0,0]^T,拼接后得到一个6维特征向量 x=〖[1,0,0,1,0,0]〗^T;而现在需要引入第7维作为组合特征,当第1维和第4维同时为1时将其置1,即 x_7=x_1 x_4,x_7 代表“年轻女性”这种更高层次的特征,特征向量为 〖[1,0,0,1,0,0,1]〗^T。
一些资讯类App会提供视频、图片和文字等内容。对于视频,可以考虑的特征有时长、清晰度、完成率等;对于图片,涉及的特征有清晰度、敏感信息等;对于文章,主要特征有篇幅、关键字、作者等。各种特征组合起来,数量巨大且具有较强的业务性。这些特征的具体组合方式,需要代码编写者和策略产品经理共同确定。随着机器学习的发展,现在也出现了很多能够进行特征自动组合的模型。
在二手汽车交易平台中,汽车的颜色是一个很重要的特征。能否用数组 [0~255,0~255,0~255] 表示颜色?答案是:不能。因为在汽车交易领域,颜色只代表购买者的审美倾向,并无大小之分。同时,汽车颜色种类有限,如果有20种颜色,就用一个20维的one-hot向量表示即可。
总之,特征向量的定义方式要根据具体的业务场景确定,特征要能尽量客观地描述实际问题。
综上所述,机器学习的步骤如图1-3所示。
图1-3
在使用非深度学习(传统)模型时,对特征工程的要求比较高。而深度学习模型与非深度学习模型相比,对特征工程的要求大幅降低,它通过计算机的运算能力对所处场景进行理解,模型可以根据目标任务自动提取特征,减轻了人的工作量——尽管模型复杂度增加、运算量增大,但对人的要求降低了。同时,硬件的迅速发展使机器成本不断降低——这也是近年来深度学习流行的原因之一。
1.3 向量距离计算
前面详细讲解了如何使用向量来表示各类特征。除了将向量 x 输入模型作为特征,我们有时也需要通过向量之间的距离来衡量特征之间的差异。
有多种方法可以度量向量之间的距离,每种方法都有其应用场景和优缺点。这些方法有一些共性,列举如下。
同一性:d(x,x)=0,同一点到自身的距离为0。
非负性:d(x,y) ≥ 0,距离不能小于0。
对称性:d(x,y)=d(y,x)。
直递性:d(x,y) ≤ d(x,z)+d(y,z),即三角形法则(由3个点组成的三角形,两边长之和大于第三边)。
多种函数可以同时满足上述条件。理论上,这些函数都可用于度量距离。但是,这些函数中的大部分在机器学习中并不常用。下面介绍机器学习中的常用距离。
欧氏距离是机器学习中最为常见的距离之一,它源自两点之间的距离公式。两个特征向量分别为
x=[x_1,x_2,⋯,x_n ]^T
y=〖[y_1,y_2,⋯,y_n]〗^(T )
欧氏距离的计算公式如下。
d_Euclidean (x,y)=√(∑_(i=1)^n▒〖(x_i-y_i)〗^2 )=√((x-y)^T (x-y) )
d_Euclidean (x,y) 常写作 ‖x,y‖。特别地,‖x‖ 表示 x 距离原点的欧氏距离,‖x‖=√(∑_(i=1)^n▒〖(x_i)〗^2 )。
曼哈顿距离(Manhattan Distance)也可用于度量两点之间的距离。想象一下:你在曼哈顿街头,要开车从一个十字路口到另一个十字路口,实际驾驶距离是这两个十字路口之间的直线距离吗?显然不是——除非你能穿越大楼。这里的实际驾驶距离就是曼哈顿距离。曼哈顿距离也称为城市街区距离(City Block Distance),其计算公式如下。
d_Manhattan (x,y)=∑_(i=1)^n▒|x_i-y_i |
d_Manhattan (x,y) 也常写作 |x,y|。特别地,|x| 表示 x 距离原点的曼哈顿距离,即 |x|=∑_(i=1)^n▒|x_i | 。
在国际象棋棋盘上,国王可以朝8个方向移动。国王移动到目标点所需的步数就是切比雪夫距离(Chebyshev Distance)。切比雪夫距离用于计算各维度数值差中的最大值,计算公式如下。
d_Chebyshev (x,y)=max(|x_1-y_1 |,|x_2-y_2 |,⋯,|x_n-y_n |)
切比雪夫距离和曼哈顿距离的区别在于:在斜向移动时,曼哈顿距离所需的距离为2,切比雪夫距离所需的距离为1。
广义圆可以定义为到圆心距离相等的点的集合。分别使用以上介绍的三种距离画出来的“圆”,如图1-4所示。
图1-4
闵可夫斯基距离(Minkowski Distance)的计算公式如下。
▒〖〖〗〗d(Minkowski)(x,y)=(∑(i=1)n▒〖〖|x〗i−yi|〗p)(1/p)
其中,p 是一个变参数。
闵可夫斯基距离公式其实是一个通项公式。以上介绍的三种距离其实都是闵可夫斯基距离的特例。
当 p=1 时,就是曼哈顿距离。
当 p=2 时,就是欧氏距离。
当 p→∞ 时,就是切比雪夫距离。
以上三种距离都有一个缺点,就是容易受特征量纲的影响。例如,用一个2维特征表示人的体重和身高,体重的单位为千克,身高的单位为毫米,如 〖[60,1700]〗^T。此时,体重的数量级远小于身高,这会导致在计算距离时放大身高的作用。
我们以欧氏距离为例,讨论如何解决这个问题。对数据进行归一化,即将各个维度的均值和方差分别归一至 (0,1),以消除量纲不同带来的差异。归一化在各个维度独立进行,公式如下。
x_i^'=x_i/σ_i
σ_i 为第 i 维特征所对应的标准差。修正后的距离计算公式如下。
d_(Standardized Euclidean) (x,y)=√(∑_(i=1)^n▒〖(x_i^'-y_i^')〗^2 )
上述方法称作标准化欧氏距离(Standardized Euclidean Distance)。
在提取特征时,特征之间并不是独立的,维度之间往往存在冗余的问题。例如,体重和身高之间就存在较强的相关性。特征冗余带来的影响是:某些因素在各个维度重复出现,在计算距离时会被重复计算,从而使其影响被放大。为了降低特征冗余带来的影响,可以使用马氏距离(Mahalanobis Distance)进行计算,公式如下。
d_Mahalanobis (x,y)=√((x-y)^T Σ^(-1) (x-y))
这里使用了向量的表示方式。Σ 为各维度的协方差矩阵,其中,对角线元素表示各维度自身的方差,非对角线元素表示各维度之间的相关性。可以看出,对于马氏距离,如果不考虑特征之间的相关性(非对角线元素为0),就会退化为标准欧氏距离。在使用标准欧氏距离或马氏距离时,因为涉及估计方差(协方差矩阵),所以需要一定的数据量,且数据量越大,方差(协方差矩阵)的估计结果越准。
我们用one-hot向量来表示所观看的电影的特征。假设有五部电影,那么向量的维度为5维。在看过的电影的特征位置写1,在没看过的电影的特征位置写0。我们是否可以通过one-hot向量的距离来度量两个人观影习惯的差异呢?答案是:不可以。因为我们无法确定这两个人是否全部看过这五部电影——如果没有观影,那么自然无法提供关于喜好的信息,而在都为0的位置计算出来的距离是没有意义的。假设有三个人,user1和user2共同观看了两部电影,user1和user3共同观看了一部电影,则他们观看电影所对应的向量分别为
user1=[1,0,0,1,0]
user2=[1,0,1,1,0]
user3=[0,0,0,1,0]
而我们的期望是 user1 和 user2 的距离更近。使用欧氏距离计算 user1 和 user2、user1 和 user3 的距离,公式如下。
d_Euclidean (user1,user2)=1
d_Euclidean (user1,user3)=1
user1 和 user2、user1 和 user3 的欧氏距离相等,与我们的期望不符。因此,欧氏距离不能在此场景中有效度量观影习惯的差异。
然而,对于两个人都看过的电影,即两个人都为1的位置,却能反映出两个人的喜好相同。可以使用Jaccard距离度量两个集合之间的差异,计算公式如下。
d_Jaccard (user1,user2)=1-|A∩B|/|A∪B|
在这里,A 和 B 分别为这两个人看过的电影的集合,A∩B 为这两个人看过的电影的交集,A∪B 为这两个人看过的电影的并集。使用Jaccard距离进行计算,公式如下。
d_Jaccard (user1,user2)=1-2/3=1/3
d_Jaccard (user1,user3)=1-1/2=1/2
显然,此时 d_Jaccard (user1,user2)<d_Jaccard (user1,user3),user1 和 user2 之间的距离比较近,而这也符合我们的认知。Jaccard距离的用途很广,可用于度量购物偏好的差异、文章内容的差异等具有同质集合属性的特征。
在机器学习中,除了距离,也常使用相似度来度量两个向量。顾名思义,两个向量的相似度越高,说明它们越相似。因此,相似度和距离成反相关。余弦相似度(Cosine Similarity)是一种常见的相似度,其计算公式如下。
cos(x,y)=(∑_(i=1)^n▒〖x_i y_i 〗)/‖x‖‖y‖
余弦相似度的值域是 [-1,+1]。它用于衡量两个向量的夹角,夹角越小,两个向量越相似。+1 表示两个向量的相似度相同,即两个向量的方向完全相同(cos0=1)。-1 则表示两个向量的方向完全相反(cosπ=-1),此时两个向量呈高度负相关。当余弦相似度为0时,两个向量是互相垂直的(cos π/2=0),称作正交。相互正交的向量彼此线性无关。
余弦相似度,如图1-5所示。
图1-5
可以看出,余弦相似度和向量的长度无关,它是用来衡量各个维度比例的相似性的。当两个向量各维度的比例相同时,它们的夹角为0,相似度为1。
∑_(i=1)^n▒〖x_i y_i 〗 称为向量 x 和 y 的内积,记作 〈x,y〉=∑_(i=1)^n▒〖x_i y_i 〗=x^T y。内积可以理解成未
必归一化的余弦相似度,值域为 (-∞,+∞),有时也用于度量向量的相似性。‖x‖ 为归一化因子,用于将向量 x 的长度归一至1。相比较而言,cos(x,y) 只考虑了 x 和 y 的角度差,〈x,y〉 则综合考虑了 x 和 y 的角度差与长度差。
有时需要将余弦相似度转换为余弦距离,公式如下。
d_cos (x,y)=1-cos(x,y)
特别地,当 ‖x‖=1、‖y‖=1 时,d_cos (x,y) 和 d_Euclidean (x,y) 有如下关系。
d_Euclidean (x,y)=√(2d_cos (x,y)))=√(2(1-cos(x,y)))
即欧氏距离和余弦相似度之间存在单调关系。
第二章:线性回归
在企业中,技术人员会将商品的价格、品牌等作为输入来预测商品的销量,甚至通过上市公司的财报、行业信息等来预测公司股票价格的变化。它们的共同点是通过输入来预测输出。在机器学习中,这类业务有一个专门的名字——回归(Regression)。
回归是指通过大量已知数据发现输入 x 和输出 y 的内在关系,并对新的输入进行预测。发现内在关系后,就可以通过它来预测新的输入 x 所对应的输出 y^'。在本章中,我们用 y 表示真实的输出,用 y^' 表示预测的输出。
在使用回归前,需要假设 y^' 和 x 之间的关系类型。这种关系类型称为模型。例如,在 y^'=wx+w_0 中,y^' 和 x 成线性关系(x 的变化按比例影响 y^'),因此该模型也称为线性回归。需要注意的是,y 和 x 之间的关系未必满足我们的假设,它甚至是未知的。
以上只对 y^' 和 x 之间的关系进行了假设,而 w 和 w_0 的值是未知的,因此,需要通过一些方法求解 w 和 w_0。
要想求解 w 和 w_0,首先需要 x 和 y 的一些过往真实数据,例如 (x=3,y=4)、(x=1,y=2.5) 等。这些数据称为训练数据。通过训练数据求解未知的 w 和 w_0 的过程称为学习。学习过程通常是由机器自动进行的,这也是“机器学习”这个词的由来。总之,模型选择是一项人工假设工作,而求解 w 和 w_0 是一个自动定量过程。
当模型训练完毕,w 和 w_0 将对应于已知的数值,例如
y^'=3.2x+1.1
有一个新的输入(可以是从未在训练数据中出现的),就可以计算相应的 y^',这个过程称为预测。
在使用回归时,y^' 和 x 之间的对应关系不仅可以假设成 y^'=wx+w_0 这种简单的线性形式,也可以由诸如 y^'=w_1 x^2+w_2 x+w_0 这种复杂的形式来表示。形式越复杂,模型蕴含的 x 和 y^' 之间的关系就越复杂,捕捉 x 和 y 之间的关系的能力就越强。但是,复杂的模型会带来一些负面效应,本书后续会进行系统的论述。
2.1 线性回归的基本概念
当输入为1维数据时,线性回归模型如下式所示。
y^'=wx+w_0
显然,此时线性回归在平面上对应于一条直线,这也是“线性回归”名称的由来。
线性回归模型在平面上对应的直线,如图2-1所示。
图2-1
w_0 也称作偏置项。尽管它和输入并无直接关系,但它有重要的作用。如果没有 w_0,那么直线 y^'=wx 必须经过原点,而这极大地限制了模型的能力。
更为一般的情况是,线性回归模型往往是多输入(m 个输入)的。此时,线性回归可以由下式表示。
y^'=w_1 x_1+w_2 x_2+⋯+w_m x_m+w_0
为了简化书写,上式通常可以表示成矩阵相乘的形式。
y^'=w^T x+w_0
其中
有了线性回归模型 y^'=w^T x+w_0,就可以利用训练数据计算模型中的未知参数 w=[w_1,⋯,w_m ]^T 和 w_0 了。
已知数据 〖{x_((i)),y_((i))}〗_(i=1)^N(训练样本)是客观事实。样本数据 x_((i)),y_((i)) 都是成对出现的,
角标 (i) 表示第 i 个训练样本。训练样本一般是通过收集已经发生的事件数据得到的,例如人工标注数据、互联网公司产生的大量日志。
如果输入 x 可以通过运算得到 y^'=w^T x+w_0,那么 y^' 和真实的 y 越接近,w 和 w_0 就越合理,也就是我们越想要的。
有些读者可能会问:是否能够通过解方程的方法求解 w 和 w_0 呢?在这里,我们简单讨论一下。例如,通过已知数据,可以得到如下方程组。
在这里,w_0,w_1,⋯,w_m 为未知数。从数学的角度看,这是一个典型的多元一次方程组。多元一次方程组的求解比较简单,本书不再赘述。然而,在机器学习场景中,解方程本身会遇到以下问题。
训练样本量通常很大(例如,互联网公司的日志数据量往往都以GB为单位计),这意味着可能有海量的方程。这些方程之间往往存在矛盾,很难协调。而如果采用矩阵的形式求解方程,则涉及百万维的矩阵运算,这对算力、机器配置等提出了巨大的挑战,中小型公司通常无法承担。
在线性回归中,因为对应的是多元一次方程,所以方程尚有解析解。但是,模型远不止线性回归一种,当模型非常复杂时,例如
y^'=1/(1+e^(〖-(w〗^T x+w_0)) )
就很难找到有效的解析解了。即使有了解析解,也需要“特事特办”,为每种模型设计一套特有的方法,而这对机器学习的大规模普及和应用是不利的。
在互联网公司中,数据量往往非常大。例如,以过去半年的日志作为训练样本是非常困难的(因为如此规模的数据很难被一次性加载到机器中)。但是,在解方程时需要加载全部数据,这对实操性提出了不小的挑战。
综合上述三个原因,在机器学习领域,很少会采用解方程的方法求解模型的未知参数。为了顺利求解模型参数 w 和 w_0,梯度下降法诞生了。
2.2 损失函数和梯度下降法
首先,让训练数据图形化。当 x 是1维数据时,{x,y} 为二维坐标系中的一个点。训练样本在该坐标系中对应于若干散点,每个点都代表一个样本,如图2-2所示。
图2-2
线性回归希望找到一条合适的直线来尽量多地穿过坐标系中的点,从而使模型和数据尽可能契合。直线由参数 w 和 w_0 决定,不同的参数对应于不同的直线。那么,该如何调整 w 和 w_0 呢?
在实际工程中,每个数据点都具有一定的随机干扰和自身特例,所以大量数据点很难恰巧落在一条直线上(往往散落在直线附近)。因此,无论参数 w 和 w_0 如何取值,都会产生偏离直线的误差。模型学习的目的就是找出一条合适的直线,使各个数据点上的误差之和尽可能小(理想状况为0,但在实际应用中几乎不可能达到)。显然,误差是一个不小于0的数。误差可以表示为下式。
其中,y_((i))^' 表示模型在 x_((i)) 的输出,y_((i)) 表示真实的输出。在这里选择均方误差(Mean Square
Error,MSE)函数作为损失函数,平方计算保证了误差不小于0。需要注意的是,损失函数的类型很多,MSE只是其中之一。
相信细心的读者能看出来,Loss 计算就是求所有数据的预测值 y_((i))^' 和真实值 y_((i)) 之间的
欧氏距离(只是少了开根号的过程)的平均值。
如果 w_0 不变,那么 w 和 Loss 是一一对应关系,即一个 w 值对应于唯一的 Loss 值。投影到二维坐标系,横轴为 w,纵轴为 Loss。如图2-3所示,这是一条典型的抛物线(对应于高维空间中的抛物面)。
图2-3
此时,问题变为找到一个使 Loss 最小的 w。在图2-3中,点 w^* 为 w 的理想位置,即
可以证明 Loss 为凸函数,其存在唯一极小值且极小值为最小值。因此,最小值(极小值)所对应的 w 满足下式。
▒〖〗∂Loss/∂w=2/N∑(i=1)N▒〖(wx((i))+w0−y((i)))〗x((i))=0
同理,最小值(极小值)所对应的 w_0 满足下式。
▒〖〗∂Loss/(∂w0)=2/N∑(i=1)N▒〖(wx((i))+w0−y((i)))〗=0
综合以上二式求解,可得
其中
▒¯x=1/N∑(i=1)N▒x((i))
尽管通过上述方法可以求出最优的 w 和 w_0,但仍存在以下问题。
在训练样本量和特征维度较大时,计算性能和机器内存会成为瓶颈。
上述方法不是通用的。如果 y 和 x 之间的关系比较复杂,并不是简单的线性关系,那么方程可能不存在解析解。
因此,我们需要寻找其他具备通用性的方法,以便应用在大多数机器学习场景中。
在高等数学中,导数可用于衡量函数和变量之间的关系。以输入1维数据为例,模型为 y=wx+w_0,很容易就能得出 Loss 对 w 求导的形式,如下式所示。
▒〖〗∂Loss/∂w=1/N∑(i=1)N▒〖2x((i))(wx((i))+w0−y((i)))〗
∂Loss/∂w>0,表示 w 的变化方向与 Loss 相同。当 w 变大时,Loss 就变大;当 w 变小时,
Loss 就变小。我们的目的是使 Loss 变小。在这种情况下,如果 w 变小,就可以得到一个更
小的 Loss,即变化方向为 -∂Loss/∂w。
∂Loss/∂w<0,表示 w 的变化方向与 Loss 相反。当 w 变大时,可以得到一个更小的 Loss,
即变化方向仍为 -∂Loss/∂w(因为 ∂Loss/∂w<0,所以 -∂Loss/∂w>0)。
∂Loss/∂w=0,表示 w 的变化不会对 Loss 产生影响。在这种情况下,调整 w 是没有任何效
果的,可以认为 w 学习完毕。
学习步骤如图2-4所示。
图2-4
通过以上分析,我们可以得到一个朴素的结论:如果要得到一个更小的 Loss,就需要先随机初始化 w,再让 w 朝一个特定的方向变化。w 的变化方式如下。
w→w-μ ∂Loss/∂w
同理,w_0 的变化方式如下。
w_0→w_0-μ ∂Loss/(∂w_0 )
其中
∂Loss/(∂w_0 )=1/N ∑_(i=1)^N▒〖2(wx_((i))+w_0-y_((i)))〗
μ 是一个 (0,1) 之间的常数,用于控制 w 的变化幅度,避免因 w 变化过大而造成震荡。μ 对学习过程的具体影响,会在本节的结尾进行详细分析。
通过以上分析可以发现,通过导数 ∂Loss/(∂w_0 ) 和 ∂Loss/∂w 分别不断更新 w_0 和 w,Loss 会变得越
来越小。
上述分析过程也可以推广到多维输入。此时,有线性回归
y_((i))^'=w^T x_((i))+w_0 (i=1,2,⋯,n)
x_((i)) 为输入向量,y_((i))^' 为根据 x_((i)) 得到的估计值,y_i 为第 i 个数据的真实值,w 和 x_((i)) 都是
m 维的列向量。损失函数对参数 w 的导数为
∂Loss/∂w=1/N ∑_(i=1)^N▒〖2(w^T x_((i))+w_0-y_((i)))x_((i)) 〗
显然,∂Loss/∂w 也是一个 m 维的列向量。多元函数在某个点的梯度,就是对每个自变量求偏导
并将结果组成一个向量。
同理,可以求出
∂Loss/(∂w_0 )=1/N ∑_(i=1)^N▒〖2(w^T x_((i))+w_0-y_((i)))〗
综上所述,线性回归参数 w 和 w_0 的学习方法,具体如下。
随机初始化 w 和 w_0,表示为 w(0) 和 w_0 (0)。此时,迭代次数 t=0。
求当前点 ∂Loss/∂w 和 ∂Loss/(∂w_0 ),公式如下。
∂Loss/∂w(t) =1/N ∑_(i=1)^N▒〖2(〖w(t)〗^T x_((i) )+w_0 (t)-y_((i) ) ) x_((i) ) 〗
∂Loss/(∂w_0 (t))=1/N ∑_(i=1)^N▒〖2(〖w(t)〗^T x_((i) )+w_0 (t)-y_((i) ) ) 〗
对 w 和 w_0 进行更新,表示为 w(t+1) 和 w_0 (t+1),公式如下。
w(t+1)=w(t)-μ ∂Loss/∂w(t)
w_0 (t+1)=w_0 (t)-μ ∂Loss/(∂w_0 (t))
当 t 等于指定的迭代次数或 Loss 的值足够小时,迭代结束。此时得到的 w(t) 和 w_0 (t) 就是学习完成后的参数 w 和 w_0。如果迭代不满足结束条件(t=t+1),则返回第步,进行下一轮学习。
在这里,∂Loss/∂w 就是梯度。w 通过梯度使 Loss 的值不断减小。因此,上述迭代过程也称为梯度下降法。
值得注意的是,梯度 ∂Loss/(∂w(t)) 仅提供了 w 移动的方向,并未提供其移动的距离。如图2-5
所示,在使用梯度下降法时,如果某个点的 ∂Loss/(∂w(t)) 很大,那么在更新参数时可能会出现 w 的
移动幅度过大的问题——在“谷底”两侧不断振荡——矫枉过正。因此,需要对 w 的变化幅度进行限制。
这就是学习率 μ 的作用——防止梯度过大引发的震荡。但是,μ 也不宜过小,因为过小的 μ 会使学习时间延长,如图2-6所示。
图2-5
图2-6
由此可见,合适的学习率对能否快速学习到理想的 w 有重要的影响。
2.3 训练集和测试集
在机器学习中有两个基础的术语——训练集和测试集,它们分别用于模型的训练阶段和训练后的效果评估阶段。
我们在处理一批数据时,一般将数据随机分成两份,训练集占90%,测试集占10%。从概率的角度看,训练集和测试集的数据是从同一概率分布上独立采样得到的。在使用梯度下降法时,用训练集的数据进行训练,测试集不参与训练。训练完成后,我们通常更关心模型在未观测数据上的效果,所以要使用测试集的数据进行效果评测。这样做的好处是能够检测出模型的真实效果,从而避免在训练集上拟合得非常好、Loss 降得很低,但上线后在真实环境中(大量的输入是训练集中并未出现的)对数据模型的拟合效果比较差的问题。
Loss 在训练集和测试集上的差异,如图2-7所示。
图2-7
同一个模型,为什么会在训练集和测试集上效果差异很大呢?我们采集的数据,往往会在一定的规律上添加一些噪声。例如,真实数据由下式产生。
y=4x+3+ε
y=4x+3 是数据产生的规律。ε 为随机噪声,一般符合均值为0的正态分布,即 ε~N(0,σ^2)。噪声通常是由测量误差、一些随机行为或极端特例导致的。噪声这种纯随机事件对机器学习来说是不可学习且不必学习的。
模型在学习时,希望能学到规律,即 y=4x+3,其中并不包含噪声 ε。但是,在训练
样本 〖{x_((i)),y_((i))}〗_(i=1)^N 中,y_((i)) 是包含噪声 ε_((i)) 的(噪声是随机值,可大可小,因此无法剔
除),这就要求模型学习阶段的 Loss 要降低(学会规律),但不能降得过低(把噪声也学会了)。
在训练时 Loss 的值已经降得很低了,但在真实环境中面对大量新数据时仍表现不佳,这种现象称为过拟合(Overfitting),即泛化能力差。产生过拟合的一个原因是模型不仅拟合了规律,还拟合了噪声,另一个原因是真实数据的分布很广,但训练样本过少,无法覆盖全部情况。例如,模型在预测“年龄—消费能力”时,训练样本的数据集中在40岁以下的人群,而在真实场景中出现了50岁以上的人群,必然无法正确进行预测。
解决过拟合问题有多种方法,最直接的方法就是增加训练样本的数量,使模型在训练阶
段实现训练噪声抵消(随机变量 1/N ∑_(i=1)^N▒ε_((i)) 的方差趋近于0,且 N 越大越接近0)。这样,
模型学到噪声的可能性就会大大降低。增加训练样本的数量,也能使模型在学习阶段考虑更多的情况——见多识广。还有一种方法是提前终止学习,只要使 Loss 下降到一定程度即可,无须下降到极小值,以免将噪声拟合进来。
通过以上分析,我们可以得到模型效果的两个评价标准。
降低训练集上的误差,即在训练过程中降低 Loss。
缩小训练误差和测试误差之间的差距。
如果以上第一点没有被满足,那么训练集上的误差将会很大,这就是欠拟合。如果以上第二点没有被满足,就是过拟合。
除了训练集和测试集,还有一个非必需的有效集。有效集是指在训练阶段使用的测试集。例如,有三个学习率 μ_1、μ_2、μ_3,我们并不知道哪一个是最好的。在训练阶段,分别用学习率 μ_1、μ_2、μ_3 做实验,每组实验用相同的训练样本进行模型训练,然后用有效集对这三个模型进行评测,将效果最好的模型作为最终结果。有效集常用于在训练阶段寻找合适的超参数。超参数一般是指梯度无法表达的参数,例如学习率。
打个比方:在准备考试时,训练集相当于平时做的练习题,有效集相当于模拟试卷中的题目(用来找寻最佳学习方法),测试集相当于真实的考试题目。当出现过拟合时,训练集的效果好,测试集的效果差,相当于把训练集中的数据都记住了,但没有真正学到东西,考试时题目稍有变化就抓瞎了。
2.4 多项式回归
在使用模型时,其实隐含了一个潜在要求:模型能力和数据分布相匹配。只有在模型能力和数据分布相匹配时,模型才能得到较好的效果。用机器学习术语来描述,就是归纳偏置(Inductive Bias),即算法对所要学习的问题做出的一些假设。
归纳偏置也称为先验(Priors)。在使用线性回归时,默认数据和模型其实是匹配的,即数据尽量在一条直线(在高维空间中对应的是平面)上。但是,如果数据本身不满足模型的归纳偏置,那么在线性回归时数据点将不在一条直线上,如图2-8所示。
图2-8
这时,如果仍然拿线性回归模型去拟合数据,那么无论如何训练,效果都是非常差的。其原因在于,如果模型和数据不匹配,就不可能找出一条直线来很好地拟合抛物线。
我们可以改变模型,使其能尽可能贴近真实数据。例如,可以对线性回归进行扩展,增加一个二次项,使其变为如下抛物线模型。
y^'=w_2 x^2+w_1 x+w_0
这个模型对应的是一条抛物线,该抛物线与数据的分布相吻合,因此可以得到不错的效果。
我们可以从以下两个角度看待这个新模型。
如果把 x^2 和 x 看成两个独立的变量,那么该模型仍然是线性回归,只不过输入有两个维度(x^2 和 x)。
如果把 x 看成一个变量,那么模型就是一个抛物线回归模型(非线性多项式回归模型)。
如果点的分布更加复杂,就可以通过提高拟合函数的阶次来取得更好的效果,例如引入 x^3、x^4 等。阶次越高,函数在训练集上的效果就越好,能够拟合的曲线的种类就越多,模型的复杂度就越高、容量就越大。这里的容量是指模型的潜在能力,即能够拟合的曲线的种类有多少。
当然,模型的复杂度不能一味提高(避免发生过拟合)。一方面,高阶次函数的引入会带来输入的轻微变化,导致输出迅速增大,引起震荡。另一方面,当函数的阶次过高时,拟合曲线可能会经过训练样本中所有的点,同时把噪声学到了,导致过拟合。例如,使用线性回归拟合一条二次曲线:在只采用一次项时,会发生欠拟合,在训练集上 Loss 的值过大;如果采用二次项,就可以拟合得刚好(这正是我们需要的);如果继续增加高阶项,如增加到9阶,就会发生严重过的过拟合(尽管曲线会将所有训练数据完美匹配,但曲线已不是二阶抛物线了),在测试集上的效果必然很差。
上述分析,如图2-9所示。
图2-9
因此,不仅在线性回归上,在任何模型的选择上,复杂度和容量的添加一定要适可而止,切忌画蛇添足。
在机器学习领域有一条“金科玉律”,即没有免费午餐定理(No Free Lunch Theorem)。没有免费午餐定理是由Wolpert和Macerday在最优化理论中提出的,它证明了:对基于迭代的最优化算法,不会存在某种算法对所有问题(在有限的搜索空间内)都有效的情况。如果一种算法对某些问题有效,那么它一定在另一些问题上比纯随机搜索算法的效果差。也就是说,任何算法都有自己的优势和劣势,不能脱离具体问题讨论算法的优劣,必须“具体问题具体分析”。没有免费午餐定理告诉我们:没有绝对好的模型,模型在一些问题上“好”的表现一定是以在另一些问题上“坏”的表现为代价的。
在上述例子中:如果数据天然是以线性分布的,那么线性回归的效果就比较好,其代价是在非线性分布的数据上欠拟合;如果数据本身是以多项式分布的,那么阶次合适的多项式回归就能很好地完成任务,其代价是在线性分布和低阶次数据上过拟合。
2.5 线性回归的高级技巧
2.5.1 特征敏感性研究
在一维线性回归中,x 是输入,y^' 是输出,模型为 y^'=wx+w_0。现在,将输入数据增加1维,使其变成 [x_1,x_2 ]^T,x_1 为原来的输入 x,x_2 为符合 N(0,σ^2) 的随机数,模型将变为 y^'=w_1 x_1+w_2 x_2+w_0。例如,我们希望通过模型预测一个人的退休金是多少,x_1 表示他的工龄,x_2 表示他的身高,可以看出,x_2 对预测结果毫无帮助,纯粹是一个随机变量。
通过实验可以发现,当训练的数据量足够大时,经过训练,w_2 将趋近于0。假如原来的学习结果为
y^'=400x+1000
那么维度扩增后的学习结果为
y^'=4〖00x〗_1+0.001x_2+1000
可以看出,x_2 对于曲线的拟合基本没有帮助——这符合我们的认知。这同时说明,线性回归具有对抗噪声的能力,即无关的随机输入不会对模型的效果产生影响。
值得注意的是:当样本量较小时,随机特征 x_2 很难相互抵消(这会造成负面影响)。例如,只有A、B两个样本,恰好“A_退休金>B_退休金”“A_身高<B_身高”,模型就会被误导,认为身高对收入有负面影响,为 x_2 分配小于0的权重 w_2。
换一个角度看,如果某维度特征所对应的 w 在数值上接近0,就可以从侧面反映出该特征不是特别重要,或者和其他特征放在一起时出现了冗余现象,即不同的特征代表了相同的信息,那么,该特征可以被剔除,从而降低运算量。
接下来我们讨论特征冗余现象。假设有一个2维特征,其第二维特征不是随机的,而是通过简单复制第一维特征得到的,即输入特征为 [x_1,x_2 ]^T,x_1 和 x_2 均为原有特征,x_1=x_2。可以看出,虽然增加了1维特征,但没有增加信息量,x_1 和 x_2 仍是相互冗余的。
假如原来的学习结果为
y^'=400x+1000
那么维度扩增后的学习结果为
y^'=ax_1+bx_2+1000
通过实验可以发现,如果满足 a+b=400 这一约束条件,那么 a 和 b 可以是任意值。特别地,如果在训练时使用L2正则(将在3.4节详细介绍),那么 a=b=200。由此可知,如果特征出现了冗余现象,那么权重将会分散到各个冗余维度上。因此,我们不能简单地通过权重来衡量特征的重要性。特征所对应的权重低,虽然可能是该特征不重要造成的,但不能排除其他维度的特征和它形成冗余现象从而造成权重被稀释的情况。
由上面两个例子可知:如果单纯增加噪声,那么在样本量足够时,虽然不会对最终的学习结果产生很大的影响,但会增加运算量;如果样本量不足,那么为特征增加噪声会对模型产生误导。如果发生了特征冗余,那么不仅无法提升最终的学习效果,还会稀释权重。
上面两个例子有哪些应用场景呢?首先需要说明的是,在这两个例子中,冗余现象(完全复制)和噪声(完全随机)的假设过于极端。在真实场景中,除非刻意,这样的情况是不太可能出现的。但是,一定程度的冗余现象和噪声经常会出现。例如,婚介场景使用的特征为月收入、房产(房屋数量和面积)、汽车品牌、天气。月收入、房产、汽车之间存在一定程度的冗余现象,但不是完全冗余的,例如汽车品牌除了和月收入有关,还和个人喜好及品味相关。而天气对相亲成功与否来说是无关因素,因此作为噪声出现。
在企业里做项目,涉及的特征往往会达到上千维甚至更多。大量特征难免相互冗余,或者有些特征因为对任务的帮助不大而被当作噪声。因此,弄清楚冗余现象和噪声这两个问题,对特征提取和模型的可解释性都会有帮助。
2.5.2 损失函数的选择
一般来说,线性回归的损失函数为MSE。MSE用于衡量预测值和真实值之间的差别,并且是恒大于0的。可能有读者会问:是否有其他形式呢?当然有。例如,将MSE换成平均绝对误差(Mean Absolute Error,MAE),损失函数的公式如下。
Loss=1/N ∑_(i=1)^N▒Loss_((i)) =1/N ∑_(i=1)^N▒| y_((i))^'-y_((i)) |
上式也能用来衡量实际值 y_i 和预测值 y_i^' 之间的差异,并能保证值不小于0。但是,在真实场景中,几乎不会将绝对值函数作为损失函数,原因大体如下。
在模型求解时一般采用梯度下降法,这就要求损失函数的导数是存在的,如果导数不
存在,后续的步骤就无从谈起。但是,由于 Loss_((i))=|y_((i))^'-y_((i)) |,在 y_((i))^'=y_((i)) 这个点
导数不存在,因此,使用梯度下降法会遇到障碍。在机器学习中,对于导数不存在的点,一般可以根据经验为其设置一个导数,从而在一定程度上解决这个问题。
然而,更麻烦的是下面这一点。
当 y_((i))^'≠y_((i)),Loss 分别为MSE和MAE时,(∂Loss_((i)))/(∂y_((i))^' ) 的函数图像如图2-10所示。可以发现,在将MSE作为损失函数时,对距离目标点 y_((i)) 较远的数据点的导数 〖∂Loss〗_((i))/(∂y_((i))^' ) 较大,所以更新幅度