@Lenciel

人工智能,奇点及其他(一)

3 月 14 日,是个很魔性的日子:这天是爱因斯坦的生日,也是卡尔马克思的忌日,还是“π日”——纪念圆周率弄的“数学节”,忒魔性。

虽然同一天是巧合,但马克思主义、广义相对论和数学真的有一个共性:它们都在人类社会被广泛地讨论,反复地消费,但真正明白它们的人类非常少。

当然,多年之后回看 2016 年的这天,大概不会找到关于上面几样东西的太多痕迹:因为 AlphaGo 和李世乭的对弈,大家都讨论人工智能呢。

在朋友圈或者小网站满天飞的段子里,严肃媒体纷纷跟进匆忙写就的报道里,以及少数科学家对未来的惊世骇俗的预测里,人工智能的进展被大大神话了。

而在专业圈子里面,不知道是因为看到小白们纷纷讨论科学问题感到不屑一顾,还是对媒体没把自己研究的领域大肆报道感到呼吸不畅,人工智能的进展又被一些人大大地低估了。

而本座多少也算接触过人工智能:当年导师第一次关怀小弟,就扔我去实现一个基于网格计算的象棋程序。项目虽然失败了,却也激发了本座写代码的兴趣。自动化系的所有课程,优化相关的我还算有点儿兴趣,毕业后一有机会也都喜欢实现算法来玩玩:去年参加基友组织的 2048 编程比赛,正好还仔细读过台湾道友的一个使用了蒙特卡洛树搜索的实现。

所以虽然并不太懂,也想结合自己知道的,为避免人工智能变成下一个被广泛讨论反复消费,但真正明白的人太少的话题,尽一份普通人的力量。

人工智能

当我们说人工智能的时候,我们在说什么,对不同的人来说很不一样。

比如这是我的老同学,现在从事无人系统教学和研究的李教授在朋友圈里面的一段话:

α狗的表现说明了在深度网络的帮助下,多步策略优化已经可以被数据驱动得很不错了。自从两年前 nature 上发表了将深度网络与增强学习结合的工作,就可以预见这一天很快到来。不过,要说这是人工智能的伟大胜利,可能有些牵强。这种有准确问题表示并且规则清晰的搜索任务,算不算人工智能估计还得另说呢。非要说人类能力干不过就算牛,那么在干微分方程数值解等任务上,计算机早就甩我们一百条街了。神话下棋计算机的估计有两类人,一是不太懂行的科普作家,二是准备骗人的商家。当年一个傅立叶变换都能包装成各种包治百病的“x 林频谱仪",还有什么是不可能的?

可以说老李的出发点和本座灌这篇水的意图类似,说的内容我也觉得很赞。唯独“这种有准确问题表示并且规则清晰的搜索任务,算不算人工智能估计还得另说呢”,让我想起来人工智能奠基人之一麦卡锡当年的娇嗔:

As soon as it works, no one calls it AI.

也就是说,虽然人工智能相关的技术我们每天都在大量使用,但因为执行端是电脑,而电脑能够执行的仍然是表达算法的代码,所以一个人工智能的问题一旦被解决,就变成了一个算法,没有人认为它是人工智能了。

那么人工智能究竟是什么呢?

学术界的人工智能

治学先治史。

人工智能的奠基,公认是在 60 年前的达特茅斯会议,原因之一是会议的正式名字:“人工智能夏季研讨会” (Summer Research Project on Artificial Intelligence),据考证这是 Artificial Intelligence 首次被正式公开使用。叫这么玄幻主要是大会的经费需要找洛克菲勒基金会申请:目的并没有完全达到,因为$13500 的预算只被批准了$7500。

但这次花销略低于国企普通招待晚宴的会议产生的影响却是深远的,我们只需要看看与会者他们人生轨迹的变化:

香农(C. E. Shannon):信息论的奠基人不用介绍了,当时已经是贝尔实验室大佬的香农,是因为和图灵交流后对计算机下棋有了兴趣(在 1949 年和 1950 年他发表了两篇讲计算机下棋的文章),还是被拉去当腰封的,现在很难弄清了:总之这会议对香老爷产生的影响不大。

但有四个人后来拿了图灵奖:

  • 明斯基(M. Minsky):普林斯顿数学系主任塔克(Tucker)的学生(他带 Minsky 之前带的就是纳什),后来公认的人工智能之父。2013 年接替吴恩达,出任 Google Brain 项目负责人的,奇点理论的宣传者和知名未来学家库兹韦尔(R. Kurzweil)就是他的学生。当时在哈佛大学数学与神经学做初级研究员的他,被麦卡锡拉到 MIT 的 MAC 项目里,作为 AI 实验室的同事。孕育出 UNIX 的 Multics,其中的分时系统的设计就是明斯基和麦卡锡一起捣鼓出来的。

  • 麦卡锡(J. McCarthy):在普林斯顿数学系博士毕业后,受师兄 Kemeny(没错,就是图灵的师弟,费曼的同事,爱因斯坦的数学助理,Basic 语言的发明人,后来混进总统智囊团的 Kemeny)的提携,去了达特茅斯学院做数学系助教。包括图灵奖在内的奖拿了一堆,离开达特茅斯学院之后,先后领导了 MIT 和 Stanford 两个学校的 AI 实验室,并且让两个实验室友好对战了很多年。不那么公认的人工智能之父,但因为是 LISP 语言的发明者而享誉码农圈数十载。

  • 纽厄尔(A. Newell):冯·诺伊曼的合作者、博弈论先驱摩根斯顿的学生。他和塞弗里奇在兰德认识之后,受后者模式识别和神经网络的影响很大,用不同的方法论做了很多相关的工作。被司马贺搞到卡耐基梅隆之后,一起开创了人工智能符号派,弄出了信息处理语言(IPL),并写了该语言最早的两个 AI 程序,也因此拿了图灵奖。

  • 司马贺(H. A. Simon):这位更是奇人。1943 年芝加哥大学政治系毕业,1949 年被卡耐基梅隆聘了之后研究了认知心理学、计算机科学、公共行政、经济学、管理学和科学哲学等多个方向。和纽厄尔一起拿了图灵奖之后 3 年,就跨界刷了个诺贝尔经济学奖。1972 年作为第一批乒乓外交美方代表访华的时候主讲计算机科学,1980 年第二次访华,主讲心理学,起了个中文名字司马贺。70 多岁开始学汉语的他,1994 年当选了中国科学院外籍院士。

其他的参会者也非常了得:

  • 塞弗里奇(O. Selfridge):名声没有前面这两位大,但其实是公认的模式识别之父,也做过一段时间明斯基的主管。他在 MIT 时一直和神经网络之父麦卡洛克(W. McCulloch)一起在维纳手下工作。维纳对他非常欣赏,《控制论》的第一个读者就是他,但因为没有写博士论文,所以没有拿到博士学位:这大概跟他出身有关,日不落帝国牛津街上的Selfridges是他们家的。

  • 所罗门诺夫(R. Solomonoff):1951 年在芝加哥大学跟随费米得了物理硕士,就到了 MIT 的所罗门诺夫,没有大富大贵,但达特茅斯会议时,他受麦卡锡“反向图灵机”和乔姆斯基文法的启发,发明了“归纳推理机”,从而奠基了”算法信息论“。他的另一个观点“无限点”(Infinity Point)后来被未来学家库兹维尔改名“奇点”窃为己有。

  • 罗切斯特(N. Rochester):IBM 信息研究经理,IBM 第一台商用计算机 701 机型设计者。作为一名计算机象棋研究者,他在 IBM 内部推动了很多人工智能研究,但是在董事会打压当时对这方面研究鼎力支持的主席 Watson 之后被搁置了。多年以后的今天,我们看到十八摸的救命稻草就是纪念这位主席的同名计算机认知系统Watson

  • 撒缪尔(A. Samuel):在 IBM 工作的真正的编程爱好者。使用 701 编写的跳棋程序是第一个具有学习能力的下棋程序,使用的就是现在被称为“α-β剪枝”的搜索。从 IBM 退休后去了 Stanford 执教,大量的时间都用来和 Knuth 搞 Tex 了。据说 88 岁生日的时候,都还在写程序。

整个人工智能研究的发展历史,其实是很值得国内建高校的人好好看看的。但是作为一名凡夫俗子,这里宛如奥斯卡红毯秀般铺陈星光熠熠的出场阵容,有几个目的:

  1. 首先,可以看到,从人工智能奠基会上,就有三个人都是研究了“计算机下棋“的。下棋实在是一个贯穿人工智能这么多年历史的课题:这方面有个很好的资料网站是CPW

  2. 其次,我们搞不清人工智能研究范畴是很正常的。这次会议上定的七个研究课题是:

    • 可编程计算机
    • 如何为计算机编程使其能够使用语言
    • 神经网络
    • 计算规模理论
    • 机器学习
    • 抽象
    • 随机性与创造性

    很明显如今看来,它的范围横跨了计算机、自动化、逻辑、数学、心理学等多个学科。实际上,这次会议之后,光是人工智能自己就分化出了”符号派“和”认知派“,两派惊心动魄的相爱相杀可以参考大牛尼克的神经网络简史,或者是王飞跃老师纪念明斯基的文章(你看,纪念人工智能大佬的文章,是中国科学院自动化研究所的主任写的,足见”贵圈多乱“)。

  3. 学术界的顶层圈子一直是很小的,或者说人类的顶层圈子一直是很小的,所以像你我这样的普通选手还是做做工程给下一代创造良好学习生活环境吧。且不说一个人工智能奠基会,台前幕后晃动的罗素、维纳、香农,就拿这次名震四海的 DeepMind 公司的大脑,神经网络的制霸辛顿来说,人家也是布尔(布尔代数的那个布尔)的后代。布尔一家为地球人哺育了各种人才,其中最邪门的应该是参与了抗战的初代毛粉寒春韩丁兄妹,最有名的应该是小说《牛虻》的作者伏尼契。当然,被《牛虻》的革命爱情感动得不行的几代中国人,可能不知道晚年入不敷出全靠周恩来特批的一笔稿费体面生活的伏尼契,其实生活在纽约。

  4. 所有的东西到最后都是数学,学好它吧,孩儿们。

普通人的人工智能

都看到这儿了,我有点儿怀疑你到底是不是普通人。

因为普通人接触这个词主要是通过科幻电影和小说,所以大家潜意识里面人工智能是个虚幻的东西,它的载体是各种根本不存在的机器人:《星球大战》里面的,《黑客帝国》里面的,各种飞船的屏幕后面的。包括这几天下棋的新闻配图里面,大部分 AlphaGo 的形象都是个光头乳白色机器人。

但是也因为这次对弈,看到很多严肃的,人模人样的媒体和嘉宾都在讨论这个东西,看到一堆九段在直播间长吁短叹,大家就开始开玩笑地说:”完了完了,人类这是真的要完了“。

的确,简单地觉得 DeepMind 这种多层深度神经网络只是计算能力堆上来了而已,肯定是不对的。其实当年深蓝下赢卡斯帕罗夫的时候,当事人卡斯帕罗夫就有过一些好玩的言论:1995 年他还在说计算机没有insights,到了 1996 年他就已经说感觉电脑有悟性了,到了 1997 年,他就输了,然后他觉得机器表现的智能无法理解,甚至怀疑有人类棋手在背后操作。

其实从 1995 到 1997,深蓝的计算能力只增加了两倍而已。

这次围棋对弈的情况更加有趣:卡斯帕罗夫三年的心路历程,演播厅里面在前三十分钟嘲笑 AlphaGo 的围棋选手们几个小时就走完了。

所以我想,普通人关心的应该有下面几点:

  1. 人工智能和人类智慧究竟有没有一点点可比性?
  2. 如果有,究竟发展到什么阶段了呢?
  3. 既然发展到这里了,奇点到底存不存在?人类要不要完呢?

因为前面太啰嗦,这部分我们还是等一年一度的 CCTV 用消费者权益敲诈日结束之后再来写吧。

从Markdown列表转换成脑图

去年过年整理了一次p4f的技术栈,最近受StuQleohxj的启发又开始整理适合我司的各个研发职位的技能图谱:这类树状的图片其实就是脑图(Mindmap)。

图片形式的文档都有一个麻烦的地方,就是不太好做版本控制和review。比如如果本座来整理Web前端技能图谱,总希望:

  • 能够发给前端组的人review
  • 能够放到代码库,让前端组维护起来,根据业界动态不断更新

如果是张图片,弄起来就比较麻烦,这个时候就需要Markdown出场了。其实最近这几年,用Markdown写文档大概也算Best Practice的一个了。好处确实很多,最重要的两个:

  • 集成到现有的开发流程里面把文档也交叉review、版本化、自动部署
  • 有个三长两短的时候,迁移成本非常低

只不过从Markdown生成脑图还是比较偏门,所以分享一下。

其实大多数的脑图软件( 比如MindNode或者Mindjet MindManager)都支持把缩进好的文本直接导入生成图片。以我在用的MindNode为例,你可以把下面的格式:

- 研发团队
	- 前端组
	- 后端组
	- 运维组
	- 测试组
	- 平台组
		- 数据组
		- RIO组

这样贴到MindNode里面,就会生成下面的脑图:

但是上面的格式,如果是以Markdown的格式放到代码库里面,有略显难看。所以更进一步,你可以先用Markdown的#来标不同层级,使得文档本身可以在网页上显示成规则的列表,类似这样,它的原始Markdown文件在这里

然后,通过脚本把文档里面的#转换成\t,就可以得到能够直接粘贴到MindNode里面生成脑图的文本了。如果你是使用Mac,还可以直接把转换脚本创建成一个service通过Automator安装,这样你在任何一个Markdown文档上选中需要生成脑图的部分,右键就可以了:

还有个未尽事宜就是在转换脚本里面加一个步骤:Markdown里面的链接,生成图片的时候把方括号、圆括号以及圆括号里面的链接去掉,不然就太难看了: