读《算法的乐趣》的乐趣超出了我的预料。
说到算法,大部分计算机专业的同学的第一反应估计是MIT出版社的经典教材《算法导论》(Introduction to Algorithms)。这是一本由浅入深的好书,堪称“神书”——别看书挺厚,但是对初学者来说很难弄懂的问题也娓娓道来,让人看一遍就明白;而且作者用最简单的英语词汇和句法写书,以至于世界各地的学生们,不需要英语很好,即可读懂原版。只是看完这本大部头之后,总有一些意犹未尽的感觉——对我们日常生活中常见的比如音乐播放器里以及电子游戏里的算法并没有太多介绍。而这些正是《算法的乐趣》中主要的部分。
在Amazon上,另外两本排名靠前的经典算法教材是Jon Kleinberg的《算法设计》(Algorithm Design)和Steven S. Skiena的《算法设计手册》(The Algorithm Design Manual)。这两本出自名家之手的教材和很多教材一样,按照算法的类型或者背后的设计思路来组织内容。这是教材应该做的,“授人以鱼不如授人以渔”,传授思路而不是算法本身是教材的写作目的。可是算法最有意思的地方首先在于算法本身,因为算法是为了解决实际问题而设计的,所以让大家认识到算法奥妙的自然顺序应该是先展示有趣的问题,再展示优雅的算法,最后归纳设计思路。而这正是《算法的乐趣》吸引人的地方。说到乐趣,总让我想起我学习和使用数学知识的经历。虽然我的学位是关于统计机器学习的,而且毕业后一直从事相关工作,但是我从小学一年级到博士第三年都对数学毫无兴趣,因为学校的老师和数学成绩好的同学都说不明白数学的用处,以至于我一直以为数学的作用只是锻炼和展示自己的聪明,博得老师的表扬,成为陈景润那样为国争光的英雄。而这些对我实在没有吸引力,而且我认为恐怕对绝大部分学生都没什么吸引力。
我认识到数学的价值,是因为在博士第三年把研究方向换到了统计机器学习。在读教材的时候,我曾想验证“数学无用”,所以费尽心力地试图写一个程序来判断一个64×64像素的图片里到底是数字“1”还是数字“9”,却发现无论如何也很难写一个有效的程序;可是利用教材里的数学知识却能设计和“训练”一个数学模型,准确地识别任意字符。因为体会到了数学的用处,我兴奋地用了一年的时间复习大学本科的数学课程,然后才读懂了人工智能的专业教材和论文。此后才有所创新,发表论文,到博士毕业。这整个过程用了三年,而效果超过了之前19年数学教育的效果。
在这个过程中,我自然而然地开始注意数学知识的前因(比如为什么人们会关注长度、面积,怎么会有人考虑勾股定理这样的规律)以及后果(今天的数学知识能给物理学和机器智能带来什么样的帮助),也开始归纳和了解各种数学系统背后的规律,能体会哥德尔定理阐述的意思。当然,也破除了“数学是各种科学之母”之类的迷信,数学当然不是“科学之母”,而是“科学之子”,是先有物理学、力学和天文学,才有的数学;先有应用场景后有工具,先有探索后有归纳。
算法也是如此。先有工程问题需要解决,算法是解法,设计算法是寻求解法。虽然算法作为一门科学是归纳寻求解法的思路,但学习这种归纳法的前提是能体会各种具体算法的用处和效果。意识到这一点,自然也就破除了诸如“学好数学才能学好算法”之类的迷信。而把算法解决的各种有趣问题罗列出来,把算法的可爱之处展示给愿意发现和体会生活中点滴乐趣的读者们,正是《算法的乐趣》在技术价值之外的一层社会价值。
十年前,当我们坐在课堂里学习算法的时候,我们学到的是如何用人脑寻求解法,然后把解法写成程序,让计算机照着执行去解决问题。这是“经典算法”。最近十几年,随着Internet产业的兴起,Internet服务在不断取代原来由人提供的服务,这就要求机器拥有一定程度上能取代人的“智能”。在搜索引擎、推荐系统和广告系统等各个领域里,类似上述“识别数字”的问题越来越多,而人工智能和机器学习的应用也越来越深入我们的生活。机器学习算法的设计目标和“经典算法”不同——不是让人来想解法,而是让计算机从数据归纳知识——有了这些知识,计算机就能自己寻求解法。
虽然经典算法和机器学习算法之间的差别大得如同一场革命,但是由经典而入机器学习的过程却是自然而然的。比如《算法的乐趣》中介绍的曲线拟合问题,就是supervised learning(有监督学习),而音乐播放器里常用的傅里叶变换和其他时域频域变换则是unsupervised learning(无监督学习)的技术基础,棋类游戏算法是博弈论和reinforcement learning(强化学习)的经典例子。我常见有朋友从读数学教材开始探索机器学习和人工智能算法,也常看到有人不堪忍受长时间缺乏乐趣的探索以至于半途而废。如果是这样,也许不如从《算法的乐趣》开始这个探索过程。
我曾经以为从乐趣出发阐述算法的书会从西方发芽,没想到先看到了一本中文书。这真超出了我的预料。
王益
LinkedIn高级主任分析师