您的位置:首页 > 其它

数学之美》读书笔记和知识点总结(一)

2013-07-12 09:52 363 查看


《数学之美》读书笔记和知识点总结(一)

  早在前几个月我在台湾的时候,就听说《数学之美》是一本非常不错的书,也正好是我喜欢的类型,一直想买。回到北京之后的第一件事就是把我这半年积攒的书单全部兑现,其中包括《数学之美》和《浪潮之巅》。看了之后大叫过瘾,让我好好享受了一回数学之美。

文字和数字的起源
很久以前人类以不同的叫声表示不同的信息,达到彼此交流的目的,当所要表达的信息太多时,叫声已经不够用了,于是文字产生了。

文字:知道“罗塞塔”石碑的典故。
信息冗余的重要性:当石碑经历风吹日晒,一部分文字被腐蚀掉时,还有另一部分重复的文字作为备份,可以还原石碑的信息。类似的还有人体的DNA,在人体当中,有99%的DNA是无效的,正是这99%保证了人类的正常繁衍,当遇人类遇到辐射时,DNA发生变异的概率是1%.

数字:进制的产生
为了表达大数,不同的文明产生了不同的数字表示方法,最终只有使用10进制的文明生存了下来。
10进制:古中国、古印度、阿拉伯
12进制:印度、斯里兰卡
20进制:玛雅,玛雅文明失败的原因之一就是进制太复杂,不利于科学进步,咱们现在要背九九乘法表,他们背的是361路围棋棋盘。
单位进制:罗马(5、10、50、100、500、1000)

数字的表示方法(编解码原理)
中国:编解码的密钥是乘除 二百万 = 2 x 100 x 10000
罗马:编解码的密钥是加减 IV = 5-1 = 4 ,要用罗马文字表达10亿的话,一黑板是写不下的。

抄圣经的校验方式:将每个字母映射成一个数字。把每一页文字对应的数字按行列加起来,写在每行每列的尾部。在抄写时,把自己的数字和原文的数字进行对照,可以以最快的速度检查是否有抄写错误,而且还能定位行列。这种简单有效的方法已经开始展现出数学之美了

自然语言处理的两条路
1、语意理解(失败):让计算机像人脑一样分析语句的意思,建立语法分析树。
失败原因有两点:
a.当遇到长难句时,计算量大幅增加,计算机的解码是上下文无关的,而自然语言是上下文相关的。
b.要理解语意必须建立大量的语法规则,然而即使规则再多,也不能覆盖全部的自然语言,总会有新的流行语言产生,它们处于语法规则之外。

2、数学与统计(成功):通过隐含马尔可夫模型来估计句子出现的可能性。
马尔可夫假设:在一个句子中,每个词x出现的概率只与它前面的一个词x-1有关,而与更前面的0~x-2个词无关。这是一个偷懒却有效的假设,这个著名的假设使得语言处理的计算速度大幅提升且不失准确。
马尔可夫链是马尔可夫模型的基础。它是一个有向图,各个状态之间有转移概率。同时,马尔可夫链也对概率论的研究产生了巨大贡献。
马尔可夫链的训练:鲍姆-韦尔奇算法

统计学陷阱
当统计样本不足时(分母太小),统计结果的说服力将降低,此时可以用古德-图灵方法对统计结果进行打折平滑处理

N阶马尔可夫假设:每个词和它前面的N-1个词有关,N元模型的大小是N的指数关系。Google翻译使用的是4阶模型
了解贾里尼克对现代语言处理的贡献

信息量与熵
基础:香农3定理
信息熵:衡量信息的多少和不确定性的大小,可以衡量统计模型的好坏
条件熵:已知一个变量时,另一个变量的信息熵
相对熵:用来衡量两个函数的相似性
信息熵是网页搜索的基础,它可以衡量关键词和网页之间的相关性。

搜索引擎
搜索引擎的基础是boolean逻辑运算,“与或非”这三种最快的运算方式使得搜索引擎的速度变的如此之快。一个指令周期如果进行32位的bool运算,计算速度可以达到10亿次/秒
香农提出了将所有数学运算(+ - * / ^ 开方)转换成bool运算的方法

