吴军在美国硅谷谷歌上市前工作多年,上市后财富自由进入投资领域,在技术、理论、投资、教育方面都有建树。
此书是吴军之前在谷歌的一系列博客改写而成。
- PS:20180110后记
最近叶檀采访吴军时,他曾说过硅谷最重要的是抓住机会去感谢别人,例如把尽量多的人写入论文第二作者。在这本书的序言中,他也充分体现了这个方法,把能感谢的人都感谢了一遍:)
第1章 文字和语音VS数字和信息
原始人需要的文字和数量描述都很少,所以没有发明文字和数字。
后来随着脑袋放不下这些语音和数量,就产生了文字和数字。最早的泥板象形文和骨头肋条上的刻线计数。
中国古代的日常用语和现在的口语类似,但是书写的文字由于带宽较低(书写介质成本高)所以使用压缩编码后的文字(文言文),世界各民族都是这样。
古犹太人抄写圣经时总会犯错,所以给每个文字对应一个数字,然后抄好一页后,要对一边横行和竖行的数字之和,作为校验。
词法是词的编码规则,而语法是语言的编码解码规则。词法的编码是有限的,而语法是可以无限扩展的。所以每个时代都有不符合原语法的“病句”而这些语句后来往往流传下去成为新的语法。
第2章 自然语言处理(从规则到统计)
最初专家们(包括香农)认为要进行语言翻译,就要先要实现计算机类似人脑的智能,就如一个能对两种语言翻译的人一定是对两种语言都能理解的人。
后来人们对这种靠直觉判断的方法论称为“飞鸟派”,意思是看到鸟扇翅膀就认为要想飞就得让人扇翅膀,而实际上莱特兄弟靠的是空气动力学而不是仿生学。
同样的,要实现机器翻译,靠得并非是计算机模拟人工智能,靠得是数学,更准确地说是靠统计。
计算机语言很容易被计算机理解,所以人们就想自然语言文法也能用相同的方法分析,而实际上计算机语言是上下文无关的。
图灵奖得主高德纳提出用计算复杂度来衡量算法的耗时。对于上下文无关的文法,复杂度大概是语句长度的二次方,而上下文有关的自然语言的文法复杂度是语句长度的六次方。即使是现在要翻译一句较长的自然语言要计算
第3章 统计语言模型
基本的统计模型就是选取概率最高的句子,一个句子的概率就是每个词在前一个词之后的条件概率之积。
在实际操作时,会用一些简化模型,效果也是不错的。
如果语料库足够大,翻译准确率就会很高。
第4章 谈谈分词
如“北京大学”,是应该分成一个、两个还是四个词就是分词问题。较为好的分词方式是按照统计概率和条件概率取得的结果。
第5章 隐含马尔可夫模型
计算一系列词出现的概率时原本是一系列条件概率模型,但是这种模型过于复杂,隐含马尔可夫模型是把概率简化为每一个词出现的概率只与前面一个词有关,这样便于计算。
围绕隐含马尔可夫模型有三个基本问题:
- 1.给定一个模型,如何计算某个特定输出序列的概率。
- 2.给定一个模型和某个特定的输出序列,如何找到最可能产生这个输出的状态序列。
- 3.给定足够量的观测数据,如何估计隐含马尔可夫模型的参数。
第一个问题对应的算法是Forward-Backward算法。
第二个问题可以用维特比算法解决。
第三个问题可以利用鲍姆-韦尔奇算法进行模型训练。
第6章 信息的度量和作用
- 1 信息熵 entropy
一段信息的不确定性可以用信息熵描述,用来度量信息,熵越大信息量越小。
- 2 信息的作用
信息的作用就是通过增加冗余来降低信息熵。词之间通过条件概率降低信息熵。
- 3 互信息 mutual information
互信息就是两个信息之间的概率相关度,在0~1之间,0代表不相关,1代表完全相关。
有足够的语料库,计算概率和相关信息条件概率都是很容易的事。
- 4 相对熵
第7章 贾里尼克和现代语言处理
讲了贾里尼克幼年没有学习条件但是建立了志向,后来成为大师的经历。
他和作者都赞同少年时知识内容不重要,因为具体的知识在成年之后可以很快掌握,重要的是经验和志向。
第8章 简单之美
布尔代数将逻辑与数学统一了起来,但是在它发明了80多年后才被香农引入计算机相关论文中进入实用。
搜索引擎本质上就是利用布尔运算,对多个关键词在文章中的出现进行布尔运算。
第9章 图论和网络爬虫
最早是欧拉解决7桥问题提出了图论,直到互联网的出现图论派上了大用。
网络爬虫是一个常用的面试题,回答往往可以体现出应试者的水平。
第10章 PageRank
拉里.佩琪和谢尔盖.布林发明了PageRank算法,用来为网页排名。
佩琪提出给每个网页赋予权重,被权重高的网页引用的网页权重也会高。
布林解决了网页权重初值的问题,赋予相同初值,然后不断迭代比逼近实际。
第11章 如何确定网页和查询之间的相关性
TF-IDF算法,前者确定关键词在网页中出现的频率比例,后者表示该词的专业相关性。
第12章 有限状态机和动态规划
用有限状态机可以实现地址查询,由于有限状态机过于精确而不容易匹配,后来发明了添加了概率的有限状态机自动机。
动态规划(DP dynamic programming)这里的program是规划的意思,可以很好的解决路线规划问题,将较远距离的规划分解为较近距离的计算,可以大大降低运算量。
语音识别也是基于有限状态机自动机。
第13章 Google AK-47的设计者
辛格制作了很多算法,类似AK-47构造简单又好用,很多追求复杂的专家想挑战他的算法都失败了。
辛格和作者都尊崇简单的哲学,先尽快用简单算法满足80%的需求,然后再花较长时间研究复杂算法满足剩下的20%。
辛格要求每次细微改进都要能解释出原因否则就不采用,这样做的好处是能够逐步积累正确,出问题容易调整。而使用机器学习的方法得出的优化却很难人工分析出原因。后来辛格也通过机器学习的方法调整参数,但是每次改进要求能解释出原因。
第14章 余弦定理和新闻的分类
将特定词汇的出现次数统计,作为一个新闻向量。通过余弦定理,计算不同向量之间的夹角,进行分类。
第15章 矩阵运算和文本处理中的两个分类问题
利用矩阵的奇异值分解可以对文本进行粗分类。
第16章 信息指纹及其应用
信息指纹使用很普遍,判断网址是否重复、cookie、垃圾邮件地址、文章盗版等。
原理就是先把原始数据转成数字,然后再用伪随机算法将这些连续的数字转为128位或160位的指纹数字。
YouTube通过关键帧的特征值生成信息指纹,识别出原创者,然后所有相关广告都会由原创者得到。这样在没有利益后,盗版就很少了。
第17章 由电视剧《暗算》所想到的
凯撒大帝是最早的密码系统,由凯撒发明,就是字母错位对应。其实很容易破解。
二战前密码都很容易破解,二战时日本对密码和信息论不太懂,犯了很多低级错误,比如相同文件重复发送、新旧系统发送相同文件,所以日本的机密被窃取严重。
二战后发明了很多加密算法,最好用的就是基于大素数的非对称加密算法,一直没有被破解过。
第18章 闪光的不一定是金子
本章主要讲搜索引擎遇到的作弊问题。
解决问题有道和术两个层面,从作弊基本动机、特征、图论分析来做就是道(用clique结点识别作弊),从具体问题具体分析出发就是术。往往大家只关注术的问题,具体工作就会很多。
另外讲了权威权重的计算方法,需要做语法分析找到被引用的机构。
第19章 谈谈数学模型的重要性
- 1 一个正确的数学模型往往在形式上是简单的。
- 2 一个正确的模型一开始可能还不如一个精雕细琢过的错误模型(哥白尼日心说模型误差比托勒密地心说更大)
- 3 大量准确的数据对研发很重要。
- 4 正确的模型也可能受到噪音干扰,而显得不准确。这时不应该用一种凑合的修正方法加以弥补,而是要找到噪音的根源,这往往能通往重大的发现。
第20章 不要把鸡蛋放在一个篮子里——谈谈最大熵模型
最大熵模型应用广泛但是计算量巨大,吴军曾经发表过一种方法可以减少一些时间。
第21章 拼音输入法的数学原理
曾经有大量的中文输入法,追求最小击键次数但实际上不符合认知心理学,增加了思考时间和学习难度。
后来通过利用通信原理进行模型优化,双拼输入法又占据了主导。
输入法的模型和导航类似,是概率有限状态自动机和动态规划算法的结合。
第22章 自然语言处理的教父马库斯和他优秀的弟子们
第23章 布隆过滤器
布隆过滤器可以用较小的容量存储一个黑名单散列,但是缺点是可能误识别。补救措施是增加一个很小的白名单。
第24章 马尔可夫链的扩展——贝叶斯网络
贝叶斯网络在谷歌有一个项目Rephil,把关键词进行概念分类,用来做广告使用。
第25章 条件随机场文法分析及其他
相当于贝叶斯网络改为无向图。
可以应用于犯罪率分布预测。
第26章 维特比和他的维特比算法
维特比算法可以用来解决篱笆网络最短路径,可以应用于通信、输入法等方面。
维特比是高通的创始人。
第27章 上帝的算法——期望最大化算法
之前讲过两种分类算法,一种是自顶向下提前设定好类,然后有新元素时进行距离计算、聚类,这种方法的缺点是人工指定工作量大而且动态性不强。
另一种是自底向上,依靠大量计算,自动迭代聚类,缺点是计算量太大。
EM算法给定一些训练数据和最大化函数,然后通过几次自动迭代计算出真正的分类,优点是自动化、计算量也不算大,缺点是可能不是最优解。
第28章 逻辑回归和搜索广告
搜索广告第一代模型是百度的竞价排名模式,逐步没有人点击广告了,模式失效了。
第二代是点击预测模型,但是预测本身需要实际投放测试,而实际投放测试本身又会影响点击率,所以使用逻辑回归模型进行迭代逼近。
使用最大熵模型GIS和优化的最大熵模型IIS都可以做逻辑回归模型参数的训练。
第29章 各个击破算法和Google云计算的基础
分治算法,Map&Reduce,可以将一个10*10矩阵的计算分配在100台服务器同时计算然后再合并结果。
第30章 Google大脑和人工神经网络
人工神经网络类似贝叶斯网络,但是每层结点的函数只能是输入参数线性相加后整体变换,比贝叶斯网络灵活性差但是标准性好,便于计算。
Google大脑是以人工神经网络为基础,优化了云计算分配、步进函数、数据存取,后实现的大规模的人工神经网络。
第31章 大数据的威力——谈谈数据的重要性
如何确定统计的数据是否足够满足给定的方差?可以利用切比雪夫不等式计算数据量。
现在各家搜索引擎公司的算法都差不多,但是只有Google做的最好,原因是谷歌通过大量的点击数据,获得了更高的搜索准确度,形成了马太效应。微软等厂商,通过浏览器、搜索框等软件,搜集Google的用户点击,也可以快速提高准确度。
大数据相比大量数据,重点是多维度和完备性,才可以恢复出事物全方位的完整描述。
用大数据做统计,成本低、准确性高、多维度。
附录 算法复杂度
O()括号里是一个多项式,描述算法复杂度。
P(polynomial)问题,一个问题存在多项式复杂度的算法。
NP(非确定多项式)问题,是P问题的父集合,绝大多数的问题都不可以用多项式描述。
NPC(NPComplete)问题,NP中可能在多项式时间内被归结为P问题的问题。
NP-hard问题,难度至少为NPC的更难的问题范围。
算法研究的目的是找到尽量简单的P解法,对于NPC和NP-hard问题寻找近似解。
后记
作者发现IT公司普遍喜欢用“凑”的方式去实现功能。在谷歌上市有钱之后,用了几年时间,几乎用最符合原理的算法将代码重写了一遍。而很多美国二流公司和中国公司普遍还在凑。他希望大家看完这本书后能有意识的提高理论层次,顺着正确的方向去寻找解决方案,而不是不断的凑。
读后感:
这本书真是大开脑洞,以前觉得各种算法都是天天钻研的数学家才能搞懂的东西,原来不是那么遥不可及。
很多算法其实遵循的原理非常简单,而效果却很惊人。
以后要逐渐扩展算法领域,记录各种常见算法,逐步积累。