我们先来看看第一个重点:数学的用处都有什么?
我们现在每天都离不开的手机和电脑,其实本质上也就是各种计算机,要想让它们辅助我们的生活工作,就避免不了让它们处理人类的文字和语言,比如语音文字转换、语言翻译等等,那你知道计算机处理人类的文字、语言背后的原理是什么吗?
其实在很早以前,人们就已经试着用数学来解决文字校验的问题了。我们知道,犹太人信仰犹太教,犹太教的经典是《圣经》中的《旧约》,里面记载着犹太人的历史。可是,《圣经》不是由一个人写成的,它的写作过程经历了好几个世纪,所以之后的作者在补充《圣经》时,就会面临一个问题,那就是怎么在抄写的过程中不出现错误?人的马虎总是难以避免,所以这本应该是一个难题。
但是聪明的犹太人发明了一种方法。他们在抄写《圣经》时,会把每一个希伯来字母对应一个数字,这样,每行或者每列文字加起来都对应一个数,这个数就是这一行或这一列的校验码。这样一来,抄完之后只要对比每行每列的校验码正不正确就行了,如果发现校验码有错,那通过行和列的校验码,也可以很快地定位到抄错的地方。这背后的原理,和我们今天的各种校验也是相同的。
那人类的自然语言该怎么处理呢?在这个问题上,人们曾经走过很多弯路。其实最开始的时候,科学家们按照仿生学的思路,坚持认为,要让计算机学会处理自然语言,就必须像人一样,先让它理解自然语言,让它学会语法。但是后来人们发现,语法规则实在太多,根本没有办法穷尽。因为我们日常用的自然语言其实很复杂,不同的语境,不同的上下文,不同的语序,都会产生完全不同的语义。根据计算,就算覆盖我们平时常用语言的20%,都要写几万条语法,这个工作量就已经是天文数字了。而且写到后面,还会有自相矛盾的语法,为了区分,还要注明什么环境下用什么语法,整个过程无比繁琐。所以让计算机学习语法这一条路,在上个世纪70年代就走到了尽头。
就在人们一筹莫展的时候,数学的威力显示了出来。数学的魅力就在于让复杂的问题简单化。美国著名的计算机科学家贾里尼克领导他的实验室,借助数学中的统计学工具,把当时语言识别的成功率从70%提升到90%,同时让语言识别的规模,从几千个单词上升到几万个单词,让语言识别有了实际应用的可能。听到这儿你可能很疑惑,统计学和自然语言好像没什么关系,它怎么处理自然语言呢?其实贾里尼克的思路很简单,他认为,要判断一个句子正不正确,就要看这个句子出现的可能性的大小,这个可能性用概率来衡量。比如,我们假定第一个句子出现的概率是二分之一,第二个句子出现的概率是千分之一,那第一个句子出现的可能性就比第二个句子大得多,那么从概率的角度来说,第一个句子就更有可能是正确的。
所以接下来我们需要做的事,就是判断一个句子出现的可能性有多大。这时就需要用到“马尔科夫假设”,这个假设是说,假定一个句子里每个词出现的概率,只和前一个词有关,就好比“涨停”这个词,最有可能出现在“股票”这个词之后。那么,只要给计算机量足够大的机读文本,也就是专业人士说的语料库,计算机就能算出来,在一个特定词后面出现某个词的概率。这样,只要把一句话里所有词出现的概率相乘,就是这个句子出现的概率。概率最大的句子,就是最有可能正确的句子。按照这个思路,科学家们成功地让计算机拥有了处理自然语言的能力。
你看,一个用几万条复杂语法解决不了的问题,用数学工具就轻松地解决了,而且效果还要好得多。那除了自然语言,我们今天用手机、用电脑,最常做的一个动作之一就是“搜索”。很多人喜欢点网站上的分类标签,看自己特别感兴趣的新闻。那计算机是怎么给这些新闻分类的呢?这背后的原理也就是数学。这就是我们最开始举的那个例子:余弦定理能帮助新闻网站进行新闻分类。
余弦定理大家中学都学过,你可能忘了,我来跟你复习一下啊。它是一个揭示三角形边角关系的重要数学定理,使用余弦定理,就可以仅凭三角形两个边的向量,计算出这两个边的夹角。向量就是有特定长度和方向的量,可以表示为带箭头的线段。
具体该怎么做呢?一篇新闻里会有很多词,像“之乎者也的”这种虚词,对判断新闻的分类没有太大的意义。而像“股票”“利息”这种实词,是判断新闻分类的重点词。科学家精选了一个词汇表,这里面收录着64000个词,每个词都对应一个编号。他们先把大量文字数据输入计算机,算出每个词出现的次数。
一般来说,出现次数越少的词越有搜索价值,比如“爱因斯坦”“数学之美”;而出现次数越多的词,越没有搜索价值,比如“一个”“这里”等等。根据这个标准,把词汇表里的64000个词都算出各自的权重,越特殊的词权重越大。然后,再往计算机里输入要分类的新闻,计算出这64000个词在这篇新闻里的分布,如果某些词没有在这篇新闻里出现,对应的值就是零,如果出现,对应的值就是这个词的权重。这样,这64000个数,就构成了一个64000维的向量,我们就用这个向量来代表这篇新闻,把它叫做这篇新闻的特征向量。
不同类型的新闻,用词上有不同的特点,比如金融类新闻就经常出现“股票”“银行”这些词,所以不难判断,同类新闻的特征向量会有相似性。这样的话,只要算出不同新闻特征向量之间夹角的大小,就可以判断出它们是不是同一类新闻。这时就要用到余弦定理,来把两则新闻的特征向量之间的夹角算出来。科学家可以人工设定一个值,只要两个向量之间的夹角小于这个值,这两则新闻就可以判定成同一类新闻。你看,一个简单的数学定理,通过科学家们的巧妙应用,再次举重若轻地解决了一个难题。
来给你总结一下这部分的内容。科学家们使用了统计学的方法,用概率的大小判断一个句子的正确性,从而让计算机获得了处理自然语言的能力。而在新闻分类领域里,科学家们用到了余弦定理,来判断新闻的特征向量之间的夹角,从而让计算机能够确定新闻的类别。
那咱们来回答一下这个部分的问题“数学的用处都有什么”。吴军在书中说技术分为“道”和“术”两种,做事的原理和原则是“道”,而做事的具体方法就是“术”。我觉得数学真正的作用,就是让我们掌握“道”。因为从历史的发展来看,所有的“术”都会从独门秘籍到普及再到落伍,就像吴军说的只有掌握了“道”的人才能永远游刃有余。
第二部分
说完了数学的作用,可能有人还是觉得不太服气:没错,数学有时候确实有用,但是人类也不是离不开数学,我不懂数学也可以凭经验来认识世界,来解决问题。有这种观点的人可能不在少数,但吴军在书里告诉我们,很多问题光靠经验累积是没办法解决的,必须要有数学的帮助才能得到答案,这是为什么呢?第二个重点我就给你说说:数学为什么这么有用?
和经验相比,数学能帮助我们的,就是能让我们找到一个正确的数学模型。这有多重要呢?吴军说,只有正确的数学模型,才能把一个大问题的计算复杂度降低,让它变得简单。而经验给我们的模型,常常是错的,那由它总结出来的结论,也就是错的。
比如人类从古时候起,就想弄清楚天上星星的运动规律,因为我们身处地球之上,所以古人们最开始很自然地把地球当成了宇宙的中心。其他的星体,不管是太阳、月亮还是金木水火土这几大行星,在古人的眼里都在围绕地球旋转。这种基本认知就是我们今天常说的“地心说”。但是实际上,除了月亮以外,其他所有星体实际上并不是绕着地球转的,所以这些星体的运动规律,在地球上看来就特别复杂。如果你读过《达芬奇密码》这本书就知道,金星大约每四年,会在天上画一个五角星。
这个轨迹就太复杂了,为了给星体找到一个符合观测经验的运动规律,古代科学家们找了很多方法,其中,最有名的来自古罗马天文学家托勒密。托勒密为了完善地心说,设计了一种大圆套小圆的运动方式,极为精确地计算出了所有行星的运动轨迹。不过这个模型相当复杂,他的这套理论一共用到了40到60个圆形,大圆里面套小圆,你想想,就算今天有了计算机的帮助,我们都很难解出40个套在一起的圆方程。
你看行星的轨迹运行得这么复杂,就是因为数学模型找错了的原因。托勒密的模型就算再精密,再符合当时人们的经验判断,也不能说是正确的数学模型。后来,波兰天文学家哥白尼提出了日心说,德国天文学家开普勒在他的基础上,偶然发现,原来行星绕太阳转不需要大圆套小圆,一个椭圆方程就搞定了。他还通过这个数学模型,总结出了行星围绕恒星运转的开普勒三定律,把星体的运动规律解释得清清楚楚。
而且这个正确的数学模型,还在后来成功地帮科学家找到了海王星。当时法国天文学家布瓦尔发现,天王星的运行轨道和椭圆模型算出来的不太一样。后来科学家直接用数学工具,计算出了吸引天王星偏离轨道的海王星。你看这种未观测先发现的成果,是不可能光凭日常经验得到的。有些由经验带来的先入为主的观念,还会严重阻碍人们对世界本来面目的认识过程。
其实,历史对人类在这方面的教训真不少,吴军还说了一个和我们生活息息相关的例子。有二十年以上打字经历的朋友可能都知道,原来在电脑上打字可是一个技术活儿。当时比较流行的输入法有五笔输入法、双拼输入法、还有全拼输入法,等等。可是到了今天,使用双拼和五笔输入法的人越来越少,而使用全拼的人越来越多,这是为什么呢?
这还是要从人们的固有经验说起。人们一开始总以为,最好的汉字输入法就是最简单的输入法,平均打一个字敲击的键盘次数越少,那这个输入法就越好,但历史又一次证明,这种经验上的直觉并不可靠。比如拼音输入法中的双拼和全拼,在双拼输入法中,每个声母和韵母都只用一个键表示,而全拼输入法则要求打出整个拼音。
比如“ao”这个韵母,在双拼中只需要按“k”这个键,而全拼则需要按“a”和“o”两个键。所以双拼敲击键盘的次数会天然地比全拼短,看起来更高效一些。但吴军说,双拼法看似减少了敲击键盘的次数,但输入一点也不快。为什么呢?因为汉语的声母韵母加起来一共有50多个,但是键盘上只有26个字母键,所以很多韵母就需要共享一个字母键,这就会导致,打字的人要从更多的候选汉字里找到自己想打的字;而且双拼的方法不自然,比全拼多出来一道拆分声母和韵母的过程,你需要背下来哪个韵母是哪个按键;最后,很多南方人分不清前后鼻音和卷平舌音,结果就导致翻了好几页都找不到自己想打的字,其实原因是一开始就打错了声母或者韵母。
这一系列问题都证明,追求更简单高效的双拼输入法,实际效率并不高,五笔输入法也是类似的情况。上世纪90年代时,中国出现的输入法种类一度多达上千种,但这些输入法大多和双拼一样,都把发力点放在了减少敲击次数上,都强调自己是最快的。这个方向就走偏了,到了现在,人们几乎全都抛弃了这些输入法,这一批发明人可以说是全军覆没。
与此同时,全拼输入法得到不断改进。所有汉字全拼的平均长度是2.98,只要能很好地利用上下文的相关性,就能把全拼输入法的平均敲击次数控制在3次以内。那该怎么利用上下文的相关性呢?这里又有人绕过弯路。10年前,人们就是通过不断增加词库,甚至把一整句唐诗当成一个词来解决这个问题。但是统计下来发现,帮助不太大。因为汉语里短字词“一音多字”的情况太多,如果词库非常大,打出来的候选词太多,找到自己想要的那个还是很费时间。吴军说,增大词库,这也是根据经验和直觉的应对方法,就和我们刚刚说的,“在大圆里套小圆,在小圆里套更小的圆”思路一样。
那最好的解决办法是什么呢?就是借助语言模型。这和第一个重点里说的,计算机处理自然语言的思路比较像,都是利用统计学的原理,来计算出一长串拼音转化成文字的最有可能选项,方便使用者直接打出一大段文字。和之前凭经验行动的解决方法相比,这就是更好的数学模型。
总结下这部分的内容。在这个重点里,我们讨论了“数学为什么这么有用”这个问题,答案是数学能帮助我们发现仅凭经验无法发现的规律,找到仅凭经验无法总结出来的办法。比如发现行星围绕恒星运转的事实,比如大幅优化全拼输入法,使之成为最好用的输入法等等。可以说没有数学,我们不可能拥有今天的世界观和生活方式。
第三部分
我们说完了数学的用处,和数学有用的原因,接下来让我们一起回归这本书的标题,来看看吴军认为的“数学之美”所以第三个重点就是,为什么说数学之美就是简单美?
数学公式、数学计算、数学推导的过程可能实际应用起来都很复杂,这也是为什么数学这么难学的原因。但是数学应用背后所包含的数学思想,却总是简单的,这种简单之美,就是吴军一直说的数学之美。
计算机的原理其实就是一个例子,计算机的术很复杂,它一般由大量的精密电路搭建而成,但是计算机的道却很简单,它本质上的逻辑来自简单的不能再简单的布尔代数。布尔代数的运算元素只有0和1两个数字,基本的运算也只有三种,第一种是“与”,也就是英文AND,第二种“或”,也就是OR,第三种是“非”,也就是NOT很好理解。就是这么简单的布尔代数,实际上就是数字电路的基础。所有的数学和逻辑运算,比如加、减、乘、除、乘方、开方,等等,全部都能转化成布尔代数的基本运算。正是靠这一点,人们才用以布尔代数原理为基础的一个个电路,搭建起了现代电子计算机。
再比如,我们刚才介绍的几个例子,让计算机处理自然语言,一条路是成千上万的复杂语法,另一条路是让计算机算概率、找规律,前者科学家们努力了几十年但没什么收获,后者轻轻松松就让计算机处理语言文字的能力大幅提高,数学思想再次化繁为简,用简单的思路解决了复杂的问题。还有我们每天都要用到的全拼输入法,在数学的帮助下输入效率大大提高。而双拼和五笔输入法虽然符合人们对于快速输入的直观认识,但是实际应用困难,效率反而不高,缺乏正确的数学方法,最终结果就是被使用者逐渐抛弃。用吴军的话来说,在现实生活中,真正能够通用的工具,在形式上一定是简单的。一架普通的照相机,不应该要求它的使用者必须精通光圈和快门速度的设置。
“简单之美”说着容易,但其实,连谷歌这样的大公司都曾经犯过“大圆套小圆”的错误。吴军说,他刚到谷歌的时候,发现一些早期的算法根本没有系统的模型和理论基础,大部分软件工程师都是靠直觉来解决问题的。这些错误的模型,也许碰巧几次会有效,就像“地心说”一样,不是也用了几千年吗,但是错误的模型一定会渐渐表现出来负面影响。最终不仅会偏离正确的结果,甚至会把简单的事情搞复杂,最终濒临崩溃。
2006年后,谷歌几乎重写了所有项目的程序,保证了工程的正确性。但是在其他公司,甚至美国的一些挂着高科技头衔的二流IT公司,“大圆套小圆”的情况还是很常见。这就像是一个人有了钱,穿金戴银,但是内在的学问和修养还没提高。吴军说他写这本书,也是希望读者可以通过对IT规律的认识,举一反三地总结、学习和运用自己生活中的规律性,提升自己的境界。
网友评论