构建网络爬虫的要点
1、利用哈希表记载哪个网站被下载过
2、广度优先 vs 深度优先?广度优先是理所应当的,爬虫应该先下载各大网站的首页再去下载它的子页,但是广度优先需要较长的握手时间(下载服务器与网站建立通讯的时间),所以广度优先和深度优先之间要做一定的权衡
3、URL的提取:面对不规则的网站,无法直接从HTML中提取URL

Google的网页排名算法:pagerank
以前我在数学建模的比赛中用过这个算法对论文进行排名,所以比较熟悉了
pagerank算法的核心是迭代计算每个网页的权重,然后通过权重的大小对网页排名。
迭代初始时每个网页的权重是一样的,然后通过计算更新每个网页的权重,规则如下:
1、当一个网页被越多的网页引用时,它的权重越大
2、当一个网页的权重越大时,它引用的网页的权重也随之变大
3、当一个网页引用的网页越多时,被它引用的网页获得的权重就越小
如此反复迭代,算法最终会收敛到一个固定的排名。

分类: 读书改变人生

标签: 读书改变生活


《数学之美》读书笔记和知识点总结(二)

接上一篇文章,我继续对《数学之美》进行总结。由于篇幅原因,很多具体的算法没有写,只给出了外链。如有需要请自行搜索

网页相似性的度量
问题描述:求出任意两个网页之间的相似程度
解决方法:TF-IDF方法(term
Frequency-Inverse Document Frequency)
步骤:提取出网页的关键词,然后根据网页的长度对关键词进行归一化。
两个网站间的相似性 = ∑(关键词 * 词频 * 权重)
关键词:如“原子能”,“的”
词频:在进行对比的两个网页中,关键词出现的频率。
权重:关键词在所有网页中出现的概率越低,权重越大。很显然,“原子能”的权重远远大于“的”的权重。

地址识别
问题描述:输入一串文字,输出该文字对应的准确地址
解决方法:有限状态机
有限状态机方法先为地址建立起有限个状态(市、省、街),然后从第一个状态开始,走到最后一个状态,把经过的状态连接起来,形成有效地址。从一个状态走到下一个状态是有严格条件的。
问题:当遇到错别字,或者地址描述不清时,会在某个状态停止不前,无法进行匹配。
解决方法:基于概率的加权有限状态机,对地址模糊匹配。

导航和动态规划
问题描述:求出地图上任意两点间的最短距离。
解决方法:

遍历查找:时间复杂度呈指数增长,无法实现
动态规划:在起点A和终点B之间划一条分隔线,假设路程必然会经过线上某一点X,这样的点X的数量是有限个,不妨记为(x1,x2…xn)。将求解全程最短路线化解为求解Min(
D(A,xi) + D(xi,B)),其中D表示距离

Cos定理和相关系数
问题描述:度量两篇新闻的相似性
解决方法:用上文的TF-IDF方法,统计两篇新闻的关键词,把这两篇新闻变成两个向量,然后计算它们的余弦距离。余弦距离的计算方法可以参见我之前的博文
应用:新闻分类,广告投放

大规模数据的分类问题
问题描述:当有海量数据,需要计算它们两两之间的距离时,计算量巨大,耗时太多。
解决方法:矩阵的奇异值分解方法。
奇异值分解方法是把一个大矩阵分解成3个小矩阵的乘积,每个矩阵都有明确的物理含义。分解之后,存储量和计算量提高了3个数量级。
Google提出了奇异值分解的并行算法,极大的提高了算法效率。

信息指纹
问题描述:网络爬虫在哈希表上记录已经访问过的网页时,需要计算出每个网页的指纹。
问题转变成了将一串任意长度的网址转变成一个定长的随机数,这个数字就是这个网页的指纹。
计算方法:
1、冯诺伊曼法:较差,不同的字串容易产生相同的指纹
2、梅林旋转算法:比较差,产生的随机数之间有相关性,当用于加密的HTTPS时,破解了一个就等于破解了一大堆
3、MD5SHA-1:它们是现在常用的伪随机数产生器所使用的标准,非常安全。
应用:判断两个集合相同
1.关键词相同:“北京 中关村 星巴克”和“星巴克 北京 中关村”是否相同?
判断方法:计算两个集合中每个元素的指纹,加它们相加
如:S = {e1,e2…en},它的指纹FP(S) = FP(e1) + FP(e2) + … + FP(e3)
加法的交换率保证了上面的两组关键词的指纹是相同的
2.垃圾邮件判定
一个账号A发送的邮件地址指纹如果和已知的黑名单账号B基本相同,那么可以把A拉黑了。
3.判定文章抄袭
同理,提取关键词,计算指纹,比较
4.Youtube反盗版
提取关键帧,计算指纹,比较

密码学
最早的密码:把26个字母按照双方制定的规则映射成其它的字母。
破解方法:统计词频,如英文字母e的出现频率最高。
改进方法:将原来一对一的映射改成一对多的映射。
什么是好的密码?好的密码是统计上均匀分布,不能根据已知的明文和密文推断出新的密文,当敌方截获密码后,获得的信息量不增加。
现代的加密方法:
《暗算》中的光复一号密码
原理:现今对于大数的质因数分解还没有快速有效的算法。

搜索引擎的反作弊
问题描述:防止作弊网站通过大量的链接提高自身排名
解决方法:
1.增加排序算法的抗噪能力
2.排序结果去噪
例:在很吵的汽车进而打手机,先采集一段时间的噪音,生成一个频率相同,振幅相反的信号,中和原噪音。
网页防作弊的方法也是类似的,因为作弊者使用的方法是时间相关的,先采集一段时间的作弊信息,然后生成逆向信息,还原真实的网页排名。
值得注意的是,作弊网站还有两个明显的特征:
1.作弊网站之间的余弦距离几乎为1
2.作弊网站内部有大量的互相自链,内部形成闭环

数学模型的重要性
对于任何问题,找到准确的数学模型是最重要的,这比研究什么机器学习算法要有效的多。
例:古代历法周期的确定
古埃及:以天狼星和太阳的位置判断一年的时间,这个数学模型不好,古埃及测量的一年=365*4+1=1461天
美索不达米亚:以五大行星的位置确定一年的时间,他们已经有了月和四季的概念。这个数学模型就相对准确一些。
了解托勒密的贡献(地心说代表人),他的伟大之处难以言表,任何一条发明都足以载入史册:

发明了球坐标
发明了经纬线
发明了弧度制
发明了黄道
用约50个大圆套小圆的模型精确计算出了所有行星的运动轨迹,其精度之高以至于现今的平润年规则都是基于他的功劳。

数学模型的要点,原文总结了4点,说的非常好

一个正确的数学模型应当在形式上是简单的。
一个正确的数学模型一开始可能还不如一个精雕细琢的错误模型来的准确,但是,如果我们认定大方向是对的,就应该坚持下去。
大量准确的数据很重要
正确的模型也可能受噪音干扰,而显得不准确;这时不应该用一种凑合的修正方法弥补它,而是要找到噪音的根源,这也许能通往重大发现。

Pagerank和TF-IDF就是两个很好的数学模型

最大熵模型
核心思想:等概率
我以二分查找和称小球游戏这两个例子来进行说明
二分查找:每一次查找都相当于一次0和1的判断,每次查找后的结果消除了一半的不确定性,从香农定理来说,这也是最好的结果了。算法的思想是,每一次查找时,要找的数据分布在二分点前后的概率都是50%,这一点很重要!
称小球游戏:12个小球有一个是坏的,不知轻重,用天平把它找出来。根据信息论,最少的称量次数应该是以3为底log24=2.89次,因为天平有3个状态:左倾,右倾,平衡。坏的小球有2个状态,或轻或重。每称一次,可以消除2/3的不确定性,经过3次称量足以找到这个坏的小球。所以每次称量时的核心思想是让天平的这3种状态等概率!
最大熵模型的训练方法:
GIS迭代算法(非常复杂),和改进的IIS算法

