1.1 打开算法之门

1.1.1 算法简史

算法存在的前提是数据,有数据才能有算法。最早关于人类记录数据的例子是公元前18 000年前出现的符木。生活在旧石器时代的部落人民学会了在树枝上刻下凹痕来记录日常的物品供应和一些简单的交易活动,并且能够通过比较树枝的凹痕进行基本的计算,进而对一些事情做出简单的预测,如食物可以储存多久不变质。

到了公元前4000年左右,在发源于亚洲西部亚美尼亚高原的幼发拉底河与底格里斯河河畔(两河流域),居住着一群人类最早的居民——苏美尔人,他们创造了璀璨的苏美尔文明,也就是美索不达米亚[1]文明的开端。

在像美索不达米亚那样极其恶劣的气候下,知道播种和收获的准确时间是必不可少的,因此有必要找到某种确定时间的可靠途径。最简单的方法是利用月亮的盈亏循环。月亮由最初的蛾眉月到下一个最初的蛾眉月共需要29天半的时间,人们就考虑将这样一个循环视为一个基本的计时单位(我们将其称为一个月),然后在月亮累计运行12个这样的计时单位(6个29天,6个30天)后,一“年”就过去了,又到了开始播种的时候。不幸的是,他们不知道一年实际上是地球绕太阳公转一周的时间,月亮的12次循环或12个月比一个太阳年少11天。在900年后,苏美尔人才了解到,每隔几年他们就要在其年历上另加一个闰月,才能准确地预测季节的循环。

通过感受季节的周期性更替,结合对太阳和月亮的观察,苏美尔人花了900年的时间收集数据,完成了人类的第一个算法模型——太阴(月)历。随后,苏美尔人发明了度量,包括12单位度量和60单位度量,这便是人类最早的十二进制和六十进制。现在世界各国通行的时间度量方法,每天分为24小时,每小时包含60分钟,每分钟包含60秒,钟表刻度盘上走一圈为12小时,还有以12为基本计量单位的“打”,都是在十二进制和六十进制的基础上发展而来的。在公元前2500年左右,苏美尔人就已经掌握了加、减、乘、除四则运算的计算方法,形成了早期比较简单的几何与代数方法论。

时间线走到公元前300年左右,一种耳熟能详的算法——辗转相除法,由古希腊数学家欧几里得提出,因此这个算法又称为欧几里得算法。辗转相除法的意思是两个正整数aba > b)的最大公约数,等于a除以b的余数与b的最大公约数。该算法的具体步骤如下。

(1)输入两个正整数ab

(2)计算a除以b的余数r

(3)如果r等于0,则最大公约数为当前的b值,算法结束;

(4)如果r不等于0,则a=bb=r,跳转至步骤(2)。

在公元100年左右,比较全面的算法研究出现在由我国古代的张苍和耿寿昌撰写的《九章算术》中。作为我国古代的数学名著,《九章算术》的内容十分丰富,全书采用问题集的形式,总结了自春秋战国至秦汉以来的数学成就,对246个与生产、生活有联系的应用问题逐一提供了与之相应的解决之法。不过,《九章算术》存在着不可忽视的缺点,那就是全书没有任何数学概念的定义,在各个问题的解决方法中,也没有给出相关的理论推导与证明。直到三国时期,数学家刘徽给《九章算术》作注,才弥补了这个缺陷。

总之,早期的算法研究倾向于计算和解决与日常生活息息相关的数学问题。随着算法理论的发展和人类科技的进步,算法研究逐渐转向研究数据本身的规律和价值,尤其是在生产与生活中产生的大量数据所带来的预测价值和决策价值。

到了20世纪上半叶,数理统计学蓬勃发展。作为数学的一个重要分支学科,数理统计学主要研究随机数据的收集、汇总与分析之法,然后对相应的实际问题做出预测和推断。这期间先后诞生了影响至今的两大统计学派——频率学派和贝叶斯学派。从20世纪初开始,以Fisher和Pearson为主要代表人物的频率学派,推动数理统计学发展成为一门成熟的学科。频率学派从自然的角度出发,试图直接给事物本身建模,认为概率就是频率,描述数据分布的参数是固定的,可以使用估计方法得到数据分布的参数值。然而,频率学派这种类似上帝视角的问题切入法,并不能很好地解决所有的实际问题。在20世纪中叶以后,曾一度被频率学派扼杀的贝叶斯[2]统计迅速发展壮大起来,和频率学派分庭抗礼。贝叶斯学派否定了频率学派的概率就是频率的观点,并且不从描述事物本身入手,而是从观察者角度出发,构造出了一套在贝叶斯概率体系下,对事物不确定性做出推断的框架和方法。当然,无论是频率学派,还是贝叶斯学派,都贡献了一系列非常实用的算法并沿用至今。例如,频率学派的最大似然估计(Maximum Likelihood Estimate,MLE)在神经网络模型中应用广泛;贝叶斯学派的蒙特卡罗方法(Monte Carlo Method)在强化学习的探索和发现中起到了非常关键的作用。总之,两大学派的理论都很重要,缺一不可,并无高下之分。

从20世纪下半叶开始,在两大统计学派的激烈博弈中,感知机学习、统计学习、归纳学习、浅层学习等陆续萌芽发展,这类研究数据本身规律和价值的算法,称为机器学习算法。到了20世纪80年代,机器学习算法逐渐成了一个独立的研究方向。在这段时间,诞生了大量关于机器学习的算法,其中一些比较典型的、具有代表性的算法将在后续的章节中介绍。

