3

线性代数的本质

 8 months ago
source link: http://guileen.github.io/2021/02/13/the-essence-of-linear-algebra/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

线性代数的本质

当我在大学中学习线性代数的时候,我不知所云且不以为然。然后随着不断的学习,我发现不懂线性代数是没法在更深的技术领域里混的。比如机器学习、计算机图形学等等,对于其他的科研领域也都是同样的。如果学不好线性代数既不是我的问题,也不是线性代数的问题,那到底是什么问题?最近学些了现代计算机图形学入门-闫令琪 线性代数的本质-3blue1brown 这两个系列视频使我对线性代数多了更多的感性认识,而《实践论》 告诉我们,理性认识是要依赖于感性认识的。传统的线性代数教材则希望构建一套完全自洽的纯粹的数学理论,它不依赖于现实世界的知识。这或许可以满足一些数学家的成就感,但这种马后炮式的“创造”是脱离历史的。线性代数就像其他的学科一样,不可能是仅凭想象产生的,虽然数学家可以伪装成不依赖历史发展而独立自洽,但这除了是一种智力游戏外,对于认识世界、传播知识并没有任何帮助。我们就在这种缺乏感性认识的数学教育中丧失了对数学理论的兴趣,岂不哀哉?

吐槽结束,进入正题。谈谈我此刻对线性代数的理解,探讨一下他的本质到底是什么。我们是否会问自己,加减乘除的本质到底是什么?我们之所以不这么问,是因为我们已经理解了四则运算的本质。我们不会问关于十进制的本质,因为日常生活中已经给我们建立了足够多的经验。但我们在学龄前的阶段,我们则可能对十进制和加减乘除充满了困惑。但我们接触线性代数太晚,我们并没有足够的练习和日常应用使我们建立起感性认识。当我们在商店里消费的时候四则运算不断强化着我们的认知,但线性代数缺少这样的机会。当我们被教授四则运算时,老师把我们当作一个普通的人类,会告诉我们3个苹果+2个苹果=5个苹果,这种现实世界的例子帮助我们更好的理解了四则运算。但当我们学习线性代数时,我们则变成了一个个抽象的理性机器,这个系统只告诉我们各种定义、运算规则,然后要求我们像计算机一样的运行,计算出结果。What are we doing?我们怎么可能不懵圈呢?线性代数就是一个增强版的加减乘除,但没有足够的案例使我们不知道我们的计算究竟代表着什么?AlphaGo就算赢了李世石,但他不知道自己在干什么。我们作为人类的尊严在哪里?我又没控制好自己的情绪,让我们回到正题。《线性代数及其应用》是一本很好的教材,他和国内教材最大的区别就在于“应用”上,这本书中列举了大量的例子来说明线性代数的应用。这本书的开头说道“线性代数是一门语言,必须用学习外语的方法每天学习这种语言”。

鸡兔同笼与线性变换

我们从鸡兔同笼来举个例子。鸡兔同笼是小学阶段的奥数题,也就是在小学的数学语言中,这是一道很难描述的题。到了中学阶段我们可以用未知数x表示鸡的数量,未知数y表示兔的数量,并列出方程。而对于线性代数的语言,我们用向量(ab)表示鸡和兔的数量,如果我们有非常多的未知数,我们不希望定义太多的未知数符号,我们直接用x表示这个n维变量。我们有一个变换矩阵[1124] 表示鸡有1个头2只脚,兔有1个头4只脚 。如果有3只鸡5只兔则 [1124]⋅[35]=[3⋅1+5⋅13⋅2+5⋅4]=[826],它代表着我们将一个“鸡兔向量”映射到了“头脚向量”的空间中,共有8只头,26只脚。

我们知道函数是一种映射,f(x)=y代表将x到y的映射关系。矩阵乘法叫做线性变换,线性变换是一种函数映射,但函数映射不一定是线性变化。因此线性变换是符合函数的性质的。如果函数是可逆的,则有x=f-1(y),同样的,对于矩阵而言,若是可逆的,且,则。设,则若A是可逆的,且Ax=b,则x=A-1b。设A=[abcd],则A-1=1ad-bc[d-b-ca]。

对于鸡兔同笼问题,,则A=[1124],则A-1=12[4-1-21]。当有头脚时,当有8头26脚时,x=12[4-1-21]⋅[826]=12[4⋅8-26-2⋅8+26]=12[610]=[35],即3只鸡5只兔。最重要的是,这整个计算过程,计算机可以轻松的完成,并且可以用定义标准化的操作,因为操作标准化,计算机可以被设计的更加擅长处理这类操作。这就是线性代数得到广泛应用的一个最重要原因。

