本页面已浏览116次

本章我们演示AlphaZero的思考过程。

AlphaZero如何工作:理论

  1. 学习而不是被编程
  2. 通用而不是专用
  3. 基于实战而不是逻辑分析
  4. 主动的而不是被动的

传统国际象棋引擎采用\(\alpha-\beta\)树进行搜索,并利用多种特定的启发式搜索配合由高手设计的所谓的“评估”函数来下棋。但AlphaZero完全自学,开发出自己的评估函数,同时采用蒙特卡洛树搜索算法(Monte Carlo tree search,或MCTS)进行判定。

MCTS可以借鉴“之前”的经验,那么这些经验从何而来?这就是AlphaZero的神经网络。它以当前局面作为输入,给出“可能的下法”(称为“对策网络”)以及对当前局面的“价值分析”(也称为“价值网络”)。这些输出可以指导MCTS算法走向那些最有可能的路径。这样就大大降低了要考虑的行棋路线数量,也就是说减少了搜索的广度;同时,因为可以估计非终局形势下的价值,它也减少了搜索的深度,因为在终局之前就可以给出某个给定变例的价值。

特别重要的是,同样的算法可以不用再次定制就能适应所有游戏,并能达到超人的水平。

AlphaZero如何受训

AlphaZero在和Stockfish比赛前,只训练了9个小时。开始训练时,它是“空”的:除了游戏规则之外,没有任何国际象棋知识,而且根本没有去“学习”Stockfish的棋谱。它也没有借鉴任何现有的开局知识,而是通过训练和自我对战获得了自己的开局套路。

在这9个小时中,AlphaZero总共和自己下了4400万局棋,也就是每秒钟超过1000局。同时,它还不断调整自己神经网络的参数。在自我对局中,MCTS对每一步进行了800次“模拟”,每次模拟都会“往下走一步”并评估那时的“价值”。以下是AlphaZero对开局分析的一个示例:

思考过程步数 节点 评估
1 1. d4 56.8%(白)
2 1. d4 Nf6 43.1%(黑)
3 1. Nf3 56.8%(白)
4 1. d4 Nf6 2. c4 56.7%(白)
5 1. d4 d5 43.1%(黑)
6 1. d4 Nf6 2. Nf3 56.6%(白)
7 1. d4 Nf6 2. c4 e6 42.8%(黑)
8 1. e4 e5 44.9%(黑)

每次AlphaZero选择要考虑哪个变例,有三个条件:

  1. 对策网络决定的,在此类局面下该走法的可能性。
  2. 价值网路决定的,该变例结果有多好。
  3. 在搜索过程中,这个变例被考虑到的频度。

如果某个变例之前没有被考虑过很多次、但这一步看上去可行而且很不错,AlphaZero往往会选择该变例及其后续来进行模拟。最初局面的评估就是所有这800个模拟局面评估的平均值。Stockfish不是返回平均值,而是返回对双方而言最好的那个线路(也就是所谓的主要变例(principal variation)。我们认为这就是为什么AlphaZero的下棋风格和传统引擎很不相同的原因。它通常更能下出更有创意的下法。

AlphaZero和Stockfish等传统引擎的评估函数也不同。这也是它们风格不同的进一步原因。Stockfish的评估函数是局面特性的综合,具体可以参见这个Github链接

Stockfish会使用一个各特性线性综合的评估函数。其权重有两类,分别对应于中局和终局。它对白棋和黑棋评估若干因素,如子力和行动力。最终评估是这些因素的加权平均。

AlphaZero也有一个评估函数,但它是自己学来的,并以“价值网络”呈现。

因此,AlphaZero不受人类设计的限制,也不乏想象力,评估时选择考虑哪些特性也非常自由。

也因此,AlphaZero能综合考虑不同因素之间的交互,比如行动力会怎样影响子力优势。

有趣的是,用AlphaZero下围棋时,DeepMind人员注意到,随着训练时间的延长,它的水平提升非常快、非常高;但在国际象棋上看不到这点,这可能是因为平局太多了。

另外,在训练时,AlphaZero用到5000个一代TPU来生成自我对局,16个二代TPU来训练神经网络。和Stockfish对战时,它只能用一台机器,4个一代TPU。

AlphaZero的比赛

在训练时,特意加入了选择下法的随机性,目的是为了能看到更多的局面和下法。之后在比赛时,仍然有一些随机性——这是由硬件的并行性决定的;同时,有时会在开局时加入一些随机性以确保评估的多样性。

AlphaZero的思考过程——某一步的详细表述

我们来看一局实战中,AlphaZero针对某个局面进行了怎样的分析。对局的另一方(黑方)是Stockfish。局面出现在黑方29步之后:

一开局,AlphaZero就弃掉了两个兵(g线和h线),而补偿是双象。一般认为,AlphaZero会在王翼堆集子力以充分利用这两条半开放线。但是,AlphaZero决定强行打开中心,然后充分利用双象来进行对黑王的攻击。

起始(根节点) 下一步 分析
0.657 (100%) Qd2 (3.5%) 0.726 (3.0%)
-- Re2 (0.41%) 0.659 (3.0%)
-- Qd3 (0.35%) 0.659 (3.0%)
-- Be3 (0.22%) 0.508 (3.0%)
-- Rb1 (0.08%) 0.616 (3.0%)

根节点

  1. AlphaZero对该局面的判断

0.657表示AlphaZero从白棋角度来看对该局面的判断。0.657表示白棋有利。这个分数根据赢-平-输的可能性来得到,不过我们不知道到底各自的可能性有多大。比如,65.7%赢-不会平-34.3%输会给出0.657,而31.4%赢-68.6%平-不会输同样会给出0.6571

  1. 节点搜索花费的用时占比

100%表明得到这个局面,AlphaZero用了100%的节点搜索用时。在上表看到的搜索树中,当前节点将永远是100%。随着节点深度变大,我们会看到各个节点的百分比变小且各自不同,AlphaZero在它认为最重要的走法上花费最多的时间。

着法以及该着法的可能性:Qd2 (3.50%)

你如果拿一个局面给大师看,大师一看之下,可能会给出几个可能的下法并进行由优到劣的排序。AlphaZero也正是这么做的。

AlphaZero认为自己有3.50%的可能性选择Qd2这个下法。这个可能性不高,但也不是不可能。

对该分支的分析以及由此分配的资源

在这一步(30. Qd2)后,AlphaZero对局面的分析是0.736,这是一个相当不错的结果。它花了3.0%的总节点搜索资源来找到这个下法。用人类的术语来说,就是AlphaZero略略看了一下30. Qd2,初步判断不错。

Stockfish将最好的结果作为该局面下的形势判断。如果Stockfish分析后发现当前局面是0.38个兵(记住,Stockfish用“兵”的数量来衡量局面),那么0.38就是它对当前局面的判断。

但AlphaZero采用了更加概率化的判断。总体来说,这样的做法更能模仿人类的直觉。当然,这种做法有好处也有坏处。

AlphaZero分析的第四种下法(上表没有显示)30. d5冲上了价值榜的第一位(AlphaZero的评价高达0.871!)。

白方(AlphaZero)又弃了一个兵。白方继续思考(具体过程太长了,其中涉及对30. c6的考虑),但最终还是回到了30. d5,决定开放中心,打开白棋黑格象的进攻路线。

30. d5 exd5
31. Bd3 c6
32. Qc3 Rf7
33. Rg1 Qg7
34. Qc2 Kf8
35. b6 d4

结论

首先,我们看到AlphaZero在对弈过程中学会了自己的评估函数,并用这个函数下出了具有洞见、充满活力的下法。

其次,AlphaZero这么快地专注于研究它想走的线路(甚至到了用掉90%资源的地步)。

尽可能地就当下局势少进行计算,对人类棋手来说是梦寐以求的事情。由此看出,AlphaZero在这点上做得非常好。

在这个局面开始时,AlphaZero在d5c6之间进行了评估,最终选择走出d5并赢下了对局。


  1. 由此判断,AlphaZero对赢-平-输三种结局的权重应该分别是1-0.5-0。 

Previous Post Next Post