Categories
读书有感

捉襟见肘补数学

前几天跟家父闲扯,说到我这辈子为数不多后悔的事情,就是本科选专业没选数学。我的性子基本上是不会多想过去已经发生的不可改变的事情的,所以人生中还真没多少后悔的事。这件事情是例外,是因为从毕业以来一直在为其还债,不得不怨念一下。当然,确实很难讲如果我当时学了数学,现在会不会过得更好。可能也不会。

假设过去未曾发生的事情没什么意义,不如讲讲为什么让我这么怨念。前几天在查一个模型,想知道一些大样本特性那边的结论,于是开始翻看相关的论文。结果论文读着读着就读不下去了,因为根本看不懂其中的引理。不仅仅是证明看不懂,而是根本不知道为什么要用到这些引理,这就很尴尬了是不?回头查了查,这些基础知识都是渐进理论那边的,属于概率论吧,确实没有学过,不知道就是不知道。

这种捉襟见肘的感觉实在是太熟悉了。去年看另外一个方向的论文,发现根本没学过concentration相关理论(这个名词不翻译了),然后现学现卖,抓紧去补那块儿的知识。然后看到Lipschitz 连续性,完全不记得实分析怎么讲的了,又得回头复习。为什么不记得呢,还是因为当年没理解,没有把数学融会贯通成自己的思维,自然考完试就忘了。不过至少因为学过,所以复习总是比重新学习容易一些,而且这次看到应用了也能加深对其本身的理解。数学虽说是个工具,但是如果不记得工具怎么来的可以怎么用,那要么就只能望洋兴叹,要么就闭着眼瞎用。鉴于后者着实不是我的风格,大部分时间我都只能止步之后扼腕叹息。

说到底,之所以数学让我这么痛苦,还是很多东西学的时候没有成体系,用到什么补什么。像微积分啊线性代数啊这种还好,宏微观计量各来一遍,到后面怎么也不会忘了。但是其他的不常用的就惨了, 只能两眼一抹黑,实在不行就死记硬背吧。我挺佩服那些随时可以从一个阶段捡起数学直接用的人,他们不需要知道下面的基础是怎么架构的,只需要往上盖就行。我受不了这样,对我来说数学一定是一以贯之的,若是我不曾理解基础那我就永远没法继续往下走。当然我可能不会一直记得每一个细节是怎么样子,但大体的脉络永远是清晰的。

可能事情并没有我想象的那么糟,我的数学知识也不是哪里都是窟窿永远填不完。但这种不知道我还有多少窟窿没填的状态,让我大部分时间都没有底气,特别惧怕又发现一个窟窿那种沮丧感。毕竟一直处于一种“追赶”的感觉会让人自信全无。若是曾经在本科阶段按部就班地训练过,或许就不会像现在这样不安了。比如看经济学我就不会不安,因为我知道自己的基础很牢,一切新生事物都是基于以往一些问题的拓展,这给了我很足的底气来辩证地学习新知识(以及看到胡说八道的理论知道他们是在胡说八道)。正是因为有这两者完全不一样的状态的对比,我才无法控制自己的怨念。

======

题外话,本科专业没选数学完全是当时的无知。按说我一个高中生无知就罢了,我得到的各种指导信息居然都是,“大学数学和高中数学不是一回事儿,高中数学再好大学数学都有可能让你失去兴趣。”之类。居然没有一个人告诉我数学本身对于其他基础科学是有多么重要。感觉数学教育出了很大问题,让前面学过数学的人并没有体会到数学的基础性和重要性,自然也就无法告知后来者。当然,从家父的角度,他觉得稳妥最重要,数学一看就是一个找不到工作的专业。我不否认,从现在来看确实很多数学专业学着学着就走进死胡同了。但更重要的是,我的性格决定我并不会安于现状,而除了数学之外,怕是少有一直能给我足够的智力挑战的东西了。那种从抽象层面理解事物的满足感,那种一脉相承融会贯通的舒畅感,至今不曾从别的事物上体验过。性格决定命运,所以虽然对于大多数人来说,本科学数学或许并不是一件好事,但对于我来说,却导致了十几年来的最大缺憾。

Categories
读书有感

重温概率论和线性代数

年底的节奏比较舒缓,就有更多的时间来重新拾起一些东西。先是百无聊赖的浪费了一些时间看剧打游戏看小说,基本就是一种不动脑子的打发时间的模式。后面觉得着实无聊了,开始想有什么可以看的。不知怎么的,就动了重温数学的念头。搜了一下网上的各种公开课,发现MIT的线性代数(Gilbert Strang)和Harvard的概率论基础(Joe Blitzstein)评价比较高,就打开youtube开始跟课。

线性代数我其实偷了个懒,没有去跟那个完整版的,而是简单地看了一下Strang教授今年发布的2020版。一共只有五部分,每一部分大概一刻钟,我看之前还在想这个是怎么做到的。看完了,就明白这75分钟的高屋建瓴之处了。大一的时候学线性代数,虽然分数不错,但是其实学了一堆计算却不知所云。后面学到高等计量开始频繁地用到线性代数,才多少有了一些事后的感悟。现在再去看线性代数,觉得这东西真的挺美的,一点一点地串联起多少问题。

话说到这里,多少有点“我吃了七个烧饼发现饱了,是不是直接去吃第七个就好了的”味道。我需要略带羞耻地承认,我大学以后的数学基本都是靠学经济学才学会的(学会指的是有一些理解而不仅仅是记忆公式和定理)。大一一上来的微积分,动不动各种极限和证明,直接懵掉了。概率论学了什么完全不记得了,印象中好像只有一本很薄的小册子,各种证明,然后考试一片茫然。线性代数也是,死记硬背了一堆证明却不知所云。

类似的,我对计量经济学也有差不多的体验。其实第一次学(初级)计量经济学的时候也是一脸懵,第二次学(中级计量)稍微好了一点,后面一遍又一遍地学计量(或者广义地说,线性模型),我才逐渐开始理解回归模型。回头看,这实在是一个成本巨大而痛苦的过程。可是代价如此之高是因为老师教得不好呢,还是因为这些东西本来就难?我现在已经没法回到原点去体会另外一条路径了。只是重温这些基础课程的时候,更容易跟着这些大家公认优秀的教师的思路,来站在更高的层面欣赏数学本身的美,而不仅仅是当作工具。

数学这种学科,学懂了和没学懂差别太大了。学懂了,再厚的教科书都觉得如若无物,要用的时候信手拈来(英文我习惯用internalize来描述这种状态)。没学懂的话,基本就是记住了一堆程序化的操作流程(procedure)却忘记了他们的来龙去脉。这种差别会深刻地影响日后的学习或研究。这两年面试了上百人,我所在意的其实不是一个面试者记住多少公式和模型(比如我允许他们随时google),而是他们是不是真正理解他们用到的模型本身。把统计模型学成了一堆procedure其实是一件非常危险的事情。

概率论这门课我是老老实实地跟完全程的。毕竟是一个学期的内容,34节课,每节课接近一个小时,加起来就有三十多个小时。我并没有快进或者跳跃(主要是在电视上放起来快进比较麻烦),所以陆陆续续花了四五天的时间才把全程跟完。如果是第一次学这门课,这种节奏几乎是不可能的,因为新的信息量其实可能很大。只是我对于这些内容多少熟悉,所以实践起来更像是复习直觉而不是学习知识。这也是让我可以有机会去由衷地感慨原来概率论可以如此简单明了。我开始以为我会经常走神,尤其是已经非常熟悉的内容。结果很多时候,我居然全神贯注地又听了一遍那些熟悉的定理和公式。Blitzstein确实把这门课讲得很深入浅出。印象最深的是他在推导正态分布的时候,明明是那么无趣的定积分和极坐标变换问题,居然可以讲得那么好玩。又一次验证了高斯发现正态分布时候那种“天赐”的感觉。数学的美往往就在这种时刻。凭什么,一切繁琐的符号最终化为这么简洁优雅的记号?

正好在2020年的最后一天和新年交界的时点,看完了这门30多个小时的课程。让我忍不住记录一下,这种别致的、超级满足的跨年方式。

Categories
读书有感

再读「数学之美」

今天难得的一点专注时间,打开了「数学之美」,实体书的阅读果然还是比较舒服。

和Google黑板报版相比,正式出版的版本的确增加了不少的内容,如果想深入的多了解某个算法一点,会合适的多。不过某种程度上感觉,没有黑板报版那么引人入胜了,写作风格变得更严谨了。

书不是很厚,加上排版比较宽松,其实看起来还是蛮快的。看到后面,突然对“条件随机场”这种东西产生了莫名的好奇感,然后匆匆的看过去,还是蛮好玩的。在过去的一年中,慢慢的揭开了自然语言处理的各种面纱,这个领域还真的是蛮好玩的,也看到那么多聪明的中国人在此不懈耕耘造就的各种神奇。比如,我用来打这篇日志的输入法——经过很长一段时间的训练之后,他越来越聪明的可以捕捉到我想说什么,打字的过程已经不会影响到思维了。对比以前用智能ABC的日子,突然觉得生活真的是美好了许多。而这一切背后的辛勤劳动,都离不开算法的支撑和我们对于数字信息理解的深入。

此外,还顺便看了一眼奇异值分解(SVD),以及MapReduce,反正对于各种可以降低算法复杂度的思路,都是很能裨益工作的。曾经很多人不知道“线性代数”这门课有什么用...从我个人经历来说,从学完它就一直在用,各种用。简洁的神奇。

还是挺好的一本书,就是浅了一些,有些深入的东西可能确实比较难以直观的描述出来。Machine learning果然还是需要下苦工的一个领域。

Categories
网络新发现

第二届R会议新闻稿、线性代数

前几日收到Yihui兄转发的邮件,第二届中国R语言会议的新闻稿已经发在今年的R Journal上了。虽然已经多少看过这篇稿子,但是最终看到排版好的还是感觉很有意思。就单独把这两页的新闻稿从长长的R Journal里拎出来了,可以在这里下载:RJournal_2010-1.pdf。当然也可以下载全部的R Journal:Volume 2/1, June 2010

恩,顺便广告一下,第三届中国R语言会议上海会场也开始call for papers了,而这次转战上海财经大学足可以见到上海滩竞争之激烈。同样的,请持续关注COS官网的更新:http://cos.name/chinar/chinar-2010/

好了,广告做完了,提一下最近让我颇为眼前一亮并有所感悟的一篇文章: 《理解矩阵(一、二、三)》。这篇文章虽然看到的时候已经很晚,但是让我有时间好好的思考学过了那么多线性代数高等代数到底学到的是什么,也有助于进一步理解计量里面的一些东西,免得总是觉得被灌了很多“三明治”矩阵们却不知道他们到底玩的是什么。因为我傻傻的给落园定位了一个“原创”,所以转载的此文就放在后花园了,请移步:http://blog.loyhome.cn/357(原文见http://blog.csdn.net/myan)。不过有意思的是,这个人貌似是搞计算机图形的,所以很多东西都带有计算机思维的色彩。然后就有若干学数学的人跳出来说“你这东西如何如何不严谨”。但对于我这种只喜欢站在门外凑热闹的人来说,足够了~矩阵是个很有意思的东西,从大一的时候就傻傻的搬回来一本《矩阵论》,然后傻傻的发现自己完全理解不了……现在依旧理解不了,可见四年的学习也没啥进步。

这两篇文章发表于去年的4月。在第二部分结束的时候,我说:
矩阵不仅可以作为线性变换的描述,而且可以作为一组基的描述。而 作为变换的矩阵,不但可以把线性空间中的一个点给变换到另一个点去,而且也能够把线性空间中的一个坐标系(基)表换到另一个坐标系(基)去。而且,变换点 与变换坐标系,具有异曲同工的效果。线性代数里最有趣的奥妙,就蕴含在其中。理解了这些内容,线性代数里很多定理和规则会变得更加清晰、直觉。

这个留在下一篇再写吧。

因为有别的事情要做,下一篇可能要过几天再写了。 ”

