围棋人工智能
文章来源:耀宇围棋公众号
大家好,这段时间在准备CCTV杯快棋赛,所以没有及时更新内容。
今天上午第一轮,发挥得不错,顺利晋级。
但下午第二轮,输在了优势下的松懈。该出招时不出招,反受其乱。
虽然有些遗憾,但作为人来说,下棋本来就是一种修炼和超越自我的过程。所以就当付学费买个教训,下盘棋争取做得更好便是。
今天,我要跟大家聊的这盘棋,对弈双方都不是人,而是一个人工智能自己在跟自己下棋。
大家看到这,可能会觉得这应该是AlphaGo的左右互搏自对弈棋局。
这次还真不是,我现在手上的这张棋谱,是星阵围棋的团队给我的,对弈双方是中国围棋人工智能星阵和自己。
提起星阵,大家应该都知道,它首先实力了得,去年“中信证券杯”世界人工智能大赛中,虽然绝艺未参赛,但它超越了里拉和ELF后夺取冠军,其含金量也很足。这充分证明了星阵的实力。
其次,星阵是一位特别与众不同的AI,当其他AI在优势局面下进行“剪枝”开始退让,不求多胜只求稳胜时,它却不这样干,无论多大优势,只要它认为能行的棋,就以最强手出击。颇有人类围棋的影子和味道。
我手上这张棋谱,是星阵每步棋花了30秒思考的左右互搏对局。
以前都是跟大家分享我对于人类之间或者人与AI之间对局的感想。
今天我尝试着和大家分享一下我如何来看AI自对弈的对局。
我会从三个方面聊起:
1:如何看待AI在布局上推荐的选点?
2:AI在中盘时重视什么?
3:遇到大型对杀时,如何验证AI是否正确?
下面让我们一起进入这盘星阵自对弈的精彩实战对局:
1
布局篇
星阵首选A点,胜率43.1%;若选B点,胜率42.4%
图1:我一下子不知道该怎么称呼两位“对局者”,就叫它们星阵A和星阵B吧。
现在星阵B白26飞起,右上角的流行定式告一段落了。布局则还在进行中。
这时候黑棋大致有两个选点:
A点挂角:这步棋是最容易想到的一手,它威胁着白左下星位一子的同时,还扩张了右边至右下黑三角阵势的规模,使之更加立体化。
B点挂角:这步棋意在破坏上方白三角阵势。
这两点到底哪个好呢?
可能有些棋友会回答:“胡老师,你看星阵首选的是A点,而且A点的胜率比B点多0.7%的胜率,那就选A点吧。”
在回答这个问题前,我先跟大家分享一下自己对这两点的分析。
我们先来看A点挂角:
图2:黑1挂角,白棋对此有不少应法,我们就先假设白2小飞吧。
对此黑棋其实也有不少下法,但为了方便大家理解,我就按黑3大飞拆回来看。
此时右边至右下黑三角阵势由于黑1、3的呼应,升级成了立体阵势。立体阵势的高效就在于:“无论你打入哪一边,另一边必然会通过攻击自然成空”。
所以这时候白棋若直接深入黑阵未必是良策,因此白4左上小飞守角先确保左上角扎实,同时与右上白角呼应形成了阵势,再配合上左下白角,也形成了一个立体阵势。
如此进行的话,棋局将形成黑白互围大模样的格局。
那么B点挂角又会是什么情况呢?
图3:黑B位挂角,最需要担心的就是白1、3尖顶了跳,利用白上边的子力优势来攻击黑棋(白1若夹击,黑可点三三转身取角)。
但此局面下,黑棋还是可以从容应对的:
1:黑4有充分的拆边空间。黑4是可以拆三而不是拆二。若只能拆二的话,黑棋不仅局部很局促,对白棋也构不成威胁,那这个破坏白阵的效率就不高了。
2:黑4拆三不仅是防守自己,同时威胁着右上角白棋大块,因为接下来黑A位飞的话,白右上大块未安定。
3:由于黑4拆三威胁着右上白角,因此等于间接的缓解了白C位动出手段的压力,由于白右上角未安定,白C位动出就需要掂量掂量了。
以上看似独立的三点,其实都由一个重要条件联系起来,那就是右上白三角大块的强弱问题:
假设白棋A位多颗子
图4:比如白若是在右上角有颗A位的子,那情况就完全不同了。
首先由于右上白角多了A位这颗子后已经彻底安定,黑4拆三不仅对白棋构不成威胁,反而遭来白C的残酷打入。所以黑4基本上只能委屈的在D位拆个小二。
其次由于右上白角已经彻底安定,因此黑4这颗子对右上白角产生不了任何威胁和牵制,所以白今后随时可在E位动出白圆圈一子,并且不用考虑后顾之忧。
那如果是这样,黑B位挂角的价值顿时锐减。因为黑所得仅仅是单纯破了白棋上边的一些空,不仅下一步对白棋毫无威胁,自身还落下一块孤棋,将来慢慢还债。
所以黑B点挂角之所以在星阵的选点范围内,是因为星阵早看见右上白角是未安定之形。
以上是我对图1中AB两个选点的分析,下面我们再来回答一下图1的开始问题:
图5:虽然星阵认为A点挂角是它的首选,并且胜率高于B点挂角0.7%。
但这两个点对我来说,真的很难去以绝对的好坏来看待。
我认为两个点均可选择。
但是,我会留意两个地方:
1:按理说,A点相对于B点空间更广,价值应该更大,但为什么星阵觉得其中差别不是很大?
这其中有个很重要的先决条件就是白右上角还未安定。一旦黑B位挂角后能占到C点逼住白右上角,白右上角的不安定因素顿时显现。是这个先决条件,让黑B位挂角的价值得到提升。
2:AB两点所导致的战略格局是大不相同的。A点很容易形成双方互围模样的格局;B点则很容易形成双方小块分割的细棋格局。
因此虽然我无法判断AB两点的优劣,但我会根据对手的风格,来决定我的选择。
对手若是酷爱战斗型棋风,那我很可能就会选择B位挂角,将局面导入小块分割的细棋格局,让对手的力量发挥不出来;若对手擅长小刀割肉的细棋格局,那我就会选择A位挂角,将局面引入双方互围模样的复杂格局中,避开对手的长处。
第1点是通过提出疑问来整理选点背后的逻辑,并通过逻辑来推断出AI所给数据背后的”所以然“来。
第2点是理解AB两点的特性,并为己所用,根据不同的对手制定不同的策略。
我们可能经常会遇到这样的情况:“明明这是AI推荐的招,怎么自己实战中一运用就碰壁了?”
那是因为虽然局部状态没变,但此局部周围的先决条件改变了(就像图4多了A位这颗子),那你依样画葫芦自然要出问题。
若只看胜率的变化,当你遇到下一盘不同的局面,还是两眼一抹黑;但若是慢慢学会通过胜率来观察局面条件变化的不同,你就等于掌握了应变的能力,可以经得起实战的考验。
关于实战星阵黑27到底选择了A点还是B点?大家可以去看文末的棋谱。
2
中盘篇
图6:现在我们再来到白76冲的局面。左下战役似乎刚刚结束,黑三角大块和白三角大块虽然还未安定,但由于两块棋的出头都还挺畅,根据地也随时可搭出两只眼来。因此焦点似乎应该转向别处:
图7:既然左边双方暂时看不出啥死活危机,那么黑1在右边夹攻白三角一子,顿时成了此局面下的香饽饽。
黑1不仅是利用了右上黑三角背景的厚味扩张了阵势,使得三角标识处基本都要姓黑了;更威胁着白三角一子的眼形,使之没有根据地。
一旦白三角一子仓皇往外逃窜的话,黑可利用攻击之便,将右边和右下角顺势实地化。不得不说,黑1这步棋是眼见的绝好点。
但是,星阵同学却不这么认为:
星阵首选黑77,胜率44%;A点不在选择范围内,胜率37%。
图8:星阵同学下出了黑77二路托,这步棋看着往二路下一手,到底啥意思?
此招位置虽然看着很低,但其用意则很深远。我们先从技术层面来分析:
图9:面对黑77(黑三角一子)二路托,白第一感是A位二路扳反击,但黑B二路长之后,白棋发现白1接和黑2成见合之势。
白1若是粘上,黑2粘上后,不仅自身连络,还将白三角两子收入囊中。收获巨大。
那么白A若是不反击呢?
图10:面对黑77(黑三角一子)二路托,白既然无法反击,那就只能白1粘回,这样黑2二路退回。
这样相比黑2直接小尖,等于黑三角爬和白1粘先手交换到了。
这下先手交换获利很大:首先使黑圆圈大块彻底净活了;其次使白三角大块的根据地一只眼都没了(白A位扳做不出眼)。
这就是黑三角二路托在技术层面的厉害之处。
下面我们跟着实战走,再从价值层面分析一下黑77这步好手:
图11:实战星阵B是白78先扳一下然后再白80位粘,对此星阵A黑81断死白78一子。
粗粗一看,星阵B不是将白78一子送死吗?
它是有意为之的,与图10相比,星阵B就是想通过弃掉白78一子,获取A位二路挡的先手。这样可确保今后B位二路虎能搭出一只眼。
那么黑77二路托的价值到底有多大呢?
请大家接着看下图,我们来讨论一下黑77的价值:
图12:在图7中,我们说到了第一眼就发现黑1价值太大了,但是当黑1落下时,几乎所有的AI,第一感都指向了白2二路小尖。
我们就拿此图和图11的实战比较一下,看看图11中黑77二路托的价值是多少。
我们先来看实地价值:
此图白1小尖后,白局部实地大致约3目;黑局部实地大致约1目。
而图11的实战结果,白局部实地0目,而黑局部有6目。
这一出一入,实地价值相差约8目。
我们接着来看附带价值:
此图白1小尖后,白局部基本净活;而黑局部则只有半只眼。
而图11的实战结果,黑局部彻底净活;而白局部只剩下半只眼。
通过以上分析,我们大致有个结论:星阵黑77二路托的实地价值并不大,但附带价值巨大!
这附带价值事关黑白两块的劳逸问题,此图是别人安定了,自己漫漫长路;而实战则是自己彻底安定了,别人却开始漫漫长路。
由此可见,在事关双方的劳逸问题上,不管是星阵还是其他AI,都极为重视。
我小时候学棋时,经常听到两个围棋名词:急所和大场。
都说急所的价值要比大场大。
大场好理解,就是布局时的布阵要点。
但急所是什么,我那时老搞不明白。
星阵这黑77二路托,就是急所。
实地价值是眼见可量化的,谁见谁爱。
而劳逸问题也许暂时看不到现实的利益,却很可能对棋局今后的发展产生巨大而深远的影响。
如果你无视劳逸问题而一味只看实地价值,那随着棋局的进展,你先前捞的实地非但不保,甚至还要倒贴很多。
在这一点上,如果你仔细去观察,就会发现AI一直都在提醒我们。
AI的很多招法看似颠覆了我们的认知,但那只是形式上的改变,在围棋的根本规律上,其实从未改变。相反,它的出现,更验证了这些围棋基本理论根基的牢固性。
3
死活篇
白选A点,黑胜率42.2%
图13:最后一节,我们来看看本局最精彩的地方。
星阵A和星阵B厮杀了满盘后,局势依然很胶着。
果然是左右互搏,实力不分伯仲。
星阵A黑163冲,准备利用白三角大块还未在A位连络而获取便宜。对此星阵B若正常在A位连络,将是白棋略优的局势,胜负将取决于官子。
但星阵同学天生就不是为了稳赢而剪枝的AI,它喜欢追求最强手。
于是星阵B同学就来了:
图14:星阵B同学没有在B位救回白三角数子,而是跑去白164提劫。
这步棋的意图就是:“你要敢B位吃我三角数子,我就A位提劫将你右边阵势打穿并反杀你;你若听话,乖乖在A位粘上,那我再B位连络,这样白164先手提一下劫总便宜了。”
这星阵B真是太猛了,冒着白三角数子被吃的危险,就为了那白164轻轻的先手提个劫。
但星阵B同学就是要在这里针锋相对:“你星阵A敢黑163威胁我,我逃命前也要白164恶心一下你”。
真是一位性格刚烈的AI。
对此星阵A也不是好惹的:
白166=A
图15:白164提劫的时候,本是同根生的星阵A那能忍受A位粘回的屈辱,它闭着眼睛就先黑165将白三角数子切断干掉再说。
这样白三角数子共25目的实地价值就被黑棋收进口袋。
这边损失了,那边肯定要补回来,白166接着提,黑右边原本有近40目实地的阵势,很可能不仅被破,还要面临被白反吃的危险境地。
关键就在黑167堵住后这个劫争上了。
白168开劫后白170扑是绝对的一枚劫材,对此黑171必须应。
这时候按正常的逻辑来说,你白棋找完劫材,下一步肯定是A位接着提劫与黑棋打这个超级劫争。
但星阵B却意外的没提劫:
图16:星阵B没有在A位提劫,而是突然白172冲一下后白174单勾一个。
它的目的很明显,就是想让黑棋B位跟着应,它再C位接着挤,黑D位断。
但这不是在浪费自己的劫材吗?
本来A位提劫,这些先手交换都可以当劫材来使的。
我当时看到这就纳闷了。再顺着星阵B的用意往下推理,唯一的解释就是它这串交换后,下一手可确保E位断吃黑三角一子。
可是黑三角一子的价值太小了,它老盯着这颗子干吗?
唯一的解释就是它想先手加强白左上角。
可是左上白角不是无大碍吗?黑棋最严厉的手段就是F位扳了后H位一路连扳强行做劫。但这个劫一是黑棋打输了很损,二是右边还在超级劫争呢,黑棋哪有功夫在这搞这么勉强的劫?
一时不明白星阵B到底是什么用意。
直到我看到了星阵A下出黑175这本局的最后一手,才恍然大悟:
图17:黑175是本局的最后一手棋。
这步棋粗粗一看,以为是摆错地方了,但细细一品,却发现此招妙不可言:
黑175=黑1
图18:黑1一路侵袭白角后,白2若是普通二路长一个,黑3以下可利用黑三角子力的掩护,从一路暗渡陈仓。
黑7渡过后,白角搭不出两只眼,与中央白子一起阵亡。
在这个过程中,白2有最强应对:
图19:白1扳是最强应对,对此黑2一路夹是妙手。
然后白3、5祭出“苦肉计”,是白棋唯一可以避免净死的组合好手。
以下黑A提、白B倒虎、黑C挡、白D扑劫,白局部虽可逃过无条件净死,但也非常惨:
这个劫,首先白棋之前目数已经亏损巨大,黑棋完全无忧;而更重要的是,这个劫是白棋不利的两手劫,也就是说,白棋需要再花两手棋才能净活,这劫打起来太累了。
星阵B一看此图虽可免死,但活罪难逃,于是就爽快认输了。
图20:现在我们再回头来看星阵B白172、174的招法,就能明白它的用意了:
星阵B当初选择白164(白三角一子)提劫的时候,还没看到左上角黑D位的鬼手。等看到的时候,已经来不及了。
于是它赶紧白172、174亡羊补牢,期待黑棋暂时没看见,在A、C位跟着应,这样白左上角因为多了E位的断吃黑三角一子的手段,就可逃过一劫。
但它忘了星阵A跟它是同一个“人”,它看到的手段,星阵A也能看到。
总的来说,由于黑随时有D位的鬼手,星阵B白164反击是不行的。
虽然白164后的变化还是很复杂,比如白170这枚劫材特别损(白方块和黑方块交换),让黑圆圈4子无气紧之忧。白170可以找别的劫材。但总的来说,白棋还是极为危险。
这里我也用其他AI看了一下,它们也是一开始都没看到黑D位的鬼手。随着往下摆几步,它们才慢慢看到。
在与大家一起欣赏到黑175这步绝妙手的同时,我也想与大家分享一个自己的心得:
在复杂死活对杀,生死攸关的地方,不要不加思索就把AI的第一感认为是正解。因为往往在这种地方,AI很可能开始是没看到手段的。
这时最好自己先思考验算一下,然后再看AI的胜率和推荐招法,若是有疑问,可以试着再往下摆几步,这时候很可能AI的胜率会发生很大的反转和变化。
总而言之,自己需要先思考,这样一是可以验证AI的推荐是否靠谱;二是思考过程本身,就有利于你更好的吸收AI的“养分”。
最后做个总结:
本文通过星阵的自对弈对局,我从布局、中盘、死活三个方面与大家分享了我如何学习AI的心得体会。
其实三点殊途同归,都指向一点:我们该如何吸收AI给予我们的“养分”?
或者更深入的说,我们该如何挖掘和提炼AI提供的数据和“答案”背后的意义?
希望本文可以对大家有所帮助和启发。
感谢星阵团队提供给我们精彩的星阵自对弈棋谱,我一直对星阵很感兴趣,因为它有自己独到的三处特点:
1:在低资源下保证星阵的训练水平:
星阵团队只有AlphaGo团队1/100的计算资源,于是他们就在“节流”上做文章。在深度强化学习的过程中,星阵从各方面下功夫,使用少量资源依然可以让星阵保持着良好的竞技状态,并且在世界大赛中取得优异的成绩。
2:除了显示胜率外,还可以用相对量化的目差来衡量当下局势的好坏:
现在我们能看到AI提供的形势判断,都是胜率的显示,但是胜率有时候还是相对抽象,让人捉摸不透。而星阵除了显示胜率外,还提供了双方目差的数据,这样让我们多了一个参考来评估当下形势,而且这个目差数据可以让我们更量化直观的了解当下的局势状况。
3:可在贴6目半和7目半之间随意切换,不影响胜率的判断。
在直播日韩举行的世界大赛时,往往会遇到这样的问题:明明对弈规则应该是黑贴6目半,但其他AI都只能当作黑贴7目半来判断形势。
这样有个问题就是若到了最后官子阶段还是细棋局面,这1目的误差,很可能会对胜率产生很大的影响。并影响到我们对当下局面的判断。
但星阵可以做到在黑贴6目半的情况下进行判断,这能让我们更客观的了解当下局势的好坏。
在写这篇棋评期间,我与深客科技CEO,星阵围棋主创人,毕业于清华大学计算机系的金涬先生见面沟通了很长时间。
我们探讨了棋局,查看了星阵的后台数据,并且聊了从2016年AlphaGo横空出世后,到如今所发生的各种事情。
金涬给我这位人工智能领域的初学者,普及了很多有关AI方面的知识:
原来深度卷积神经网络是AlphaGo能战胜李世石的关键武器。
而价值网络和快速走子网络原来曾经一起共事,但随着价值网络的不断进步,快速走子网络逐渐淡出了一线。
策略网络居然真的可以模拟我们人类的直觉,使得价值网络的计算效率大大提高。
至于深度强化学习,原来就是AI可以在脱离人类提供的棋谱后,依然能通过自对弈来制造数据供自己学习的过程。
当最后我们聊到有关AlphaGo的第二篇论文时,金涬谈到了他创建星阵的初衷:
“完全照着AlphaGo第二篇论文的内容去做星阵,当然也可以而且还更轻松,但这样似乎就没啥意思了。因为这就算做到极致,也就跟Alpha Zero一样。
所以总还是想在这基础上,做一些创新。这样一来比较有趣,而且可以给人们带来更多的价值和帮助。
二来,我认为Alpha Zero并非极限,所以想看看用别的途径,有没有可能超越Alpha Zero。虽然我们资源有限,但还是值得去尝试。”
祝愿他能成功!
文末是这盘星阵自对弈的全谱: