Facebook 田渊栋:第四局AlphaGo 败招的分析 ( 附前3场比赛胜率分析)
按:本文作者田渊栋,已获授权。
第四局李世石的78手L11挖被大家誉为“神之一手”,在DarkForest的策略网络输出里排第31位,而J11靠排第10位。因此我觉得可能是AlphaGo没有算到这一步。如果对方下了一手机器没算到的棋,则蒙特卡罗(MCTS)搜索树会清空,然后重新开始搜索,不应该会太快做出结论。李喆六段告诉我 K10这一手是秒下,那有可能是时间管理子系统在搜索树清空时有程序上的漏洞,因此过早地将搜索结果返回了。 MCTS在一开始搜索的时候,因为模拟次数不够多,每步的胜率方差非常大,所以返回一个不够好的着法如K10是很正常的(在DarkForest里面这着排在前四)。这个比较容易修正。
另一种可能是,AlphaGo的估值网络出了问题。 因为估值网络的权重是0.5,而不管快速走子从一个局面开始重复了多少次,它的权值也是0.5。对于一个局面,估值网络只得到一个数,而从这个局面往下走子,走多后会得到很多个数,统计上应该更为重要,但是AlphaGo不是这样想的,两边各自算得胜率后直接对半平均了。所以如果估值网络对某个局面得到的结果不对,则会极大地影响对该局面的胜率估计。注意这里得到很多个数的原因是按照文章,叶结点在积累了一定盘数后(40)才展开,而不是第一次访问就展开,以提高DCNN的效率。DarkForest没有用到估值网络,在L11的挖之后正确地返回了L12和L10这两个应手,据李喆六段说,都是正确的应手,这间接支持了这个推断。AlphaGo在87手之后才意识到自己已经大大落后,可能也是由于同样的问题,比如说把右边的黑大龙看成活的。
那为什么估值网络会出问题呢? 可能是用于训练估值网络的自学习(Self-Play)的样本分布有盲点。为了提高样本生成速度,AlphaGo的自学习样本是通过用两个纯粹的DCNN互搏来生成的(完全没有搜索),而DCNN下出来的棋因为是纯模式识别,一个大问题是死活不正确,经常是在死棋里面下子。如果黑白两方都犯了死活不分的毛病,然后一方比如说白侥幸胜了,那估值网络就会认为方才白的死棋局面是好的。这样估值网络就会染上同样毛病,在中盘复杂的对杀局面中判断失误。若是这种情况就不好处理,AlphaGo下一局可能还会有同样的问题。这里可以看到,电脑本身也不是靠穷举来下棋的,围棋毕竟太复杂,每一步都要剪枝,离当前局面近的仔细剪(用DCNN),离当前局面远的快速剪(快速走子),直到终局得到胜负为止。剪枝的好坏直接关系到棋力的高低,DCNN只是一个有大局观的非常好的剪枝手段,它的盲点也会通过败着反映出来。
关于DCNN+MCTS打劫。 首先因为MCTS是全局估计分数的,劫争本身和其它局面在程序看来没有本质区别,都只是一步棋而已。劫的特殊性在DarkForest上表现为碰到有劫可提的情况时,DCNN经常会以非常高的概率(0.8以上)返回提劫这一手。可能的原因是,劫点是作为单独的特征输入的,所以DCNN学习到了它和输出(提劫)的强关联性。这样在MCTS搜索时会强烈偏向这一手。这在很多情况下是正确的,但有时劫很小可以不予理会,或者碰到两个或者多个劫需要放弃一个,那“遇劫必提”的偏向性就会给搜索带来麻烦。有时连环劫电脑反复提就是这个原因。AlphaGo可能会有这个问题,或者是反向的问题(比如说提劫概率很小),这样在下棋时大家就会感觉到它在避免开劫,或者在含劫的变化中计算失误。
关于地平线效应(Horizon Effect)。 国象的AI里面会有这个效应,比如说只搜索10步,计算到别人的后被自己的后吃了结束,然后用简单的加和法估计下盘面发现自己多个后特别爽,觉得这个分支特别好。其实再往下走一步自己的后也被别人吃了,或者掉入陷阱,这样就误算盘面价值。但是围棋因为每次模拟都是走到底的,可能前30步是用DCNN,之后就是用快速走子,虽然走子质量上有差距,但是大方向上不会错,所以地平线效应在某种程度上是减弱了。而且这次AlphaGo的失误在20步以内,应该还在DCNN的范围里面,所以地平线效应的可能性比较低。
应大家要求,这里放Game3的胜率,李世石毫无机会。
Game4的还没空全跑,以下是关键的一段。注意DarkForest只是5d,所以没有及早看出来黑挂了也是正常的。
编者一起放上作者的DarkForest对AlphaGo和李世石前两局每步的胜率估计:
首先说明一下每个数据点是DF在当前局面下给出最优应手,同时给出的胜率。这个最优应手和选手的应手不一定一样。如果大家要看DF给的应手,可以下载以下两个文件:
yuandong-tian.com/win_rate1.txt
yuandong-tian.com/win_rate2.txt