然而这一拖就是一年半。一年半以来,这两篇粗糙放肆的文章被到处转载,以至于在Google的搜索提示中,我的名字 跟“矩阵”是一对关联词汇。这对于学生时代数学一直很差的我来说,实在是令人惶恐的事情。数学是何等辉煌精致的学问!代表着人类智慧的最高成就,是人与上 帝对话的语言。而我实在连数学的门都还没进去,不要说谈什么理解,就是稍微难一些的题目我也很少能解开。我有什么资格去谈矩阵这样重要的一个数学概念呢? 更何况,我的想法直观是直观,未见的是正确的啊,会不会误人子弟呢?因此,算了吧,到此为止吧,我这么想。


是时不时收到的来信逐渐改变了我的想法。

一年半以来,我收到过不下一百封直接的来信,要求我把后面的部分写出来。这些来信大部分是国内的网友和学生,也有少数来自正在国外深造的朋友,大部分是鼓 励,有的是诚挚的请求,也有少数严厉斥责我不守承诺。不管是何种态度,这都表明他们对我这一点点小小的思考成果的鼓励,特别是对于我这种思维的视角和尝试 的鼓励。他们在信中让我知道,尽管我的数学水平不高,但是我这种从普通人(而不是数学家)视角出发,强调对数学概念和规则的直觉理解的思路,对于很多人是 有益的。也许这条路子在数学中绝非正道,也不会走得很远,但是无论如何,在一定的阶段,对一部分人来说,较之目前数学教材普遍采用的思路,这种方式可能更 容易理解一些。既然是可能对一部分人有帮助的事情,那么我就不应该心存太多杂念,应该不断思考和总结下去。

所以,下面就是你们来信要求我写出来的东西。

首先来总结一下前面两部分的一些主要结论:

1. 首先有空间,空间可以容纳对象运动的。一种空间对应一类对象。
2. 有一种空间叫线性空间,线性空间是容纳向量对象运动的。
3. 运动是瞬时的,因此也被称为变换。
4. 矩阵是线性空间中运动(变换)的描述。
5. 矩阵与向量相乘,就是实施运动(变换)的过程。
6. 同一个变换,在不同的坐标系下表现为不同的矩阵,但是它们的本质是一样的,所以本征值相同。

下面让我们把视力集中到一点以改变我们以往看待矩阵的方式。我们知道,线性空间里的基本对象是向量,而向量是这么表示的:

[a1, a2, a3, ..., an]

矩阵呢?矩阵是这么表示的:

a11, a12, a13, ..., a1n
a21, a22, a23, ..., a2n
...
an1, an2, an3, ..., ann

不用太聪明,我们就能看出来,矩阵是一组向量组成的。特别的,n维线性空间里的方阵是由n个n维向量组成的。我们在这里只讨论这个n阶的、非奇异的方阵, 因为理解它就是理解矩阵的关键,它才是一般情况,而其他矩阵都是意外,都是不得不对付的讨厌状况,大可以放在一边。这里多一句嘴,学习东西要抓住主流,不 要纠缠于旁支末节。很可惜我们的教材课本大多数都是把主线埋没在细节中的,搞得大家还没明白怎么回事就先被灌晕了。比如数学分析,明明最要紧的观念是说, 一个对象可以表达为无穷多个合理选择的对象的线性和,这个概念是贯穿始终的,也是数学分析的精华。但是课本里自始至终不讲这句话,反正就是让你做吉米多维 奇,掌握一大堆解偏题的技巧,记住各种特殊情况,两类间断点,怪异的可微和可积条件(谁还记得柯西条件、迪里赫莱条件...?),最后考试一过,一切忘光 光。要我说,还不如反复强调这一个事情,把它深深刻在脑子里,别的东西忘了就忘了,真碰到问题了,再查数学手册嘛,何必因小失大呢?

言归正传。如果一组向量是彼此线性无关的话,那么它们就可以成为度量这个线性空间的一组基,从而事实上成为一个坐标系体系,其中每一个向量都躺在一根坐标 轴上,并且成为那根坐标轴上的基本度量单位(长度1)。

现在到了关键的一步。看上去矩阵就是由一组向量组成的,而且如果矩阵非奇异的话(我说了,只考虑这种情况),那么组成这个矩阵的那一组向量也就是线性无关 的了,也就可以成为度量线性空间的一个坐标系。结论:矩阵描述了一个坐标系。

