返回列表 发帖

【数据分析】AlphaGo眼中的李世乭&李世乭最后的机会

本帖最后由 天马行空 于 2016-7-20 14:41 编辑

来源:知乎 Heinrich  2016-03-20

  用自己的DCNN把李世乭过去曾下的295盘棋,30366步分析了一下,然后再过去的两局中验证了一下,得到很多有意思的数据。因为我的围棋水平实在太差,所以把所有提取的数据发上来跟大家分享一下,供围棋高手们分析,欢迎批评指正。

  第一部分 AlphaGo眼中的李世乭

  先上两个图大家感受一下:

  图1


  第一局李世乭落子93步,横轴是时间轴(93步),纵轴暂时可以理解成李世乭在落子时所面对的难度,难度越大蓝色条越矮。红色是李世乭的历史水平,中间的线是平均值,上下的小棒是方差,你可以理解为” 李世乭在以前下到这个时候所遇到的局面是否相似,越相似越短“

  图2


  第二局李世乭落子105步,这里请大家注意,横轴只是李世乭落子的次数,并非对应棋盘上的步数,因为上图缺了AlphaGo的落子。

  可以看到,李世乭在第一局开始的优势明显没有第二局开局明显,而终局时基本是完全被AlphaGo压制。

  那么这个蓝条到底是什么,它是怎么得出的。

  如下图:

  图3


  这是AlphaGo所使用的卷积神经网络CNN在分析棋盘后得到结果的示意图。经过分析,得到了一个围棋棋盘19*19=361个位置的预测概率。概率越大代表棋手下一步越有可能在这里走子。图1图2的分析中,蓝条的高低,就是这里图3中361个概率的最大值。
  (如果你懂卷积神经网络,下一段不用看,直接跳到下一个分割线)

  =================================================================

  # 但是最好玩的地方来了!

  # 因为这是一个概率分布,所以361个点的概率总和一定为1

  # 也就是说:

  # 361个点中最大值越大,其他360个点就越小(请记住这句话,后面有用)

  # 这里给这个最大值起个名字:预测最大概率。不行,6个字太多了,我懒,叫它P好了。

  # AlphaGo在开始思考时,第一件事就是去算这个P。

  # P有如下含义:

  # P越大(蓝条越高),其它值就越小,说明棋手可以不用纠结,直接在最大值落子就好

  # P越小(蓝条越低),其它值就越大,很有可能出来一个0.5 和一个0.4 两个概率,然后棋手就要在这两个地方纠结了。

  # 请回头看看图1图2,你就知道李世乭这两盘棋有多纠结了。

  # 然后第二个问题,AlphaGo是怎么得到图3样式的概率分布呢?

  #图4


  # 大概就是这个样子,先将围棋棋盘分解成三部分,1黑棋,2白棋,3不允许落子的地方。然后的原理打个比方是这样的:第一层有64个卷积核,每个卷积核负责在期盼上搜索特定的目标,比如1号卷积核在左上角发现一个眼,2号卷积核在旁边也发现一个眼。然后第二层发现在第一层找到了两个挨着的眼,然后判断左上角已经被两个假眼占领。第三层判断这两个假眼有威胁,但是可以试着吃一下。以此类推,一层层抽象化,概念化,直到判断出最终的概率分布图。

  # 当然,现实总是残忍的。

  # 因为没人知道到底这些卷积核真实是干什么的,再放个图大家感受下

  图5


  # 这是第一层的卷积核

  # 除了第五行前两个卷积核(其实是一个卷积核的两个特征),是在找最普通的眼,你能看出来

  # 其它的完全不知道它在找什么……(所以将来我要把没用的都剪枝掉)

  # 然而它就是找到了。

  # 还给出了正确的预测。

  # 如果只考虑最大的概率P,这个模型在17,427,622 次预测中准确预测了33%

  # 但是如果考虑前10个最大的概率作为备选,准确率可以达到76%以上。

  # 这是我用的模型,跟AlphaGo比块头小了很多。跟@田渊栋 老师在Facebook用的模型同样没法比。田老师的模型横着有12层,我只有8层,田老师的模型竖着最少有92个卷积核,我的最多只有64个。我只把棋盘拆成了3个二进制特征,而田老师拆了25个,而且还是连续值特征。没办法,GPU不够用,田老师在FACEBOOK用四个GPU同时训练,而我们整个研究所只有一个,还要大伙一块用,穷鳖哭晕在厕所。

  # 但是这样已经足够了,因为:

  # 卷积神经网络只负责减少搜索的难度

  # 从原来的361选一,现在变成了10选一

  # 至于后面的10选一怎么选,大家去看田老师的专栏就好。

  =================================================================

  现在你知道了蓝条是怎么来的了,也就是我在前文所说的,AlphaGo眼中的李世乭表现如何,因为蓝条是CNN得到的。

  好了,那我们看一下李世乭的历史纪录。我抓取了李世乭过去下过的295盘棋,共30366步

  图6


  这是李世乭在下这3万手棋之前所面对的概率P的直方图,在50%~100%这一概率范围依然有6693手,为23%

  也就是说每五手棋中李世乭是有一手是面临着并不那么纠结的决定。

  然而这个数字在这两场比赛中分别为多少呢?

  第一场: 15手,16%

  第二场:22手,20%

  那么在他真正落子的棋,在CNN看来是概率为多少的棋呢?

  图7


  右侧为放大了50%~100%的部分。

  这里注意下图6和图7的区别:图6是在李世乭落子之前CNN判断其落子的最大概率,而图7是李世乭真正落子位置在CNN看来出现的概率。

  注意这里的纵轴是历史中出现的次数,不是概率,这里是直方图。

  下面是李世乭在与AlphaGo第一场比赛中各落子的CNN预测概率,右侧为大于50%的次数(对应图7):

  图8


  然后是第二场的:

  图9


  第二局中李世乭的行动明显更加符合模型预测。

  至于开始的图1与图2:




  分别是将过去李世乭的295盘棋全盘的预测概率拉伸到和AlphaGo的两次对局相同的长度并计算出的均值与方差。红线反应了在李世乭以往的棋局中所面临的棋局被CNN判定的情况。在第一局中,除了少数几手,李世乭的盘面几乎完全在平均值以下,而第二局在开局则明显在平均值以上,而过了30手(全局60手)便急转直下。


  再来看看比赛的时间线:

  在第一局比赛186步中(各93步),我的CNN预测到了AlphaGo的61步,预测到了李世乭70步,如下:

  图10


  (李世乭黑先)这里的横轴已经调整为正常的步数,李世乭为奇数,AlphaGo为偶数,红点的地方是预测正确的地方。

  第二局比赛186步中,预测到AlphaGo的76步,预测到李世乭67步,如下:

  图11


  (ALphaGo黑先)如上两图我将纵坐标从最大概率P换成了概率分布的方差,因为方差更能反应CNN预测结果各个结果间的差距,当然后来发现用最大概率P和方差得到的结果是一样的……

  关于用概率去分析局势的想法只是我的一个很不成熟的猜测,所以我按照网上的评论选取了有争议的几个点进行了验证。

  从第一局开始:

  图12


  李世石第7手,没有按常规布局在上边连片,而选择走在右边。李世石自己在职业比赛中从未使用过这一开局,甚至整个职业围棋界,没有人见过这一开局。

  【火线速递】——李世石的策略与AlphaGo的弱点

  图13


  图14可以看出,李世乭的第七手的确出乎了CNN的预测,而一般开局相对固定,应该是比较好预测的。而第二局李世乭在前50手都是在预测范围内的。

  引用自@高飞龙

  实战白A一步的“自创新招”,最终下成了局部这样的变化,大家可以看到黑棋在棋盘的左下中部形成了一块大空,而这空凭空出现,可以说是白棋白送给黑棋的,所以可以说局部大损。
  从前面白80的“缓手”,到这里的大损,AlphaGo始终判断自己全局的胜率较高,即全局占优。

  而当时大多数人都认为白棋不好。

  如何评价第二局比赛 AlphaGo 又一次战胜李世石? - 高飞龙的回答

  图14


  我们看到Alpha第80手棋实际上是在预测之外的一步棋(无红圈),应该是其他的评估网络得出的结果。但是这之后概率明显开始上升。

  下一个焦点在第86手。

  白86断,又是棋谱里没有的下法。不过对局至此,我们对此已经并不惊讶。这步断的意图对人而言很好理解,由于黑棋右边很厚,白棋想通过弃子整形,使黑棋的厚势变得重复、效率低下。从人的角度来看,这是白棋最明显的意图。

  如何评价第二局比赛 AlphaGo 又一次战胜李世石? - 高飞龙的回答

  而在CNN的预测中,86手却是概率非常高的一手棋

  再看第二局

  图15


  (以下评论指的是第60手,原文是配图说明,我查询了图中说的棋谱是在60)

  这很可能是两盘棋中,李世石真正的唯一占优的时刻。
  虽然这优势可能也很小。

  但好景不长,不知道李世石是因为第一局输了过于谨慎,还是认为此处占了便宜而马上变的保守,他立刻下出了一系列的缓手,而AlphaGo立刻抓住机会反超局面并且拉开了差距。
  短暂的一瞬间的微弱领先之后,李世石再也没有了机会,后面的局势完全是AlphaGo碾压。

  如何评价第二局比赛 AlphaGo 又一次战胜李世石? - 高飞龙的回答

  图16


  但实际第60手也是在预测之中的

  当然以上这些还是我的猜测,希望和大家共同讨论。

  ==============================================================

  第二部分 李世乭最后的机会

  目前看来李世乭的棋力的确在AlphaGo以下,但是有一点是我今天想到的。在训练AlphaGo的数据中,平均一盘棋要下200手左右。然而围棋棋盘有361个点,也就是说:

  所有的训练数据都不包含大家硬着头皮把棋盘下满的情况!

  在我自己的模型中,当CNN硬着头皮下到200手左右的时候已经开始犯弱智的错误了,诸如把自己的眼添死,或者在双活情况下自杀。因为在训练数据中根本不存在这样的情况。

  不知道AlphaGo能否避免这样的情况,因为如果我的预测是对的,那么到了最后,还能支撑AlphaGo下棋的就只剩下蒙特卡洛搜索了。因为状态评估网络应该也没有在大于200目地情况下训练的可能。也就是说过了200目,AlphaGo就回到了GnuGo的6-8段水平了。凭李世乭的水平也许还有一拼,毕竟安西教练说过:


  水平有限,衷心希望大家热心指正。
附件: 您需要登录才可以下载或查看附件。没有帐号?注册

返回列表