跳到主要内容

AlphaZero — 把一次树搜索完整走一遍

这一章讲三件事: 下棋的到底是谁(不是神经网络); 一次树搜索的三个步骤,在一棵真树上逐轮走一遍,每一步的数都写出来; 以及树搜索和网络训练是靠哪一个量接在一起的。

它在全书链条里的位置:全书唯一一个「成功案例」的完整解剖。 它的前置是第 14 章第 6 到 8 节那棵通用的搜索树 —— 这一章只讲「砍掉模拟那一步之后有什么不同」,不重讲四步。 而第 02 章第 5 节那个置信上界的式子,跨了十七章在这里原样回来。

顶层全景:三轮树搜索,一棵树长出来

这一章从头到尾用书里那棵树:一个 3×3 的棋盘(也就是井字棋大小),轮到白方走1

★ 树上每个节点存五样东西,全部是书里给的2:

存什么意思
A到达这个节点走的是哪一步
N★ 这个节点被访问过几次 ★(初值 0)
W累计的奖励和(初值 0)
QW 除以 N —— 平均下来这个节点值多少(初值 0)
P★ 网络给这一步打的先验概率 ★ —— 由父节点的局面喂进网络得到
★ 三轮树搜索,每一轮做完之后树长什么样(全部是书里的真数):★

── 第 1 轮 ────────────────────────────────────────────
树里只有一个节点。它在顶上所以是根,它没有孩子所以也是叶。
→ 选择这一步:★ 已经在叶子上了,不用选 ★
→ 扩展与评估:把它所有可行的下一步都摊开,网络给每一步一个先验概率
→ 回溯:★ 根节点不更新 W 和 Q,只把 N 从 0 改成 1 ★ §5
结果:根 N=1

── 第 2 轮 ────────────────────────────────────────────
从根开始。这次根有孩子了,所以要选。
→ 按「Q 加一项探索加成」选出白方走 (w,2),到一个新叶子 §4
→ 扩展与评估:摊开它的孩子,价值网络给这个局面打 **−0.1**
→ ★ 回溯:这个 −0.1 是从黑方视角说的,而这个节点属于白方 ★ §6
取反之后:N=1、W=**0.1**、Q=**0.1**
→ 再回到根:★ 只把 N 从 1 改成 2 ★
结果:根 N=2,(w,2) 那个节点 N=1、W=0.1、Q=0.1

── 第 3 轮 ────────────────────────────────────────────
从根开始,选出 (w,2),再往下选出黑方走 (b,9)。
→ ★ 撞上终局了。★ 于是:不扩展、价值网络不用、策略网络也不用 ——
结果直接从游戏规则拿。 §5
→ 白方输了,所以从白方视角看是 **−1**;
而这一步是黑方走出来的,所以记在这个节点上是 **+1** §6
→ N=1、W=1、Q=1
→ 沿路往上,★ 每回退一级就取一次反 ★
结果:根 N=3

★ 三轮之后,根节点被访问了 3 次,路上每个节点的信息都更新过了。★
★ 而真正的棋盘上,到现在为止一个子都还没落。★ §7

图说:这就是本章的主走查。§4 到 §6 把这三轮逐步推出来,
§7 讲搜完之后怎么在真棋盘上落子。
(三轮的每一步与 −0.1、+1 这两个数全部是书里的。)

1. 这套办法只对一类很窄的游戏成立

这一节先划边界,免得读完以为它什么都能干。

书里在开头列了这类游戏(它管这叫组合博弈)的五个特征3:

特征书里的说法
① 两个玩家单人游戏(数独、纸牌)可以看成「设计者和玩家」之间的博弈
★ ② 三人以上不算 ★书里的理由很关键:「因为游戏中会出现合作等更加复杂的博弈问题」
③ 没有随机因素「不包含任何影响游戏结果的随机性因素,如骰子等」
④ 完美信息「每个玩家都完全了解之前发生的所有事件」
⑤ 回合制、有限、会结束动作与状态空间都有限,而且「游戏会在有限步内结束」

★ 第 ② 条正好接上第 16 章:三个人以上会出现合作,而合作要用均衡去描述 —— 那就不是「一棵树搜到底」能解决的了。★

★ 第 ③ 条也很硬:有骰子的游戏,同一步走出来的结果不唯一,树就不能这么建。★

书里给的谱系:自从深蓝赢了国际象棋大师之后,围棋成为下一个桥头堡4

2. 下棋的是树搜索,网络只做两件事

这一节纠正这一章最常被搞反的一件事。

先看现象

「AlphaZero 下棋」这句话,直觉上会理解成:把棋盘喂给一个网络,它吐出该走哪一步。

★ 不是。真正决定走哪一步的是那棵树,而神经网络只在树里被叫两次。★

★ 每一次真正落子之前,树搜索要重复几百次(书里这个实现是 400 次)。★[^5]
★ 而每一次树搜索里,神经网络只被用来做两件事:★

① 策略网络:给一个局面 → 吐出「每一步被选中的先验概率」 → 存进新扩展出来的子节点(那个 P)
② 价值网络:给一个局面 → 吐出「这个局面值多少分」 → 拿去回溯

★ 落子那一步,网络一个字都不参与 —— 靠的是访问次数(§7)。★
(这句归纳是我们的;两个网络各自干什么是书里的。)

和第 14 章那棵树的关系

