极客时间已完结课程限时免费阅读

33 | 线性代数:线性代数到底都讲了些什么?

33 | 线性代数:线性代数到底都讲了些什么?-极客时间

33 | 线性代数:线性代数到底都讲了些什么?

讲述:黄申

时长11:19大小10.34M

你好,我是黄申。
通过第二模块的学习,我想你对概率统计在编程领域,特别是机器学习算法中的应用,已经有了一定理解。概率统计关注的是随机变量及其概率分布,以及如何通过观测数据来推断这些分布。可是,在解决很多问题的时候,我们不仅要关心单个变量之间的关系,还要进一步研究多个变量之间的关系,最典型的例子就是基于多个特征的信息检索和机器学习。
在信息检索中,我们需要考虑多个关键词特征对最终相关性的影响,而在机器学习中,无论是监督式还是非监督式学习,我们都需要考虑多个特征对模型拟合的影响。在研究多个变量之间关系的时候,线性代数成为了解决这类问题的有力工具。
另一方面,在我们日常生活和工作中,很多问题都可以线性化,小到计算两个地点之间的距离,大到计算互联网中全部网页的 PageRank。所以,为了使用编程来解决相应的问题,我们也必须掌握一些必要的线性代数基础知识。因此,我会从线性代数的基本概念出发,结合信息检索和机器学习领域的知识,详细讲解线性代数的运用。
关于线性代数,究竟都需要掌握哪些方面的知识呢?我们今天就来看一看,让你对之后一段时间所要学习的知识有个大体的了解。

向量和向量空间

我们之前所谈到的变量都属于标量(Scalar)。它只是一个单独的数字,而且不能表示方向。从计算机数据结构的角度来看,标量就是编程中最基本的变量。这个很好理解,你可以回想一下刚开始学习编程时接触到的标量类型的变量。
和标量对应的概念,就是线性代数中最常用、也最重要的概念,向量(Vector),也可以叫做矢量。它代表一组数字,并且这些数字是有序排列的。我们用数据结构的视角来看,向量可以用数组或者链表来表达。
后面的文章里,我会用加粗的小写字母表示一个向量,例如 ,而 等等,来表示向量中的每个元素,这里面的 n 就是向量的维。
向量和标量最大的区别在于,向量除了拥有数值的大小,还拥有方向。向量或者矢量中的“向”和“矢”这两个字,都表明它们是有方向的。你可能会问,为什么这一串数字能表示方向呢?
这是因为,如果我们把某个向量中的元素看作坐标轴上的坐标,那么这个向量就可以看作空间中的一个点。以原点为起点,以向量代表的点为终点,就能形成一条有向直线。而这样的处理其实已经给向量赋予了代数的含义,使得计算的过程中更加直观。在后面讨论向量空间、向量夹角、矩阵特征值等概念的时候,我会进一步展示给你看。
由于一个向量包含了很多个元素,因此我们自然地就可以把它运用在机器学习的领域。上一个模块,我讲过如何把自然界里物体的属性,转换为能够用数字表达的特征。由于特征有很多维,因此我们可以使用向量来表示某个物体的特征。其中,向量的每个元素就代表一维特征,而元素的值代表了相应特征的值,我们称这类向量为特征向量(Feature Vector)。
需要注意的是,这个特征向量和矩阵的特征向量(Eigenvector)是两码事。那么矩阵的特征向量是什么意思呢?矩阵的几何意义是坐标的变换。如果一个矩阵存在特征向量和特征值,那么这个矩阵的特征向量就表示了它在空间中最主要的运动方向。如果你对这几个概念还不太理解,也不用担心,在介绍矩阵的时候,我会详细说说什么是矩阵的特征向量。

向量的运算

