Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用PyTorch实现简单的AlphaZero的算法(2):理解和实现蒙特卡洛树搜索

使用PyTorch实现简单的AlphaZero的算法(2):理解和实现蒙特卡洛树搜索

作者头像
deephub
发布于 2023-01-18 08:40:49
发布于 2023-01-18 08:40:49
95100
代码可运行
举报
文章被收录于专栏:DeepHub IMBADeepHub IMBA
运行总次数:0
代码可运行

篇文章将实现AlphaZero的核心搜索算法:蒙特卡洛树搜索

蒙特卡洛树搜索(MCTS)

你可能熟悉术语蒙特卡洛[1],这是一类算法,反复进行随机抽样以获得某个结果。

例如上图,在单位正方形中选择随机点,计算圆内有多少个点,可以用来估计pi/4的值

本文中我们将详细介绍MCTS的所有步骤。但首先我们从更广泛的理解层面来说,在游戏的MCTS中,我们从给定的棋盘状态开始重复模拟玩法,一般情况下的MCTS我们会一直执行这些模拟直到游戏结束。但AlphaZero的[2]MCTS实现与传统的MCTS不同,因为在AlphaZero中我们也有一个神经网络,它正在接受训练,为给定的板子状态提供策略和值。

AlphaZero中搜索算法的输入是一个棋盘的状态(比如σ)和我们想要运行MCTS的迭代次数(也称为播放次数)。在这个游戏的例子中,搜索算法的输出是从σ中抽样一个执行动作的策略。

该树将迭代构建。树的每个节点都包含一个棋盘状态和关于在该状态下可能采取的有效操作的信息。

节点由一个状态板和键-值对组成,其中键是一个动作元组,对应的值是在父节点的状态上应用该动作元组后获得的节点。子节点是惰性初始化的(即仅在需要时初始化)

一开始,树只有根节点。它将包含输入状态σ和在σ下可以采取的有效动作。

下面是Node类的代码。

MCTS的每一次模拟分为4个步骤:选择(selection)、展开expansion)、求值(evaluation)和回溯(backup),下面我们详细进行说明

选择

MCTS算法的第一步是选择。从根节点开始选择最佳边,直到到达树的末端(表示游戏结束的终端节点/尚未探索的节点,例如上图中标记为None的节点)。

但“最佳边”是什么意思呢?应该如何遍历树?如何做到树遍历的方式是在探索和使用之间取得平衡呢?(这里的探索也是神经网络主导的)

首先解释下这里的探索(exploration)和使用(exploitation)的含义:

想象一下:你从来没有吃过豆腐脑,你也不知道甜的还是咸的好吃(比如对于北方人来说可能都没听有甜的豆腐脑)。所以只能自己尝试,假设吃了一个甜的感觉很好。但当你听到还有咸的的时候,因为还没有尝试过,肯定想尝试下,这样找到一个新的口味,这个就是探索。但是如果假设你一天只能吃一种口味的,而你更新换甜味的,想吃甜的,这就是使用。

简单总结下:选择的行动的目标都是能够获得积极奖励的,但是如果行动已经了解,这就是使用;行动是找到一些能给你带来更好奖励的行动(以前没有的),这就是探索。但是因为一次只能进行一个动作,所以就需要在两者之间取得良好的平衡。

AlphaZero使用PUCT(应用于树的预测器置信上限)规则来实现这种平衡。该规则是根据经验设计的,也是受到Rosin’s work in a bandits-with-predictors setting[3]的工作的推动。DeepMind最近的一篇论文[4]讨论了PUCT的一些替代方案。我们将在后面关于未来方向的部分中讨论这些替代方案。我们先试着理解PUCT规则。

动作值Q(s, a)表示在状态s下通过动作a获得的平均奖励。一开始,Q(s, a)是零。这个action-value代表我们在任何给定时间对奖励函数的了解,因此它与使用有关。

假设我们训练过的神经网络以0.3的概率表示我们应该执行某个动作a。那么将0.3的概率包含在PUCT规则的探索部分。状态s属于父节点,通过在“s”上执行动作“a”获得的状态属于子节点。但是这样会导致经常访问MCTS中的某个节点,为了避免这种情况并鼓励探索其他节点,子节点的访问计数包含在分母中,并使用父节点的总访问数进行规范化。

为什么要取父节点访问次数的平方根?PUCT规则是根据经验设计的,这是作者所尝试的所有选择中最有效的,也就是说是一个可以配置的超参数。我们也可以直接将其视为一种对子节点进行归一化的方式:分母中的 N+1 项。

在上图中可以看到超参数c_puct。这个常数平衡探索采和使用条件。这个超参数的典型值是2。

现在已经对如何获得PUCT(s, a)有了一定的了解,让我们继续MCTS中的选择步骤。

选择步骤如下面的块所示,即从根节点开始,重复查找具有最大PUCT值的子节点,直到到达状态仍然为None(尚未展开/初始化)的节点。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 consider_node = root// terminal nodes also have a None statewhile consider_node.state is not None:
     best_node = find_child_with_maximum_puct_value(consider_node)
     consider_node = best_nodeconsider_node has to be expanded

上面动图显示了重复查找pput值最大的子节点,直到到达状态仍然为None的节点

展开和求值

在选择了特定的动作后,下一步就就是展开并对该节点进行求值(因为其状态仍为 None)。这里的展开表示通过初始化选定节点的状态来扩展树。这种新的状态是从游戏规则中获得的。如果它是一个终端节点,我们将状态保留为 None 并在节点中设置一个标志,将其标记为带有获胜者信息的终端节点。

所选节点的所有新边也被初始化。例如上面动图中显示的树在展开所选节点后将如下图所示。

接下来就是展开节点的计算,评估指玩家在该节点的期望奖励。传统的 MCTS 使用 rollout 策略从扩展节点执行 rollout,以找出游戏结束时的值, 这个策略可以是均匀随机的。而AlphaZero的MCTS与传统的MCTS不同,在AlphaZero的MCTS中,使用神经网络的值输出来确定展开节点的值。

比如当评估一个国际象棋的位置时,我们会在脑海中计算一些走法,然后在计算结束时只使用的直觉来判断结果会有多好。在计算结束时不会像传统的 MCTS 那样进行操作,也不会在游戏结束之前使用随机动作模拟那个操作,我们只选择几个我们认为比较好的位置进行操作。

下面是代码的实现。

回溯

在对展开的节点进行评估之后,还需要更新从根节点到展开节点的所有节点的Q值(由总奖励值和总访问次数实现)。这被称为MCTS的回溯(Backup)步骤。

这一点的实现比较简单方法是使用递归地实现选择函数,

开始游戏

上面的四个步骤在一定次数的迭代中运行。如果它们运行了1000次迭代,那么总共将扩展最多1000个新节点(我们之所以说最大值,是因为某些终端节点可能被访问多次)。

在这些迭代结束后,观察根节点和它的子节点可能看起来像这样。

这些访问计数在根节点输出策略。AlphaZero 使用的想法是,如果一个节点被更多地访问,那么我们应该分配一个更高的概率来执行给该节点的根节点的动作。

某个动作的输出策略概率值与N^(1/τ)成正比,其中N是通过该动作获得的根节点子节点的访问次数,τ是某个温度(temperature )值。

从上图中我们可以看到,从AlphaZero中搜索获得的每个动作的输出策略与被提升为1/τ的结果子节点的访问计数成正比,其中τ是某个温度值。τ的高值将导致更统一的策略。可以在代码中设置为1。

然后从这个输出策略中抽样一些动作,为给定的状态进行一些操作。使用访问计数来构造输出策略是合理的,因为使用PUCT值来指导蒙特卡罗树搜索。这些PUCT价值观平衡了探索和使用。向根节点返回更多值的节点将被更频繁地访问,而一些节点将通过探索被随机访问。

这样整个AlphaZero的最基本的概念就介绍完了

References

[1] https://en.wikipedia.org/wiki/Monte_Carlo_method

[2] Silver, D., Hubert, T., Schrittwieser, J., Antonoglou, I., Lai, M., Guez, A., Lanctot, M., Sifre, L., Kumaran, D., Graepel, T., Lillicrap, T., Simonyan, K., & Hassabis, D. (2018). A general reinforcement learning algorithm that Masters Chess, Shogi, and go through self-play. Science, 362(6419), 1140–1144. https://doi.org/10.1126/science.aar6404

[3] Rosin, C. D. (2011). Multi-armed bandits with episode context. Annals of Mathematics and Artificial Intelligence, 61(3), 203–230. https://doi.org/10.1007/s10472-011-9258-6

[4] Danihelka, I., Guez, A., Schrittwieser, J., & Silver, D. Policy Improvement by planning with Gumbel. Deepmind. Retrieved February 23, 2022, from https://deepmind.com/research/publications/2022/Policy-improvement-by-planning-with-Gumbel

作者:Bentou

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-11-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DeepHub IMBA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
AlphaGo背后的力量:蒙特卡洛树搜索入门指南
选自int8 Blog 机器之心编译 我们都知道 DeepMind 的围棋程序 AlphaGo,以及它超越人类的强大能力,也经常会听到「蒙特卡洛树搜索」这个概念。事实上,蒙特卡洛树搜索是在完美信息博弈场景中进行决策的一种通用技术,除游戏之外,它还在很多现实世界的应用中有着广阔前景。本文中,我们会以 AlphaGo 为例子,对这一方法进行详细介绍。 长久以来,学术世界一直认为计算机在围棋这个复杂游戏上达到超越人类的水平是几乎无法实现的。它被视为人工智能的「圣杯」——一个我们原本希望在未来十年挑战的遥远里程碑。
机器之心
2018/05/08
1.6K0
AlphaGo背后的力量:蒙特卡洛树搜索入门指南
AlphaGo的制胜秘诀:蒙特卡洛树搜索初学者指南
2018 区块链技术及应用峰会(BTA)·中国 倒计时 3 天 2018,想要follow最火的区块链技术?你还差一场严谨纯粹的技术交流会——2018区块链技术及应用峰会(BTA)·中国将于2018年3月30-31日登陆北京喜来登长城饭店。追求专业性?你要的这里全都有:当超强嘉宾阵容遇上业界同好的脑洞大联欢,1+1=无限可能,目前门票预购火热进行中。 活动详情: http://dwz.cn/7FI1Ch 编译 | reason_W 出品 | 人工智能头条(公众号ID:AI_Thinker) 长久以来,计算
用户1737318
2018/06/05
1.4K0
详解强化学习多智能体博弈算法——蒙特卡洛树搜索
👆点击“博文视点Broadview”,获取更多书讯 强化学习,除了可以用于单个强化学习智能体和环境的相互作用,也可以用于两个或者多个智能体在某个强化学习环境下的博弈。 关于这种类型的算法,最有名的应该是蒙特卡洛树搜索(Monte Carlo Tree Search,MCTS)。 随着AlphaGo和AlphaZero算法在围棋、国际象棋和将棋等棋类领域的广泛应用,并且在这些领域内均取得了相比传统的Alpha-Beta 剪枝算法更加优异的性能,蒙特卡洛树搜索算法作为这些智能体使用的算法也被越来越多的人研究
博文视点Broadview
2022/03/30
2.8K0
强化学习系列(十一)--探索蒙特卡洛树搜索(MCTS)及其在大语言模型中的应用
文章从环境搭建、代码实现到数据展示与分析,完整实现了一个微博热搜爬取项目。项目不仅可以作为学习爬虫的入门案例,还可扩展为更复杂的热点分析系统。
languageX
2024/12/06
4K0
强化学习系列(十一)--探索蒙特卡洛树搜索(MCTS)及其在大语言模型中的应用
蒙特卡洛树-AI快速进阶系列
我们将通过在Java 中实现井字游戏来详细研究它的阶段。我们将设计一个通用解决方案,该解决方案可用于许多其他实际应用,只需进行最少的更改。
jack.yang
2025/04/05
1410
蒙特卡洛树-AI快速进阶系列
使用蒙特卡洛树搜索实现围棋落子算法
上一节我们完成了最大最小搜索树,加上alhpa-beta剪枝算法实现了围棋落子走法。它存在一个问题是,树搜索的层次不高,尽管如此,围棋机器人下棋时还是要多次扫描棋盘,进行复杂的运算比较后才能做出决定,这个过程异常耗时,以至于好几分钟都无法运算完。
望月从良
2019/04/28
3.1K0
使用蒙特卡洛树搜索实现围棋落子算法
逆合成规划结合经验引导的蒙特卡洛树搜索
今天为大家介绍的是来自Hankz Hankui Zhuo的一篇关于反向合成规划的论文。在反向合成规划中,使用简单的基元合成复杂分子存在大量可能的路径。即使是经验丰富的化学家在选择最有前景的转化路线时也经常遇到困难。目前的方法依赖于人工定义的或经过机器训练的评分函数,这些评分函数在化学知识方面具有限制,或者使用昂贵的估计方法进行引导。在这里,作者提出了一种经验引导的蒙特卡洛树搜索(EG-MCTS)来解决这个问题。作者建立了一个经验引导网络来在搜索过程中从合成经验中学习知识,而不是使用随机搜索。
DrugAI
2023/09/19
3790
逆合成规划结合经验引导的蒙特卡洛树搜索
Bengio参与,扩散模型+蒙特卡洛树搜索实现System 2规划
扩散模型(Diffusion Model)通过利用大规模离线数据对轨迹分布进行建模,能够生成复杂的轨迹。与传统的自回归规划方法不同,基于扩散的规划器通过一系列去噪步骤可以整体生成完整轨迹,无需依赖前向动力学模型,有效解决了前向模型的关键局限性,特别适用于具有长周期或稀疏奖励的规划任务。
机器之心
2025/02/25
1230
Bengio参与,扩散模型+蒙特卡洛树搜索实现System 2规划
大模型+蒙特卡洛树搜索,一招让LLaMa-3 8B奥数水平直逼GPT-4
这几天,17 岁中专生姜萍在 2024 阿里巴巴全球数学竞赛预选赛中取得全球第 12 名的新闻刷了屏。而同时,AI 挑战赛的成绩显示,在所有 563 支 AI 参赛队伍中,最高分 34 分,平均分 18 分,赶上了人类选手平均水平。
机器之心
2024/06/17
1781
大模型+蒙特卡洛树搜索,一招让LLaMa-3 8B奥数水平直逼GPT-4
【python】蒙特卡洛树搜索(MCTS)简单实现
选择 Selection:从根节点 R 开始,递归选择最优的子节点(后面会解释)直到达到叶子节点 L。 扩展 Expansion:如果 L 不是一个终止节点(也就是,不会导致博弈游戏终止)那么就创建一个或者更多的字子节点,选择其中一个 C。 模拟 Simulation:从 C 开始运行一个模拟的输出,直到博弈游戏结束。 反向传播 Backpropagation:用模拟的结果输出更新当前行动序列。
全栈程序员站长
2022/07/21
2.7K0
【python】蒙特卡洛树搜索(MCTS)简单实现
组合游戏系列4: AlphaGo Zero 强化学习算法原理深度分析
AlphaGo Zero是Deepmind 最后一代AI围棋算法,因为已经达到了棋类游戏AI的终极目的:给定任何游戏规则,AI从零出发只通过自我对弈的方式提高,最终可以取得超越任何对手(包括顶级人类棋手和上一代AlphaGo)的能力。换种方式说,当给定足够多的时间和计算资源,可以取得无限逼近游戏真实解的能力。这一篇,我们深入分析AlphaGo Zero的设计理念和关键组件的细节并解释组件之间的关联。下一篇中,我们将在已有的N子棋OpenAI Gym 环境中用Pytorch实现一个简化版的AlphaGo Zero算法。
CreateAMind
2020/10/22
1.8K0
组合游戏系列4: AlphaGo Zero 强化学习算法原理深度分析
【论文深度研读报告】MuZero算法过程详解
这篇文章的研究内容为:具有规划能力的智能体(agents with planning capabilities)。
深度强化学习实验室
2021/01/26
3.4K0
蒙特卡洛树搜索是什么?如何将其用于规划星际飞行?
选自kdnuggets 作者:Mateusz Wyszyński 机器之心编译 参与:Panda 本文解读了蒙特卡洛树搜索算法背后的概念,并用一个案例说明了欧洲航天局使用该算法来规划星际飞行的方法。 前段时间,我们见证了游戏人工智能领域历史上最重大的事件——AlphaGo 成为了第一个在围棋上战胜世界冠军的计算机程序,其相关论文参阅:https://www.nature.com/articles/nature24270。 DeepMind 的开发者将来自机器学习和树搜索的不同技术结合到一起而实现了这一结果。
企鹅号小编
2018/01/11
1K0
蒙特卡洛树搜索是什么?如何将其用于规划星际飞行?
游戏人工智能 读书笔记 (五) AI算法简介——树搜索
本书英文版: Artificial Intelligence and Games - A Springer Textbook
鹅厂优文
2018/06/25
1.2K1
使用PyTorch实现简单的AlphaZero的算法(3):神经网络架构和自学习
神经网络架构和训练、自学习、棋盘对称性、Playout Cap Randomization,结果可视化
deephub
2023/02/01
6840
入门 | 蒙特卡洛树搜索是什么?如何将其用于规划星际飞行?
选自kdnuggets 作者:Mateusz Wyszyński 机器之心编译 参与:Panda 本文解读了蒙特卡洛树搜索算法背后的概念,并用一个案例说明了欧洲航天局使用该算法来规划星际飞行的方法。 前段时间,我们见证了游戏人工智能领域历史上最重大的事件——AlphaGo 成为了第一个在围棋上战胜世界冠军的计算机程序,其相关论文参阅:https://www.nature.com/articles/nature24270。 DeepMind 的开发者将来自机器学习和树搜索的不同技术结合到一起而实现了这一结果。
机器之心
2018/05/11
7090
强化学习(十八) 基于模拟的搜索与蒙特卡罗树搜索(MCTS)
    在强化学习(十七) 基于模型的强化学习与Dyna算法框架中,我们讨论基于模型的强化学习方法的基本思路,以及集合基于模型与不基于模型的强化学习框架Dyna。本文我们讨论另一种非常流行的集合基于模型与不基于模型的强化学习方法:基于模拟的搜索(Simulation Based Search)。
刘建平Pinard
2019/03/15
1.4K0
独家 | 专访AAAI 2018最佳论文作者,记忆增强蒙特卡洛树搜索细节解读
机器之心原创 作者:李泽南 AAAI 2018 大会已于 2 月 2 日在美国新奥尔良开幕。在此之前,大会获奖论文的结果已经放出,阿尔伯塔大学提交的论文《Memory-Augmented Monte Carlo Tree Search》获得了 AAAI 2018 大会的杰出论文奖。该论文作者分别为博士生 Chenjun Xiao、梅劲骋与教授 Martin Müller。 Chenjun Xiao 硕士与博士阶段均就读于阿尔伯塔大学,师从 Martin Müller 教授。 梅劲骋本科毕业于华南理工大学,研
机器之心
2018/05/10
8150
专栏 | 蒙特卡洛树搜索在黑盒优化和神经网络结构搜索中的应用
现实世界的大多数系统是没有办法给出一个确切的函数定义,比如机器学习模型中的调参,大规模数据中心的冷藏策略等问题。这类问题统统被定义为黑盒优化。黑盒优化是在没办法求解梯度的情况下,通过观察输入和输出,去猜测优化变量的最优解。在过去的几十年发展中,遗传算法和贝叶斯优化一直是黑盒优化最热门的方法。不同于主流算法,本文介绍一个基于蒙特卡洛树搜索(MCTS)的全新黑盒优化算法,隐动作集蒙特卡洛树搜索 (LA-MCTS)。LA-MCTS 发表在 2020 年的 NeurIPS,仅仅在文章公开几个月后,就被来自俄罗斯 JetBrains 和韩国的 KAIST 的队伍独立复现,并用来参加 2020 年 NeurIPS 的黑盒优化挑战,分别取得了第三名和第八名的好成绩 [10][11]。
机器之心
2021/01/20
1.5K0
Adv. Sci. | 基于帕累托算法和蒙特卡洛树搜索的多目标分子生成方法
本文介绍了浙江大学药学院侯廷军、谢昌谕、潘培辰和康玉团队发表的一篇论文。该研究提出了一种基于帕累托算法(Pareto)和蒙特卡洛树搜索(Monte Carlo Tree Search)的多目标分子生成方法(PMMG)。PMMG通过帕累托前沿(Pareto Front)评估多个分子属性之间的非支配关系,并在此基础上引入蒙特卡洛策略动态引导分子生成过程,使模型能够探索并趋向多样化的最优解区域。评估结果表明,PMMG在七个目标同时优化的任务中,其生成分子的超支配体积相比基准方法提升了31.4%,成功率提升了2.5倍,展现出在多属性分子设计中实现高效平衡优化的能力。此外,该方法在EGFR/HER2双靶标抑制剂设计场景中也成功发现了性质优越的分子,展示了显著的应用潜力。
DrugAI
2025/04/07
2830
Adv. Sci. | 基于帕累托算法和蒙特卡洛树搜索的多目标分子生成方法
推荐阅读
相关推荐
AlphaGo背后的力量:蒙特卡洛树搜索入门指南
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验