1. 拿破仑下棋竟然输给了木头人?
1769年,德国发明家兼外交家肯佩伦(Wolfgang von Kempelen)男爵准备造一台机械的下棋装置,一年后机器完工,取名“土耳其人”(The Turk),那时大家就把这玩意叫作“自动机”(automaton)。肯佩伦把这台机器展示给奥匈帝国的掌权者玛丽娅·特蕾西娅(奥国女大公、匈国女王),于是它就成为娱乐欧洲各皇室的保留节目,称为“土耳其人”是因为这个装置的后面坐着一个土耳其装束的木头人。
肯佩伦制造的“土耳其人”
1809年“土耳其人”和拿破仑对弈一局,结果“土耳其人”大胜,拿破仑恼羞成怒,把棋盘上的棋子全胡撸到地上。有好事者把拿破仑和“土耳其人”的对战棋谱记录在案,确实艺不如“机”。
“土耳其人”在欧洲巡演了几十年,最后被人发现是个彻头彻尾的假货:那个装置里总是有个活人,而且是个下棋高手。肯佩伦只是发明了个魔术而已。那时的水平,想造台会下棋的机器,门儿都没有。
2. 图灵写了第一个下棋程序
下棋一直就是人类智能的挑战,自然也成了人工智能的标志之一。二战没结束时,图灵就研究计算机下棋,他1947年编了第一个下棋程序,可惜那时计算机的时间(简称“机时”)很宝贵,轮不到他上机——地主家没余粮,图灵也不能保证机时。但即使后来拿到机时,那机器和程序的水平也很有限。
图灵
3. 跳棋:人类第一次在棋盘上被打败
1951年,图灵的朋友斯特拉切(Christopher Strachey)在曼彻斯特Mark-1上写了第一款跳棋程序。图灵在1952年曾与之对弈一局,轻松取胜。
1956年IBM的塞缪尔(Arthur Samuel,人工智能里程碑达特茅斯会议的参加者之一)写了第二个跳棋程序,这款程序的特点是自学习,这也是最早的机器学习程序之一,后来不断改进,曾经赢过盲人跳棋大师。
20世纪80年代末,最强的跳棋程序一直就是加拿大阿尔伯塔大学的Chinook,作者是现任阿尔伯塔大学理学院院长的计算机系教授舍佛(Jonathan Schaeffer)。数学家丁斯利(Marion Tinsley)自20世纪50年代起就一直是跳棋的人类冠军。丁斯利的公开纪录,除了输给Chinook几局棋外,从没有输给过任何人类棋手。此后Chinook孤独求败。
舍佛团队2007年证明对于跳棋,只要对弈双方不犯错,最终都是和棋,而Chinook已经可以不犯错。他们的结果发表在2007年9月的《科学》杂志上,自此跳棋这一页就算翻过去了。舍佛的兴趣遂转向德州扑克和围棋。
4. 图灵来自火星,香农来自金星
几乎和图灵同时,冯诺伊曼也在研究计算机下棋,他和经济学家摩根斯顿合作的《博弈论》1944年出版,其中首先提出两人对弈的Minimax算法。香农(Claude Shannon)1950年在《哲学杂志》发表“计算机下棋程序”(Programming a Computer for Playing Chess)一文,开启了计算机下棋的理论研究,其中主要思路在“深蓝”和AlphaGo中还能看到。
香农
香农把棋盘定义为二维数组,每个棋子都有一个对应的子程序计算棋子所有可能的走法,最后有个评估函数(evaluation function)。传统的棋局都把下棋过程分为三个阶段,开局、中局和残局,不同阶段需要不同的技术手段。
5. 第一个可以走完全局的下棋程序,每步要想8分钟
第一个可以走完全局的下棋程序是IBM的工程师伯恩斯坦(Alex Bernstein)1958年在一台IBM 704上做的。估计那时IBM支持下棋就像后来支持“深蓝”和谷歌支持AlphaGo一样,虽没什么短期实用价值,但是很好的公关。机器每步要花8分钟想,随便会走几步棋的人就能击败这个程序。
IBM 704
1959年,麻省理工学院的几位本科生在当时刚到校任教的麦卡锡指导下开始学习计算机下棋,他们1962年本科毕业时,用Fortran实现了一款实战下棋程序,跑在IBM新出的7090大型机上,此时已经可以击败一般的象棋初学者了。这个结果变成了其中一位学生Kotok的本科学位论文。1962年麦卡锡前往斯坦福大学任教,他进行了持续改进,这个程序后来被称为Kotok-McCarthy程序。
6. 为了打败下棋程序,苏联人发明了“众包”方式
1971年,当年击败Kotok-McCarthy的苏联小组改进了他们的程序,新程序名叫KAISSA(象棋女神)。KAISSA和传奇大师斯帕斯基(Boris Spassky)赛了两局,一负一和,这个战绩惊动了棋界。
1972年KAISSA接受了《共青团真理报》的挑战:KAISSA将和读者们下两盘,《共青团真理报》从读者寄来的各种走法中挑出推荐最多的。这其实就是“众包”概念的雏形。
7. 1980年代最厉害的两个电脑棋手
进入20世纪80年代,又出了新一茬象棋程序。当时最厉害的两个电脑棋手,一个是跑在超级计算机克雷上的Blitz,另一个则是贝尔实验室的专用机器Belle。Belle的发明人之一汤普森(Ken Thompson)那可是了不起的人物,在计算机界无人不晓。他最杰出的成绩是发明了UNIX操作系统(现在苹果操作系统、波音747的飞行系统和安卓手机操作系统都是Unix的变种)和C语言,1999年被克林顿授予美国“国家技术奖章”。他在计算机下棋上的贡献多少被略视了。在1982年的北美计算机象棋锦标赛上,Belle击败了Blitz。Belle是第一个取得“大师”称号的计算机棋手。
贝尔实验室总部
20世纪80年代,机器之间的比赛此起彼伏,但机器和人之间仍然有着不可逾越的鸿沟。
8. “深蓝”,像上帝般下象棋
20世纪80年代中期,卡内基梅隆大学的柏林纳开始用专用硬件来实现下棋机,他的成果HiTech马上成为最强的机器棋手。这时来自中国台湾的许峰雄到卡内基梅隆大学计算机系跟随孔祥重读计算机体系结构(常说的“硬件”)方向的博士。许峰雄的室友很快把他拉到HiTech项目帮忙设计一个硬件的评估函数,但许峰雄却和柏林纳关系不睦。在资金有限的情况下,许峰雄和几个研究生利用业余时间快速开发出了ChipTest,而ChipTest立即变成了HiTech的竞争对手,并受到柏林纳的打压。
ChipTest的改进版“深思”(Deep Thought)1989年赢得弗雷德金二等奖:成为第一个国际象棋特级大师的机器棋手,累计分超过2400。随后HiTech也加入这个行列。而此时IBM意识到“深思”的商业价值,于是劝说整个团队在毕业后加入IBM,开发下棋机,把对手锁定为当时的世界冠军俄罗斯特级大师卡斯帕罗夫。
IBM的外号叫Big Blue,于是新的项目1996年被命名为“深蓝”(Deep Blue)。1996年ACM年会的闭幕节目是“深蓝”对决卡斯帕罗夫,六局棋。“深蓝”旗开得胜,第一局就赢了老卡,最后还是老卡4:2赢得决赛。
第二年“深蓝”和老卡再战,老卡号称要捍卫人类的智力尊严。他赢了第一局,但随后则越来越保守,彻底输给“深蓝”。老卡下棋过程非常情绪化,这有时会给人类对手施加压力,但“深蓝”压根不吃这套。1997年5月11日,老卡认输,“深蓝”成了第一位战胜当时世界冠军的机器。
尽管如此,“深蓝”队员,同样毕业于卡内基梅隆大学的坎普尔(Murray Campbell)仍然不认为机器有智能。这其实是整个“深蓝”团队的意见,他们都不是人工智能出身,反而和同系的人工智能教授结下梁子。
9. 强化学习,靠AlphaGo发扬光大的AI技术
“深蓝”胜利之后,聪明人认为计算机下棋这事已经到头了,没人愿意费力不讨好,IBM也解散了“深蓝”团队。迟至十年后的2006年,中国象棋程序开始击败特级大师级别的人类棋手。倒是围棋确实更具挑战性,但围棋在西方没什么受众,自然没什么聪明人愿意花时间。
围棋的棋子多,组合可能性也多,画出博弈树的所有可能枝叶后,在上面跑α-β不太经济。谷歌的AlphaGo首次引用了强化学习(Reinforcement Learning),使得机器和自己对弈学习。强化学习的发明者是巴托(Andy Barto)和他的学生萨顿(Richard Sutton)。在经历了人工智能的此起彼伏后,萨顿现在阿尔伯特大学任教。正是他和已经转向围棋研究的舍佛的碰撞,萌生了把强化学习应用到围棋的想法。
2016年,透过自我对弈数以万计盘进行练习强化,AlphaGo在一场五番棋比赛中4:1击败顶尖职业棋手李世石,成为第一个不借助让子而击败围棋职业九段棋手的电脑围棋程序,立下了里程碑。
2017年乌镇围棋峰会上,最新的强化版AlphaGo和世界第一棋手柯洁比试,获取三比零全胜的战绩,柯洁完败后落泪:“AlphaGo太完美我看不到希望”。
事实上,强化学习从20世纪80年代就被发明,但一直不被重视,是AlphaGo使得它发出亮光。
本文来自读书笔记:《人工智能简史》——尼克