本文主要是介绍[数据分析]AlphaGo眼中的李世乭李世乭最后的机会,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
推荐语:此文写于AlphaGo与李世乭大赛的第二局结束后,作者对双方水平及棋局的走向预测都很准确,不过相对于结果,分析过程更值得学习
用自己的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手,没有按常规布局在上边连片,而选择走在右边。李世石自己在职业比赛中从未使用过这一开局,甚至整个职业围棋界,没有人见过这一开局。
图13
图14可以看出,李世乭的第七手的确出乎了CNN的预测,而一般开局相对固定,应该是比较好预测的。而第二局李世乭在前50手都是在预测范围内的。
引用自@高飞龙
实战白A一步的“自创新招”,最终下成了局部这样的变化,大家可以看到黑棋在棋盘的左下中部形成了一块大空,而这空凭空出现,可以说是白棋白送给黑棋的,所以可以说局部大损。
从前面白80的“缓手”,到这里的大损,AlphaGo始终判断自己全局的胜率较高,即全局占优。而当时大多数人都认为白棋不好。
图14
我们看到Alpha第80手棋实际上是在预测之外的一步棋(无红圈),应该是其他的评估网络得出的结果。但是这之后概率明显开始上升。
下一个焦点在第86手。
白86断,又是棋谱里没有的下法。不过对局至此,我们对此已经并不惊讶。这步断的意图对人而言很好理解,由于黑棋右边很厚,白棋想通过弃子整形,使黑棋的厚势变得重复、效率低下。从人的角度来看,这是白棋最明显的意图。
而在CNN的预测中,86手却是概率非常高的一手棋
再看第二局
图15
(以下评论指的是第60手,原文是配图说明,我查询了图中说的棋谱是在60)
这很可能是两盘棋中,李世石真正的唯一占优的时刻。
虽然这优势可能也很小。
但好景不长,不知道李世石是因为第一局输了过于谨慎,还是认为此处占了便宜而马上变的保守,他立刻下出了一系列的缓手,而AlphaGo立刻抓住机会反超局面并且拉开了差距。
短暂的一瞬间的微弱领先之后,李世石再也没有了机会,后面的局势完全是AlphaGo碾压。如何评价第二局比赛 AlphaGo 又一次战胜李世石? - 高飞龙的回答
图16
但实际第60手也是在预测之中的
当然以上这些还是我的猜测,希望和大家共同讨论。
=======================================
第二部分 李世乭最后的机会
目前看来李世乭的棋力的确在AlphaGo以下,但是有一点是我今天想到的。在训练AlphaGo的数据中,平均一盘棋要下200手左右。然而围棋棋盘有361个点,也就是说:
所有的训练数据都不包含大家硬着头皮把棋盘下满的情况!
在我自己的模型中,当CNN硬着头皮下到200手左右的时候已经开始犯弱智的错误了,诸如把自己的眼添死,或者在双活情况下自杀。因为在训练数据中根本不存在这样的情况。
不知道AlphaGo能否避免这样的情况,因为如果我的预测是对的,那么到了最后,还能支撑AlphaGo下棋的就只剩下蒙特卡洛搜索了。因为状态评估网络应该也没有在大于200目地情况下训练的可能。也就是说过了200目,AlphaGo就回到了GnuGo的6-8段水平了。凭李世乭的水平也许还有一拼,毕竟安西教练说过:
水平有限,衷心希望大家热心指正。
结语:
其实我接触机器学习也只有一年半的时间,而接触深度学习则是近半年多的事情,现在即将毕业,离开德国,所以在文末想写一些话,说给所有刚刚接触机器学习的人。
作为EE出身的我,在向机器学习转型的过程中其实很是艰辛。毕竟相对于其他领域,机器学习还是很年轻的,很多人都是边做边学,一边充电一边摸索,这无疑是个很大的挑战。但是,DL的实践是一个激动人心的过程。除了DL本身,还要结合具体的问题掌握其他领域的基础知识才能做出相对满意的结果,而不是简单的套模型试参数。但是在这个过程中,最后模型训练的结果往往会带来出人意料的惊喜,出现未曾预期的效果,很多问题上的解决效率和结果都远远超过了传统方法。不过我相信,现在只是深度学习的起点,如果类比工业革命,我们也许刚刚发现了蒸汽机,在未来这个领域还会有更多发现和应用空间。所以无论我以后从事何种工作,我都会为这个领域留出时间去关注。后面等到没那么忙了,我会认真总结之前自己的收获,尽快转换成文字分享给其他人,最后祝所有刚刚进入深度学习领域的人一切顺利!
原文发布时间为:2016-04-14
本文来自云栖社区合作伙伴“大数据文摘”,了解相关信息可以关注“BigDataDigest”微信公众号
这篇关于[数据分析]AlphaGo眼中的李世乭李世乭最后的机会的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!