直观理解线性代数
2019-07-03 14:25 heixialee 阅读(1532) 评论(0) 编辑 收藏 举报【阅读时间】1小时左右 words 14069words
【内容简介】将只停留在数值运算和公式的线性代数推进到可视化几何直观(Visual Geometric Intuition)的领悟上,致敬3B1B的系列视频的笔记,动图也都来自于视频。内容涉及到基变换,叉积,逆矩阵,点积,特征向量与特征值。每一章节都有一句经典的名言,非常有启发性
在笔记开始之前,想象学习一个事物(概念)的场景:我们需要学习正弦函数,sin(x)sin(x),非常不幸的是,你遇到了一本相当装逼的教材,它告诉你,正弦函数是这样的:
sin(x)=x−x33!+x55!+⋯+(−1)nx2n+1(2n+1)!+⋯sin(x)=x−x33!+x55!+⋯+(−1)nx2n+1(2n+1)!+⋯
的确很厉害的样子,并且,计算器就是这样算 sin(x)sin(x),知道了这个的确“挺酷的”。对你来说,你的作业可能就是回家把 x=π6x=π6 带到公式里面,发现,好神奇!竟然越算越接近0.5
。此时你对sin(x)sin(x)与三角形之间的几何直观只有一些模糊的概念。这样的学习过程就十分悲催了。为什么呢?
再假设一个场景,接下来,物理课,正弦函数随处可见,下图场景中,其他人能快速的大概估计出这个值是0.7
。而刚“学过”正弦函数的你,内心戏可能是这样的:这些人忒diao了吧?你莫不是在玩我?
你可能会觉得这些做物理的人脑子也太强了,我弱爆了。其实,你需要只是一个几何直观的灌输而已,这也从侧面佐证了一个好的老师(这里的好老师真的不是他本身的学术能力有多强,而在于他擅不擅长站在学习者的角度不断的修正教学方法。甚至,模拟学生的学习过程提前预知所需要的基础概念)是有多么重要。
教学不同层次的人:初学,入门,掌握,理解,都是不同的。解释的角度,方式都完全不同。更加不幸的是,为了能更加通用的用理论来描述现实生活中的规律,人类已经做了很多工作,我们常说:越通用,越抽象(越难以理解)。这对于初学者来说堪称一段噩梦
这个例子比较极端,但只为强调一件事:直观理解很重要,或者说,学习方法很重要。好的学习方法即你如何直观的去理解(可能是几何的,或是现实中的具体例子)一个抽象的事物,并层次化的建立知识与知识间的联系,构建并健壮属于自己的知识图谱。个人观点是,这种【学习方法】是最高效的。它唯一的难度在于,需要一定的基础知识打底,一定的量变结合方法论(点拨或领悟)就是质变。换句话说,想躺着学习?不存在的
根据生物学家我们知道,人对具体的事物(动画>图形>数字>未建立直观理解的文字)更敏感,记忆速度更快。这篇笔记的对象3B1B团队生产的内容目的就是从为了帮助人们建立直观概念的角度来教学,在如今中国应试教育风行的大背景下,它会超越你的认知:学习如追番般期待,真不是一个调侃!
我是极度反对现代大学的线性代数课程中(甚至数学类课程)的教学方法的,在计算上(做题)花费了大量时间。而工程中,有计算机,绝不会有任何一个人去笔算矩阵的逆或特征值。如果现在的老师反驳:做计算的目的是为了让你通过大量的联系(重复)去记牢概念,我也一直坚信:学习知识的最快捷径是带有思考的重复,但那是带思考的重复,有一些直观的方法在帮助你理解和记忆上比做题有效率的多
注解,因为这是一篇个人笔记,我个人已经深刻理解的内容,或者我觉得是很基本的内容我会略过或默认。好消息是,我自己也是一个理解力非常捉急的人,所以还是会比较详细的
什么是矩阵?矩阵 = 变换的数字表达
向量究竟是什么
引入一些数作为坐标是一种鲁莽的行为 ——赫尔曼·外尔
The introduction of numbers as coordinates is an act of violence - Hermann Weyl
这部分,讲向量,扎实的读者完全可以跳过
向量的定义 What
对于向量的这个概念,大家一定并不陌生,但是这次让我们从数学,物理,计算机三个角度来看待如何定义这个【向量】这个概念
物理专业角度
- 向量是空间中的箭头
- 决定一个向量的是:它的长度和它所指的方向
计算机专业角度
- 向量是有序的数字列表
- 向量不过是“列表”一个花哨的说法
- 向量的维度等于“列表”的长度
数学专业角度
从数学来说,它的本质就是通用和抽象,所以,数学家希望概括这两种观点
- 向量可以是任何东西,只需要保证:两个向量相加及数字与向量相乘是有意义的即可
- 向量加法和向量乘法贯穿线性代数始终,十分重要
可以通过上图直观的感受到数学家(这个很牛逼的灰色的ππ)在想什么,有种【大道】的逼格。左边是物理角度,右边是计算机角度,但是很抱歉,我能用一些抽象的定义和约束让你们变成一个东西
坐标系
把向量至于坐标系中,坐标正负表示方向,原点为起点,可完美把两个不同的角度融合
- 向量加法
- 物理:首尾相连 Motion
- 计算机:坐标相加
- 向量乘法
- 物理:缩放 Scaling
- 计算机:坐标和比例相乘
线性组合、张成的空间与基
数学需要的不是天赋,而是少量的自由想象,但想象太过自由又会陷入疯狂 ——安古斯·罗杰斯
Mathematics requires a small dose, not of genius, but of an imaginative freedom which, in a larger dose, would be insanity - Angus K. Rodgers
本部分继续加深一个概念,为何向量加法与向量乘法是那么重要,并从始至终贯穿整个线性代数
线性组合
这个概念再好理解不过,空间中不共线的两个不为零向量都可以表示空间中的任意一个向量,写成符号语言就是:a→v+b→wav→+bw→
至于为什么被称为“线性”,有一种几何直观:如果你固定其中一个标量,让另一个标量自由变化,所产生的向量终点会描出一条直线
空间的基 Basis
对于我们常见的笛卡尔坐标系,有一个最直观一组基:{^ı,^ȷ}{ı^,ȷ^} ,即单位向量:^ı=(1,0)ı^=(1,0) 和^ȷ=(0,1)ȷ^=(0,1) ,通过 ^ıı^ 和 ^ȷȷ^的拉伸与相加可以组成笛卡尔坐标系中的任意一个向量
张成的空间 Span
同理,举一反三的来说,我们可以选择不同的基向量,并且这些基向量构成的空间称为:张成的空间。张成二字比较拗口,可以类比为延展或扩展。直观来看,就是所有动图中的网格。笛卡尔坐标系就是一个由单位坐标{^ı,^ȷ}{ı^,ȷ^} 张成的空间
所有可以表示为给定向量(基)线性组合(刚刚讲了这个概念)的向量的集合,被称为给定向量(基)张成的空间
如果你继续思考一下,会发现一个特点:并不是每一组给定向量都可以张成一个空间,若这两个向量共线(2D),共面(3D),它们就只能被限制在一个直线或面中,类似于“降维打击”。通过这个直观的思考可以引出一个概念:线性相关
线性相关
关于什么是线性相关,有两种表达
- 【表达一】你有多个向量,并且可以移除其中一个而不减小张成的空间(即2D共线或3D共面),我们称它们(这些向量)线性相关
- 【表达二】其中一个向量,可以表示为其他向量的线性组合,因为这个向量已经落在其他向量张成的空间之中
如果从统计学角度来说,这些向量之中有冗余。这一堆向量中,我们只需要其中几个(取决于维度)就可以表示其他所有的向量。
向量空间一组基的严格定义
有了这些对名次(概念)的直观理解,来看看数学家们是如何严谨的定义向量空间的一组基:
向量空间的一组基是张成该空间的一个线性无关向量集
用这样的步骤来慢慢导出这个定义,个人感觉,远比在课堂的第一分钟就将这句让你迷惑的话丢给你好的多,抽象的东西只有在慢慢推倒中你才能发现它的精巧之处,非常优雅且迷人
矩阵与线性变换
很遗憾,Matrix(矩阵)是什么是说不清的。你必须得自己亲眼看看 ——墨菲斯
Unfortunately, no one can be told what the Matrix is. You have to see it yourself -Morpheus
矩阵,最直观的理解当然是一个写成方阵的数字 [1234][1234],这几节的核心是为了说明:矩阵其实就是一种向量变换(至于什么是变换下面会讲),并附带一种不用死记硬背的考虑矩阵向量乘法的方法
变换
【变换】本质上是【函数】(左)的一种花哨的说法,它接受输入内容,并输出对应结果,矩阵变换(右),同理,如下图
那既然两者意思相同,为何还要新发明一个词语装逼呢?其实不然,搞学术,不严谨就会出现纰漏。常说编程出现Bug,其实就是不严谨的一种体现,在写Code前,没有考虑到可能性的全集(虽然在一些大型程序中,考虑全集的做法有时候是没必要的,这是一对关于编程困难程度和不出的bug的博弈Trade-off),但是【变换】这个名词和不严谨其实没什么关系……
【变换】的表达方法暗示了我们可以用运动的方法来理解【向量的函数】这一概念,可以用可视化的方法来展现这组【变换】即输入-输出关系
这世界上有非常多优美的变换,如果你将他们编程,并可视化,就能得到下图
线性变换
我们说具有以下两个性质的就是线性变换(直观可视化如下图):
- 直线在变换后仍然保持为直线,不能有所弯曲
- 原点必须保持固定
一点扩展,如果保持保持直线但原点改变就称为:仿射变换(Affine Transformation)
一句话总结来说是:线性变换是“保持网格线平行且等距分布”的变换
如何用数值描述线性变换
这里需要使用上一节提到的工具,空间的基,也就是单位向量(基向量):^ı=(1,0)ı^=(1,0) 和^ȷ=(0,1)ȷ^=(0,1)
你只需要关注两个基向量 ^ıı^ 和 ^ȷȷ^ 变换后的位置即可。例如, ^ıı^ 变换到 (3,1)(3,1) 的位置, ^ȷȷ^ 变换到(1,2)(1,2) 的位置,并把 ^ıı^ 变换后坐标立起来作为方阵的第一列(绿色表示), ^ȷȷ^ 变换后的坐标立起来作为方阵的第二列(红色表示)。
构成了一个矩阵:[3112][3112],假设我们想要知道目标向量(−1,2)(−1,2)进行变换后的位置,那么这个矩阵就是对变换过程最好的描述,一动图胜千言
Step1:绿色 ^ıı^ (x轴)进行移动(变换)
Step2:红色 ^ȷȷ^ (y轴)进行移动(变换)
Step3:目标向量x轴坐标值与 ^ıı^ 变换后向量进行向量乘法
Step4:目标向量y轴坐标值与 ^ȷȷ^ 变换后向量进行向量乘法
Step5:两者进行向量加法,得到线性变换结果
更加一般的情况,我们用变量来代替其中的具体值:绿色代表 ^ıı^ 变换后的向量,红色代表 ^ȷȷ^ 变换后的向量
[abcd][xy]=x[ac]+y[bd]直观的部分这里=[ax+bycx+dy][abcd][xy]=x[ac]+y[bd]⏟直观的部分这里=[ax+bycx+dy]上面的公式就是我们常说的矩阵乘法公式,现在,不要强行背诵,结合可视化的直观动图,你一辈子都不会忘记的
【线性】的严格定义
在给出一个数学化抽象的解释前,先做一下总结:
- 【线性变换】是操纵空间的一种手段,它保持网格线平行且等距分布,并保持原点不动
- 【矩阵】是描述这种变换的一组数字,或者说一种描述线性变换的语言
在数学上,【线性】的严格定义如下述公式,这些性质,会在之后进行讨论,也可以在这里就进行一些思考,为什么说向量加法和向量乘法贯穿线性代数始终,毕竟是线性代数,很重要的名次就是线性二字
L(→v+→w)=