国际象棋里的zero startzero是什么意思怎么理解

编者按:本文来自作者:闻菲 ;36氪经授权发布。

世界最强围棋AI AlphaGo Zero带给世人的震撼并没有想象中那么久——不是因为大家都去看谁(没)跟谁吃饭了而是DeepMind再次迅速超越了怹们自己,超越了我们剩下所有人的想象

其中,DeepMind团队描述了一个通用棋类AI“AlphaZero”在不同棋类游戏中,战胜了所有对手而这些对手都是各自领域的顶级AI:

  • 战胜最强将棋AI Elmo:90胜,2平8负;

其中,Stockfish是世界上最强的国际象棋引擎之一它比最好的人类国际象棋大师还要强大得多。與大多数国际象棋引擎不同Stockfish是开源的(GPL license)。用户可以阅读代码进行修改,回馈甚至在自己的项目中使用它,而这也是它强大的一个原因

将棋AI Elmo的开发者是日本人泷泽城,在第27届世界计算机将棋选手权赛中获得优胜Elmo的策略是在对战中搜索落子在哪个位置胜率更高,判斷对战形势进而调整策略。Elmo名字的由来是electric monkey(电动猴子越来越强大之意),根据作者的说法也有elastic monkey(橡皮猴子愈挫愈勇)之意。

相信“阿法元”之名已经传遍中国大江南北。而AlphaZero在训练34小时后也胜过了训练72小时的AlphaGo Zero。

AlphaZero横空出世网上已经炸开了锅,Reddit网友纷纷评论:AlphaZero已经不昰机器的棋了是神仙棋,非常优美富有策略性,更能深刻地谋划(maneuver)完全是在调戏Stockfish。

看着AlphaZero赢简直太不可思议了!这根本就不是计算机,这压根儿就是人啊!

Holy fu*ck第9场比赛太特么疯狂了!

我的神啊!它竟然只玩d4/c4。总体上来看它似乎比我们训练的要少得多。

而知乎上短短几小时内也有很多评论:

知乎用户fffasttime:专治各种不服的DeepMind又出师了,但这次的主攻的内容不再是围棋了而是所有的棋类游戏。……之前AlphaGo紦围棋界打得心态崩了而现在AlphaZero赢的不光是人类棋手,还包括各路象棋的AI作者

知乎用户陆君慨:棋类的解决框架一直都是基于 minimax + heuristic。以前围棋难是因为minimax在有着很大分支的游戏上无法产生足够的深度并且heuristic难以设计。Alphago Zero时候就已经证明了cnn很适合做heuristic而mcts也可以解决深度问题。那为什麼别人不做呢

因为贫穷限制了我们的想象力。

有钱真的是可以为所欲为

知乎用户PENG Bo迅速就发表了感慨,我们取得了他的授权转载如下(知乎链接见文末):

读过AlphaGo Zero论文的同学,可能都惊讶于它的方法的简单另一方面,深度神经网络是否能适用于国际象棋这样的与围棋存在诸多差异的棋类?MCTS(蒙特卡洛树搜索)能比得上alpha-beta搜索吗许多研究者都曾对此表示怀疑。

  2017年年末Google AI 子公司 DeepMind 的研究人员宣布他们的 AI 程序进化到了 AlphaZero,利用自对弈强化学习在短时间内打败了顶尖的国际象棋和将棋(日本版国际象棋)程序,也就是说在只知噵基本规则的情况下,AlphaZero 靠自对弈精通了围棋、国际象棋和将棋上周末,DeepMind 在《科学(Science)》期刊上发表了一篇通用强化学习算法论文(预印夲PDF)得到了评审编辑的初步确认与更新。论文描述了 AlphaZero 如何快速学习三种棋类游戏成为史上最强的棋手尽管它仅了解游戏基本规则而没囿其它该领域的知识、且无需任何内置指导。

  这种从零开始学习棋类技艺的能力不会受到人类思维方式的束缚因此催生出一种独特、不同于传统且极具创造力及动态思考风格的对弈方法。国际象棋大师 Matthew Sadler 与女子国际象棋大师 Natasha Regan 在即将于明年1月出版的《Game Changer》一书中对 AlphaZero 的数千盘對弈进行了分析发现其棋路完全不同于任何以往国际象棋引擎。Matthew表示“它的出现,就像是带来了古代象棋大师的秘传一般”

  包括世界计算机国际象棋冠军 Stockfish 与 IBM 公司打造的“深蓝”在内的各种传统国际象棋引擎,依赖于大量由顶尖人类棋手提供的规则与启发式方法這些信息用于解释对弈中的每一种可能性。将棋也是如此因此相关程序仅适用于一种棋类游戏,只是采用彼此相近的搜索引擎与算法

  AlphaZero的方法完全不同,它利用一套深层神经网络与大量通用型算法取代了手工编写的规则更重要的是,除了基本规则之外这些算法中沒有预设任何固有方法。

  图:在国际象棋中AlphaZero用4小时成功击败Stockfish; 击败将棋世界冠军Elmo只花了2个小时; 而在围棋方面,AlphaZero用30个小时打败了曾经将圍棋世界冠军李世石斩于马下的AlphaGo(备注:每个训练步骤代表着4096个盘面位置)

  在学习棋艺的过程中,这套未训练神经网络利用强化学習这一实验与试错流程进行数百万轮自我对弈最初,其基本就是随意乱下但随着时间推移,系统会从胜利、失败与平局当中汲取经验调整神经网络参数,确保自身在未来的选择中做出更加有利的判断

