返回列表 发帖

从《有远神》一文 探讨围棋AI分析的研究规范(下)

本帖最后由 天马行空 于 2021-2-16 21:50 编辑

作者:崔灿CGF55258  2021-02-16


前两期链接:
从《有远神》一文 探讨围棋AI分析的研究规范(上)
从《有远神》一文 探讨围棋AI分析的研究规范(中)

上一篇分析了《有远神》一文存在哪些问题,收到了棋友的许多不同看法。除去一些对笔者动机与人身的攻击(如试图掌握话语权、为了利益而反对、区区面五哪有资格评论古棋等等)之外,主要观点有“语气太狂,过于武断,围棋的变化哪有那么必然”,“吹毛求疵,即使一些变化有误,也不影响原文的结论”,“用高计算量推翻低计算量的结论是理所当然的,20K-100K的计算量已经远超人类棋手,没有必要遵循1000K的标准”等等。这些意见还是值得探讨的,也让笔者有了一些新的思考。下面逐一进行回复:

①“语气太狂,过于武断,围棋的变化哪有那么必然”

总体而言,围棋的变化当然是无穷无尽。不过笔者研究的是一个个具体的局部,文中每一个变化图都经过了大量AI辅助下的研究,对结论的正确性有绝对的信心。可能是这种自信在落笔行文之间流露得太明显,让一些读者产生了反感,毕竟大多数棋友并不具备验证变化是否正确的条件。笔者的反思是,即便内容没有技术问题,表达方式上也需要技巧。如果有看完上一篇文章,觉得情感上受了伤害的棋友,在此表示诚挚的歉意。

如果该评论中的“必然”是指单手棋的判断,请见下一条。

②“吹毛求疵,即使一些变化有误,也不影响原文的结论”

上一篇对《有远神》一文瑕疵的指正,主要是为了说明在低计算量下,AI变化有许多不靠谱之处。笔者原本的思路是:既然论据有那么多错误,那么结论自然是不可靠的。

然而原文的结论是周陈二人“神乎其技”。究竟什么才算“神乎其技”,显然没有统一的标准。这就像是某人打开电视机看乒乓球赛,看到两边选手对拉了十几个回合,感叹其“神乎其技”。在另一位乒乓球运动员眼中,对拉十几回合就像吃饭睡觉一样正常,其中某些回合还可以早点变线。无论这种技术方面的评价正确与否,试图以客观事实去否决主观感受,这显然是不可能实现的。只要不牵涉棋力的对比,“神乎其技”就与正确错误无关,笔者接受“不影响原文结论”这条意见。

《有远神》一文还以“高复杂度”来证明“神乎其技”是名副其实的,本篇将对“复杂度”这一指标进行考察。当然,按照上面的逻辑,无论结果如何,都不影响棋友心目中“神乎其技”的标准。

③“用高计算量推翻低计算量的结论是理所当然的,20K-100K的计算量已经远超人类棋手,没有必要遵循1000K的标准”

在第一篇中已有阐述,选择1000K的计算量是为了保证一局棋中,超过95%的时候AI计算(胜率)到达稳定状态。不过与上一条类似,笔者对自己文章严谨性的要求是学术论文标准,没有理由将这种标准强加于他人。正如这位棋友所说,20K-100K计算量的AI已经吊打人类棋手,笔者此后不会再纠结于这一点。棋友们只要知道不同的标准的计算量的结论可能不同,以及“吻合度”数值会有差异就可以了。

(二)“复杂度”

首先简单介绍一下目差的概念。与其他开源围棋AI只显示选点胜率不同,KataGo引入了目数计算,可以显示某方的目数领先数值,即双方的目差。需要注意的是,KataGo的目差是所有模拟结果的平均值,并不是一般意义上理解的目数优势大小。因此经常会有实战结果不可能出现的小数,以及目差与胜率的倾向不一致,例如某一方可能在胜率55%的时候目差却是-1.7。这可能是因为AI模拟的大多数胜利结果都为小胜,但失利结果基本是死大龙,所以产生了这种不一致的现象。

复杂度/不确定度,即AI在某一局面下,所有计算结果统计的目数方差。“复杂度”是最初的名称,随后在某次版本更新后改成了“不确定度”(笔者不太清楚具体的时间,以及这个词的改动是翻译问题还是其他原因,这方面如有了解者,请在评论区或私信赐教)。

目前,包括《有远神》一文在内的许多古棋支持者,都将这一指标视为在吻合度的基础上,评价棋手水平的试金石。那么,目数的方差与棋手水平有什么关联呢?该文评论区内下面这条留言,应该是古棋支持者们代表性的意见。


大意是“不确定度”高,意味着局面复杂,在局面复杂时吻合度高,要比局势平稳时的吻合更体现水平。《有远神》一文对“复杂度”的解释,也是类似的观点。


这种说法听起来还挺有道理的。但文中并没有定义“复杂度”数值多少才算“高”,给验证者出了个难题。根据该文表格中复杂度“居高不下”的220-301手数值(下限28.4,上限50.9),姑且认为这一指标接近或超过30就算“高”。的确,这一标准订的太低也不太合适,因为——