标量和向量之间可以进行运算,比如标量和向量相加或者相乘时,我们直接把标量和向量中的每个元素相加或者相乘就行了,这个很好理解。可是,向量和向量之间的加法或乘法应该如何进行呢?我们需要先定义向量空间。向量空间理论上的定义比较繁琐,不过二维或者三维的坐标空间可以很好地帮助你来理解。这些空间主要有几个特性:
空间由无穷多个的位置点组成;
这些点之间存在相对的关系;
可以在空间中定义任意两点之间的长度,以及任意两个向量之间的角度;
这个空间的点可以进行移动。
有了这些特点,我们就可以定义向量之间的加法、乘法(或点乘)、距离和夹角等等。
两个向量之间的加法,首先它们需要维度相同,然后是对应的元素相加。
所以说,向量的加法实际上就是把几何问题转化成了代数问题,然后用代数的方法实现了几何的运算。我下面画了一张图,来解释二维空间里,两个向量的相加,看完你就能理解了。
在这张图中,有两个向量 x 和 y,它们的长度分别是 x’和 y’,它们的相加结果是 x+y,这个结果所对应的点相当于 x 向量沿着 y 向量的方向移动 y’,或者是 y 向量沿着 x 向量的方向移动 x’。
向量之间的乘法默认是点乘,向量 x 和 y 的点乘是这么定义的:
点乘的作用是把相乘的两个向量转换成了标量,它有具体的几何含义。我们会用点乘来计算向量的长度以及两个向量间的夹角,所以一般情况下我们会默认向量间的乘法是点乘。至于向量之间的夹角和距离,它们在向量空间模型(Vector Space Model)中发挥了重要的作用。信息检索和机器学习等领域充分利用了向量空间模型,计算不同对象之间的相似程度。在之后的专栏里,我会通过向量空间模型,详细介绍向量点乘,以及向量间夹角和距离的计算。

矩阵的运算

矩阵由多个长度相等的向量组成,其中的每列或者每行就是一个向量。因此,我们把向量延伸一下就能得到矩阵(Matrix)。
从数据结构的角度看,向量是一维数组,那矩阵就是一个二维数组。如果二维数组里绝大多数元素都是 0 或者不存在的值,那么我们就称这个矩阵很稀疏(Sparse)。对于稀疏矩阵,我们可以使用哈希表的链地址法来表示。所以,矩阵中的每个元素有两个索引。
我用加粗的斜体大写字母表示一个矩阵,例如 ,而 等等,表示矩阵中的每个元素,而这里面的 n 和 m 分别表示矩阵的行维数和列维数。
我们换个角度来看,向量其实也是一种特殊的矩阵。如果一个矩阵是 n × m 维,那么一个 n × 1 的矩阵也可以称作一个 n 维列向量;而一个 1 × m 矩阵也称为一个 m 维行向量。
同样,我们也可以定义标量和矩阵之间的加法和乘法,我们只需要把标量和矩阵中的每个元素相加或相乘就可以了。剩下的问题就是,矩阵和矩阵之间是如何进行加法和乘法的呢?矩阵加法比较简单,只要保证参与操作的两个矩阵具有相同的行维度和列维度,我们就可以把对应的元素两两相加。而乘法略微繁琐一些,如果写成公式就是这种形式:
其中,矩阵 为矩阵 的乘积, 是形状为 i x k 的矩阵,而 是形状为 k × j 的矩阵。 的列数 k 必须和 的行数 k 相等,两者才可以进行这样的乘法。
我们可以把这个过程看作矩阵 的行向量和矩阵 的列向量两两进行点乘,我这里画了张图,你理解了这张图就不难记住这个公式了。
两个矩阵中对应元素进行相乘,这种操作也是存在的,我们称它为元素对应乘积,或者 Hadamard 乘积。但是这种乘法咱们用得比较少,所以你只要知道有这个概念就可以了。
除了加法和乘法,矩阵还有一些其他重要的操作,包括转置、求逆矩阵、求特征值和求奇异值等等。
转置(Transposition)是指矩阵内的元素行索引和纵索引互换,例如 就变为 ,相应的,矩阵的形状由转置前的 n × m 变为转置后的 m × n。从几何的角度来说,矩阵的转置就是原矩阵以对角线为轴进行翻转后的结果。下面这张图展示了矩阵 转置之后的矩阵
除了转置矩阵,另一个重要的概念是逆矩阵。为了理解逆矩阵或矩阵逆(Matrix Inversion),我们首先要理解单位矩阵(Identity Matrix)。单位矩阵中,所有沿主对角线的元素都是 1,而其他位置的所有元素都是 0。通常我们只考虑单位矩阵为方阵的情况,也就是行数和列数相等,我们把它记作 表示维数。我这里给出一个 的示例。
如果有矩阵 ,我们把它的逆矩阵记做 ,两者相乘的结果是单位矩阵,写成公式就是这种形式:
特征值和奇异值的概念以及求解比较复杂,从大体上来理解,它们可以帮助我们找到矩阵最主要的特点。通过这些操作,我们就可以在机器学习算法中降低特征向量的维度,达到特征选择和变换的目的。我会在后面的专栏,结合案例给你详细讲解。