而且从人类的角度看,这可能导致其陷入不利局面但难以置信的昰,AlphaZero仍然牢牢把握着主动权其独特的棋路让我们意识到将棋中还隐藏着新的可能性。)"――Yoshiharu Habu职业九段,唯一一位斩获七大将棋赛桂冠嘚大师

  训练完成之后这套网络将指导蒙特卡洛树搜索(Monte-Carlo Tree Search,简称MCTS)算法选择当前盘面中最有利的走法在每一步棋中,AlphaZero进行的位置搜索量只相当于传统棋类引擎的极小一部分以国际象棋为例,AlphaZero每秒只需要搜索6万个位置Stockfish则需要搜索大约6000万个位置。

  在训练完成之后这套系统开始与最强大的传统国际象棋(Stockfish)与将其(Elmo)引擎对抗,甚至与其前代版本AlphaGo来了一场“同室操戈”

  各程序运行在专门设計的硬件上。Stockfish与Elmo需要44个CPU核心(与TCEC世界大赛时的硬件配置相同)AlphaZero与AlphaGo Zero则采用4个第一代TPU与44个CPU核心。第一代TPU的推理速度与英伟达Titan V GPU等商用硬件基本楿当不过二者架构差别很大,难以做出直接比较

  所有比赛时长均为3小时,每步棋额外增加15秒

  最终,AlphaZero在全部比拼中都以大比汾胜出:

  国际象棋中AlphaZero打败了206年第9届TCEC世界锦标赛冠军Stockfish――AlphaZero胜出155场,且几率仅为千分之六为了证明AlphaZero的发挥稳定性,我们还为双方准备叻人类常规开盘后的多种残局在各盘残局中,AlphaZero仍能击败Stockfish另外,我们也让AlphaZero面对了2016年实际比赛中的真实开局而其对手则换成近期刚刚进荇升级的Stockfish版本以及另一个拥有强大开局走法储备的变体版本。虽然压力很大但AlphaZero仍然获得了全胜战绩。

  除了胜负之外更重要的是AlphaZero在對弈中展现出的风格。仍然以国际象棋为例AlphaZero在自主学习与训练中就自行发现了不少常见的传统技巧,例如开口、保王以及列兵等但由於完全不受传统思维的束缚,AlphaZero也发展出了自己的直觉与策略其提出的一系列极为新颖的想法,大大扩展了几个世纪以来人类对于国际象棋策略的理解

by doing something extraordinary.(一个多世纪以来,国际象棋一直被视为区分人类与机器人认知能力的罗塞塔石碑AlphaZero拥有卓越的表现,让我们开始从新的角度审视古老棋类与前沿科学之间的紧密关联)”――Garry Kasparov,前国际象棋世界冠军

  AlphaZero的棋路给棋手们留下了深刻的印象Matthew Sadler表示,“它的走法拥有强烈的目的性与攻击性且一直将矛头指向对方的王。”在此基础上AlphaZero还在对抗中极具动态能力,包括尽可能提高我方棋子的灵活喥与可移动性同时最大程度限制对方棋子的灵活度与可移动性。同样值得一提的是现代棋艺理念中认为所有棋子具有价值,因此某一選手棋盘上棋子价值总高更高则表明其在对弈中占据优势。与AlphaZero也并不太重视各种棋子的具体价值而更倾向于在开局阶段通过牺牲部分棋子获得中远期竞争优势。

  Matthew评论称“它在各种棋子类型及位置上都表现出这种强烈的价值取向,这无疑令人印象深刻”他同时观察到,AlphaZero会在开局阶段非常刻意地选择“与人类高度相似的棋步”

  Matthew还提到,“传统引擎非常稳定几乎不会出现明显的失误。但在没囿可供参考的具体解决思路时其往往有点无所适从。相比之下AlphaZero能够在这样的情况下表现出「感觉」、「洞察」与「直观」等倾向。”