(该文虽然提到了权重与计算量会影响复杂度,但同样没给出任何标准。本篇中涉及“复杂度”的实验,尽量与该作者使用的权重与计算量看齐,即20B+20K和40B胖权+100K)


在AI眼中,一盘棋的初始“复杂度”就在20左右(这是40B胖权100K计算量的数值,20B权重20K还会略高一点),显然不会有人把这样的布局和“复杂”挂钩。然而——


换成让九子的开局,AI“复杂度”立刻超过了30!难道这样的局面就称得上复杂,AI就算不清了?这显然与常理不符……

经过分析,发现问题的关键不在于摆上了九颗黑子,而是“复杂度”数值会受到优势大小的影响。


回到刚才的空枰,将黑棋贴目调至与前图让九子局面的目差相近,果然复杂度也变得差不多了。

不光是空枰开局,在任何一个局面下,调整目差的大小,都会导致复杂度的变化。其实笔者之前早就向古棋支持者指出过这一点,得到的答复是“对局中怎么能改贴目”,以及“正常对局中的优势不会那么大”。看来,一部分围棋对局已经被判定为“不正常”了。暂且不论古棋支持者的这种解释是否说得通,我们再来看看下面这盘棋:


这是2018年LG杯预选赛的一盘棋,分析标准同样是《有远神》一文采用的20B权重20K计算量+40B胖权100K计算量。按照那位作者对周陈一局的描述的话——这盘棋从131手开始到341,复杂度一直“居高不下”,绵延200余手!在这个局面下,20B复杂度高达82.2!就连40B胖权这样的“强AI”都达到了51.2!这得是个多么复杂的局面啊!

然而仔细看看棋盘就会发现,双方的确几条大龙纠缠在一起,不过无非是如何收气的问题。尽管弄清楚这个问题也不轻松,但就其难度而言,与周陈一局某些时刻的复杂性无法同日而语。(当然,“复杂”本身也是主观感受,每个人心目中“复杂”的标准是不一样的。可能有些棋友就是觉得这里的大龙对杀更复杂,恭喜你,围棋AI也是这么想的。)

为什么此时“复杂度”这么高呢?无非是牵扯的棋快太多,导致不同结果下的目差剧烈波动。既然“复杂度”的本质是目差的方差,那就必然受到与复杂性无关的目数影响。内部同样形状的一道死活题,棋块的价值是20目还是100目,AI显示的“复杂度”是截然不同的。


如果按照《有远神》一文的写法,这里可以说“黑131至171这四十手,在极高的复杂度下。黑方的吻合度高达80%,一选吻合度也达到了75%,简直神乎其技!”。这样的“神乎其技”是不是太廉价了点?(上面只是笔者的感受,不妨碍棋友们觉得这四十步棋也是“神乎其技”。)

对于上面这种现象,古棋支持者们同样给出了解释:“在涉及大型死活,大龙对杀等特定的局面下,AI复杂度将会失真。所以使用该指标时,要先排除这些特殊局面”。问题是这两种局面本身就是“复杂”的体现,没有死活和对杀哪儿来的复杂呢?“大型”又该如何定义呢?如果一个指标受到这么多因素的影响。那么它的可靠性究竟有多少呢?

上面的两种问题,竟然还不是“复杂度”最大的缺陷。让我们回到《有远神》一文中,列出的复杂度最高的那个局面:


根据原作者的描述,这是20B权重20K计算量下得出的“复杂度”数据。然而笔者采用同样的配置,却始终无法精准复现这一数值。会不会是20B的权重太弱,或是20K计算量太少,导致该图的“复杂度”失准了呢?


笔者将计算量放大至1000K,复杂度还是“高达”40左右,似乎并不是计算量的问题。不过笔者想再次验证本图“复杂度”数字时,发现也做不到!继续实验下去的结果……


(复杂度23.3)


(复杂度34.5)


(复杂度26.2)


(复杂度16.6)

每一次的结果都不一样!

这种现象的原因,自然是如今这一代围棋AI的基础——蒙特卡罗方法(Monte Carlo method,统计模拟方法)所致。AI的每一次的搜索都是完全随机的。

经过仔细分析,这个局面的复杂度高低究竟如何,取决于AI更倾向于哪一种找劫方式——上边一路打,中间扑还是右边提。不同下法甚至同一下法计算量不同,都会影响AI后续的变化选择,最终导致了AI所有变化的平均目差,也就是“复杂度”没有一次相同。

笔者又测试了另外两种常用的KataGo官方权重:40B与40B胖权,也得到了类似的结果,分别列在下面。






(“复杂度”按编号顺序分别为13.4、22.7、14.6、36.8、20.6)






(“复杂度”按编号顺序分别为13.4、31.6、16.8、29.5、28.9)

在这三种权重的十五个分析结果中,显示的目差与复杂度成正比——目差少则复杂度低,目差高复杂度也随之上升,印证了前面“复杂度受到优势大小影响”这一结论。

