《速通深度学习数学基础》适读人群 :高校学生,深度学习入门学习者
以线性代数、微积分、概率论为逻辑主线,讲解了与深度学习有关的大部分数学内容,并结合作者多年工作经验介绍了工程实践和实际应用中的技巧。
长文预警,(由于知乎平台稿件格式问题,公式格式不能正确写上;如若读写困难可後台私信我要完整电子版),感兴趣想要全文的,本书已出版可自行购买阅读。
内容简介:本书以线性代数、微积分、概率论为逻辑主线,讲解了与深度学习有关的大部分数学内容。本书以理论结合实际的方式讲解,使数学知识不再是冰冷的公式堆砌,而变成一个个真实的案例,同时对案例背后的原理进行理论上的升华,希望达到一通百通的效果。读者通过阅读本书,不仅能够提升阅读学术论文中的数学公式的能力,还能加深对深度学习本身的理解。
本书面向入门级读者,摒弃复杂的数学推导和证明,重视逻辑推理和简单的表达,特别适合数学基础不足的读者阅读。
作者简介:卢菁,北京科技大学博士,北京大学博士后流动站出站。工作于腾讯、爱奇艺等知名互联网公司,主要从事人工智能技术的应用研发工作。主要研究方向为机器学习、自然语言处理、知识图谱、推荐系统等,有丰富的理论和实践经验。
精彩书评:正如本书的书名,本书能让读者放下对数学基础不足的担忧,快速对机器学习的基础技术和应用进行全景式的理解。作者从互联网实践应用的角度,对枯燥的理论进行了深入浅出的讲解,让读者在了解理论背景的同时掌握实际业务场景中的应用方法。
刘俊晖 爱奇艺AI高级总监
人工智能行业的高速发展,与之相关的算法工程师等岗位也成为高薪和快速发展的代名词,让无数学子为之向往。但是,数学作为人工智能技术的核心工具,却让很多同学感到非常棘手,高等数学、概率、线性代数等高难度学科压得人喘不过气。卢老师以自身深厚的学养,辅以多年的实践以及教学经验,将人工智能行业所需的数学知识条分缕析地展现在读者面前,帮助读者用最短的时间、最高效的方法掌握必备的数学基础知识,是进入人工智能行业的必备参考书。
陈川 千锋教育集团副总裁
本书写得通俗易懂,没有过于复杂的公式,非常适合数学基础薄弱的同学快速入门机器学习。本书内容贴合实际工作,很多企业中的真实例子可以作为就业面试辅导和项目技术参考。
肖阳 百度副总裁
本书的作者卢菁是我的老同学。本书介绍了业内广泛使用的机器学习算法和模型,既包含核心概念、算法原理、行业应用等方面的详尽介绍,也包含作者多年的实践经验总结。本书内容深入浅出、清晰透彻,相信有志于人工智能领域的从业者都能从中获益。
贺海波 网易传媒技术副总经理
这是一本非常适合读者快速入门的机器学习教程,是适合普通人修炼的秘籍。作者用通俗易懂的语言,结合很多真实的案例进行讲解——就像大学课程的讲义一样。推荐希望快速了解机器学理论和实践的技术和产品人员阅读。
王栋 小米互联网业务部副总经理兼电视与视频业务部总经理
序
深度学习从感知器诞生至今已有近70年的历史。目前深度学习逐渐发展成以大模型加精调的迁移学习新范式。深度学习从实验室走向商业化应用,赋能于民用、工业等领域,深刻地影响着人们的生活。每个深度学习算法的背后,是无数科学家、研究员、工程师用智慧探索算法的原理并结合实际场景落地,每一项复杂工作的背后,蕴藏着深刻的数学原理。
国内与深度学习有关的书籍多如繁星,但似乎缺乏专门讲解深度学习背后的数学原理的著作。这本《速通深度学习数学基础》的出现,为相关领域的读者提供了学习上的便利。
本书作者长期从事深度学习项目实践,对相关理论和方法有深刻的心得体会。本书力求精简,在有限的篇幅里,以线性代数、微积分、概率论三条主线,讲解了与深度学习有关的数学知识。参考本书,读者可以大幅提升深度学习领域的文献阅读能力。
本书针对数学知识在深度学习中的应用,精心挑选了相关内容进行深入浅出的讲解,文字轻松有趣,别开生面。本书特别适合以下读者阅读:大学生;想进入深度学习行业,但是担心数学底子不好的技术人员;在算法上缺乏足够基础的工程师。相信本书能帮助这些读者系统地了解深度学习模型背后的常用数学原理。
周 明
2022年7月
前言
在我们享受人工智能带来的便利背后,是无数科学家、研究员、工程师的辛勤工作。他们用智慧探索智能化的原理,并结合实际场景落地——这项复杂工作的背后往往蕴藏着深刻的数学原理。如果说社会需求是人工智能的第一驱动力,那么数学就是最为重要的燃料。
写作背景
在目前国内的图书市场上,深度学习数学相关书籍,要么是纯粹的数学内容,要么是深度学习各类模型的汇总,缺乏专门将数学和人工智能结合起来讲解的著作。本书恰好填补了此处的市场空白,希望能为相关领域的学生、工作人员提供学习上的便利。
本书内容
本书力求精简,因此很薄,但内容一点也不少。
本书以线性代数、微积分、概率论为逻辑主线,讲解了与深度学习有关的大部分数学内容。读者通过阅读本书,不仅能够提升阅读学术论文中的数学公式的能力,还能加深对深度学习本身的理解。相比于现行的数学教材理论较多、偏向严谨的证明、容易让人望而生畏,本书把焦点放在了数学知识在深度学习中的应用上。
本书精心挑选深度学习相关知识进行深入浅出的讲解,对所涉及的数学结论给出相应的落地应用。和同类深度学习书籍相比,本书面向入门级读者,摒弃复杂的数学推导和证明,重视逻辑推理和简单的表达,特别适合数学基础不足的读者阅读。和国内外经典书籍相比,本书以数学知识为主线带出深度学习知识。读者可以将本书当作对同类书籍中数学知识的二次提炼。
本书作者长期奋战在深度学习一线,对自然语言处理、推荐系统等有深入的研究和应用心得。本书以理论结合实际的方式讲解,使数学知识不再是冰冷的公式堆砌,而变成一个个真实的案例,同时对案例背后的原理进行理论上的升华,希望达到一通百通的效果。
人工智能不仅是一个前沿领域,也是一个接地气的工程学科。人工智能越来越多地渗透到我们的日常工作和生活中,不仅极大提升了我们的工作效率,还在衣、食、住、行等方面改变着我们的生活。
当然,从总体看,人工智能仍然有很长的路要走,还有巨大的潜能没有释放。让我们共同奋斗吧!
卢 菁
2022年6月
第1章 线性代数的基本概念
1.1 向量和深度学习
在开展人工智能相关工作时,我们面临的业务大都是客观世界中的问题,例如图片、视频、文本的识别及推荐系统的设计等。这些业务包含各式各样的数据——图片对应的是像素值,文本对应的是字符串,语音对应的是声波,推荐系统则包含大量的用户行为数据——五花八门、无奇不有。但是,机器学习模型作为一个数学函数,接受的输入一般是浮点数数组。这个数组用专业术语表述,叫作特征向量,数组的长度叫作特征向量的维度。例如,
x=[■(1.1@2.3@3.2)]
在这里,x 为一个向量,它对应的维度是3(有3个数),因为这3个数是竖着排成一列,因此 x 也被称为列向量。向量也可以写成如下形式:
y=[1.1,2.3,3.2]
这种写法,3个数横着排成一行,因此 y 也被称为行向量,我们一般可以使用转置符号T写在向量的右上角,表示对向量旋转90°,即行向量变成列向量,列向量变成行向量,例如上述向量 x 和 y,有如下关系。
x^T=y
y^T=x
行向量和列向量本质上没有差别,都可以用来描述事物的特征。为了后续的运算方便,一般来说,机器学习大都采用列向量作为特征描述,即
x=[■(1.1@2.3@3.2)]
但是,这样书写公式占用的面积较大,所以有时也写成转置的形式:
〖x=[1.1,2.3,3.2]〗^T
在本书中,如果表示向量中具体维度的数值,采用下角标形式,即
〖x=[x_1,x_2,x_3]〗^T
x_1=1.1
x_2=2.3
x_3=3.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”,这样,36岁的人所对应的特征为 〖[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.2 向量距离计算
前面详细讲解了如何使用向量来表示各类特征。除了将向量 x 作为特征输入模型,我们有时也需要通过向量之间的距离来衡量特征之间的差异。
有多种方法可以度量向量之间的距离,每种方法都有其应用场景和优缺点。这些方法有一些共性,列举如下。
同一性:d(x,y)=0,同一点到自身的距离为0。此时,也可写成 x=y。
非负性:d(x,y)≥0,距离不能小于0。
对称性:d(x,y)=d(y,x)。
直递性:d(x,y)≤d(x,z)+d(z,y),即三角形法则(由3个点组成的三角形,两边长之和大于等于第三边)。
很明显,多种函数可以同时满足上述条件,理论上,这些函数都可用于度量距离。但是,这些函数中的大部分在机器学习中并不常用。下面介绍机器学习中的常用距离。
欧氏距离(Euclidean Distance)是机器学习中最为常见的距离之一,它源自两点之间的距离公式。两个特征向量分别为 〖〗x=[x1,x2,⋯,xn]Ty=〖[y1,y2,⋯,yn]〗T
欧氏距离的计算公式如下: ▒〖〗dEuclidean(x,y)=√(∑(i=1)n▒〖(xi−yi)〗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)。切比雪夫距离用于计算各维度数值差中的最大值,计算公式如下:
▒dManhattan(x,y)=∑(i=1)n▒|xi−yi|
切比雪夫距离和曼哈顿距离的区别在于:在斜向移动时,曼哈顿距离所需的距离为2,切比雪夫距离所需的距离为1。
广义圆可以定义为到圆心距离相等的点的集合。分别使用以上介绍的三种距离画出来的“圆”,如图1-4所示。
图1-4
闵可夫斯基距离(MinkowskiDistance)的计算公式如下。
▒〖〖〗〗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/σ_ix_i^'=x_i/σ_i
σ_i 为第 i 维特征所对应的标准差。修正后的距离计算公式如下。
d_(Standardized Euclidean) (x,y)=√(∑_(i=1)^n▒〖(x_i^'-y_i^')〗^2 )d_(Standardized Euclidean) (x,y)=√(∑_(i=1)^n▒〖(x_i^'-y_i^')〗^2 )
上述方法称作标准化欧氏距离(Standardized Euclidean Distance)。
在提取特征时,特征之间并不是独立的,维度之间往往存在冗余的问题。例如,体重和身高之间就存在较强的相关性。特征冗余带来的影响是:某些因素在各个维度重复出现,在计算距离时会被重复计算,从而使其影响被放大。为了降低特征冗余带来的影响,可以使用马氏距离(Mahalanobis Distance)进行计算,公式如下:
dMahalanobis(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距离的用途很广,可用于度量购物偏好的差异、文章内容的差异等具有同质集合属性的特征。
在机器学习中,除了距离,也常使用相似度来度量两个向量。顾名思义,两个向量的相似度越高,说明它们越相似。因此,相似度和距离成反相关。
余弦相似度(CosineSimilarity)是一种常见的相似度,其计算公式如下:
▒〖〗cos(x,y)=(∑(i=1)n▒〖xiyi〗)/‖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)))
即欧氏距离和余弦相似度之间存在单调关系。
1.3 向量的基本性质
1.3.1 向量的基本运算
向量可以看作一个矢量,即既有大小,又有方向的量。例如,x=[■(1@3)] 在2维坐标系中,
如图1-6所示。
图1-6
向量之间可以进行数学运算,例如对于2维向量 x=[■(1@3)] 和 y=[■(2@4)],加法运算为 x+y=[■(1+2@3+4)]
上式的几何意义,如图1-7所示。
图1-7
向量也可以和一个常数相乘,例如 kx=[■(k@3k)]
几何意义相当于对把向量进行 k 倍的缩放。如果 k<0,就相当于把向量的朝向取反,如图1-8所示。
图1-8
如果一个向量可以由其他的向量加权求和表示,如
α_1=k_2 α_2+⋯+k_m α_m
则称 α_1 可以由 α_2~α_m 线性表示。
在Attention模型中,模型输出其实也是将输入的特征向量组 α_1,⋯,α_m 进行线性加权求和,即
h_1=k_11 α_1+⋯+k_1m α_m
⋮
h_m=k_m1 α_1+⋯+k_mm α_m
只不过上式的权重 k 也是通过模型计算产生的。
当使用多层Attention模型时,第二层的输出 q_i 为 h_1,⋯,h_m 的线性组合,即
q_i=w_i1 h_1+⋯+w_im h_m
=w_i1 (k_11 α_1+⋯+k_1m α_m )+⋯+w_im (k_m1 α_1+⋯+k_mm α_m )
=(∑_(j=1)^m▒〖w_ij k_j1 〗) α_1+⋯+(∑_(j=1)^m▒〖w_ij k_jm 〗) α_m
可以发现,从效果看,q_i 可以直接是 α_1,⋯,α_m 的线性组合,从而中间层 h_1,⋯,h_m 就显得有些多余。这说明Attention模型一定要对输出进行非线性变换,否则深度就丧失了意义。这也是Transformer模块必须有前馈层FFN的原因之一。
1.3.2 线性相关和线性无关
如果有一组向量 α_1,⋯,α_m 存在不全为0的数 k_1,⋯,k_m,使得
k_1 α_1+⋯+k_m α_m=O
其中 O 为各个元素都为0的向量,就称 α_1,⋯,α_m 是线性相关的,否则称 α_1,⋯,α_m 是线性无关的。如果 α_1,⋯,α_m 线性相关,并且 k_j≠0,那么
α_j=k_1/k_j α_1+⋯+k_(j-1)/k_j α_(j-1)+k_(j+1)/k_j α_(j+1)+⋯+k_m/k_j α_m
即在这组向量中,存在向量 α_j 可以由其他向量来表示。
例如,对于向量 α_1=[■(4@1@-1)],α_2=[■(1@2@-1)],α_3=[■(2@-3@1)],因为 α_1=2α_2+α_3,即
α_1 可以由 α_2 和 α_3 线性表示,所以这组向量则是线性相关的。
线性相关意味着这组向量中在方向上存在冗余。例如,有两个地方A和B,A在B的东边1千米、南边1千米,这时A在B东南 √2 千米就是冗余信息,因为通过东边和南边已经完全可以推断出东南方向的信息了,如图1-9所示。
图1-9
如果去除这组向量中的 α_1,仅保留 α_2 和 α_3,那么有且仅有 k_2=k_3=0 时 〖k_2 α〗_2+k_3 α_3=0,其他情况都不为0,因此 α_2 和 α_3 线性无关。
如果有一组向量 α_1,⋯,α_m 线性无关,那么它们之中的任何一个向量都不能由其他的向量进行线性表示,这组向量也就不存在冗余的情况。有一个结论:在n维向量中,一组线性无关的向量最多有n个向量。但是,我们可以找到无数组线性无关的向量。
1.3.3 向量的投影和正交
如果有两个向量 x 和 y,它们在空间中各自表示一个方向,就把 x^T y 称为 x 在 y 上的投影,也可以称为 y 在 x 上的投影,如图1-10所示。
图1-10
投影的意义在于 y 中有多少 x 的信息,就好比从东南 √2 千米可以推断方向“南”的里程为1千米。
特别的,如果两个向量在空间中是垂直的,我们就称它们之间正交,此时投影长度为0。例如,东和南就是正交。如果两个向量 x 和 y 正交,就说明 y 中不包含任何 x 的信息,如图1-11所示。
图1-11
两个非0向量正交的充要条件为
x^T y=0
且 x≠0 和 y≠0。特别的,如果 ‖y‖=1,则称为标准投影。
在 n 维空间中,最多可以找到 n 个相互正交的向量 v_1,〖⋯,v〗_n,v_i≠0。例如,在2维空间中东和南相互正交,在3维空间中东,南和上相互正交。
一组相互正交的向量,它们必然是线性无关的。我们使用反证法进行证明。
一组向量 v_1,〖⋯,v〗_n(v_i≠0)相互正交,它们之间线性相关,例如 v_1 可以由其他向量表示,即
v_1=k_2 v_2+⋯+k_n v_n
两边都乘以 v_1^T,可得
v_1^T v_1=k_2 〖v_1^T v〗_2+⋯+k_n 〖v_1^T v〗_n=k_2 0+⋯+k_n 0=0
但是,因为 v_1≠0,所以 v_1^T v_1≠0,这就出现了矛盾。因此,假设不成立,即 v_1,〖⋯,v〗_n 是线性无关的。
如果这 n 个相互正交的向量 v_1,〖⋯,v〗_n 满足 ‖v_i ‖=1,i=1,⋯,n,那么称 v_1,〖⋯,v〗_n 为标准正交基。如果我们通过一组标准正交基 v_1,〖⋯,v〗_n 对向量 x 进行投影,就可以得到一个新的向量:
y=[■(x^T v_1@⋮@x^T v_n )]
例如,在2维空间中,x=[■(2@3)],v_1=[■(1/√2@1/√2)],v_2=[■((-1)/√2@1/√2)],投影如图1-12所示。
可以看出,使用标准正交基进行投影,其实就是同样的一个数据在新坐标系下的新坐
标,而 x 其实就是在标准正交基下 [■(1@0)] 和 [■(0@1)] 的投影。
图1-12
但是需要注意,标准正交基并不是唯一的,例如以下都是标准正交基的投影。
使用不同的标准正交基,相当于选择了不同的坐标系,同一个数据点在不同坐标系下对应于不同的坐标。
如果一组向量为标准正交基,那么它们一定是一个线性无关组,但是,反过来并不成立。不过,施密特正交化可以将一个线性无关组转换成正交向量组,再将正交向量组的每个向量进行单位化,最终得到一个标准正交基。例如,有线性无关向量组 α_1,⋯,α_m,我们先构建正交向量组 β_1,⋯,β_m,施密特正交化的具体方法如下。
β_1=α_1
β_2=α_2-kβ_1
为了使 β_1 和 β_2 正交,即
〈β_1,β_2 〉=〈α_1,α_2-kβ_1 〉=〈α_1,α_2 〉-k〈α_1,β_1 〉=0
可以得到
k=〈α_1,α_2 〉/〈α_1,β_1 〉 =〈β_1,α_2 〉/〈β_1,β_1 〉
所以
β_2=α_2-〈β_1,α_2 〉/〈β_1,β_1 〉 β_1
同理,我们可以构造向量 β_3=α_2-k_1 β_1-k_2 β_2,满足
〈β_3,β_1 〉=0
〈β_3,β_2 〉=0
从而求得
β_3=α_2-〈β_1,α_3 〉/〈β_1,β_1 〉 β_1-〈β_2,α_3 〉/〈β_2,β_2 〉 β_2
依此类推:
β_j=α_j-∑_(i=1)^(j-1)▒〖〈β_i,α_j 〉/〈β_i,β_i 〉 β_i 〗
通过上述公式,我们就可以的得到正交向量组:
β_1,⋯,β_m
最后,将向量组中的每个向量进行单位化,就能得到标准正交基,具体如下。
β_1/‖β_1 ‖ ,⋯,β_m/‖β_m ‖
1.4 矩阵的基本概念
1.线性变换
对于向量 x,出于不同的需求,我们可能需要从一个新角度进行观测,这个新角度有可能会对某些特征进行放大,同时会忽略一些无关因素。例如,一个学生有语文、数学、外语三门课的成绩,不同的专业对各科成绩及它们之间的组合的要求是不一样的,如学习翻译需要语文和外语成绩好,学习计算机需要数学和外语成绩好。因此,不同的专业在招生时需要考察成绩的不同方面,即观测角度不同,从数学的角度看,就是对考试成绩进行了坐标变换。那么,具体怎么做呢?我们可以构建一个新的坐标系,y 为 x 在新坐标系下的坐标。例如,在2维空间中,使用向量 w_1 和 w_2 构建新的坐标系,这里注意 w_1 和 w_2 不需要正交,y 就是新坐标系下的坐标,即
y=[■(w1Tx@w2Tx)]
例如,有 x=[■(2@1)],w_1=[■(1@2)],w_2=[■(2@1)],那么 y=[■(4@5)],坐标变换如图1-13所示。
图1-13
我们一般把这种坐标变换写成
W=[■(w1T@w2T)]=[■(w11,w12@w21,w22)]
W 称为矩阵,表示特定的坐标变换形式。使用矩阵 W 对向量 x 进行坐标变换,得到结果 y,一般写成矩阵乘法,即
y=Wx
上述运算也称为线性变换。
更一般的,向量变化前后的维度不一定需要相等。例如,对于 n 维向量 x,选用 m 个坐标轴进行重新观测,那么
坐标变换就为
n 维向量 x,通过 W 进行变换,得到 m 维向量 y。
矩阵 W 一共有 m 行 n 列,记为 W∈R^(m×n)。特别的,如果 m=n,即 W 的行列数相等,我们就称 W 为方阵。
需要注意的是,矩阵的列数要和向量的行数相等,这样线性变换才有意义,即 W∈R^(m×n),x∈R^(n×1)。
特别的,对于2维向量,如果 w_1=[■(1@0)],w_2=[■(0@1)],W=[■(1&0@0&1)],对任意 x 都有
x≡Wx
坐标不会发生变换,也就是说,我们默认向量所在的坐标系为 [■(1@0)][■(0@1)]。一般来说,我
们把对角线元素为1,其他位置元素都为0的矩阵称为单位矩阵,用 E 表示。
从坐标变换的角度理解矩阵,有以下三点需要注意。
新坐标系下的原点并不发生变化。
新坐标系的坐标轴不一定相互垂直。
新坐标系的坐标刻度未必是1,也就是说,并不要求 ‖w_i ‖=1,坐标变换就会起到伸缩向量的作用,即向量到原点(原点本身不变)的距离会发生变化。
y=Wx
‖y‖≠‖x‖
2.线性变换的几何意义
我们也可以从几何的角度看向量。例如,对于2维向量 x=[■(x_1@x_2 )],它对应于2维坐标
系中的一个点,如图1-14所示。
图1-14
在机器学习中,为了数据之间更加有区分度,以便后续处理,我们往往需要对数据点进行一些基本操作,具体如下。
伸缩,即 x^'=[■(ax_1@bx_2 )]x^'=[■(ax_1@bx_2 )] ,在两个坐标轴的方向进行放缩,如图1-15所示。
图1-15
旋转,如图1-16所示,坐标点围绕坐标轴,逆时针旋转 θ,即
图1-16
如果对一个向量依次进行旋转和伸缩操作,就可以写成
我们重新整理一下,上式可以写成
其中
w_11=acosθ
w_12=-asinθ
w_21=bsinθ
w_22=bcosθ
因此,w_11、w_12、w_21、w_22 对应于一套旋转缩放操作。因此,可以写成
W=[■(w_11,w_12@w_21,w_22 )]
x^'=Wx
所以说,对向量进行旋转和缩放也是一种线性变换。
对向量常见的操作还有平移,即 x^'=[■(x_1+〖w0〗_1@x_2+〖w0〗_2 )]=x+w0,w0=[■(〖w0〗_1@〖w0〗_2 )],如图1-17所示。
图1-17
对向量的平移也可以写成线性变换的形式,不过这里需要对原向量 x=[■(x_1@x_2 )] 进行改造,
增加一个维度并取值为1,再进行线性变换,即
x^'=[■(1&0&〖w0〗_1@0&1&〖w0〗_2 )][■(x_1@x_2@1)]
我们可以看到,在低维空间的平移操作,等价于高维空间中的线性变换。在线性回归、逻辑回归和神经网络中,经常可以看到如下写法。
y=Wx
这里并非没有偏置,只不过是把偏置隐藏写入 W,并且 x 增加了取值为1的维度。
3.矩阵的乘法
对于向量 x,我们可以依次使用矩阵 W 和 S 对它进行连续两次线性变换,即
z=Wx
y=Sz
所以,有
y=SWx
但是,必须注意这里 W 的列数和 S 的行数是相等的,即当 W∈R^(m×n) 时,S∈R^(n×k)。
上述操作也可以换一个角度理解。将矩阵 W 和矩阵 S 相乘,即 M=WS,再用 M 对向量 x 进行线性变换,即 y=Mx。例如
这里可以发现,如果对矩阵进行连续两次线性变换,在效果上其实等价于一次,这也是深度神经网络中必须使用激活函数的原因。
如果 W∈R^(n×n) 和 S∈R^(n×n) 为同尺寸的方阵,那么 WS 和 SW 都可以进行运算。但是,一般来说,WS≠SW,即进行多次线性变换时,顺序也很重要。
在机器学习中,线性变换是常见的操作,可以进行升维,也可以进行降维,它们有不同的作用。例如,x∈R^(n×1),W∈R^(m×n),那么 x^'=Wx∈R^(m×1)。如果 m>n,就相当于把向量映射至高维空间,虽然产生了特征冗余,但合理的线性变换可以使数据在空间中排列更利于分类。如果 m<n,就是进行特征降维,特征降维一般是为了去除噪声,例如主成分分析(PCA)、神经网络自动特征筛选。
4.转置矩阵
把矩阵 W∈R^(m×n) 行列对调,得到的矩阵记为 W^T∈R^(n×m),W^T 称为 W 的转置矩阵,
如果 A∈R^(m×n),B∈R^(m×n),那么
(A+B)^T=A^T+B^T
如果 A∈R^(m×n),B∈R^(n×k),那么
(AB)^T=B^T A^T
如果对于方阵 W∈R^(n×n),满足 W=W^T,那么称 W 为对称矩阵。
W=[■(w_11&…&w_1n@…&…&…@w_n1&…&w_nn )]为对称矩阵的充要条件是对于任意 i 和 j 均满足 w_ij=w_ji。
对于任意矩阵 W∈R^(m×n),有
〖(WW^T)〗^T=〖(W^T)〗^T W^T=WW^T
因此,WW^T 为对称矩阵。同理,W^T W 也为对称矩阵。
5.矩阵的迹
对于方阵 W∈R^(n×n),我们把它对角线上各个元素之和称为矩阵 W 的迹,一般记作tr(W),例如矩阵
那么
如果有两个方阵 A∈R^(n×n) 和 B∈R^(n×n),那么它们的迹有如下关系。
tr(AB)=tr(BA)。
tr(mA+nB)=m tr(A)+n tr(B)。
1.4.2 矩阵和神经网络
在神经网络中,一般对向量 x^((1)) 进行一次线性变换后,会再进行平移,即
x^((2))=W^((1)) x^((1))+〖w0〗^((1))
这就是一层神经网络,W^((1)) 称作权重,〖w0〗^((1)) 称作偏置。特征可以经过多层神经网络,不断的变换,最终使得特征便于分类。例如,我们把 x^((1)) 经过两层神经网络变成 x^((3)),具体如下。
x^((2))=W^((1)) x^((1))+〖w0〗^((1))
x^((3))=W^((2)) x^((2))+〖w0〗^((2))
但是,这样的多层变换其实等价于一层变换,达不到想要多层效果,原因在于
x^((3))=W^((2) ) (W^((1) ) x^((1) )+〖w0〗^((1) ) )+〖w0〗^((2) )
=W^((2) ) W^((1)) x^((1))+W^((2) ) 〖w0〗^((1))+〖w0〗^((2))
令 W^((2) ) W^((1))=A,W^((2) ) 〖w0〗^((1))+〖w0〗^((2))=B,那么
x^((3))=Ax^((1))+B
这说明,虽然 x^((1)) 经过了两层神经网络,但效果其实和经过一层神经网络是一样的。为了解决这个问题,一般在经过一层神经网络后会进行一次非线性激活,即
x^((2))=f(W^((1) ) x^((1) )+〖w0〗^((1) ) )
f 为非线性函数,常见的如sigmoid、Tanh、ReLU等。以ReLU为例,如图1-18所示,公式如下。
图1-18
例如:
因此,我们对特征向量进行“线性变换+坐标平移+非线性激活”,称为一层神经网络。
神经网络的特征变换,可以将无法进行分类的特征经过转换,变成有利于分类。例如,
有4个数据点 x1=[■(0@0)]、x2=[■(0@1)]、x3=[■(1@0)]、x4=[■(1@1)],其中 x1 和 x4 是一类,x2 和
x3 是一类,它们的分布如图1-19所示。
图1-19
我们不可能找到一条直线,将两类数据完全分开,这种问题称作线性不可分。但是,我们可以让特征经过一层神经网络并使用ReLU函数来激活,即
这样,线性不可分的数据就会变成线性可分的数据,如图1-20所示。
图1-20
数据变换完成后,就可以使用逻辑回归等较为简单的模型进行分类。这样做也能达到不错的效果。
1.4.3 矩阵的秩
对于矩阵 W∈R^(m×n),我们可以把它看成是由 m 个 n 维行向量组成的,即
W=[■(v1@⋮@vm)]
如果这 m 个向量 v_1,⋯,v_m 至多能找到 r 个向量ÿ