首先恭喜Lc0在第十一届CCC( Computer Chess Championship)上以77:73的比分战胜Stockfish,重新夺回冠军宝座。Lc0能战胜Stockfish夺冠并不意味着Lc0全方面超越了Stockfish Lc0的战术仍然不太行,而是表明作为新式引擎的Lc0的确有许多传统引擎目前无法企及的优点:比如对空间优势的利用、对异色格象的运用、对对方轻子的限制等等。这篇文章我们试图去介绍Lc0的一个重大技术优势,即Lc0利用神经网络的优势,走了规则的漏洞,开启官方“外挂”——7子残局库。
国际象棋的残局库,涵盖了所有可能局面下所有着法的所有可能结果,如果你拥有了残局库,那么便可以走出完美的走法。简单地说,它就是国际象棋的上帝。目前为止,国际象棋的引擎比赛支持6子残局库,也就是说一旦棋盘上双方包括国王仅剩下6个子,那么比赛将自动根据残局库的结果终止。
不要以为只有6个子的残局就很简单,4个子的马象杀王和后胜单车对业余爱好者来说容错率并不高5个子就会有双马对兵这种复杂的残局,6个子更是有双车兵对后、双象兵对后等等混沌的局面。由于残局库十分强大,即便是同样一个引擎,拥有6子残局库,会比没有残局库高上将近20分!
读到这里,读者可能有个问题,明明有7子残局库,为什么其他引擎除了Lc0却只能用6子残局库呢?这涉及到一个技术上的难题:虽然上帝很好用,但是固态硬盘容不下。5子残局库仅有939MB,6子残局库就有150.2GB了,而7子残局库已然是17TB的庞然大物,2020年预计会生成的8子残局库,大小可达1PB。因此受条件限制,传统引擎只能使用6子残局库。
话题回到我们的主角Lc0。其实一开始的时候,Lc0的开发者为了和他们起的这个傲娇的名字“Leela Chess Zero”相匹配,压根没有给Lc0准备残局库的打算。我们先来看看最最原始,没有残局库时Lc0的“精彩”表演。
图一:节选自Andscacs vs Lc0
不管能不能赢,Lc0一定要走磨叽满50回合再说!要是马象杀王这种棋,走满50回合也就算了;单车杀王也要走满50回合,这就有些过分。事实上,它也创造了TCEC史上最长的分出胜负的对局记录——和过气引擎Fritz大战308回合。
照这个趋势发展下去,Lc0有没有如今的人气尚未可知,但绝对有拿第一气人引擎的实力。比如按照Superfinal的时限,一步棋加15秒,局面进行到了观众已经厌倦了一个必和的异色格象残局,大家都在期待下一盘精彩的对局。这时每冲一步兵,就意味着又多等一个新的50回合,也就是单Lc0就多了750秒=12分半的磨叽空间,这还不算它的对手也可能会磨叽……这谁顶得住啊!
面对Lc0这一大坏毛病,Lc0的开发者团队却不以为意:赢了就好,管它赢得快赢得慢呢。甚至给Lc0的磨叽起了个好听的名字,叫“high level shuffle”。“high level",你们这些只会跟着Stockfish分析指点江山的键盘侠们,闭上嘴好好学就完事了。打破这一僵局的,是Lc0在第十四届TCEC Superfinal第65盘的糟糕表现。Lc0将局面导向了一个7子残局库中的必胜局面,可惜Lc0没有残局库,遗憾的放了Stockfish一条生路。最终Lc0因为这一盘棋没赢下来,导致了总比分49.5:50.5的惜败。
图二:白王入侵就赢了
以49.5:50.5输掉比赛实在是太憋屈了。因此Lc0的开发者团队痛定思痛,决定放弃信仰,不做人了为Lc0加装残局库。并且一步到位,直接安排7子残局库。加装的方式也很简单粗暴,简单的说就是随便从残局库抽一个局面,Lc0走的出最优走法就予以鼓励,走不出就加以惩罚。这样久而久之,Lc0就学会了7子残局的最优走法,实力有了显著的提高。当然,获得力量的代价就是借助了人类的智慧,因此Leela Chess Zero名字里的Zero没了也就是说,在传统引擎只能把残局库存到固态硬盘的情况下,Lc0凭借技术优势,将残局库内化到了自己的神经网络内部!在其它引擎只拥有6子残局库的情况下,拥有7子残局库的Lc0就如同上帝一般。它能赢不该赢的棋,和不该和的棋。这里简单选取两个局面来说明Lc0官方”外挂“的赖皮程度。
图三:🐟选择了155. ...♛g4,并输掉了比赛
图三选自TCEC Cup3 最后一轮的第9局的第155回合。根据7子残局库,黑棋走155. ...♚b5和155. ...♛g5都是盘和棋。可是只有6子残局库Stockfish实战中走出了155. ...♛g4,并被上帝附身的Lc0成功捡了个漏。值得一提的是,很多Lc0的粉丝将这场胜利,视作是对第十四届TCEC Superfinal第65盘和棋的复仇。
图四:Lc0执黑苟和
图四选自第十一届CCC Finals!的第53回合,Stockfish通过一系列漂亮的战术组合,将局面导向了图中的必胜局面。可是Stockfish遇到了当年Lc0同样的问题,它想不到怎么赢!雪上加霜的是,它的对手Lc0总能走出最顽强的防御。因此在50回合后,Lc0不讲道理地从Stockfish鱼口拔牙,夺回了0.5分。
最后如果读者对文中提到的7子残局库有兴趣,可以点击阅读原文,来感受残局库的强大威力。顺便了解封面的含义