这些结果按照目差的大小,总体来看可以分为两类:一类是复杂度15左右,白棋稍差的判断;另一类是复杂度30甚至更高,白棋要输10目及以上。前一种判断40B官权最多,20B权重与40B胖权则略微偏向另一种结论。那么,到底哪一种是正确的呢?


上面那十五个分析结果中,所有“白棋小败”的右下小图变化,黑棋都是先找左上不损目的劫材,最终吃掉白棋左边三子形成转换(左大图)。那样白棋的确只输一点。然而黑4正确的下法是先挖左下找劫,只要白棋应劫(不应的话要输9目,即四子半),黑10以下即可动用右上的损劫将白棋打爆。

另外,在中间这张图黑16的时候,AI前二选点显示的目差只有4-5左右,然而这是围棋AI面临困境时一贯的“自欺欺人”——AI计划的后续是,这两种下法黑棋都不会应,放弃上边吃掉白右下。然而手动让黑棋应住之后,双方目差顿时大跳水至20左右(右小图)。

现在,让我们回过头再看一下那十五个结果:只有40B胖权的两个分析(40BR-2和40BR-5),右下小图算到了黑棋应该在左上找损劫,但之后也都是“自欺欺人”的转换。以40B官权为首的“白棋小败”结论是有问题的。

(这里说点题外话:笔者最初分析当湖十局,使用的就是40B官权。但过程中发现这一权重在某些时候,会出现明显“违背逻辑”的判断……


当湖第十局,40B官权非要跑到右上去浪费劫材。右边两图则是日常研究中发现的BUG。这些案例都是AI倾向于“逻辑上不可能好”的下法,并且目差算的没错,但胜率就是不对。KataGo 30B官权也有类似的情况,程度稍微轻一些,20B官权与40B胖权则不会出现这样的问题。根据第一篇“同计算量下不同权重吻合度无显著差异”,而20B权重的运算速度大约是40B胖权的四倍,这是笔者最终选择用20B跑谱的原因。)

回到刚才的分析。看来15左右的“低复杂度”并不意味AI一定算的准,也有可能是始终在错误的变化里打转。当然,这一命题并不影响“高复杂度是AI算不准”的结论。不过,既然高复杂度时每一次都有可能不一样,这么不稳定的指标,到底应该如何采样呢?每步棋模拟十次取平均?如何能保证没有暗箱操作,不是单次结果的复制粘贴?

即便我们忽视取样的难题,从上面棋局的分析来看,以“复杂度”+“吻合度”判定水平,有一个根本性的问题:

既然AI都算不准了,那么此时的吻合度还有什么意义呢?“高复杂度”下的吻合更体现水平又从何而来呢?

相信一些古棋支持者又会拿出“AI再怎么算不准也比人强”的逻辑,就像之前说20K计算量够用了的时候一样。暂且不论这里的逻辑偷换——下一盘棋人赢不了,不代表AI的每一个结论都是正确的。这种说法相当于什么呢?笔者试着描述一下:

疫情期间,国内各种场所的入口都设有红外测温仪。这种仪器受环境影响较大,测定数值误差一般在0.5℃之内,如果访客的体温超过了37.3℃,还要等一等再重新测试,或者使用夹于腋下的水银温度计来确认。

现在有一个人进来了。突然,你手中的红外测温仪屏幕开始闪烁,还发出奇怪的声音,连续测了五次来者,数值竟然都不一样,并且大幅波动!此时你是认为机器坏了,还是从这五次的结果中,随机或特意挑选一个数值,并说“反正测的比用手摸他额头准”呢?


以前面出现过的LG杯预选赛为例。棋局进行到292手的时候,AI(40B胖权)在“高复杂度”下,选择去右上角收官,并认为黑棋已经不行了。实战曹潇阳也是这么下的,在他的计算里,大龙对杀的结果是双活。然而此时黑棋可以直接收气,形成缓一气劫后,利用右上的劫材,以及右下提二子的本身劫材将白棋左上劫杀(变化图来自围棋天地2018年第9期对这盘棋的研究)。这里黑棋的“吻合”显然无法说明任何问题。再强调一遍:

“高复杂度”意味着局面复杂到AI都算不准的地步。那么,既然AI都算不准了,此时的吻合度还有什么意义呢?

综上所述,如果说“吻合度”的种种问题,可以用大样本解决的话(“随机性”的问题,吻合度同样存在。但根据笔者的测试,就算是每步棋20K的低计算量,整盘棋的吻合度差异也不会超过五手),那么“复杂度”的缺陷则是致命的。这一指标偏高的唯一意义,大概是提醒我们,此时AI的计算并不可靠,需要人类棋手介入,仔细研究一番了。

(笔者原本想将“样本选择”放在本篇末尾,但这一块内容的篇幅超出了预想,最终决定单独列为“完结篇”。对被标题骗到的读者表示歉意)
附件: 您需要登录才可以下载或查看附件。没有帐号?注册

返回列表