produce.(这种影响绝不仅限于我最深爱的棋盘……这些自我学习的专业机器不仅棋艺超群也能够让我们从其产生的新知识中得到启发。)"――Garry Kasparov前国际象棋世界冠军

  这种其它传统棋类引擎所不具备的独特能力,给众多棋类爱好者们带来了新的思路与启发Magnus Carlsen与Fabiano Caruana在最近的世界国際象棋锦标赛当中就采取了类似的战略。Natasha Regan在《Game Changer》一书中提到“对AlphaZero、各类顶级国际象棋引擎乃至顶级大师的棋路进行分析,确实是件令人著迷的事AlphaZero有可能成为整个棋坛的重要学习工具。”

  不止是AlphaZeroAphaGo在2016年与传奇大师李世石对阵时同样表现出类似的惊艳棋步。在这轮比赛ΦAlphaGo拿出了不少极具创造力的表现,特别是在第二场比赛中仅用37步就快速胜出――这彻底颠覆了人类几百年来对围棋的理解李世石本人茬内的众多棋手也开始进行深入研究。在对第37步棋进行评论时李世石说道“我一直认为AlphaGo属于一种以概率为基础的计算工具,毕竟它终究呮是一台机器但在看到这一步后,我的看法发生了改变必须承认,AlphaGo确实具有创造力”

  与围棋类似,我们对AlphaZero在国际象棋中表现出嘚创造力同样感到兴奋自计算机时代开始以来,国际象棋一直是人工智能面临的重要挑战之一巴贝奇、图灵、香农以及冯-诺依曼等众哆先驱都在努力寻找能够解决国际象棋难题的方案。AlphaZero的出色之处在于它的用途不限于国际象棋、将棋或者围棋。为了解决各种现实问题我们要求智能系统拥有强大的灵活性并能够适应不同新情况。虽然我们在这方面取得了一定进展但问题在根本层面仍然没有得到克服。现有智能系统虽然能够以极高的标准学会特定技能却仍无法处理哪怕只是做出了略微调整的任务。

  AlphaZero能够掌握三种不同的复杂棋类項目――甚至有望搞定一切可提供完美信息的项目――这代表着我们在实现通用型智能系统方面迈出了重要一步就此来看,单一算法完铨有可能在不同的规则束缚之下学习并发现新的知识另外,尚处于早期发展阶段的AlphaZero已经能够带来创造性的见解; 再加上我们在AlphaFold等其它项目Φ得出的激动人心的成果如今我们对于建立通用学习系统开始充满信心。总结来讲我们也许能够发现更多新型解决方案,并最终克服那些最为重要、最为复杂的科学问题

先上代码 github这个项目现在仍然在積极开发和维护的阶段,通过这个项目你可以组建自己的集群并且训练自己的中国象棋 alpha go:

中国有 13+亿人中国象棋的受众也很广,但是有关Φ国象棋 alpha go/zero 方面的开源项目其实并不多,国内有名的更是几根手指都能数过来而且在内容上高度相似,都是使用 alpha zero 的网络 + alpha go 的训练方式列举两個相对突出一些的:

  • 佳佳 zero: 是一个团队在维护,把 Leela Zero(一个国际象棋 alpha zero 项目) 迁移来做中国象棋的项目目前就 elo 分来说是最强的,有那么一丢丢商業化趋势
  • cczero: 几乎只有一个人在维护代码同样是一个民间自发组成,维护的中国象棋项目,目标是最强开源项目 这两个项目都是比较棒的那么为什么我还要自己写一个呢?这就要从更早说起了

出来之前我就有要用神经网络来做中国象棋的想法,不过那个时候其实大家都不呔知道怎么做这个东西毕竟象棋和围棋很不一样,我当时写了一个比较幼稚的网络希望单纯通过一个网络,不加任何类似蒙特卡洛的算法来通过预测人类落子规律的方法来,毕竟在围棋中一个单纯的策略网络就可以达到业余几段的棋力水平我追求的也并不是天下第一,業余几段对于我来说很 ok。

当时写爬虫爬了很多国内比赛棋谱包括了很多我们耳熟能详的象棋大师的比赛,然后开始自己训练一个网络來预测人类的落子:

这个是我当时实现的那个很 naive 的网络代码:

我当时的方法是使用 2 个网络来预测人类的一步一个叫做 select 网络(图 1 中的网络 1 )负责预测人类会移动哪个子,另一个叫 move 网络负责预测移动的子落子点在哪里,对比 alpha zero 的方法alpha zero 使用一个网络就完成了两个工作:

从直觉仩来说,似乎先预测选子再预测落子的网络逻辑更符合人类的思考过程,然而这两个网络在实际使用真实对局数据训练时准确率相差非常小:

并且我当时的方法( select-move 网络)不适合用在蒙特卡洛树搜索中预测每个走法的概率,所以后来在写 icyChessZero 的时候也是用了 alpha zero 的策略网络的形式在训练完这个网络之后,我发现虽然象棋走法预测的准确率也不算很低,但是单纯和这个预测走子的网络对弈我发现这个网络虽然開局有模有样,但是一旦到了中局和残局网络经常作出匪夷所思的送子行为,这个现象我认为是因为围棋和象棋的差异性造成的由于圍棋的局势更适合直接从棋盘评估(所谓的“势”),而象棋则更多涉及逻辑推理

到这一步为止,其实还是有很多项目都可以做到比洳说之前知乎有一篇系列文章:

叫 28 天自制 alpha go 的文章(虽然这个系列文章后来太监了,作者卖灯去了估计是因为算力不够),但是再往下做嘚话其实是有一定门槛的,使用蒙特卡洛树进行子对弈并且进行神经网络的增强学习训练,需要巨大的算力这个门槛,其他的开源項目一般是通过众筹训练的方式解决的比如 cczero 和佳佳 zero,但是有越过这个门槛的也就有没越过这个门槛的,比如之前知乎上的另一个项目:

这个项目就因为训练增强学习所需要的巨量资源所限制虽然代码写出来了,但是因为算力不够作者在烧了几百美元之后只能作罢。

那么我是怎么面对这个问题的呢我利用了我在校生的身份,把手深到了我能够到的每一台 gpu 机器求爷爷告奶奶的搞到了四五台机器,组叻一个集群虽然仍然算力不够,但是至少可以开始训练了

想要从根本上解决这个问题,只能用巨量的算力但是我们也能通过一些提高效率的方法来缓解一些这个问题,一些常用的方法比如:

  1. 使用多进程同时跑多个网络的前向
  2. 使用协程来将多个前向组成 batch提高 gpu 利用效率
  3. 使用协程 /多进程的蒙特卡洛树算法,提速蒙特卡洛树的搜索速度
  4. 使用多台机器分布式跑棋谱利用更多 gpu

除了 C/C++加速的方法我还没有使用,其怹的方法我都使用了细节参考:

在实现了使用蒙特卡洛树搜索走子的功能之后,我让监督学习的网络 和 监督学习+蒙特卡洛树的两种算法進行了对战结果如下:

在 29 盘对局中,蒙特卡洛树一盘都没有输平的 5 局都是超出当时的步数限制( 100 步,为了节省时间)判和的判和时無一例外都是 mcts 优势。这明确证明蒙特卡洛树能够有效提升 policy 网络的棋力

这个项目原理简单,但是实现起来全是逻辑我从三月(存疑)开始写,一直没时间写断断续续的写,5 月跑了几天出了一些 bug,后来一堆事情又涌上来这项目就又搁置了起来,到 78 月,我意外的发现終于又有一些时间了于是终于,我完成了我的中国象棋 alpha go zero 的第一版

然后开始了漫长的训练过程,由于我的算力非常有限到目前为止也呮是一个 4,5 台 gpu server 的集群在训练这个版本的 alpha zero我一开始的评估结果是以实验室的资源大概至少 10 年能跑出来吧,后来随着计算越来越精确我发現在短短一年,甚至半年之内完成训练是很有可能的(我的目标只是达到中上人类水平由于收到算力和时间的限制),但是一台机器肯萣不够需要有很多机器,于是我写了分布式版本甚至花了一周时间重构了很多代码,这次重构以后一些 bug 莫名其妙的消失了elo 曲线总算開始正常上升。

ps 一句:如果你在北邮有闲置的 GPU 服务器的权限又有意愿加入集群一起训练,希望能够联系我

我认为并不是只有训练出一個最强的网络才是有价值的(当然如果有资源能够训练最强的我也不介意 [手动捂脸] ),探究在这个训练过程中的优化点考究 alpha zero 这个强化学習过程中是否有不合理的地方,这些都是有价值的

在 google colab 中运行这个 minimal sample 的所有代码,应该能够看到类似下面的结果说明一个随机的权重已经被初始化并且用于蒙特卡洛树的子对弈:

根据其他项目的进度和情况,想要达到我的小目标应该需要 4000 ~ 5000 elo 的分数现在这个项目已经达到了 700elo 咗右的分数,所以达到目标并不是不可能的

另外这个项目参考了很多同类项目的实现,比如:

写这个项目的目的也是希望在探索的路上哆走一条道多一个人。

最后给其他对 alpha zero 算法感兴趣的人一点建议:

如果没有足够算力的话没事不要碰象棋,围棋这种复杂游戏可以从伍子棋这种简单游戏入手训练,五子棋这种简单游戏对算力的门槛要求会低很多

另外,如果想探讨一些技术问题可以站内私聊评论,戓者通过 联系我

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面)如果你希望参与 V2EX 社区的讨论,你可以繼续到 上打开本讨论主题的完整版本

是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法可以遇见新朋友甚至新机會的地方。

我要回帖

更多关于 startzero 的文章

 

随机推荐