注意:为了避免概念混淆,本书有关特定数学问题的算法(前言中提到的信息学算法,详见第3章)统称为基础算法,有关研究数据规律和价值的算法(详见第4章)统称为机器学习算法(或AI算法)。

1.1.2 算法与人工智能

相信有不少读者是抱着对人工智能的兴趣阅读本书的。在比算法世界更大的世界中,人们谈论更多的也是人工智能,而非算法。那么,二者到底有什么关系?

人工智能的概念从提出到现在已经过去了半个多世纪,但是关于人工智能的定义却依然存在争议。我们不妨仔细审视一下“人工智能”,它由“人工”和“智能”两个词组成。

先看“智能”一词,它的字面意思是智慧和能力。在自然界,智能可以分为个体智能和群体智能两种。除了人类,被广泛认为具备个体智能的生物还有大猩猩、海豚和章鱼等,具备群体智能的生物有蜂群、蚁群和沙丁鱼群等。在个体智能中,只能表现兴奋和抑制两种状态的人类大脑神经元,形成了复杂的思维与智慧。在群体智能中,通过分泌信息素完成交流的蚂蚁,构成了分工明确、井然有序的蚁群。从这个角度来看,无论是个体智能,还是群体智能,都是由大量简单行为连接转化而成的。在20世纪中期,冯·诺依曼[3]受此启发,提出了元胞自动机(Cellular Automata,CA)。元胞自动机中单个个体的算法非常简单,其状态改变只受周围直接相连的其他个体状态影响。例如,假设个体只有0和1两种状态,算法设定个体本身的状态跟随周围个体中多数状态值的变化而变化。令人难以置信的是,这些由简单算法构成的元胞自动机,居然成功模拟出了蚂蚁、大雁、洄游鱼类等动物的一些群体智能行为。

再看“人工”一词,字面理解为由人创造。所谓人工智能,就是由人创造的智能。上文提到的由算法驱动的元胞自动机体现出的群体智能行为,就是一种由人创造的智能。

所以,人工智能离不开算法,算法是产生人工智能的直接工具。

1.1.3 什么是数据分析

顾名思义,数据分析(Data Analysis)就是对数据进行分析,即对收集到的数据进行汇总与统计,并且从中提取和归纳出有价值的信息。数据分析一般会预先确定一个明确的统计指标,如总和、均值等;然后采用相应的计算方法和工具,得到预定统计指标的结果;最后采用合适的形式将结果展示出来。

数据分析作为算法研究的第一步,从古至今从未改变,如古代关于天文、历法研究的第一步就是长期收集和汇总数据。因此,从工作职能上区分,与算法工程师相比,数据分析工程师一般只需专注于数据分析模块。

我们通过一个实例表明数据分析到底在做什么。例如,“关于大学生手机使用情况调研”课题,数据分析的目标之一是统计各种数量总和与均值,包括但不限于不同年级、不同性别的大学生购买和使用不同款式品牌的手机数量总和与均值。然后将这些统计值使用合适的图表展示出来。例如,使用条形图展示“最受男生欢迎的手机型号排序”“销量最高的大学生手机型号排序”“最受大学生欢迎的手机品牌排序”的统计结果,使用折线图展示“大学生每月新购的手机数量”“大学生一周中每天的平均通话时间”的统计结果。

1.1.4 什么是数据挖掘

顾名思义,数据挖掘(Data Mining)就是对数据进行深入研究,其目的不仅是获得数据统计分析的表层结论,更多的是挖掘数据与数据之间的内在关系。从这个层面而言,数据挖掘的精髓在于探索,探索数据潜在的模式、规律和规则,是一种深层次的数据分析。数据挖掘既有基于统计的算法,又有基于模型的算法。虽然基于模型的算法和机器学习算法存在不少重合之处,但它们的侧重点不同。

数据挖掘作为机器学习算法研究中承上启下的一步,比数据分析更能深入数据,并且不完全依赖于算法模型。因此,与算法工程师相比,数据挖掘工程师对数据模式与规律、规则等数据方面的“嗅觉”要更敏锐。

在“关于大学生手机使用情况调研”的课题中,基于统计的数据挖掘,可以研究一些特征的共现情况。例如,根据“视频”“游戏”“聊天”“拍摄”等标签的分析统计结果,结合固有人群标签(性别、年级、专业等)的统计结果,可以得出各个标签之间的关联度分析结果。基于模型的数据挖掘,可以研究相似群体。例如,“具备相似手机使用习惯的大学生”有哪几类,每个类别下的大学生分别具备什么样的特质,等等。

1.1.5 什么是机器学习

顾名思义,机器学习(Machine Learning)就是让机器自己去学习。既然让机器自己学习,就需要人工预先指定一套学习规则,这套既定的学习规则就是机器学习的算法模型。从这个层面来说,机器学习的精髓在于优化,即根据收集到的数据样本,优化指定机器学习算法模型中的各项参数。

机器学习作为算法研究的最后一个环节,从狭义上来说,其重点强调的是模型的选择与参数优化的方法。因此,与算法工程师相比,机器学习工程师专注于模型层面的研究[4]

在“关于大学生手机使用情况调研”的课题中,机器学习可以利用所有能提取到的大学生特征,基于模型完成某些特定场景中的预测或决策任务。例如,机器学习可以通过模型预测帮助电商平台推荐更适合大学生用户群体的手机品牌与型号,通过模型决策帮助手机厂商提高面向大学生手机市场的投资收益率(Return on Investment,ROI),等等。