AlphaZero:中心见

本页面已浏览104次

本章的第一部分中,Natasha将在DeepMind团队的帮助下,基于AlphaZero的思考过程,预测我们认为AlphaZero会怎么下,或者为什么那么下。在第二部分,Matthew会从另一个角度出发,也就是它和Stockfish对弈的棋局中得出观察。我们的目标是从两头出发,在中间会合:将我们的推断和预测与AlphaZero的实际下法结合起来。

A: AlphaZero的设计、训练和下法

1. AlphaZero的学习不依靠任何与该领域(国际象棋)相关的或者人类的知识

a. AlphaZero没有学习任何局面的概念或国际象棋战略

其中提到了所谓“莫拉维克悖论”(Moravec' Paradox)。它说的是,在进行智力测试或者下跳棋时,计算机表现出成人水平不难;但是谈到认知和机动性时,很难或者几乎不可能让计算机和一个一岁的孩子相比。

哈撒比斯认为,表面上看确实如此。但是换个角度解释的话,这个悖论就不存在。那些“困难”的事情(比如下棋、数学和逻辑)需要人类“自觉”地花费很多时间和精力去学习;相反,那些我们认为“简单”的事情(比如图像识别)也需要我们通过多年的训练,只不过这样的知识是“隐形”的。

所以,这里的问题在于,编程本身就是一个困难的、有意识的行为。用编程解决AI问题,需要直接表述出某个AI问题的解(有时称为Good-Old-Fashioned AI,或者GOFAI)。因此,GOFAI的做法能相对“容易”地实际解决那些我们能描述出解决方案的问题,也就是那么些“困难”的、我们明确知道怎么做的问题。但那些我们只是直觉上知道如何做的问题却很难写出一个精准的逻辑描述。

AlphaZero的表现让我们知道,即使是那些我们认为已经彻底了解其处理过程的任务——比如如何评估棋局优劣——我们也不过只是得到了我们大脑实际处理这样的局面并作出决定时的部分近似。

没有相关领域的知识是双刃剑。一方面,AlphaZero可能没有碰到一些特定局面也就得不到对应的结论;另一方面,却有可能发现全新的战略或者推翻一些成见。

在本章的后续,我们要在AlphaZero的对局中试图找到如下要点的证据:

  1. 它也许并未掌握普遍被人类棋手接受的规则。
  2. 它可能发现了人类从未想过的新战略。
  3. 它可能更容易地不受规则限制。
  4. 对于局面性特征,它可能采用了一种数字化的表示。

b. AlphaZero的训练完全是通过自我对战

c. AlphaZero下棋时没有终局数据库

因此,AlphaZero有可能错失一些必赢的残局。但这个问题不大,因为它应该已经将所有可能的残局都下了一遍了。

不过我们认为这对AlphaZero的下棋风格应该有影响。我们认为这也解释了为什么AlphaZero那么喜欢对王发起直接的进攻。由于缺少终局数据库,AlphaZero会认为,如果赢棋路线太深,那么就不是那么肯定的,于是就会选择更早的将死对手。

因此就有了如下的可能:

  1. 它可能偶尔错失终局或者错过将对局推向更有利终局的机会。
  2. 它更愿意将死对手而不是选择将对局推向更有利终局的战略。

d. AlphaZero下棋时,没有任何开局手册

在此我们寻找如下理论的证据:

  1. 它可能在开局发现新的和有创意的想法。它也可能将对局推向它喜欢的路线(直接进攻王)。
  2. 它可能偶尔落入某个已知的开局陷阱。

2. AlphaZero对局面的判定是或然性的(基于它认为赢或者平的机会多大)而不是以领先多少兵来判定

  1. 它在赢棋局面下,可能会简化局面从而最大化赢棋的机会。

和一位严格的人类棋手一样,AlphaZero会选择最稳妥的赢棋路线而不是最精确的赢棋路线。

  1. 它可能在认为自己不利时,寻求复杂化。

3. AlphaZero搜索它认为最有前途的走法,它的评估是多个可能序列的平均而不是试图找到单一的最佳路线

  1. 它可能会将对局推向“一般有利”的局面。

这就有点像人类棋手:“看上去我的机会不错——一定有什么好的下法”,而不用算到将死那一步。

换句话说,我们可以期待的是,AlphaZero会找出“容易下”的局面、或者那种给自己很多好的下法而让对方有充足的机会出错的下法。

  1. 它可能会给对手制造出错的机会。
  2. 它可能会漏看一个简单的实在路线,只因为该路线不符合一个总体有利的路线。

4. AlphaZero的评估函数结构非常灵活并允许它考虑位置因素的组合

有一个问题提到:如果手动加入一些特性(比如对局面、位置的判断)是不是会让引擎更加强大?回答是:这只会让训练速度加快,但长远来看不会有什么区别。

B: AlphaZero如何下棋

本节分两小节,分别是B1: AlphaZero的中局B2:Alphaz的开局

  1. AlphaZero喜欢瞄准对方的王。
  2. 它喜欢让自己的王安全。
  3. 在削弱自己的王翼结构以打开进攻路线前,它会确保中心局势稳定。
  4. 在发起一侧的进攻前,它总是保证要么能控制中心,或者中心稳定或者封闭,这样它的对手就不能在那里发起反击。
  5. 它不怕在早期牺牲子力(通常是1或2个兵)以打开线路或者斜线来瞄准对方的王。
  6. 它寻求开放线和开放斜线的结合来进攻对方的王。
  7. 它喜欢用异色象来进攻。
  8. 它会为马找到很好的据点,并且不担心牺牲子力以求尽快将马调动到那里。
  9. 在中心封闭时,它擅长构筑起一侧的进攻。
  10. 它通常通过让对方的某些子力失去活动力、然后交换掉对方活跃的子力而取胜。
  11. 它通过制造迷惑并在过程中使用战术来进行防守。
  12. 它并不担心拖延用车占据开放线的时机,只要它认为可以在另外一条线上打开攻王的开放线。
  13. 它寻求限制对方王的活动性。在中局和终局时,它都会这么做。
  14. 它一直在寻找可能性转换到王翼的进攻。如果对手的子力失去了协调,它会以最快的速度寻找王翼进攻的机会。

B1: AlphaZero的中局下法

AlphaZero的风格

  1. AlphaZero喜欢瞄准对方的王。

对局:就是要这么进攻,AlphaZero - Stockfish 8,伦敦,2018

1. Nf3 Nf6
2. c4 e6
3. Nc3 Bb4
4. Qc2 O-O
5. a3 Bxc3
6. Qxc3 a5
7. b4 d6
8. e3 Ne4
9. Qc2 Ng5
10. b5 Nxf3+
11. gxf3 Qf6
12. d4 Qxf3
13. Rg1

AlphaZero早早就弃了一个兵,保留了双象。

13. ... Nd7
14. Be2 Qf6
15. Bb2 Qh4
16. Rg4 Qxh2
17. Rg3 f5
18. O-O-O Rf7
19. Bf3 Qh4
20. Rh1 Qf6
21. Kb1 g6
22. Rgg1 a4
23. Ka1 Rg7
24. e4

AlphaZero又弃了一个兵,但是它的两个车控制了关键的g/h两条半开放线,b2象控制了大斜线,而且这条线上还有黑方两个大子。(这里白棋为什么不直接24. d4

24. ... f4
25. c5 Qe7
26. Rc1 Nf6
27. e5 dxe5
28. Rhe1 e4
29. Bxe4 Qf8
30. d5

黑方终于摆脱了a1-h8大斜线上的双重攻击。现在AlphaZero又似乎对g/h线不感兴趣了,而是转而开始打开中心。

30. ... exd5
31. Bd3 Bg4
32. f3 Bd7
33. Qc3 Nh5
34. Re5 c6
35. Rce1 Nf6
36. Qd4 cxb5
37. Bb1 Bc6
38. Re6 Rf7
39. Rg1 Qg7
40. Qxf4 Re8
41. Rd6 Nd7
42. Qc1 Rf6
43. f4

白棋已经落后了三个兵!但是AlphaZero还不“满足”,它挺起了自己王翼最后的一个兵,一门心思地进攻黑方的王翼!

43. ... Qe7
44. Rxf6 Nxf6
45. f5 Qe3
46. fxg6 Qxc1
47. gxh7+ Kf7
48. Rxc1 Nxh7
49. Bxh7

黑棋已经不行了。AlphaZero在第67步赢下对局。

  1. AlphaZero喜欢让自己的王远离危险。

对局:AlphaZero在卡尔斯巴德兵型中的新做法,AlphaZero - Stockfish 8,伦敦,2018

1. d4 Nf6
2. c4 e6
3. Nc3 d5
4. cxd5 exd5
5. Bg5 c6
6. e3 Bd6
7. Bd3 O-O
8. Nf3 Re8
9. O-O Bg4
10. Qb3

白方在引诱黑方吃掉f3马而造成白方叠兵,Stockfish在几步后决定这么做了。

10. ... Na6
11. Rfe1 Bxf3
12. gxf3 Rb8
13. Qd1 Nc7
14. f4 Be7
15. Qf3 Nd7
16. Bxe7 Rxe7
17. Qh3 Nf6
18. Kh1 Qd7
19. Bf5 Qd6
20. Rg1 Kh8
21. Bd3 Rg8
22. Qh4 Nce8
23. Rg5 h6
24. Rag1

AlphaZero达到了目的,g线打开的直接后果就是黑方面临白方来自g线的强烈攻势。AlphaZero很快在89步赢下了对局。可以看到,虽然AlphaZero愿意打开王翼的线路而进攻对面,但同时它很小心。gxf3这一步虽然削弱了王翼兵型,但是也同时控制住了中心(比如e4格),这样黑方没法调动子力到这一格从而对白王造成威胁。

  1. 在削弱自己的王翼结构以打开进攻路线前,它会确保中心局势稳定。

AlphaZero进行过很多侧翼进攻,但在中心获得优势前从来不这么做。

  1. 在发起一侧的进攻前,它总是保证要么能控制中心,或者中心稳定或者封闭,这样它的对手就不能在那里发起反击。

我们可以在AlphaZero的下法中找到如下特征:牺牲子力以打开线路或斜线,而且都是非常长远的牺牲,没有什么立刻将死对手或者马上夺回子力这样的下法。

  1. 它不怕在早期牺牲子力(通常是1或2个兵)以打开线路或者斜线来瞄准对方的王。

AlphaZero的公式是:

瞄着对方王的开放线+瞄着对方王的开放斜线+对方王空间受限=优势

对局:矩阵,AlphaZero - Stockfish 8,伦敦,2018

这一漂亮的对局中,AlphaZero一门心思地要打开线路和斜线。首先是王翼的突破。

38. f5 Bxd4
39. Bxd4 exf5
40. Qg1 b5

g1-a7斜线出现了弱点。白方调动自己的白象和后以便充分利用这个弱点。

41. Bc5 Rg8
42. Qd4 Qe6
43. Bb4 Bd7
44. Bd2 Qc6
45. e6

只是控制g1-a7斜线并不能让AlphaZero获胜,它还想要一条开放线,于是它决定弃掉e6兵,让自己能在e线叠车。

45. ... Bxe6
46. Be3 Ra8
47. Bf2 a5
48. Re2 Ra6
49. Rfe1 Re8
50. h6 Qd7
51. Qg7 Re7
52. Qf6 b4
53. Qd4 Qd6

Stockfish成功地阻断了e线,并且防住了白后在g1-a7大斜线上的几个入侵位置(a7b6),但它的子力实在是太被动了。

54. Kb1 Qc7
55. Be3 bxa3

Stockfish决定打开b线是很冒险的,但它有自己的战术,比如在56. bxa3后,56. ... f4,然后在白方的黑格象吃掉f4兵后,黑后可以在b6将军,并强行兑换掉白后。但是AlphaZero会不惜一切代价来保住白后。

56. Ka2 Ka8
20. Rb1 Qc8
21. c3

如果黑棋敢吃掉b2兵,那么白方的e2车就可以吃掉黑兵。白方居然立刻拿下了刚刚开放出来的b线!简直就像变魔术一样!而黑方也不能通过...c3...Qb4的下法来对白王进行攻击。

58. ... Rb7
59. bxa3 Rb3
60. a4

a4这一步防止黑方对b3车进行任何的加强。

60. ... Bd7
61. Rd2 Rxb1
62. Kxb1 Bxa4
63. Ra2 Qe8
64. Qxd5+ Bc6
65. Qc5 Qe4+
66. Ka1 Qh1+
67. Bg1 Qxh6
68. Rh2 Qe6
69. Be3 Qd7
70. Rd2 Qe8

黑棋又吃了一个白兵,但是它的a6车被钉死了。接下来是一连串行云流水般的操作,白方利用b/d/e三条开放线,不断调动子力,最终取胜。同时,请注意白方是多么注意自己王的安全!

71. Rd6 Kb7
72. Kb2 Qb8
73. Ka2 Qc8
74. Rd2 Qe8
75. Ka3 Ka8
76. Bg5 Qe1
77. Ka2 Qe4
78. Be3 Qe8
79. Rd6 Kb7
80. Ka3 Qh8
81. Bd4 Qe8
82. Rf6 f4
83. gxf4 Qd7
84. Rd6 Qc7
85. f5 Bd7
86. Qxc7+ Kxc7
87. Rxa6 Bxf5
88. Rf6 Bc2
89. Kb2 *

棋谱下载

  1. Exactly how to attack, AlphaZero vs Stockfish 8, London 2018
  2. AlphaZero's new approach in the Carlsbad, AlphaZero vs Stockfish 8, London 2018
  3. Matrix, AlphaZero vs Stockfish 8, London 2018

Previous Post