总结

相对于概率统计,线性代数中的基本概念和知识点可能没有那么多。但是对于刚入门的初学者,这些内容理解起来会比较费力。在这一节里,我进行了大致的梳理,帮助你学习。
标量和向量的区别,标量只是单独的一个数,而向量是一组数。矩阵是向量的扩展,就是一个二维数组。我们可以使用哈希表的链地址法表示稀疏矩阵。
标量和向量或矩阵的加法、乘法比较简单,就是把这个标量和向量或矩阵中所有的元素轮流进行相加或相乘。向量之间的加法和矩阵之间的加法,是把两者对应的元素相加。向量之间的相乘分为叉乘和点乘,我在专栏里默认向量乘法为点乘。而矩阵的乘法默认为左矩阵的行向量和右矩阵的列向量两两点乘。
说到这里,你可能还是不太理解线性代数对于编程有什么用处。在这个模块之后的内容中,我会详细介绍向量空间模型、线性方程组、矩阵求特征值和奇异值分解等,在信息检索和机器学习领域中,有怎样的应用场景。

思考题

之前你对线性代数的认识是什么样的呢?对这块内容,你觉得最难的是什么?
欢迎留言和我分享,也欢迎你在留言区写下今天的学习笔记。你可以点击“请朋友读”,把今天的内容分享给你的好友,和他一起精进。
分享给需要的人,Ta购买本课程,你将得20
生成海报并分享

赞 12

提建议

上一篇
32 | 概率统计篇答疑和总结:为什么会有欠拟合和过拟合?
下一篇
34 | 向量空间模型:如何让计算机理解现实事物之间的关系?
unpreview
 写留言

精选留言(25)

  • 李跃爱学习
    2019-07-25
    1. 在研究多个变量之间关系的时候,线性代数成为了解决这类问题的有力工具 2. 向量和向量空间 1. 标量(Scalar),它只是一个单独的数字,而且不能表示方向 2. 向量(Vector),也叫做矢量,它代表一组数字,并且这些数字时有序排列的 3. 向量和标量最大的区别在于,向量除了拥有数值的大小,还拥有方向 1. 为什么这么一串数字能表示方向? 2. 这是因为,如果我们把向量中的元素看成坐标轴上的坐标,那么这个向量就可以看作空间中的一个点,以原点为起点,以向量代表的点为重点,就能形成一条有向的直线。 3. 以上处理就给向量赋予了代数的含义,使得计算的过程中更加直观。 1. 向量空间 2. 向量夹角 3. 矩阵特征值 4. 自然界物体的属性转换为用数字表达,向量的每个元素代表一维特征,而元素的值代表相应特征的值,我们称这类向量为特征向量(Feature Vector) 1. 这个和矩阵的特征向量(Eigenvector)是两码事 3. 向量的运算 1. 标量和向量之间可以进行运算,把标量和向量中的每个元素进行运算 2. 向量和向量之间运算需要先定义向量空间 3. 向量空间 1. 空间由无穷多个的位置点组成 2. 这些点之间存在相对的关系 3. 可以在空间中定义任意两点之间的长度,以及任意两点之间的角度 4. 这个空间的点可以进行移动 5. 定义运算 1. 加法:首先两个向量需要维度相同,然后是对应的元素相加 2. 乘法(点乘):向量之间的乘法默认是点乘,点乘的作用是把相乘的两个向量转换成了标量。它有具体的几何含义。我们会用点乘来计算向量的长度以及两个向量的夹角。向量之间的夹角和距离又在向量空间模型(Vector Space Model)中发挥了重要作用。信息检索和机器学习等领域利用了向量空间模型来计算不同对象之间的相似程度 1. 距离 2. 夹角 4. 矩阵(Matrix) 1. 矩阵由多个长度相等的向量组成 1. 向量其实也是一个特殊的矩阵 2. 从数据结构角度看,向量是一维数组,那矩阵就是二维数组 3. 如果二维数组里面大多数元素都是0,我们称这个矩阵很稀疏(Sparse) 1. 我们可以使用哈希表的链地址法表示稀疏矩阵 4. 单位矩阵(identity Matrix):所有沿主对角线的元素都是1,其他位置的元素都是0,通常我们只考虑单位矩阵为方阵的情况(即行数和列数相等) 2. 矩阵的几何意义是坐标变换 1. 特征向量 2. 特征值 3. 如果一个矩阵存在特征向量和特征值,那么这个矩阵的特征向量就表示了它在空间中最主要的运动方向 3. 矩阵的运算 1. 标量和矩阵之间的运算,把标量和矩阵中的每个元素进行运算 2. 矩阵和矩阵之间 1. 加法:首先保证参与运算的两个矩阵具有相同的行维度和列维度,我们就可以把对应的元素两两相加 2. 乘法:假设X为i*k的矩阵,Y为k*j的矩阵,首先X的列数必须要和Y的行数相等,计算X的行向量与Y的列向量的点乘 3. 转置(transposition):将矩阵内的元素行索引和纵索隐呼唤,转置N*M的矩阵得到M*N的矩阵 4. 求逆矩阵:逆矩阵*原始矩阵,结果是单位矩阵 5. 求特征值 6. 求奇异值
    展开
    22
  • 2019-03-01
    之前对线代的认识,熟记各种性质和概念,细心保证计算不出错。模糊的知道三维几何变换。 我觉得从算题来说,求特征值比较难。 大量高阶幂矩阵乘法,会带来计算量大的问题。

    作者回复: 我们可能不一定要精通线代的每个部分,主要从常用的机器学习算法出发,理解一些常见的概念和操作

    8
  • SMTCode
    2019-12-14
    回想大学的那些岁月,数学基础课遇到的都是很厉害的老师:高数是数学系的教授亲自教的,讲解深入透彻;概率是军校外聘的教授教的,也非常专业;线代是一个退休的老教授,依然热爱三尺讲台,有幸得到了他的教导。现在感叹自己蹉跎了那些岁月。没有学扎实,出来混,早晚都要还的。加油吧~

    作者回复: 希望本专栏对你有所帮助

    共 2 条评论
    7
  • yaya
    2019-03-04
    对线代的基础特征向量,矩阵分解有一定了解,我觉得矩阵就是为了便于书写这样排列的,本质还是运算,不过便于观看和书写,后来计算机中便于存储,后来便于并行,不过矩阵有其特质,这是和它展开的运算式不同的地方

    作者回复: 总结的很好。

    4
  • 骑行的掌柜J
    2020-06-16
    之前没有学过线性代数(大学文科😂) 最近开始系统的学习这块 因为在做机器学习的时候会遇到特征的选择和降维、建模这些操作 觉得还是要多了解一些底层的数学原理才能更好的优化模型 感觉线代没有我想象中那么难 哈哈哈可能是老师们都讲的比较好吧 期待后面 PS:看到评论有个说国外的教授讲线代不错的 我告诉你是Gilbert Strang教授的《Introduction to Linear Algebra》 真的不错这门课 特地买了第五版书来看 配合这个专栏简直绝配🧐
    展开

    作者回复: 感谢推荐👍

    3
  • 罗耀龙@坐忘
    2020-04-25
    茶艺师学编程 终于来到了线性代数了。 在大学学习的时候,知道这玩意能把一次方程转换成一个向量,能把多元一次方程组转换为一个矩阵,觉得这东西有意思。 然而在矩阵的变换、计算中迷失了自己,至今。
    展开
    3
  • Zeal
    2020-03-13
    矩阵乘法,不管对于机器,还是学习的人,都应该是直接写出来的。而不是死记只能计算一个位置的“点乘”公式……

    作者回复: 没错

    2
  • Eleven
    2020-05-15
    这是因为,如果我们把某个向量中的元素看作坐标轴上的坐标,那么这个向量就可以看作空间中的一个点。以原点为起点,以向量代表的点为终点,就能形成一条有向直线。 黄老师,这句话我不是很能理解,比如向量x包含{x1, x2, ...xn},那向量中的元素看作坐标轴上的坐标,向量可以看作是空间中的一个点?如果向量中有很多元素那不是有很多维?

    作者回复: 是的,2维和3维空间很容易理解,超过3维人脑很难想象,但是原理一样

    1
  • 乐达
    2020-03-21
    线性代数印象最深的是矩阵,感觉矩阵代表了线性代数。这部分最难的就是各种公式的应用和计算。

    作者回复: 确实,线性代数中矩阵是核心

    2
  • escray
    2019-10-22
    大学本科的时候学过线性代数,但是当时是比较懵懂的。读研的时候旁听了几节课,到后来稍微复杂一点的时候就放弃了,因为当时以为只有做图形学的或者是图像的才需要学习线性代数,没想到后来机器学习也需要这个,当然现在也没有从事相关的工作。 之前看到有国外大学的线性代数公开课,据说讲的很好,但是一直没有看。 我觉的线性代数最难的部分还是在于后面的向量空间、矩形变化和奇异值分解,我感觉这一部分似乎需要一些空间想象力,一旦超过二维,我的想象力就不够了。另外一方面,线性代数中的计算一般不会太难,但是比较复杂,需要细致和耐心,这对我来说也算一个难点。 希望这次能再探线性代数。
    展开

    作者回复: 可以慢慢来,通常可以在二维空间中研究,然后扩展到多维空间

    1
  • Paul Shan
    2019-09-20
    向量是一组长度(维度)固定的有序数值序列。长度固定和有序两个特点让向量和特定维度空间中的点一一对应。任意两个点的差值就可以定义一个从减数到被减数的方向。这些空间都有一个特殊的点,就是在所有维度的分量是零的点,也就是原点。任意点减去原点就是他自己,每个点也一一对应于一个方向。这样向量既可以定义n维空间的点,又可以定义n维空间的一个方向。向量的加减法用的是平行四边形法则。点乘放映了两个向量大小和夹角余弦的关系。把现实世界物体的特征值向量化,就是建立特征值的过程。叉乘是构建一个和两个已知向量都垂直的向量。 矩阵是描述坐标轴(一组向量)变换的过程。矩阵的特征值,如果没记错的话,描述的是坐标伸缩的比例。矩阵的加减法和向量类似。矩阵的乘法,把左边的矩阵看成行向量的集合,把右边矩阵看成列向量的集合,然后求出笛卡尔积得出向量对,然后对这个向量对求点乘,得出标量,行列组合这些标量,得到结果矩阵。 矩阵的转置,就是把矩阵行列交换得到的新矩阵。 单位阵相当于1的作用,逆矩阵相当于倒数的概念。 矩阵有稀疏和不稀疏之风,为了充分利用存储空间,前者一般用索引的方法处理(哈希表或者链表),后者一般用数组存储。
    展开
    1
  • 🐾
    2019-09-13
    重新复习了一下大学的数学~
    1
  • 小高
    2019-03-11
    线代对于我来说,是一片森林,进去了就不知道怎么出来.....跟着老师好好学习!加油!

    作者回复: 我们结合实例,一步步来

    1
  • 一路向北
    2019-03-09
    大学学完线代后,就没有碰过这门课,当时学的也是一头雾水,只是感觉很有用,但是到底干嘛用,不知道。

    作者回复: 我会结合案例来说,通过案例你能看到其强大的地方。

    1
  • 李皮皮皮皮皮
    2019-03-03
    线代概念很多,而且定义复杂。特别是到空间那一块。更重要的是不明白实际含义,空记公式和理论,考完试就还给老师了👨‍🏫

    作者回复: 我会结合实际案例来讲,帮助你加深理解和记忆。

    1
  • mickey
    2019-03-01
    之前对线代的认识,是在二维空间对点的操作。 觉得最难的是,各种概念、计算、变换、图形的实际意义。

    作者回复: 对,几何和线代的对应是很重要的,可以帮助我们理解

    1
  • 013923
    2022-09-14 来自上海
    复习一遍大学课程
  • 全麦小面包
    2022-07-29 来自北京
    在《学霸的黑科技系统》这本小说里,有一个"商人过河数学建模"的问题。希望看了您的线性代数篇,能理解这个问题的解法。先立个flag~
  • williamcai
    2022-07-06
    工作好多年了,许多知识都忘记了,在工作中用的比较少,我觉得最难的是在实际问题能想到线性代数的使用

    作者回复: 多多应用和实践就好了。

  • 九夏对三冬
    2021-04-01
    请问下黄老师,向量能内嵌向量吗?像对象内嵌对象一样

    作者回复: 多维矩阵在计算机里的实现,就是一种向量内嵌向量