开场白
AlphaGo两番赢下了人类围棋世界的真正高手,世界第二的韩国棋手李世石[1]。
赛前,准确说是Google的DeepMind团队刚放出消息说战胜了欧洲围棋冠军樊辉并打算挑战李世石的时候,我个人是很谨慎地说这场比赛很难讲,但其实心里认为AlphaGo的赢面更大。只不过当时AlphaGo战胜的樊辉虽说是欧洲冠军,但全球排名都不入百,实在算不得是大高手。但AlphaGo的优势在于有半年多的时间可以不眠不休地学习提高,而且还有DeepMind的工程师为其保驾护航,当时的AlphaGo也不是完全版,再加上我所深知的人类固有的夜郎自大,这些战内战外的因素结合在一起,虽然嘴巴上说这事难讲,但心里是认定了AlphaGo会赢得。
结果,李世石赛前说比赛应该会5:0或者4:1而自己的使命就是尽可能阻止那1的出现,但实际的战况却是现在AlphaGo以2:0的比分暂时领先。且,如果不出意外的话,最终的总比分应该是AlphaGo胜出——只不过到底是5:0还是4:1,这还有待事态发展。
这一幕不由地让人想起了当年的吴清源,将所有不屑他的挑战者一一斩落,最终敢让天下先。
当然了,当今世界棋坛第一人的柯洁对此恐怕是不同意的,但让我说,如果下半年AlphaGo挑战柯洁,或者柯洁主动挑战AlphaGo,那我还是坚定地认为,AlphaGo可以战胜柯洁。
不过,这里所要说的并不是上述这些时代背景。
机器超越人类仅仅是一个时间的问题,当然还有一个人类是否肯丢下面子去承认的问题[2]。
输赢不是重点,为什么会输怎么会赢,这才是重点。
AlphaGo的算法
第一局对弈中,李世石开局选择所有人都不曾走过的开局,是为了试探AlphaGo。而中后盘又出现了明显的恶手,所以人们普遍可以认为AlphaGo是捕捉到了李世石本身的重大失误,这才完成的逆转。
事实上李世石本人也是这么认为的。
但到了第二局,事情就完全不同了。执黑的AlphaGo竟然让李世石认为自己从来就没有真正地占有过优势,从而可以认为是被一路压制着走到了最后。
而且,无论是第一局还是第二局,AlphaGo都走出了所有职业棋手都叹为观止的妙手,或者是让所有职业棋手都皱眉不接的怪手。
很多时候,明明在职业棋手看来是不应该走的落子,最后却居然发挥了奇妙的作用。就连赛前认为AlphaGo必败的聂棋圣,都对第二局中AlphaGo的一步五线肩冲表示脱帽致敬。
职业棋手出生的李喆连续写了两篇文章来分析这两局棋,在对棋局的分析上我自然是不可能比他更专业的。我这里所想要说的是,从AlphaGo背后的算法的角度来看,机器的棋道究竟是什么呢?
AlphaGo的算法,可以分为四大块[3]:
- 策略网络
- 快速走子
- 估值网络
- 蒙特卡洛树搜索
这四个部分有机结合在一起,就构成了AlphaGo的算法。
当然,这么说比较枯燥,所以让我们从蒙特卡洛树开始做一个简单的介绍。
当我们在玩一个游戏的时候(当然,最好是围棋象棋这种信息完全透明公开且完备没有不可知成分的游戏),对于下一步应该如何行动,最好的方法当然是将下一步所有可能的情况都列举出来,然后分析对手所有可能的策略,再分析自己所有可能的应对,直到最后比赛结束。这就相当于是说,以现在的局面为种子,每一次预判都进行一定数量的分岔,构造出一棵完备的“决策树”——这里所谓的完备,是说每一种可能的未来的变化都能在这棵决策树中被体现出来,从而没有跑出决策树之外的可能。
有了决策树,我们自然可以分析,哪些下一步的行为是对自己有利的,哪些是对自己有害的,从而选择最有利的那一步来走。
也就是说,当我们拥有完备的决策树的时候,胜负基本已经定下了,或者说如何应对可以获胜,基本已经定下了。
更极端一点的,梅策罗有条定理就是说,在上述这类游戏中,必然存在至少一条这种必胜的策略[4]。
所以,原则上来说,在全知全能的上帝(当然是不存在的)面前,你不管怎么下围棋(或者国际象棋、中国象棋、日本将棋),上帝都知道怎么走必胜,或者最多最多就是你走的刚好和上帝所预设的一样。
但,上述完全的完备的完美的决策树,虽然理论上对于围棋这样的游戏来说是存在的,但实际上我们无法获得。
不但是说我们人类无法获得,更是说我们的机器也无法获得——围棋最后的局面可能有3361种可能,这个数量超过了人类可观测宇宙中的原子总数。
因此,现在的情况是:无论是人还是机器,都只能掌握完全决策树的一部分,而且是非常非常小的一部分。
所以,上述神之棋路是我们人类和机器都无法掌握的。
故而,人和机器就采用了一定的手段来多决策树做简化,至少将其简化到自己能处理的程度。
在这个过程中,一个最自然的方法(无论对机器还是对人来说),就是只考虑少量层次的完全展开,而在这些层次之后的决策展开则是不完全的。
比如说,第一步有100种可能,我们都考虑。而这100种可能的落子之后,就会有第二部的选择,这里比如说有99种可能,但我们并不都考虑,我们只考虑其中的9种。那么本来两层展开有9900种可能,现在我们就只考虑其中的900种,计算量自然是大为缩减。
这里,大方向人和机器是相同的,差别在于到底如何筛选。
对机器来说,不完全的决策展开所采用的是蒙特卡洛方法——假定对子决策的随机选择中好与坏的分布与完全展开的情况下的分布是相似的,那么我们就可以用少量的随机抽样来代表完全采样的结果。
说白了就是:我随便选几个可能的决策,然后最进一步分析。
这里当然就存在很大的风向了:如果正好有一些决策,是随机过程没有选中的,那不就蛋疼了么?
这点人的做法并不相同,因为人并不完全是随机做出选择。
这里就牵扯到了所谓的棋感或者大局观。
人们在落子的时候,并不是对所有可能的上百个选择中随机选一个出来试试未来的发展,而是利用棋形、定式、手筋等等通过对局或者学习而得来的经验,来判断出哪些落子的可行性更高,哪些位置的落子则基本可以无视。
所以,这就出现了AlphaGo与李世石对局中那些人类棋手很莫名的棋着来了——按照人类的经验,从棋形、棋感、定式等等经验出发完全不应该去走的落子,AlphaGo就走了出来。
在传统只利用蒙特卡洛树搜索的算法中,由于对落子位置的选择以随机为主,所以棋力无法再做出提升。这等于是说机器是一个完全没学过围棋的人,完全靠着强大的计算力来预测未来几百步的发展,但这几百步中的大多数都是随机走出的不可能之棋局,没有实际的参考价值。
Facebook的DarkForest和DeepMind的AlphaGo所做的,就是将原本用于图形图像分析的深度卷积神经网络用到了对棋局的分析上,然后将分析结果用到了蒙特卡洛树搜索中。
这里,深度卷积神经网络(DCNN)的作用,是通过对棋局的图形图像分析,来分析棋局背后所隐藏的规律——用人的话来说,就是棋形对整个棋局的影响规律。
然后,将这些规律作用到对决策树的裁剪上,不再是完全通过随机的方法来判断下一步应该往哪走,而是利用DCNN来分析当下的棋形,从而分析当下棋形中哪些位置的落子具有更高的价值,哪些位置的落子几乎毫无价值,从而将无价值的可能落子从决策树中减除,而对哪些具有高价值的决策进行进一步的分析。
这就等于是将学习来的棋形对棋局的影响规律运用到了对未来可能发展的选择策略中,从而构成了一个“学习-实践”的正反馈。
从AlphaGo的算法来看,这种学习经验的使用可以认为分为两部分。一个是估值网络,对整个棋局大势做分析;而另一个是快速走子,对棋局的局部特征做出分析匹配。
因此,一个负责“大局观”,而另一个负责“局部判断”,这两个最后都被用来做决策的剪裁,给出有足够深度与准确度的分析。
与之相对的,人的决策时如何制定的呢?
人类的弱点
我虽然不是棋手,只是知道围棋规则和简单的几个定式,但人的一大特征就是,人的很多思考方式是在生活的各个领域都通用的,一般不会出现一个人在下围棋时用的思路与干别的事时的思路彻底不同这样的情况。
因此,我可以通过分析自己与观察别人在日常生活中的行为以及如何导致这种行为的原因,来分析下棋的时候人类的普遍一般性策略是怎么样的。
那就是——人类会根据自身的性格与情绪等非棋道的因素,来进行决策裁剪。
比如说,我们经常会说一个棋手的风格是保守的,而另一个棋手的风格是偏向于激进厮杀的——记得人们对李世石的风格界定就是这样。
这意味着什么?这其实是说,当下一步可能的决策有100条,其中30条偏保守,30条偏激进,40条中庸,这么个情况下,一个棋风嗜血的棋手可能会选择那激进的30条策略,而忽略别的70条;而一个棋风保守的,则可能选择保守的30条策略;一个棋风稳健的,则可能是那中庸的40条策略为主。
他们选择策略的因素不是因为这些策略可能的胜率更高,而是这些策略所能体现出的局部的棋感更符合自己的风格——这是与是否能获胜无关的价值判断,甚至可以说是和棋本身无关的一种判断方法,依据仅仅是自己是否喜欢。
更进一步,人类棋手还可以根据对手的棋风、性格等因素,来筛选出对手所可能走的棋路,从而筛选出可能的策略进行反击。
因此,也就是说:由于人脑无法处理如此庞大的信息、决策分岔与可能性,于是人脑索性利用自身的性格与经验等因素,做出与处理问题无关的信息筛选。
这可以说是AlphaGo与人类棋手最大的不同。
人类棋手很可能会因为风格、性格、情绪等等因素的影响,而对某些可能性做出不够重视的判断,但这种情况在AlphaGo的算法中是不存在的。
其中,情绪可以通过各种手段来压制,但棋手个人的风格与更深层次的性格元素,却完全可能导致上述弱点在自己无法控制的情况下出现。但这是AlphaGo所不具备的弱点——当然,这不是说AlphaGo没弱点,只不过没有人类的弱点罢了。
究其根本,这种通过战局外的因素来筛选战局内的决策的情况之所以会出现,原因在于人脑的信息处理能力的不足(当然如果我们计算一个单位体积或者单位质量的处理问题的能力的话,那么人脑应该还是优于现在的计算机很多很多的,这点毋庸置疑),从而只能通过这种手段来降低所需分析的信息量,以确保自己可以完成任务。
这是一种在有限资源下的取舍策略,牺牲广度的同时来换取深度以及最终对问题的解决。
同时,又由于人脑的这种功能并不是为了某个特定任务而开发的,而是对于整个生活与生存来说的“通识”,因此这种舍去本身只能与人的个体有关,而与要处理的问题无关,从而无法做到AlphaGo那样完全只通过局面的分析来做出筛选,而是通过棋局之外的因素来做出选择。
这就是人与AlphaGo的最大不同,可以说是分别写在基因与代码上的命门。
更进一步,人类除了上述决策筛选的通用方案之外,当然是有针对特定问题的特定筛选方案的,具体在围棋上,那就是各种定式、套路以及各种成熟或者不成熟的关于棋形与大势的理论,或者仅仅是感觉。
也就是说,人通过学习来掌握局部与全局特征,并利用这些特征来做出决策,这个步骤本身和机器所干的是一样的。但不同点在于,人可能过于依赖这些已有的经验总结,从而陷入可能出现而无人注意的陷阱中。
这就是这次AlphaGo数次走出有违人类经验常理的棋着但事后发现很有用很犀利的原因——我们并不知道自己数千年来总结下来的经验到底能在多大程度上应用于新的棋局而依然有用。
但AlphaGo的算法没有这方面的困扰。它虽然依然是利用人类的棋谱所给出的经验,利用这些棋谱中所呈现出的全局或者局部的规律,但最终还是会通过蒙特卡洛树搜索将这些经验运用到对棋局的推演中去,而不是直接利用这些规律做出定式般的落子。
所以,不但定式对AlphaGo是没意义的,所谓不走寻常路的新棋路对AlphaGo来说威胁也不大——这次第一局中李世石的新棋路不就一样失效了么?因此即便吴清源再世,或者秀哉再世(佐为??),他们即便开创出全新的棋路,也不能作为必定能战胜AlphaGo的依据。
理论上来说,只要出现过的棋谱足够多,那么就能找出围棋背后的规律,而这就是机器学习要挖掘出来的。新的棋路,本质上不过是这种规律所演化出的一种无人见过的新现象,而不是新规律。
那么,AlphaGo的弱点是什么?它是不是全无弱点?
这点倒是未必的。
AlphaGo的弱点
从AlphaGo的算法本身来说,它和人一样不可能对所有可能的决策都做出分析,虽然可以利用各种手段来做出价值判断,并对高价值的决策做出深入分析,但毕竟不是全部,依然会有遗漏。这点本身就说明:AlphaGo的考虑不可能是完备的。
而且,很显然的是,如果一个人类可能进行的策略在AlphaGo看来只会带来不高的胜率,那么这种策略本身就会被剪除,从而这种策略所带来的变化就不在AlphaGo当下的考虑中。
因此,假如说存在一种棋路,它在前期的多轮思考中都不会带来高胜率,那么这种棋路就是AlphaGo“意料之外”的。
而如果这种每一步都没有高胜率的棋路在若干步后可以给出一个对人类来说绝佳的局面,从而让AlphaGo无法翻盘,那么这种棋路就成了AlphaGo思路的死角。
也就是说说,在AlphaGo发觉它之前,它的每一步铺垫都是低胜率的,而最后构造出的棋形却具有绝对的高胜率,这种低开高走的棋路,是会被AlphaGo忽略的。
虽然我们并不知道这种棋路是否存在,以及这种棋路如果存在的话应该长什么样,但我们至少知道,从理论上来说,这种棋路是AlphaGo的死角,而这一死角的存在就基于这个事实:无论是人还是AlphaGo,都不可能对所有策略的所有演变都掌握,从而无论如何死角总是存在的。
当然,这一理论上的死穴的存在性并不能帮助人类获胜,因为这要求极深的观察力和预判能力,以及要构造出一个即便AlphaGo察觉了也已回天乏力的几乎可以说是一锤定音的局面,这两点本身的要求就非常高,尤其在思考深度上,人类恐怕本就比不过机器,从而这样的死角可能最终只有机器能做到——也就是说,我们可以针对AlphaGo的算法研发一款BetaGo,专门生成克制AlphaGo的棋路,然后人类去学习。以算法战胜算法[5]。
但这样到底是机器赢了,还是人赢了呢?
另一方面,上述方法虽然是理论上的AlphaGo思维的死角,本人们并不容易掌握。那有没有人们可以掌握的AlphaGo的死角呢?
这点恐怕非常难。我认为李喆的观点是非常有道理的,那就是利用人类现在和历史上的整体经验。
开创新的棋局就必须面对处理你自己都没有充分面对充分准备过的局面,这种情况下人类具有前面所说过的两个弱点从而要么思考不完全要么陷入过往经验与定式的坑中没能走出来,而机器却可以更均衡地对所有可能的局面尽可能分析,思考更全面周翔,那么人的局限性未必能在新棋局中讨到什么好果子吃。
反过来,如果是人类已经研究多年非常非常熟悉的局面,已经没有新花样可以玩出来了,那么机器的全面考虑就未必能比人的千年经验更占有。
因此,面对AlphaGo,人类自以为傲的创造力恐怕反而是绊脚石,回归传统利用传统积累才有可能获胜。
但,这样的获胜等于是说:我创造力不如机器,我用我的经验砸死你。
人类引以为傲的创造力被抛弃,机器本应更擅长的被定式却成了救命稻草,这不是很虐心么?
那么,创新棋路是否真的不可能战胜AlphaGo?这点至少从目前来看,几乎不可能,除非——
如果李世石和别的人类其实通过这两天,或者说在这几年里都演练过一个被推演得很充分的新棋路,但这套棋路从来没有被以任何形式公开过,那么这样的新棋路对AlphaGo来说可能会造成麻烦,因为原本创新中AlphaGo的均衡全面考虑可能会败给李世石等人类棋手多年的推演专修而来的集体经验。
因此,我们现在有了三条可以战胜AlphaGo的可能之路:
- 通过每一步低胜率的棋着构造出一个拥有极高胜率的局面,利用前期的低胜率骗过AlphaGo的策略剪枝算法,可以说是钻算法的漏洞;
- 利用人类千年的围棋经验总结,靠传统定式而非创造力击败思考均衡的AlphaGo,可以说是用历史战胜算法;
- 人类棋手秘而不宣地研究从未公开过的新棋路,从而突破AlphaGo基于传统棋谱而总结学习来的经验,可以说是用创造力战胜算法。
其中,算法漏洞是必杀,但人类未必能掌握,只能靠未来更先进的算法,所以不算是人类的胜利;用历史战胜算法,则可以说抛弃了人类的骄傲与自豪,胜之有愧;而用创造力战胜算法,大概算是最有范的,但却依然很难说必胜——而且万一AlphaGo自己与自己的千万局对弈中早就发现了这种棋路,那人类依然会惨败。
综上所述,要战胜AlphaGo,实在是一条充满了艰辛的道路,而且未必能走到头。
人相对AlphaGo的优势
虽然说,在围棋项目上,人必然最终败在以AlphaGo为代表的计算机算法的脚下,但这并不表示AlphaGo为代表的围棋算法就真的已经超越了人类。
问题的关键在于:AlphaGo下棋的目的,是预设在算法中的,而不是其自己生成的。
也就是说,AlphaGo之所以会去下围棋,会去尽力赢围棋,因为人类设定了AlphaGo要去这么做,这不是AlphaGo自己能决定的。
这可以说是人与AlphaGo之间做大的不同。
而,进一步来分析的话,我们不由地要问:人活在这个世界上是否真的是无预设的,完全有自己决定的呢?
恐怕未必。
包括人在内的所有生物,基本都有一个预设的目标,那就是要保证自己能活下去,也即求生欲。
人可以通过各种后天的经验来讲这个目标压制下去,但这一目标本身是写在人类的基因中的。
从这点来看,AlphaGo的问题恐怕并不是被预设了一个目标,而是目前还不具备设置自己的目标的能力,从而就更加谈不上以自己设置的目标覆盖预设的目标的可能了。
那么,如何让算法可以自己设定目标呢?这个问题恐怕没那么容易来回答。
而,如果将这个问题局限在围棋领域,那么就成了:AlphaGo虽然知道要去赢棋,但并不知道赢棋这个目标可以分解为前中后三期的子目标,比如人类经常谈及的争大势、夺实地以及最后的获胜,这类子目标。
虽说在某些小局部,DCNN似乎展现了可以将问题分解为子目标并加以解决的能力,但至少在设立总体目标这个问题上,目前的算法看来还无能为力。
这种自助设定目标的能力的缺失,恐怕会是一种对算法能力的制约,因为子目标有时候会极大地简化策略搜索空间的结构与大小,从而避免计算资源的浪费。
另一方面,人超越AlphaGo的另一方面,在于人具有将各种不同的活动共通抽象出一种通用的规律的能力。
人们可以从日常生活、体育活动、工作学习等等活动中抽象出一种通用的规律并收为己用,这种规律可以认为是人生观或者价值观,也或者别的什么,然后将这种三观运用到诸如写作与下棋中,从而形成一种通过这种具体活动而体现出自己对人生对生活的看法的独特风格,这种能力目前计算机的算法并不能掌握。
这种将各不同领域中的规律进一步融会贯通抽象出更深一层规律的能力,原则上来说并不是算法做不到的,但我们目前没有看到的一个最主要的原因,恐怕是无论是AlphaGo还是Google的Atlas或者别的什么项目,都是针对一个个特定领域设计的,而不是设计来对日常生活的方方面面进行处理。
也就是说,在算法设计方面,我们所持的是一种还原论,将人的能力分解还原为一个个领域内的特有能力,而还没有考虑如何将这些分解后的能力再重新整合起来。
但人在自然演化过程中却不是如此,人并不是通过对一个个项目的钻研,然后汇聚成一个人,人是在直接面对日常生活中的各个领域的问题,直接演化出了大脑,然后才用这个大脑去处理一个个特定领域内的具体问题。
因此,算法是由底向上的设计方式,而人类却是由顶向下的设计方式,这恐怕是两者最大的不同吧。
这也就是说,虽然在某个具体问题上,以AlphaGo为代表的计算机的训练样本是远大于人的,但在总体上来说,人的训练样本却可能是远高于计算机的,因为人可以利用围棋之外的别的日常生活的活动来训练自己的大脑。
这恐怕是一种新的学习算法设计方向——先设计一种可以利用所有可以探测到的活动来训练自己的神经网络演化算法,然后再利用这个算法已经生成的神经网络来学习某个特定领域的问题。
这种通用的神经网络算法相对于专门领域的算法到底是优是劣,这恐怕在那一天出来以前,人类是无法知道的了。
人与AlphaGo的不同
最后,让我们回到AlphaGo与李世石的对局上。
我们可以看到,在这两局中,最大的一个特点,就是AlphaGo所理解的棋道,与人所理解的棋道,看来是存在很大的不同的。
这也就是说,人所设计的下围棋的算法,与人自己对围棋的理解,是不同的。
这代表什么?
这表示,人为了解决某个问题而设计的算法,很可能会做出与人对这个问题的理解不同的行为来,而这个行为满足算法本身对这个问题的理解。
这是一件细思极恐的事,因为这表示具有更强能力的机器可能因为理解的不同而做出与人不同的行为来。这种行为人无法理解,也无法判断到底是对是错是好是坏,在最终结局到来之前人根本不知道机器的行为到底是何目的。
因此,完全可能出现一种很科幻的局面:人设计了一套“能将人类社会变好”的算法,而这套算法的行为却让人完全无法理解,以至于最终的社会可能更好,但中间的行为以及给人带来的局面却是人类根本想不到的。
这大概是最让人担忧的吧。
当然,就目前来说,这一天的到来大概还早,目前我们还不用太担心。
结尾
今天是AlphaGo与李世石的第三轮对决,希望能有所惊喜吧,当然我是说AlphaGo能为人类带来更多的惊喜。
通过本协议,您可以分享并修改本文内容,只要你遵守以下授权条款规定:姓名标示 、非商业性、相同方式分享。
具体内容请查阅上述协议声明。
本文禁止一切纸媒,即印刷于纸张之上的一切组织,包括但不限于转载、摘编的任何应用和衍生。网络平台如需转载必须与本人联系确认。
如果喜欢简书,想要下载简书App的话,轻戳这里~~
<small>私人推荐订阅专题:《有意思的文章》、《严肃码匠圈》</small>
-
对,是世界第二,因为就在年初他刚刚被中国围棋天才柯洁斩落马下,所以柯洁现在是世界第一,李世石很不幸地低落到了世界第二。当然了,AlphaGo背后的DeepMind团队打算挑战李世石的时候,他还是世界第一。 ↩
-
有一个很有趣的效应,称为“AI效应”,大意就是说一旦机器在某个领域超越了人类,那么人类就会宣布这一领域无法代表人类的智慧,从而始终保持着“AI无法超越人类”的局面。这种掩耳盗铃的鸵鸟政策实在是让人叹为观止。 ↩
-
这部分可以看Facebook围棋项目DarkForest在知乎的文章:AlphaGo的分析 ↩
-
策梅洛于1913年提出的策梅洛定理表示,在二人的有限游戏中,如果双方皆拥有完全的资讯,并且运气因素并不牵涉在游戏中,那先行或后行者当中必有一方有必胜/必不败的策略。 ↩
-
这方面,有人已经研究了一种算法,可以专门功课基于特定神经网络的学习算法,从而构造出在人看来无意义的噪音而在计算机看来却能识别出各种不存在的图形的图像。未来这种针对算法的“病毒算法”恐怕会比学习算法本身具有更大的市场和更高的关注。 ↩