“慢着!”,你嚷嚷起来了,“你这个骗子!你不是说过,矩阵就是运动吗?怎么这会矩阵又是坐标系了?”

嗯,所以我说到了关键的一步。我并没有骗人,之所以矩阵又是运动,又是坐标系,那是因为——

“运动等价于坐标系变换”。

对不起,这话其实不准确,我只是想让你印象深刻。准确的说法是:

“对象的变换等价于坐标系的变换”。

或者:

“固定坐标系下一个对象的变换等价于固定对象所 处的坐标系变换。”

说白了就是:

“运动是相对的。”

让我们想想,达成同一个变换的结果,比如把点(1, 1)变到点(2, 3)去,你可以有两种做法。第一,坐标系不动,点动,把(1, 1)点挪到(2, 3)去。第二,点不动,变坐标系,让x轴的度量(单位向量)变成原来的1/2,让y轴的度量(单位向量)变成原先的1/3,这样点还是那个点,可是点的坐 标就变成(2, 3)了。方式不同,结果一样。

从第一个方式来看,那就是我在《理解矩阵》1/2中说的,把矩阵看成是运动描述,矩阵与向量相乘就是使向量(点)运动的过程。在这个方式下,

Ma = b

的意思是:

“向量a经过矩阵M所描述的变换,变成了向量b。”

而从第二个方式来看,矩阵M描述了一个坐标系,姑且也称之为M。那么:

Ma = b

的意思是:

“有一个向量,它在坐标系M的 度量下得到的度量结果向量为a,那么它在坐标系I的度量下,这个向量的度量结果是b。”

这里的I是指单位矩阵,就是主对角线是1,其他为零的矩阵。

而这两个方式本质上是等价的。

我希望你务必理解这一点,因为这是本篇的关键。

正因为是关键,所以我得再解释一下。

在M为坐标系的意义下,如果把M放在一个向量a的前面,形成Ma的样式,我们可以认为这是对向量a的一个环境声明。它相当于是说:

“注意了!这里有一个向量,它在坐标系M中度量,得到的度量结果可以表达为a。可是它在别的坐标系里度量的话,就会得到不同的结果。为了明确,我把M放在 前面,让你明白,这是该向量在坐标系M中度量的结果。”

那么我们再看孤零零的向量b:

b

多看几遍,你没看出来吗?它其实不是b,它是:

Ib

也就是说:“在单位坐标系,也就是我们通常说的直角坐标系I中,有一个向量,度量的结果是b。”

而  Ma = Ib的意思就是说:

“在M坐标系里量出来的向量a,跟在I坐标系里量出来的向量b,其实根本就是一个向量啊!”

这哪里是什么乘法计算,根本就是身份识别嘛。

从这个意义上我们重新理解一下向量。向量这个东西客观存在,但是要把它表示出来,就要把它放在一个坐标系中去度量它,然后把度量的结果(向量在各个坐标轴 上的投影值)按一定顺序列在一起,就成了我们平时所见的向量表示形式。你选择的坐标系(基)不同,得出来的向量的表示就不同。向量还是那个向量,选择的坐 标系不同,其表示方式就不同。因此,按道理来说,每写出一个向量的表示,都应该声明一下这个表示是在哪个坐标系中度量出来的。表示的方式,就是 Ma,也就是说,有一个向量,在M矩阵表示的坐标系中度量出来的结果为a。我们平时说一个向量是[2 3 5 7]T,隐含着是 说,这个向量在 I 坐标系中的度量结果是[2 3 5 7]T,因此,这个形式反而是一种简化了的特殊情况。

注意到,M矩阵表示出来的那个坐标系,由一组基组成,而那组基也是由向量组成的,同样存在这组向量是在哪个坐标系下度量而成的问题。也就是说,表述一个矩 阵的一般方法,也应该要指明其所处的基准坐标系。所谓M,其实是 IM,也就是说,M中那组基的度量是在 I 坐标系中得出的。从这个视角来看,M×N也不是什么矩阵乘法了,而是声明了一个在M坐标系中量出的另一个坐标系N,其中M本身是在I坐标系中度量出来的。