线性变换可能进行多次,就像映射可以进行多次一样。因为矩阵的乘法就是一种特殊的函数,函数满足结合律g(f(h(x)))=((g∘f)(h(x))),所以矩阵乘法也符合结合律A(BC)=(AB)C。多次映射之后是一个新的映射,多次变换之后也是一个新的变换,所以我们可以将这些变换矩阵预先乘好,以增加每次计算的效率。也可以将一个复杂变换拆解为多个简单变换,使我们能更好的理解其性质。

我们可以从鸡兔变换到头脚,我们也可以从产量变换到成本收益(这是经济学的应用),我们也可以从速度变换到阻力(这是空气动力学的应用),我们也可以将3D空间变换到3D或2D空间(这是计算机图形学的应用),我们也可以将用户行为维度变换到兴趣标签维度(这是机器学习推荐系统的应用)。这都说明了线性代数是一门“语言”,是一个工具。并不是因为线性代数,所以这些定理存在,而是因为这些规律本身存在,才能有线性代数这门工具。人类是巧妙的“发明”了线性代数,而不是“发现”了线性代数。线性代数这门语言可以使我们避免基本代数语言的变量名爆炸。人类日常语言中有你我他这那等代词,中文有甲乙丙丁这种天干地支可以用作代词,英文则有a,b,cd可以使用。日常的代词使用是随意的,很多时候是不严谨的。代数学的代词在使用前则需要对它进行准确的定义。而线性代数则将最常使用的一些操作提取了出来,使我们免于重复的定义大量性质类似的代词。在线性代数中,鸡兔数量,头脚数量与空间中点的xyz轴位置都是同一种性质的。研究飞机表面的气流的过程包含了反复求解大型的线性方程组Ax=b,涉及的变量个数达到2百万个。可以说线性代数的发展完全是随着其应用发展的,如果有一本按照历史发展顺序描述线性代数的书,一定可以达到很好的教学效果。

行列式(determinant)

行列式的出现是远早于矩阵的。Determinant是决定的意思,(下文称之为决定值,“行列式”翻译的无味,既没有描述其决定性质,也没有说明其结果是特定的值):决定值是否不为0决定了一个线性方程组是否有唯一解。所谓线性方程组,就是一次方程组。这个结论最早见于《九章算术》(有一种观点认为很多思想是在明朝由中国传至欧洲,而清朝恰好是中国的一个倒退,而欧洲则顺势伪造了一套其文明独立发展的历史叙事,这里不展开描述了)。决定值的这个性质在欧洲由莱布尼茨最早提出(莱布尼茨在中学西传中扮演着重要角色)。高斯首先使用了determinant这个词,他在数论理论中大量用到了决定值。后来这个词就更多的指一个特殊的函数,即某个表达式,因此中文将其翻译为行列式。

观察我们在鸡兔同笼中得出的结论:设,则设A=[abcd],则A-1=1ad-bc[d-b-ca]。因此矩阵A当且仅当ad-bc≠0时存在逆矩阵,我们记为det(A)=|A|=|abcd|=ad-bc。我们继续推广研究3×3矩阵,可以得到:

|abcdefhij|=a|efhi|-b|dfgi|+c|degh|=aei+bfg+cdh-ceg-bdi-afh=|adhbeicfj|

对4×4矩阵则有:

|abcdefghijklmnop|=a|fghjklnop|-b|eghiklmop|+c|efhijlmnp|-d|efgijkmno|

依此类推,决定值的公式是一个递归。决定值的几何意义代表代表1×1矩阵变换后的平行四边形的面积,或者说是矩阵变换后面积的放大倍数,即变换矩阵围成的四边形的面积。简单的证明如下图:S=(a+c)(b+d)-ab-cd-2bc=ad-bc。推广到3维则表示变换矩阵的围成的立方体的体积。

transform-determinant-opt.png
determinant-area.gif

如果determinant=0,则说明变换之后由面变为了线,或由体变为了面。而线或面无法再变换回面或体。我们同样以鸡兔同笼问题来举例,我们把题目中的兔换成鸭,则变换矩阵为A=[1122],det(A)=0。这个方程组是没有唯一解的,因为无论鸡鸭的比例如何,头脚的比例都是1:2。对于这样的矩阵,我们称他的秩为1,秩代表矩阵的维数。一个二维矩阵,可能秩为1,一个三维矩阵可能秩为2也就是一个面,也可能秩为1也就是一条线,甚至秩为0。

TODO 叉乘表示面积和垂直与平面的向量,特征值与特征向量,表示空间中在线性变换中保持稳定的轴,最小二乘法


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK