AlphaGo 的棋局,与人工智能有关,与人生无关

网络新闻 2021-07-09 11:06www.168986.cn长沙seo优化

编者注本文作者系出门问问 NLP 工程师李理,他在这篇文章详细叙述了AlphaGo 人工智能背后的细节。

前言人生如棋

回顾一下我的人生,似乎和棋是有一些关联的。编者注本文作者出门问问

1997 年中考后的暑假在姑父公司的机房第一次接触电脑,当时应该是 80386 的微机。学习电脑就是学习 DOS 命令和打字,完全不懂干什么用的,打字尤其是五笔字型,更是学得头疼——王旁青头戋五一,土士二干十寸雨……唯一的乐趣就是趁姑父不在的时候键入 CCH,和电脑下一盘象棋(本文象棋特指中国象棋,如果是国际象棋不会简称象棋)。这个软件的棋力挺强的,至少对于我这样业余水平来说是这样的。总共下来估计有一二十盘,我赢的次数也只有一两盘,其余的都是输了。我第一步一般走中炮,电脑第一步总是走马,而当第二步我上马的时候,电脑不是走常见的屏风马,而是起横车,一侧的马都不动。从棋理的角度说,这种布局是有问题的,中路很空虚。我却找不到什么破绽,原因可能是中局计算能力相差太远。

当时就觉得挺神奇的,电脑竟然会下棋,而且还这么厉害,心想我以后能不能做一个比它还厉害的软件。

同年,IBM 的深蓝击败了国际象棋世界冠军卡斯帕罗夫,不过我知道这个消息应该是在读大学之后了。

2000 年,由于高三半年沉迷于电脑游戏,高考考得不好,而且还想离家远一点去闯荡,就去了北京科技大学。阴差阳错地选择了电子信息工程专业。这个专业在我之前只有两届学生,课程设计挺混乱的,有一部分电子系的课程,如数电模电等,也有部分通信的课程,如信号与系统。我对这些课程都不感兴趣,自学了很多计算机的课程。

大概是在 2003 年的时候在书店看到了王小春写的《PC 游戏编程–人机博弈》,如获至宝,学着写过一个黑白棋的软件。也改过光盘里附带源码的象棋程序,不过发现要写一个超过自己水平的象棋并不容易。

2006 年考研,填报的是计算机系的人工智能实验室,不过分数不够高,后来调剂到了智能系的听觉实验室,做自然语言处理方向。

同年,MCTS 第一次被提出并在围棋上却得极大的突破;而 Hinton 通过 DBN 让深度神经网络重新进入人们的视野。不过当时 NLP 还不流行 Deep Learning ,当时更多的还是 structured SVM、CRFs 和 Graphical Model。当时还打印过《Learning CRFs with Hierarchical Features: An Application to Go》这篇论文。

2016年,Google DeepMind 的文章被 Nature 发表,AlphaGo 击败欧洲冠军樊麾并且将要在3月份挑战李世石。

围棋和深度学习大规模高热度地出现在世人眼前。

象棋与围棋的比较 俗与雅

如果你在公园或家门口看到一群人围成一团,围观的比下棋的还多,并且出谋划策指手画脚,那一定是象棋。同样在路边摊上摆“祖传”残局的也一定是象棋。围棋则“高雅”的多,所以琴棋书画里的棋必然是围棋。象棋下得好,也只能在民间摆摆路边摊。而围棋专门有个官职叫“棋待诏”,陪皇帝下棋的。伴君如伴虎,陪皇帝下棋可没有与路边的大爷下棋轻松,赢了皇帝肯定不行,但老是输或者输得太假了也不行。要像贾玄那样让皇帝每次都觉得自己棋差一着,可不是简单的事情。喜欢下围棋的皇帝很多,比如传说中“一子定乾坤”的李世民,《西游记》里魏征梦斩泾河龙王时也是在和李世民下棋。即使围棋下不到国手的水平能陪皇帝下棋,还是有很多达官贵人也附庸风雅的。比如《红楼梦》里的贾政老爷,那么无趣的人,也是要下下围棋的,很多詹光这样的门客。贾府四位大小姐的丫鬟是琴棋书画,迎春的丫鬟是司棋,按说迎春下棋应该很厉害,不过在书中并没有写迎春下棋,倒是写惜春和妙玉下棋,惜春在角上被倒脱靴。探春和宝琴下棋,“探春因一块棋受了敌,算来算去,总得了两个眼,便折了官着儿,两眼只瞅着棋盘,一只手伸在盒内,只管抓棋子作想”,林之孝家的来请示也未听到。

孰难孰易

围棋似乎更“平等”一些,每个棋子除了颜色没有什么不同,它的重要性取决于它的位置以及整个棋盘其它棋子(包括自己和对手)的整体分布。而象棋似乎不同,车一般都要比马有价值,将帅的价值无穷大,虽然它没有什么大作用。偶尔在某些特殊情况下,虎落平阳被犬欺,车的价值可能比不上一个马,但大部分情况下车都超过两个马的价值,真是“王侯将相确有种乎”!

从理想主义的角度,我更喜欢围棋,每个棋子都是同样的可塑性,它的重要性取决于它的位置。每个棋子的位置又是它自己能决定的吗?也许在开始一盘对局之前它的位置就大致确定了!放在棋罐里最上面的棋子最可能被选择,位置好坏更由下棋的棋手决定,棋子本身没有什么决定权。

而且从现实的角度来说个体的差异确实是存在的,打篮球的话姚明就生来比其他人有优势。

从入门的角度说,象棋的估值函数相对简单,入门应该更容易一些。

MiniMax 搜索/Alpha-Beta 剪枝和象棋

这个算法最早是冯诺依曼提出来的。其实每一个下棋的人可能都在不自觉的使用这个算法,只不过没有形式化的语言描述出来而已。

第一次下棋的时候,我们很可能尝试当前局面下所有的可能走法,然后选择最“好”的一个局面。拿象棋来说,“好”可以比较简单的用双方棋子的分值来表示,一个车的价值大致相当于两个炮,马和炮差不多,相当于两个士或者相,兵的价值最低。那么很可能我们第一次走棋时就是看哪步走法能“吃”到对方的棋子,然后就走这一步。可惜下棋是两个人的博弈,你用车吃对方一个兵,对方可能用马把你的车吃了,这样算下来,用一个车换一个兵,明显是亏了。通过这样的例子,你学到对手是在和你“作对”,你有很多走法,如果你只考虑一步,选择最好的局面,那么对手会在这个局面走对他有利的局面,有可能这个局面对你非常不利。所以你觉得应该要考虑两步也就是一个回合,你尝试所有的可能(也可能做一些裁剪,滤掉明显不好的走法,比如没事走动自己的老将),比如用车吃对手的卒,然后站在对手的角度选择对手最好的走法(用马吃你的车),然后评估一下这个局面,发现局势对你并不有利。接着再尝试用兵吃对手的马,接着对手选择用车吃你的兵,这个结果明显对你有利。

随着你计算能力的增强,你可能把搜索的深度从 2 扩展到 4 或者更多。

上面的“算法”用上图来说明。圆形的节点表示“你”面对的局面,而方块的节点表示对手面对的局面。这里是 4 层两个回合的搜索树。

Copyright © 2016-2025 www.168986.cn 狼蚁网络 版权所有 Power by