第 14 章第 7 节讲的通用树搜索有四步:选择 → 扩展 → 模拟 → 回溯5「模拟」那一步是:从当前节点用某种策略(比如随机策略)一路下到游戏结束,拿到胜负5

★ 而书里说:AlphaZero「舍弃了模拟步骤,直接用深度神经网络预测结果」——于是只剩三步。★6

第 14 章的四步: 选择 → 扩展 → ★ 模拟(随机下到底) ★ → 回溯
这一章的三步: 选择 → ★ 扩展与评估(网络直接给分) ★ → 回溯

★ 被砍掉的那一步是最贵的:随机下到底,一局可能要几十步。★
★ 换成让数据从网络的输入一路算到输出走一遍(这个动作叫前向传播),几毫秒就出一个估分。★
(这个代价对比是我们补的;砍掉模拟这件事是书里的。)

★ 但注意一处例外,它在主走查第 3 轮出现:如果叶子已经是终局,那么结果直接从游戏拿 —— 书里明说:这时「价值网络不会用来估计状态价值,策略网络也不会输出动作概率」。★7

3. 一棵树里有两个视角

这一节讲这一章最容易踩的坑,而书里专门为它写了一段警告。

那个坑

书里的原话:由于游戏中存在两个玩家,所以建搜索树时「一棵树里存在两个玩家的视角」; 节点上的信息要么从黑方视角更新,要么从白方视角更新8

★ 而关键的一句是:一个节点上的信息,是从它的父节点那个玩家的视角存的。★8

★ 书里给的理由很干净:这个节点是父节点在扩展孩子时新产生的。★[^9]

举个书里的例子:某个节点的棋盘上只有一个黑子。
→ 直觉上「现在该白方走了」,所以你会以为这是白方的节点
→ ★ 错。这个节点是黑方走了一步 A=5 才到达的,
所以它的 A、N、W、Q、P 全部是黑方初始化的,也是给黑方后续使用的。★[^9]

书里的原话:「对每个节点的视角有一个清晰的理解是非常重要的,
否则在随后树搜索的过程中执行回溯步骤时,不易理解整个更新过程。」[^9]

★ 一句话记住:节点属于「走到它的那个人」,不属于「接下来该走的那个人」。★ 主走查第 2 轮和第 3 轮那两次取反,全部来自这一条。

4. 选择:那个式子是第 02 章那个的第三代

这一节走主走查第 2 轮的第一步,并兑现第 02 章埋了十七章的那个伏笔。

三代写法,一脉相承

书里把这个式子的谱系完整地摆了出来9:

★ 第一代(第 02 章第 5 节那个):置信上界 ★
挑分最高的: 这根杆的估值 + c × √( ln(总次数) ÷ 这根杆被拉过几次 )
└─ 利用 ─┘ └────── 探索:拉得越少这一项越大 ──────┘

★ 第二代:把它搬进树里 ★[^11]
同一个形状,只是「总次数」变成当前节点被访问几次、
「这根杆被拉过几次」变成这个子节点被访问几次。

★ 第三代(这一章):再乘上网络给的先验概率 ★[^12]
挑分最高的: Q(这个子节点的均值) + c × P × √(兄弟们总共被访问几次) ÷ (1 + 自己被访问几次)
└── 利用 ──┘ └────────── 探索 ──────────┘

★ 三代之间只有两处变化:分母从「开根号里」挪到了「根号外」,
以及多乘了一个 P —— 也就是网络的意见。★
(这个三代对照是我们排的;三个式子都是书里给的。)

那个 P 起什么作用

★ 它让网络的意见成为「往哪儿搜」的引导,而不是「走哪一步」的决定。★

一个网络认为很有希望的动作(P 大) → 探索项大 → 优先被搜到 → 很快积累访问次数
一个网络不看好的动作(P 小) → 探索项小 → 搜得少

★ 但注意:P 只影响「先搜谁」。★
★ 如果搜下去发现那一支实际很差(Q 变负),它照样会被冷落。★
★ 也就是说:网络负责提名,树搜索负责否决。★
(这段解释是我们的;那个式子是书里的。)

书里给了那个平衡系数的值:在 AlphaZero 里设为 510

主走查第 2 轮的这一步

按这个式子,白方选了动作 2,到达一个新叶子。此时轮到黑方走11

5. 扩展与评估:两种情况,以及第一轮那个特例

这一节走主走查第 1 轮和第 3 轮。

一般情况

书里的做法:在叶节点后面添加子节点,同时「每个动作的选取概率和状态值的估计 直接通过策略网络和价值网络预测得到」6

书里还提到一个可选的优化:通常会设一个阈值来判断这个节点要不要扩展; 而它自己的实现省掉了这个阈值,每次到叶子都扩展6

第 1 轮那个特例

★ 第 1 轮时,树里只有一个节点。它既是根又是叶。★[^14]

→ 选择那一步:★ 已经在叶子上了,什么都不用选 ★
→ 扩展与评估:照常做 —— 摊开所有可行动作,网络给每一步一个先验概率
→ 回溯:★ 这里有一处很反直觉的做法 ★

书里的原话:由于当前节点是根节点,
「我们不需要回溯 W 和 Q,只需更新访问次数 N。将 N = 0 更新为 N = 1」。[^14]

★ 为什么根节点的 W 和 Q 不用更新:因为 W 和 Q 是「用来判断树搜索该不该到达这个节点」的。★[^14]
★ 而根节点是每一轮的起点,你必须从它开始 —— 它不需要被「判断值不值得去」。★
(这句解释是我们补的;那句「不需要回溯 W 和 Q」是书里的原话。)

★ 顺带解释了一个细节:书里说 400 次搜索之后,
子节点的访问次数之和是 400,而根节点是 401 ——
因为第一次搜索是从扩展开始的,并没有选任何子节点。★[^15]

第 3 轮那个特例

主走查第 3 轮走到了终局。这时的处理完全不同7:

★ 节点不扩展。★
★ 价值网络不用 —— 结果直接从游戏规则拿。★
★ 策略网络也不用 —— 都终局了,不需要「下一步的概率」。★

★ 这是这一章唯一一处「网络完全不参与」的地方,而它恰恰是信息最准的一次:★
★ 前两轮拿到的都是网络的猜测,这一次拿到的是事实。★
(这句对比是我们补的;三条处理都是书里的。)

6. 回溯:每回退一级,取一次反

这一节走主走查两次回溯的完整算术,是本章最要紧的一节。

更新的规则

书里给的三条,每个节点都一样12:

N ← N + 1 (访问次数加一)
W ← W + v (把这次拿到的值累加进去)
Q ← W ÷ N (重算平均)

★ 而书里紧接着给了那句警告:「我们需要注意更新的视角,并且总是以当前玩家的视角更新值。」★12

第 2 轮的回溯:一次取反

价值网络给这个新叶子打了 **−0.1**,而★这是从黑方视角看的★。[^16]

可这个节点属于白方(§3 那一条:节点属于走到它的那个人 —— 白方走了 A=2 才到这儿)。

★ 所以要取反:−(−0.1) = **+0.1** ★

→ N = 0 + 1 = **1**
→ W = 0 + 0.1 = **0.1**
→ Q = 0.1 ÷ 1 = **0.1**

书里给的正是这三个数。[^16]

然后回到根节点:★ 只更新 N,从 1 变成 2 ★(根节点的 W 和 Q 不更新,理由见 §5)。[^17]

判断(我们的,不是书里的): 转码出来的文本在这一处有一个符号错 —— 它写的是「当更新属于白方玩家的信息时需要取反,即 v(s) = −0.1」, 可紧接着的结论是 W = 0.1、Q = 0.1(正数)。 ★ 所以那个「即 v(s) = −0.1」里的负号应该是取反之后的 +0.1,清洗时把加号丢了。★ 我们按结论(0.1)来讲。 如果错,会错在: 也可能是书里原本就写错了,而不是转码丢的。 判据是:三个数必须自洽 —— W = 0 + v,而书里给的 W 是 0.1,所以 v 只能是 +0.1。

第 3 轮的回溯:逐级取反

★ 书里的规则一句话:「还应该切换每个节点的视角,这意味着 v(白) = −v(黑)。」★[^18]

这一局的事实:黑方走了 A=9 之后,游戏结束,★ 白方输了 ★。

① 从白方视角看这个结果:**−1**[^18]
② 可这个节点是黑方走 A=9 到达的(§3 那一条)
→ ★ 记在这个节点上的值要取反:v(黑) = −(−1) = **+1** ★[^18]
→ N = **1**、W = **1**、Q = **1**

③ 再往上退一级(到 (w,2) 那个节点,属于白方)→ ★ 再取一次反 ★
④ 再往上退到根 → 只更新 N,从 2 变成 **3**

★ 这就是「每回退一级取一次反」的全部内容。★
★ 而书里为这件事专门写了一整段警告 —— 因为一处符号错,整棵树的估值全反了,
而且它不会报错,只会让智能体一直下臭棋。★
(最后那句后果是我们补的;逐级取反是书里的。)

7. 落子看的是访问次数,不是估分

这一节讲搜完之后怎么真的下一步棋,而它是这一章第二个反直觉的地方。

先看现象

搜了 400 次,每个子节点都有一个 Q(平均值)和一个 N(访问次数)。

★ 按哪个落子?直觉会说按 Q —— 分最高的那一步。而书里用的是 N。★

书里的原话:动作的选取「通过计算每个动作的访问次数并归一化为概率进行选择, 而不是直接通过策略网络输出动作概率」13

判断(我们的,不是书里的): 为什么访问次数比估分更可信 —— ★ 因为 N 大本身就意味着「这一支被反复验证过」。★ 一个只被访问过 2 次的节点,它的 Q 是两次估计的平均,噪声很大; 而一个被访问了 200 次的节点,它的 Q 已经被 200 条不同的后续路线检验过。 而且 §4 那个式子保证了:Q 高的支路会被反复选中 —— 所以 N 已经把 Q 的信息吸收进去了, 同时还多了一层「稳不稳」的信息。 如果错,会错在: 访问次数也会被先验概率 P 抬高 —— 网络看好但实际不好的一支,前期也会积累访问次数。 判据是:搜索次数够多时,Q 的负反馈会把这种支路压下去;搜索次数很少时,这条就不成立。

温度参数怎么用

书里给了一个参数来控制这一步的随机程度14:

温度效果★ 用在哪 ★
等于 1选中的概率和访问次数成正比 —— 探索度高★ 自博弈收集数据时的前若干步 ★
趋近 0只挑访问次数最多的那一步之后的所有步,以及和真人下棋时全程

书里给的具体步数:AlphaZero 与 AlphaGo Zero 用前 30 步,而这本书的实现用前 12 步14

★ 为什么自博弈时要故意随机:书里说这是为了「确保数据收集的多样性」。★14 如果每一局都下得一模一样,训练数据就全是重复的。

落子之后:换根

先说一个动作:把树上用不着的枝杈整片砍掉、连同它下面存的所有信息一起扔,这叫剪枝。

书里说:落子之后树的根节点就换成了刚才走的那个子节点,搜索从新的根继续; 而「其他兄弟节点及其父节点将被剪枝丢弃以节省内存」15

★ 也就是说:上一步搜出来的那一大片树,只有走到的那一支被留下来接着用。★

8. 训练数据从自己跟自己下棋来

这一节讲这两样东西(树搜索与网络)是靠哪一个量接在一起的。

两个标签

★ 一局自博弈下完,每一个走过的局面都变成一条训练数据:★

输入: 这个局面
标签一:★ π(a|s) = 各个动作的访问次数归一化 ★ → 训练策略网络[^22]
标签二:★ v(s) = 这一局最终的胜负 ★ → 训练价值网络[^23]
赢是 1、输是 −1、平局是 0

★ 书里对第一个标签给了一句非常关键的话:★
「这里的概率通过访问次数计算,这是蒙特卡罗树搜索自博弈过程和神经网络训练相结合的关键点。」[^22]

★ 把这一句掰开:★

网络的先验 P → 引导树往哪儿搜(§4)

树搜了 400 次,得到访问次数 N

★ N 归一化之后,反过来当策略网络的训练目标 ★

网络的先验 P 变得更像「搜了 400 次之后的结论」

下一次搜索,起点就更好

★ 这就是这套办法自我提升的整个环路。★
★ 而它的接口只有一个量:访问次数。★
(这张环路图是我们画的;那句「关键点」和两个标签都是书里的。)

输入怎么摆

书里说数据要先转成堆叠的特征层:每一层只有 0 和 1,表示哪些位置有子; 一组表示当前玩家的落子、另一组表示对手的落子,而这些层按历史动作的顺序堆叠16

一处很值钱的对照:数据增强

★ 这是全章最能说明「通用算法要为具体游戏让步」的一处。★

★ 这本书的实现用了数据增强:把棋盘旋转和镜像翻转,一条数据变成好几条。★[^25]
书里给的理由:「围棋和五子棋的规则都不受旋转和镜像翻转的影响」;
而在搜索过程中随机旋转或翻转再喂给网络,还能「在一定程度上减小方差」。[^25]

★ 而 AlphaZero 没有用这个技巧。★
书里给的理由:「由于某些游戏规则不具有旋转和镜像翻转不变性」。[^25]

★ 一句话:一个白捡的技巧,因为要覆盖国际象棋这类游戏而被放弃了。★
(国际象棋的兵只能往一个方向走,棋盘一转规则就变了 —— 这个例子是我们补的。)

9. 一些不显眼但会咬人的实现细节

这一节收口,讲两条书里专门写出来的实现差异。

新模型要不要先过一关

书里对照了两种流派17:

做法
AlphaGo Zero(以及这本书的实现)★ 新模型和当前最优模型对打 400 局,胜率超过 55% 才替换 ★
AlphaZero不对打,直接持续更新参数

书里说自己选前一种的理由只有一句:「以使训练过程更加稳定」17

★ 这是一个很典型的工程权衡:多花 400 局的算力,换掉一个「新模型其实更差却被换上去」的风险。★ (这句权衡是我们的解读;两种做法和「更稳定」这个理由是书里的。)

那条被引用的理论保证

书里在讲第二代那个式子时,引了一条 2006 年的结论18:

在一个有限的马尔可夫决策过程上(奖励在 0 到 1 之间), 把那个探索项按状态数放大之后,估计偏差随搜索次数以对数比线性的速度衰减; 而且「随着搜索次数的增加,根节点估计错误的概率以多项式速率收敛到零」。18

★ 一句话:搜得越多越对,而且是有证明的。★ ★ 但注意这条保证是给第二代那个式子的 —— AlphaZero 那个第三代(多乘了先验概率)不在它的覆盖范围里。★ (这句限定是我们指出的;书里没有说明这一点。)

网络与损失

书里用的网络主干是 ResNet,两个头分别输出动作概率和局面估值; 损失由三项组成:动作分布的交叉熵、局面估值的均方误差,以及参数的正则项19

★ 「交叉熵」是第 05 章第 5 节那个词 —— 衡量两组机会差多远; 这里比的是「网络给的概率」和「访问次数归一化出来的概率」。★

作者的判断与证据

书里给了完整推导或逐步走查的:

  • ★ 三轮树搜索的每一步与每一个数 ★201221 —— 这是全书最详细的一处走查;
  • 五个节点信息的定义与视角规则28;
  • 三代选择公式92210;
  • 训练标签怎么来,以及那句「关键点」2324;
  • 数据增强用与不用的理由25;
  • 模型更新的两种流派17

书里引用的理论结果:

  • ★ 那条 2006 年的收敛保证 ★18 —— 书里转述了结论,没有给证明, 而且它覆盖的是第二代那个式子。

作者的判断:

  • 「以使训练过程更加稳定」17 —— 选对打那一路的理由,没有实验支撑;
  • 随机旋转翻转「在一定程度上减小方差」25 —— 一句定性说法。

书里没有给的:

  • ★ 这一章没有给任何棋力数据。★ 训了多久、赢过什么对手、和别的实现比怎么样,全无;
  • 那个平衡系数为什么是 5,书里只给了值;
  • 搜索次数 400 是怎么定的,书里只说了「AlphaGo Zero 是 1600、AlphaZero 是 800」26

边界与局限

  • ★ §1 那五个特征就是它的适用边界,而且很窄:两个玩家、没有骰子、双方看到的一样多、 回合制、有限步内结束。★ 现实里的任务基本一条都不满足;
  • 这套办法要求「规则完全已知」 —— 因为树搜索每往下走一步,都要按规则算出新局面。 而第 14 章说过模型可以学出来 —— 这两条线书里从没接起来(我们在第 14 章末尾补了那一块);
  • 书里最终只在 11×11 和 15×15 的五子棋上训成了27, 它说这是为了说明算法的通用性与稳定性 —— 但这和围棋、国际象棋的规模差着几个量级;
  • 那条理论保证覆盖的是第二代式子,而实际用的是第三代;
  • ★ 全章没有讨论「搜索次数不够时会怎样」★ —— 而 §7 那个「按访问次数落子」的做法, 在搜索次数少的时候是不稳的(见 §7 那个判断块);
  • 转码文本在回溯那一处有一个符号错(见 §6 那个判断块),照抄会算反。

可带走的

全章那条走查,一行写完: 一个 3×3 的棋盘,轮到白方 —— 第 1 轮:树里只有根节点,它既是根又是叶,直接扩展评估,回溯时只把 N 从 0 改成 1、W 和 Q 不动第 2 轮:按「Q 加探索加成」选出 (w,2),到新叶子扩展评估, 价值网络给 −0.1 是从黑方视角说的,而这个节点属于白方,取反后 N=1、W=0.1、Q=0.1;根 N 变成 2 → 第 3 轮:再往下走到 (b,9),撞上终局 —— 不扩展、两个网络都不用,结果直接从规则拿; 白方输了记 −1,而这一步是黑方走的,所以记成 +1,沿路逐级取反往上更新;根 N 变成 3。 (三轮的每一步与那两个数全部是书里的。)

  1. ★ 下棋的是树搜索,不是神经网络。★ 网络只做两件事:给每一步一个先验概率、给局面一个估分;
  2. 它只对一类很窄的游戏成立:两个玩家、没有骰子、完美信息、回合制、有限步结束;
  3. ★ 三个人以上不算 —— 因为会出现合作,那要用第 16 章那套均衡去描述。★
  4. 它把第 14 章那四步里的「随机模拟」整个砍掉,换成价值网络直接给分,于是只剩三步;
  5. ★ 一棵树里有两个视角,而一个节点属于「走到它的那个人」,不属于「接下来该走的那个人」。★
  6. 选择公式 = 均值 + 探索加成,而那正是第 02 章那个置信上界的第三代 —— 多乘了一个网络给的先验概率;
  7. ★ 那个先验只影响「先搜谁」:网络负责提名,树搜索负责否决。★
  8. 根节点回溯时只更新访问次数,不更新 W 和 Q —— 因为那两个是「判断该不该来这个节点」用的,而根节点是每轮必去的起点;
  9. 撞上终局时:不扩展、两个网络都不用,结果直接从游戏规则拿 —— ★ 这是全章唯一一次拿到的是事实而不是猜测。★
  10. ★ 回溯时每回退一级取一次反。一处符号错,整棵树的估值全反 —— 而它不会报错,只会让它一直下臭棋。★
  11. ★ 落子看的是访问次数,不是估分 ★ —— 因为访问次数多意味着这一支被反复验证过;
  12. 温度参数控制落子的随机度:自博弈的前若干步用高温(保证数据多样),之后和对真人时全程低温;
  13. 落子之后换根,兄弟节点和旧父节点全部剪掉;
  14. ★ 训练数据全来自自己跟自己下:胜负当价值的标签,访问次数归一化当策略的标签。★ 书里明说这是「树搜索与网络训练相结合的关键点」;
  15. ★ 整个环路的接口只有一个量:访问次数。★ 先验引导搜索 → 搜索产生访问次数 → 访问次数反过来训练先验;
  16. 数据增强(旋转镜像)在五子棋能用、AlphaZero 没用 —— 因为有些游戏(比如国际象棋)的规则不满足旋转镜像不变;
  17. 新模型要不要先过一关:对打 400 局赢过 55% 才替换(更稳),或者直接更新(更快)。

原文地图

主题原书章原文位置
组合博弈的五个特征第15章 AlphaZerotext/21-ch15-15-alphazero.txt:29(搜「游戏通常包含两个玩家」) · text/21-ch15-15-alphazero.txt:31(搜「包含两个以上玩家的游戏不被视为组合博弈」) · text/21-ch15-15-alphazero.txt:33(搜「游戏不包含任何影响游戏结果的随机性因素」) · text/21-ch15-15-alphazero.txt:35(搜「这意味着每个玩家都完全了解之前发生的」) · text/21-ch15-15-alphazero.txt:37(搜「玩家以回合制的方式执行动作」)
深蓝之后围棋成为桥头堡第15章 AlphaZerotext/21-ch15-15-alphazero.txt:41(搜「围棋成」)
节点存的五样东西第15章 AlphaZerotext/21-ch15-15-alphazero.txt:161(搜「到达该节点所需执行的上一个动作」) · text/21-ch15-15-alphazero.txt:162(搜「节点被访问次数」) · text/21-ch15-15-alphazero.txt:163(搜「节点的奖励值之和」) · text/21-ch15-15-alphazero.txt:168(搜「这个值由神经网络输入其父节点的状态得到」)
两个视角与那段警告第15章 AlphaZerotext/21-ch15-15-alphazero.txt:177(搜「一棵树里存在两个玩家的视角」) · text/21-ch15-15-alphazero.txt:179(搜「这个节点上的信息是从其父节点」) · text/21-ch15-15-alphazero.txt:183(搜「对每个节点的视角有一个清晰的理解是非常重要的」)
通用树搜索的四步第15章 AlphaZerotext/21-ch15-15-alphazero.txt:197(搜「通常,树搜索方法有四个步骤」) · text/21-ch15-15-alphazero.txt:201(搜「通过某种策略」)
三代选择公式第15章 AlphaZerotext/21-ch15-15-alphazero.txt:210(搜「算法根据以下策略在 t 时刻选择动作」) · text/21-ch15-15-alphazero.txt:221(搜「算法是 UCB1 算法在树结构中的实现」) · text/21-ch15-15-alphazero.txt:263(搜「鼓励探索访问次数较少的动作」) · text/21-ch15-15-alphazero.txt:264(搜「在 AlphaZero 算法中该值设为 5」)
砍掉模拟、只剩三步第15章 AlphaZerotext/21-ch15-15-alphazero.txt:242(搜「算法舍弃了模拟步骤」) · text/21-ch15-15-alphazero.txt:252(搜「同时每个动作的选取概率和状态值的估计直」)
第 1 轮:根既是根又是叶第15章 AlphaZerotext/21-ch15-15-alphazero.txt:391(搜「此时树中只有一个节点」) · text/21-ch15-15-alphazero.txt:397(搜「只需更新访问次数」)
第 2 轮:选择与取反第15章 AlphaZerotext/21-ch15-15-alphazero.txt:411(搜「选择动作 A = 2」) · text/21-ch15-15-alphazero.txt:418(搜「这是从黑」) · text/21-ch15-15-alphazero.txt:419(搜「所以,我们得」) · text/21-ch15-15-alphazero.txt:431(搜「第二次树搜索过程完成」)
第 3 轮:终局与逐级取反第15章 AlphaZerotext/21-ch15-15-alphazero.txt:440(搜「节点将不会被扩展」) · text/21-ch15-15-alphazero.txt:441(搜「价值网络不会用来估计状态价值」) · text/21-ch15-15-alphazero.txt:452(搜「白方玩家输掉了游戏」) · text/21-ch15-15-alphazero.txt:454(搜「所以这个节点的」)
400 次搜索与那个 401第15章 AlphaZerotext/21-ch15-15-alphazero.txt:465(搜「搜索次数是 1600」) · text/21-ch15-15-alphazero.txt:477(搜「由于第一次搜索是从扩展和评估步骤开始的」)
按访问次数落子与温度第15章 AlphaZerotext/21-ch15-15-alphazero.txt:468(搜「动作的选取通过计算每个动作的访问」) · text/21-ch15-15-alphazero.txt:489(搜「动作的选择概率和访问次数成正比」) · text/21-ch15-15-alphazero.txt:491(搜「前 30 步」) · text/21-ch15-15-alphazero.txt:492(搜「当与真正对手下棋时」)
换根与剪枝第15章 AlphaZerotext/21-ch15-15-alphazero.txt:495(搜「其他兄弟节点及其父节点将被剪枝丢弃以节省内存」)
训练标签与那句关键点第15章 AlphaZerotext/21-ch15-15-alphazero.txt:505(搜「这是蒙特卡罗树搜索自博弈过程和神经网络训练相结合的关键点」) · text/21-ch15-15-alphazero.txt:506(搜「这里所有数据的标签都是 0」)
输入怎么摆第15章 AlphaZerotext/21-ch15-15-alphazero.txt:508(搜「每个特征层只包含 0-1 值用以表示玩家的落子」)
数据增强用与不用第15章 AlphaZerotext/21-ch15-15-alphazero.txt:510(搜「由于围」) · text/21-ch15-15-alphazero.txt:514(搜「因此 AlphaZero 没有使用该技巧」)
网络与损失第15章 AlphaZerotext/21-ch15-15-alphazero.txt:525(搜「作为网络结构」) · text/21-ch15-15-alphazero.txt:527(搜「损失函数」)
模型更新的两种流派第15章 AlphaZerotext/21-ch15-15-alphazero.txt:530(搜「如果新模型胜率超过 55%」) · text/21-ch15-15-alphazero.txt:533(搜「以使训练过程更加稳定」)
那条收敛保证第15章 AlphaZerotext/21-ch15-15-alphazero.txt:236(搜「考虑一个有限状态马尔可夫决策过程」) · text/21-ch15-15-alphazero.txt:240(搜「根节点估计错误的概率以多项式速率收敛到零」)

Footnotes

  1. 出处:「第15章 AlphaZero」第 386 段(text/21-ch15-15-alphazero.txt:386,搜「我们演示蒙特卡罗树搜索收集数据」)与第 387 段(text/21-ch15-15-alphazero.txt:387,搜「我们假定游戏从图 15.6 所示的状态开始」)。原书说明:为了用较短篇幅演示到终止状态,这里假定游戏从一个已经下了几步的局面开始,而通常游戏是从空棋盘开始的;棋盘大小是 3×3,轮到白方走。

  2. 出处:「第15章 AlphaZero」第 161 段(text/21-ch15-15-alphazero.txt:161,搜「到达该节点所需执行的上一个动作」)、第 162 段(text/21-ch15-15-alphazero.txt:162,搜「节点被访问次数」)、第 163 段(text/21-ch15-15-alphazero.txt:163,搜「节点的奖励值之和」)与第 168 段(text/21-ch15-15-alphazero.txt:168,搜「这个值由神经网络输入其父节点的状态得到」)。原书写明这五个量的初值都是 0。 2

  3. 出处:「第15章 AlphaZero」第 29 段(text/21-ch15-15-alphazero.txt:29,搜「游戏通常包含两个玩家」)、第 31 段(text/21-ch15-15-alphazero.txt:31,搜「包含两个以上玩家的游戏不被视为组合博弈」)、第 33 段(text/21-ch15-15-alphazero.txt:33,搜「游戏不包含任何影响游戏结果的随机性因素」)、第 35 段(text/21-ch15-15-alphazero.txt:35,搜「这意味着每个玩家都完全了解之前发生的」)、第 37 段(text/21-ch15-15-alphazero.txt:37,搜「玩家以回合制的方式执行动作」)与第 38 段(text/21-ch15-15-alphazero.txt:38,搜「游戏会在有限步内结束」)。

  4. 出处:「第15章 AlphaZero」第 41 段(text/21-ch15-15-alphazero.txt:41,搜「围棋成」)。原书还列了黑白棋、将棋、跳棋、四子棋、五子棋等一批同类游戏。

  5. 出处:「第15章 AlphaZero」第 197 段(text/21-ch15-15-alphazero.txt:197,搜「通常,树搜索方法有四个步骤」)与第 201 段(text/21-ch15-15-alphazero.txt:201,搜「通过某种策略」)。原文对模拟那一步的说法是:用某种策略(如随机策略)模拟下棋直到游戏结束,通常胜给 +1、负给 −1、平局 0。 2

  6. 出处:「第15章 AlphaZero」第 242 段(text/21-ch15-15-alphazero.txt:242,搜「算法舍弃了模拟步骤」)、第 252 段(text/21-ch15-15-alphazero.txt:252,搜「同时每个动作的选取概率和状态值的估计直」)与第 254 段(text/21-ch15-15-alphazero.txt:254,搜「我们的实现省略了这个阈值」)。 2 3

  7. 出处:「第15章 AlphaZero」第 440 段(text/21-ch15-15-alphazero.txt:440,搜「节点将不会被扩展」)与第 441 段(text/21-ch15-15-alphazero.txt:441,搜「价值网络不会用来估计状态价值」)。原书在讲回溯那一节也重复了这条:叶节点如果已经是终止状态,结果直接由游戏给出。 2

  8. 出处:「第15章 AlphaZero」第 176 段(text/21-ch15-15-alphazero.txt:176,搜「我们先强调一个关键点」)、第 177 段(text/21-ch15-15-alphazero.txt:177,搜「一棵树里存在两个玩家的视角」)、第 179 段(text/21-ch15-15-alphazero.txt:179,搜「这个节点上的信息是从其父节点」)与第 183 段(text/21-ch15-15-alphazero.txt:183,搜「对每个节点的视角有一个清晰的理解是非常重要的」)。 2 3

  9. 出处:「第15章 AlphaZero」第 205 段(text/21-ch15-15-alphazero.txt:205,搜「最常用的树搜索算法」)与第 210 段(text/21-ch15-15-alphazero.txt:210,搜「算法根据以下策略在 t 时刻选择动作」)。原书明写这是第 2.2.2 节那个置信上界算法在树结构中的扩展 —— 也就是我们第 02 章第 5 节那个式子。 2

  10. 出处:「第15章 AlphaZero」第 259 段(text/21-ch15-15-alphazero.txt:259,搜「在选择步骤中,动作由公式」)、第 263 段(text/21-ch15-15-alphazero.txt:263,搜「鼓励探索访问次数较少的动作」)与第 264 段(text/21-ch15-15-alphazero.txt:264,搜「在 AlphaZero 算法中该值设为 5」)。 2

  11. 出处:「第15章 AlphaZero」第 411 段(text/21-ch15-15-alphazero.txt:411,搜「选择动作 A = 2」)。

  12. 出处:「第15章 AlphaZero」第 414 段(text/21-ch15-15-alphazero.txt:414,搜「此时树里有两个节点」)、第 417 段(text/21-ch15-15-alphazero.txt:417,搜「我们需要注意更新的视角」)、第 418 段(text/21-ch15-15-alphazero.txt:418,搜「这是从黑」)与第 419 段(text/21-ch15-15-alphazero.txt:419,搜「所以,我们得」)。转码陷阱: 第 419 段写的是「当更新属于白方玩家的信息时需要取反,即 v(s) = −0.1」,而紧接着给出的结论是 W = 0.1、Q = 0.1;取反之后应当是 +0.1,那个正号在清洗中丢了。我们按结论来讲,见正文 §6 的判断块。 2 3

  13. 出处:「第15章 AlphaZero」第 468 段(text/21-ch15-15-alphazero.txt:468,搜「动作的选取通过计算每个动作的访问」)。原文给的式子是把访问次数按温度参数做幂再归一化。

  14. 出处:「第15章 AlphaZero」第 489 段(text/21-ch15-15-alphazero.txt:489,搜「动作的选择概率和访问次数成正比」)、第 490 段(text/21-ch15-15-alphazero.txt:490,搜「则探索度低」)、第 491 段(text/21-ch15-15-alphazero.txt:491,搜「前 30 步」)与第 492 段(text/21-ch15-15-alphazero.txt:492,搜「当与真正对手下棋时」)。原书写明这本书的实现用前 12 步。 2 3

  15. 出处:「第15章 AlphaZero」第 494 段(text/21-ch15-15-alphazero.txt:494,搜「因此树中的根节点将被更改」)与第 495 段(text/21-ch15-15-alphazero.txt:495,搜「其他兄弟节点及其父节点将被剪枝丢弃以节省内存」)。

  16. 出处:「第15章 AlphaZero」第 508 段(text/21-ch15-15-alphazero.txt:508,搜「每个特征层只包含 0-1 值用以表示玩家的落子」)与第 509 段(text/21-ch15-15-alphazero.txt:509,搜「这些特征层按照历史动作」)。

  17. 出处:「第15章 AlphaZero」第 529 段(text/21-ch15-15-alphazero.txt:529,搜「我们介绍一些关于模型更新的细节」)、第 530 段(text/21-ch15-15-alphazero.txt:530,搜「如果新模型胜率超过 55%」)与第 533 段(text/21-ch15-15-alphazero.txt:533,搜「以使训练过程更加稳定」)。原书还提到可以用多进程并行收集数据,甚至采用原论文那种异步树搜索的方式。 2 3 4

  18. 出处:「第15章 AlphaZero」第 236 段(text/21-ch15-15-alphazero.txt:236,搜「考虑一个有限状态马尔可夫决策过程」)与第 240 段(text/21-ch15-15-alphazero.txt:240,搜「根节点估计错误的概率以多项式速率收敛到零」)。原书注明这条结论出自 Kocsis 与 Szepesvári 2006 年的工作,条件是奖励落在 0 到 1 之间、状态数有限,并且要把探索项按状态数放大。 2 3

  19. 出处:「第15章 AlphaZero」第 525 段(text/21-ch15-15-alphazero.txt:525,搜「作为网络结构」)与第 527 段(text/21-ch15-15-alphazero.txt:527,搜「损失函数」)。原书给的损失是三项之和:动作分布的交叉熵、状态值的均方误差、参数的正则项。

  20. 出处:「第15章 AlphaZero」第 391 段(text/21-ch15-15-alphazero.txt:391,搜「此时树中只有一个节点」)、第 395 段(text/21-ch15-15-alphazero.txt:395,搜「由于当前节点是根节点」)与第 397 段(text/21-ch15-15-alphazero.txt:397,搜「只需更新访问次数」)。原文对「为什么不更新」给的括注是:W 和 Q 是「用于判断树搜索是否应该到达该节点」的。

  21. 出处:「第15章 AlphaZero」第 447 段(text/21-ch15-15-alphazero.txt:447,搜「接下来是回溯」)、第 450 段(text/21-ch15-15-alphazero.txt:450,搜「还应该切换每个节点的」)、第 452 段(text/21-ch15-15-alphazero.txt:452,搜「白方玩家输掉了游戏」)与第 454 段(text/21-ch15-15-alphazero.txt:454,搜「所以这个节点的」)。原文写明:节点从叶节点递归更新直到根节点,而白方与黑方的值互为相反数。

  22. 出处:「第15章 AlphaZero」第 221 段(text/21-ch15-15-alphazero.txt:221,搜「算法是 UCB1 算法在树结构中的实现」)与第 229 段(text/21-ch15-15-alphazero.txt:229,搜「是当前节点的访问次数」)。

  23. 出处:「第15章 AlphaZero」第 501 段(text/21-ch15-15-alphazero.txt:501,搜「每个动作的概率计算方式为」)与第 505 段(text/21-ch15-15-alphazero.txt:505,搜「这是蒙特卡罗树搜索自博弈过程和神经网络训练相结合的关键点」)。原文写明自博弈收集数据时这里的温度参数取 1。

  24. 出处:「第15章 AlphaZero」第 506 段(text/21-ch15-15-alphazero.txt:506,搜「这里所有数据的标签都是 0」)与第 521 段(text/21-ch15-15-alphazero.txt:521,搜「标签」)。原书演示的那一局结果是平局,所以那一局所有数据的价值标签都是 0;而图注写明 1 表示胜利、−1 表示失败、0 表示平局。

  25. 出处:「第15章 AlphaZero」第 510 段(text/21-ch15-15-alphazero.txt:510,搜「由于围」)、第 512 段(text/21-ch15-15-alphazero.txt:512,搜「棋盘状态被随机旋转或镜像翻转」)与第 514 段(text/21-ch15-15-alphazero.txt:514,搜「因此 AlphaZero 没有使用该技巧」)。 2

  26. 出处:「第15章 AlphaZero」第 464 段(text/21-ch15-15-alphazero.txt:464,搜「我们已经演示了三次蒙特卡罗树搜索的迭代过程」)与第 465 段(text/21-ch15-15-alphazero.txt:465,搜「搜索次数是 1600」)。原书给的三个数是:这本书的实现 400 次、AlphaGo Zero 1600 次、AlphaZero 800 次。

  27. 出处:「第15章 AlphaZero」第 546 段(text/21-ch15-15-alphazero.txt:546,搜「棋盘」)。原书说最终在 11×11 的棋盘上训出了无禁手五子棋的智能体,又在 15×15 上成功训练,以此说明算法的通用性与稳定性。