回过头来说变换的问题。我刚才说,“固定坐标系下一个对象的变换等价于固定对象所处的坐标系变换”,那个“固定对象”我们找到了,就是那个向量。但是坐标 系的变换呢?我怎么没看见?

请看:

Ma = Ib

我现在要变M为I,怎么变?对了,再前面乘以个M-1,也就是M的逆矩阵。换句话说,你不是有一个坐标系M吗,现在我让它乘以个M-1, 变成I,这样一来的话,原来M坐标系中的a在I中一量,就得到b了。

我建议你此时此刻拿起纸笔,画画图,求得对这件事情的理解。比如,你画一个坐标系,x轴上的衡量单位是2,y轴上的衡量单位是3,在这样一个坐标系里,坐 标为(1,1)的那一点,实际上就是笛卡尔坐标系里的点(2, 3)。而让它原形毕露的办法,就是把原来那个坐标系:

2 0
0 3

的x方向度量缩小为原来的1/2,而y方向度量缩小为原来的1/3,这样一来坐标系就变成单位坐标系I了。保持点不变,那个向量现在就变成了(2, 3)了。

怎么能够让“x方向度量缩小为原来的1/2,而y方向度量缩小为原来的1/3”呢?就是让原坐标系:

2 0
0 3

被矩阵:

1/2   0
0   1/3

左乘。而这个矩阵就是原矩阵的逆矩阵。

下面我们得出一个重要的结论:

“对坐标系施加变换的方法,就是让表示那个坐标系的矩阵与表示那个变化的矩阵相乘。”

再一次的,矩阵的乘法变成了运动的施加。只不过,被施加运动的不再是向量,而是另一个坐标系。

如果你觉得你还搞得清楚,请再想一下刚才已经提到的结论,矩阵MxN,一方面表明坐标系N在运动M下的变换结果,另一方面,把M当成N的前缀,当成N的环 境描述,那么就是说,在M坐标系度量下,有另一个坐标系N。这个坐标系N如果放在I坐标系中度量,其结果为坐标系MxN。

在这里,我实际上已经回答了一般人在学习线性代数是最困惑的一个问题,那就是为什么矩阵的乘法要规定成这样。简单地说,是因为:

1. 从变换的观点看,对坐标系N施加M变换,就是把组成坐标系N的每一个向量施加M变换。

2. 从坐标系的观点看,在M坐标系中表现为N的另一个坐标系,这也归结为,对N坐标系基的每一个向量,把它在I坐标系中的坐标找出来,然后汇成一个新的矩阵。

3. 至于矩阵乘以向量为什么要那样规定,那是因为一个在M中度量为a的向量,如果想要恢复在I中的真像,就必须分别与M中的每一个向量进行內积运算。我把这个 结论的推导留给感兴趣的朋友吧。应该说,其实到了这一步,已经很容易了。

综合以上1/2/3,矩阵的乘法就得那么规定,一切有根有据,绝不是哪个神经病胡思乱想出来的。

我已经无法说得更多了。矩阵又是坐标系,又是变换。到底是坐标系,还是变换,已经说不清楚了,运动与实体在这里统一了,物质与意识的界限已经消失了,一切 归于无法言说,无法定义了。道可道,非常道,名可名,非常名。矩阵是在是不可道之道,不可名之名的东西。到了这个时候,我们不得不承认,我们伟大的线性代 数课本上说的矩阵定义,是无比正确的:

“矩阵就是由m行n列数放在一起组成的数学对象。”

好了,这基本上就是我想说的全部了。还留下一个行列式的问题。矩阵M的行列式实际上是组成M的各个向量按照平行四边形法则搭成一个n维立方体的体积。对于 这一点,我只能感叹于其精妙,却无法揭开其中奥秘了。也许我掌握的数学工具不够,我希望有人能够给我们大家讲解其中的道理了。

我不知道是否讲得足够清楚了,反正这一部分需要您花些功夫去推敲。

此外,请大家不必等待这个系列的后续部分。以我的工作情况而言,近期内很难保证继续投入脑力到这个领域中,尽管我仍然对此兴致浓厚。不过如果还有(四)的 话,可能是一些站在应用层面的考虑,比如对计算机图形学相关算法的理解。但是我不承诺这些讨论近期内会出现了。