拼音输入法
双拼失败的原因:
1.增加编码的歧义性,使得候选项变多
2.比全拼的思考速度慢
3.容错性差,难以区分卷舌音和鼻音
五笔的没落:
1.需要背字根,上手时间较多
2.脱稿打字时,思维速度慢
拼音的优势:
1.不用学,谁都会
2.输入自然,思维连贯
3.编码有冗余,容错性好,平均击键次数小于3

补充一下,对于五笔输入法,我严重不同意原文的说法,我用五笔好几年了,感觉比拼音好用多了

背字根其实非常简单,正常人一天就足够了,再用打字软件多练习一下,三天就可以熟练输入常用字,对于非常用字,多练习几次也就会了
对于熟练使用五笔的人来说,脱稿打字的速度不会下降太多,对于我来说,基本上是不会比拼音慢的。

另外,五笔还有3个优点原文没有提到

使用五笔能够提高使用者的语文水平。因为使用五笔时必须知道要输入汉字的写法,所以用五笔的人不会提笔忘字,而且会知道大量疑难汉字的写法。再者,对于我这样一位书法爱好者,又经常自学点文字学,五笔更是不二选择。
不认识的汉字的输入。在输入陌生姓名时,经常会遇到不认识的汉字,这时五笔的优势就体现出来了,只要看到汉字就能把它打出来。在用网络词典查生字时也是这样。
输入速度快,一般水平的用户每分钟100字应该没问题

但是,五笔还有一个明显的缺点原文也没有说,那就是无法输入整句,至少目前来说比较难,现在通常的解决方法是用户自己手动增加词库。

布隆过滤器
问题描述:为解决哈希表存储效率低。
布隆过滤器只需要哈希表1/4到1/8的空间就可以解决相同的问题。它的优点是快速,省空间,但是有一定的误识别率,补救方法是建立一个白名单。

条件随机场:隐含马尔可夫模型的扩展
应用:浅层句法分析,模式识别,机器学习等
隐含马尔可夫模型的观察序列里面,每一个观测值Xi都和它的状态Yi有关,如果把它前后的状态Yi-1,Yi+1也考虑进来,这个模型就是条件随机场
条件随机场的形式简单,但是实现复杂,它的训练也很麻烦,不过现在已经有开源软件可以用了

维比特算法:它是一种动态规划算法,能够实时解决有向篱笆图的最短路径问题。

移动通信的基础
频分多址(FDMA):对频率进行切分,由于相邻频率会互相干扰,因些每个信道要有足够的带宽。由于带宽有限,要么限制通信人数,要么降低话音质量。
时分多址(TDMA):将同一频带按时间分成很多份,每个人的通信数据占这个频带传输时间的1/N
码分多址(CDMA):每个发送者有自己不同的密码,接收者接到不同信号时,过滤掉自己无法解码的信号,留下和自己密码对应的信号。

期望最大化
EM聚类算法:无需指定聚类数量
需要指定一个距离函数,使得同类数据间的距离小,不同类数据间的距离大,这个函数最好是凸函数,否则会陷入局部最优解,而不是全局最优解。

逻辑回归
利用一个函数将所有实数映射到(0,1)



在研究一个问题时,经常会有很多因素对其造成影响,不妨把这些因素记为一个向量(x1,x2…xn),然后利用上面的公式把它们线性组合起来。
Z = a0 + a1x1 +
a2x2 +…+ anxn, 这样就实现了多因素的归一化,无论这些因素的值是多少,都可以把它们统一量化到(0,1)范围,然后进行分析。
注意到Z其实就是一个一级的神经网络,任意训练神经网络的方法都可以用来训练并确定系数组a

云计算的基础
思想:分而治之
以矩阵乘法为例,计算C=A*B,当一台服务器存储不下矩阵A时,如何做矩阵乘法呢?



将A和B分别按行按列拆成M*N个小矩阵,然后将每个小矩阵分给一个服务器来计算,再把所有计算结果合并起来,矩阵乘法就完成了。
由于服务器之间是并行计算,所以计算时间是原来的1/(N*M).
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: