曾经看过吴军博士的《大学之路》,对书中的教育理念十分喜欢,这次有机会拜读《数学之美》,读完之后,感觉十分清爽,之前还未曾听说过一本书能将数学,计算机,算法,文化,历史和教育理念结合起来。曾经很多不懂的地方,现在渐渐清晰了很多,读完之后,再看今天的自然语言处理和搜索引擎,大多本是以信息论为基础。
本书——《数学之美》,力图将复杂的问题,归结为数学模型。
从事科学研究,最重要的是掌握思维方法:
“简单性
和模块化
是软件工程的基石;分布式
和容错性
是互联网的生命。”——WWW的发明者蒂姆·伯纳斯·李
“信”字作为“通信”一词的50%,表明了信息的存储、传输、处理和理解的重要性。
数字、文字和自然语言一样,都是信息的载体,他们之间原本有着天然的联系。语言和数学的产生都是为了同一个目的——记录
和传播信息
。但是,直到半个世界前,香农博士提出信息论,人们才开始把相互学和信息系统自觉地联系起来。然而,信息的产生、传播、接受和反馈,与今天最先进的通信在原理上没有任何差别。
为什么人们可以学会这么多文字?因为概念,在中国的象形文字中,“日”本意是太阳,但它同时又是太阳从升起到落山再到升起的时间周期,也就是我们讲的一天。在古埃及的象形文字中,读音相同的词可能用同一个符号记录。这种概念的聚类,在原理上与今天自然语言处理或者机器学习的聚类有着很大的相似性。
文字表现的具体形式不重要,所承载的信息是重要的。翻译
这件事情能够达成,本质的原因是不同的文字系统在记录信息上的能力是等价的。
信息的冗余是信息安全的保障。
语言的数据,我们称之为语料,尤其是双语或者多语的对照语料对翻译至关重要。
语言的出现是为了人类之间的通信。字母、笔画、文字和数字实际上是信息编码的不同单位。任何一种语言都是一种编码方式,而语言的语法规则是编解码的算法。
语言的数学本质
:我们把一个表达的意思,通过某种语言的一句话表达出来,就是用哪个这种语言的编码方式对头脑中的信息做了一次编码,编码的结果就是一串文字。而如果对方懂得这门语言,他/她就可以用这门语言的解码方法获得说话人要表达的信息。
图灵测试(Turing Test)
:让人和机器交流,如果人无法判断自己交流的对象是人还是机器,就说明这个机器有智能了。
词是表达语义的最小单位。
其中 s1,s2,s3,⋯ s 1 , s 2 , s 3 , ⋯ 表示信息源发出的信号, o1,o2,o3,⋯ o 1 , o 2 , o 3 , ⋯ 表示接收器接收到的信号。通信中的解码就是根据接收到的信号 o1,o2,o3,⋯ o 1 , o 2 , o 3 , ⋯ 还原出发送的信号 s1,s2,s3,⋯ s 1 , s 2 , s 3 , ⋯ 。
信息是如何客观、定量地体现出来的?信息用途的背后是否有理论基础?
一条信息的信息量与其不确定性有着直接的关系。信息量就等于不确定性的多少。变量的不确定性越大,熵也越大。
信息和消除不确定是相联系的,在英语里,信息和情报都是用一个英语单词
(information)
,情报的作用就是 排除不确定性。
一个事物内部会有随机性,也就是不确定性,假定为 U U ,而从外部消除这个不确定性唯一的方法是引入信息 I I , 而需要引入的信息量取决于这个不确定性的大小,即 I>U I > U 才行。当 I<U I < U 时,这些信息可以消除一部分不确定性,这就是说有新的不确定性 U′=U−I U ′ = U − I 。
互信息(Mutual Information)的概念作为两个随机事件“相关性”的量化度量。
技术分为“道”和“术”两种,具体的做事方法是“术”,做事的原理和原则是“道”。
建立一个搜索引擎大致需要做这样几件事情:
很多数学方法,其实看上去没有什么用,但是随着时间的推移会突然爬上大用场。这恐怕是世界上还有很多人毕生研究数学的原因。
对于一个特定的查询,搜索结果取决于两组信息:关于网页的
质量信息(Quality)
,以及这个查询与每个网页的相关信息(Relevance)
。
在互联网上,如果一个网页呗很多其他网页所链接,说明它受到普遍的承认和信赖,那么它的排名就高。
如今,影响搜索索引质量的诸多因素,除了用户的点击数据意外,都可以归结为以下四类:
由于向量中每一个变量都是整数,因此余弦的取值在 0 0 和 1 1 之间,也就是说,夹角在 0 0 度到 90 90 度之间。当两条新闻向量夹角的余弦等于 1 1 时,这两个向量的夹角为零,两条新闻完全相同;当夹角的余弦接近于 1 1 时,两条新闻相似,从而可以归成一类;夹角的余弦越小,夹角越大,两条新闻越不相关。当两个向量正交时( 90 90 度),夹角的余弦为零,说明两篇新闻根本没有相同的主题词,它们毫不相关。
在计算机科学领域,一个好的算法应该像AK-47冲锋枪那样:简单、有效、可靠性好而且容易读懂(或者说易操作),而不应该是故弄玄虚。
先帮助用户解决 80% 80 % 的问题,再慢慢解决剩下的 20% 20 % 问题。许多失败并不是因为人不优秀,而是做事情的方法不对,一开始追求大而全的解决方案,之后长时间不能完成,最后不了了之。
坚持选择简单方案的原因是容易解释每一步骤和方法背后的道理,这样不仅便于出了问题时查错(Debug),而且容易找到今后改进的目标。如果每一项改进都是有得有失,甚至得失相差无几,那么长期下来,效果也不会有什么明显的提升。即使是机器学习训练出来的模型和参数,也需要有合理的解释。
汉字的输入过程本身就是人和计算机的通信,好的输入法会自觉或者不自觉地遵循通信的数学模型。当然要作出最有效的输入法,应当自觉使用信息论做指导。
从理论上讲,只要语言模型足够大,拼音输入法的平均击键次数就可以接近信息论给的极限值。如果把输入法放在云计算上,这是完全可以实现的,而在客户端上(比如个人电脑上)这样做不现实。好在客户端有客户端的优势,可以建立个性化的语言模型。
凸函数的定义:如果一个函数 f f ,满足条件 f(tx1+(1−t)x2)<tf(x1)+(1−t)f(x2) f ( t x 1 + ( 1 − t ) x 2 ) < t f ( x 1 ) + ( 1 − t ) f ( x 2 ) ,那么这个函数成为凸函数。
基本走过了三个阶段:
逻辑回归模型是指讲一个事件出现的概率逐渐适应到一条逻辑曲线(Logistic Curve,其值域在 (0,1) ( 0 , 1 ) 之间)上。逻辑曲线是一条 S S 型曲线,特点是一开始变化快,逐渐减慢,最后饱和。
逻辑回归的好处是它的变量范围为 −∞ − ∞ 到 ∞ ∞ ,而值域限制在 0−1 0 − 1 之间。(当然,由于 z z 超出 [−6, 6] [ − 6 , 6 ] 后函数值基本没有变化,在应用中一般不考虑)。我们知道对应于 [0, 1] [ 0 , 1 ] 之间的函数可以是一个概率函数,这样逻辑回归函数就跟一个概率分布联系起来的。
各个击破
:云计算的关键之一是,如何把一个非常大的计算问题,自动分解到许多计算能力不是很强大的计算机上,共同完成。针对这个问题,Google给出的解决工具是一个叫做 MapReduce 的程序,其根本原理就是十分常见的分支算法(Divide-and-Conquer)。
将一个复杂的问题,分成若干个简单的子问题进行解决。然后,对子问题的结果进行合并,得到原有问题的解。
归并排序
:假定要对一个长度为 N N 的数组 a1,a2,a3,⋯,aN a 1 , a 2 , a 3 , ⋯ , a N 进行排序,如果采用冒泡排序,复杂度是 O(N2) O ( N 2 ) ,不仅非常慢,而且如果数组过大,也无法在同一台计算机上完成。用分支算法,是将这个大数组分为几份,然后对每一份分别排序,然后最后从头到尾进行合并,得到元素组的排序结果。这个排序算法要求每个子任务完成后,结果都要进行合并。
若要计算两个大的矩阵的乘积,比如 A×B A × B ,可以把 A A 按行分块,把 B B 按列分块,然后最后合并结果,得到矩阵的乘积。
将一个大任务拆分成小的子任务,并且完成子任务的计算,这个过程叫 Map,将中间结果合并成最终结果,这个过程叫做 Reduce。
与模型一样,数据也同样重要。
由于计算机获取、存储和处理数据的能力快速提升,人们逐渐从大量的数据中发现了很多原本难以找到的规律性。
数据不仅在科学研究中,而且在生活的方方面面都很重要,它应该成为们日常做决策的依据。
在没有数据之前,不要给出任何结论,因为日常的很多感觉与数据给出的结论是相反的,如果不用数据说话,成功的几率几率就会小很多。
没有数据支持的决定常常不准确,而且个别成功的案例的影响在人们心中会被方法,而风险则被缩小,个别数据与大量数据也有本质的区别,往往大量数据会因为量变而导致质变。
其实,概率论和统计学虽然紧密相关,却是相对独立发展的。概率论是研究随机现象数量规律的数学分制。统计学是通过搜索、整理、分析数据等手段,以达到腿短所测对象的本质,甚至预测对未来的一们综合性学科。
切比雪夫不等式:其中, X X 是一个随机变量, E(X) E ( X ) 是该变量的数学期望, n n 是实验次数, ϵ ϵ 是误差, σ σ 是方差。这个公式的含义是,当样本数足够多时,一个随机变量和它的数学期望值之间的误差可以任意小。
但是,除了要求数据量必须足够多,统计还要求采样的数据具有代表性。有些时候不是数据量足够大,统计结果就一定准确。统计所使用的数据必须与想要的统计的目标相一致。
如果数据具有代表性,统计量又足够,那么从这些数据中得到统计结果,对我们的工作就有非常大的指导意义了,对产品质量的提升也大有帮助。今天IT行业的竞争,在某种程度上已经是数据的竞争了。
既然数据是非常有用的,如果有更多、更完备且全方位的数据,我们就可能从中挖掘出很多预想不到的惊喜。大数据这个概念就是在这样的背景下应运而生的。
大数据更重要的在于它的多维度和完备性,有了这两点才能将原本看似无关的时间联系起来,回复出队事物全方位完备的描述。
首先,只有当一些随机事件的组合一同出现了很多次以后,才能得到有意义的统计规律;其次,大数据的采集过程是一个自然的过程,有利于消除主观性的偏差;当然,更重要的是,只有多维度的大数据才能让那些原本有联系,但似乎联系又不太紧密的时间反复出现,然后发现新的规律。
一个优秀的计算机科学家或者工程师与平庸的程序员的差别就在:前者总是不断寻找并且有能力找到好的算法,而后者仅常常满足于勉强解决问题。而在所有的“好”的算法中,显然存在一个最优的算法——找到它们是从事计算机科学的人应该努力达到的目标。
技能解决实际大问题的方法编程计算机可运行的程序,中间的桥梁就是计算机的算法。
计算量 N N 的一个函数 f(N) f ( N ) 。这个函数的边界(上界或下界)可以用数学上的大 O O 概念来闲置。如过两个函数 f(N) f ( N ) 和 g(N) g ( N ) 在大 O O 概念上想通,也就是说:当 N N 趋近于无穷大时,它们的比值只差一个常数,则可以看成是同一个数量级的,即认为复杂度相同。计算复杂度关键看 O() O ( ) 里面的函数变量的部分,而不是常数因子。
如果一个算法的计算量不超过 N N 的多项式函数,那么称这个算法是多项式函数复杂度的。如果一个问题存在一个多项式复杂度的算法,这个问题称为 P P 问题。这类问题呗认为是计算机可以“有效”解决的。但是,如果一个算法的计算量比 N N 的多项式函数还搞,虽然从理论上讲如果有足够的时间也是可以计算的(图灵机概念下的可计算),但是实际上是做不到的。这是我们称它为非多项式(Non-ploynomial)问题。
NP N P 问题中发现的被称作 NPC (NP−Complete) N P C ( N P − C o m p l e t e ) 的特殊的问题类,所有的 NP N P 问题都可以在多项式时间内规约到 NPC N P C 问题。无疑 NPC N P C 问题是 NP N P 问题中最难的问题,因为如果任何一个 NPC N P C 问题找到了一个多项式算法,那么所有的 NP N P 问题都可以用这个算法解决了,也即 NP=P N P = P 了。
对于计算复杂度至少是 NP−Complete N P − C o m p l e t e 甚至更大的问题,我们称为它 NP−Hard N P − H a r d 问题。
数学在计算机科学中的一个重要作用,就是找到计算复杂度尽可能低的解。同时,对那些 NP-Complete 或者 NP-Hard 的问题,找到近似解。
感谢吴军博士的《数学之美》为计算机教育做出的巨大努力!
作者希望让做工程的年轻人看到在信息技术行业做事情的正确方法,希望IT公司的工程主管能够带领部署,提高工程水平,逐渐远离山寨,这样才有可能真正接近世界一流 IT 公司的做事水平,避免大量低水平的重复建设导致的惊人浪费。透过对 IT 规律性的认识,举一反三地总结、学习、认识和自觉运用自己工作中的规律性,这样有助于将自己的境界提升一个层次。
人们要认识到正确的理论和方法,总有一个渐进的过程。任何事物都有它的发展规律,而这些规律都是可以认识的,在信息科学领域也不例外。
用很简单的比喻将所在领域内最深奥的道理介绍清楚,让大众理解。一方面对自己的领域非常精通,同时能用大白话把道理讲清楚,而不是把问题复杂化。
最后,感谢吴军博士为计算机、数学教育做出的巨大努力。