当前位置: 首页 > news >正文

强化学习-alphazero 算法理论

一、算法简介

        简单地说,Alphazero=MCTS + SL(策略网络+价值网络) +Selfplay + resnet。 其中MCTS指的是蒙特卡洛树搜索,主要用于记录所有访问过的棋盘状态的各种属性,包括该状态访问次数,对该状平均评价分数等。 SL指监督学习算法,监督网络输出价值v和策略pai,用于拟合mcts推测出的策略和价值,并泛化到未见过的状态上。 Selfplay是一种训练方法,步骤是:实例化蒙特卡罗树和SL网络,进行自我博弈,以产生多样化的数据进行训练和更新。 resnet 众所周知是一种卷积神经网络,主要用于棋盘的特征提取。下面从采样和更新两个角度对上述几个部件进行介绍。文中所引代码来自alphazero GitHub 五子棋

1、蒙特卡洛树搜索

        顾名思义,蒙特卡洛树搜索是一种利用树形数据结构进行搜索的算法,其节点存储是棋盘状态,根节点存储的是棋盘初始状态,其子节点存储是当前状态可能的下一状态。节点上存储的属性包括棋盘当前棋子位置s,访问s的次数n,对节点的估值v。

 图一、蒙特卡洛树搜索的采样和更新(select, expand, simulate为采样,backpropagate为更新) 

 1.1 MCTS采样

        mcts(蒙特卡洛树搜索)的采样分为三步:节点选择,节点拓展,和模拟推演。三步是依次执行的。

        1.节点选择:初始化根节点,从根节点开始,对所有可能的子节点计算puct值,选择值最大的进入,puct计算公式如下

UCB=v_i+C\cdot \sqrt \frac{lnN}{n_i}

        其中vi 是该节点的价值,N是父节点被访问次数,ni为本节点被访问的次数,C为超参数用于平衡利用和探索。

        2.节点扩展:如果当前节点已经是树的叶子节点,则需对树进行节点扩展,具体步骤为:从可能的动作中选取一个执行,进入下一状态,并将这个新节点加入到父节点的子节点集中。

        3.模拟推演:在将一个新节点加入树后,需要从这个节点的状态出发(如果此节点非终止状态),进行模拟推演,直至到达种植状态。在模拟中,不适用树来做决策,而是使用强化学习的actor和critic网络做决策。

1.2 MCTS更新

        1. 反向回溯:  在模拟对局进行到终局状态后,一般会有胜负和的情况,记胜利的结局价值为1 失败的结局价值为-1,从叶子节点开始一次反溯其父节点,将沿途每个节点的访问次数+1,总价值加上新的结局价值,并用新的总价值除以访问次数得到平均价值。反向传播就是利用此次胜负结果,从这次推演的叶子节点开始,迭代查询出所有的父节点,并更新这些父节点上的价值估值vi 。

        实际Alphazero算法中使用的mcts细节比上面描述的有所不同,在第三节算法流程中介绍

2、策略网络和价值网络

        采样:在mcts采样到达第三步模拟推演时,开始使用策略网络和价值网络推演,从当前状态s开始,每次选择一动作a执行,直至到达终点获得胜负结果。

        更新:这里需要注意,虽然网络结构用了策略网络和状态价值网络形式建模,但是其损失函数完全不同于actor critic的loss。actor critic 使用的是强化学习中的策略梯度损失和td error进行更新。而alphazero中的策略网络和价值网络更新方式是监督学习的方法,策略网络使用交叉熵损失,求网络输出策略和节点统计策略的差异。 价值网络使用均方差损失,求网络输出价值和节点monte carlo方法统计的价值均值之间的损失。【蒙特卡洛本身就是一种通过采样拟合近似计算问题的解或者概率分布,所以不能因为其带有策略和价值网络就默认用actor和critic的思想去理解,那就错了】

        更新方式:价值网络和策略网络的输入是棋局推演中每一step的state,价值网络输出每一state的预估价值【范围[-1,1]】其label是该局最终的胜负情况,胜则+1,负则-1。策略网络输出的是每一state下采取的策略的概率分布,其标签为,使用的是均方差误差做回归损失,而policy的标签使用的是mcts推导出的策略分布,使用的是交叉熵损失做分类的损失。两项损失的和是网络的总损失

C(s,a) \leftarrow C(s,a)+1

q(s,a) \leftarrow q(s,a)+\frac{1}{c(s,a)}[G-q(s,a)]

3.SelfPlay

        selfplay 即使用模型和自己对战,因为模型在学习和变化,所以可以产生不同分布的数据,相比于alphago的对棋谱训练增加数据多样性,增强了泛化性。

        alphazero要使用 mcts和sl 完成自博弈的过程,就需要mcts和sl 既可以输出先手的策略,也可以输出后手的策略。为实现这一点,mcts采取的方式是,在节点价值从叶子节点向根节点迭代更新时,每一次都传入 -value,即相邻两节点估值符号相反,这样使得每一个节点上的估值都是当前player对棋局的估值。 sl中的value和policy因为是学习拟合mcts的输出,所以其也具有了输出先后手策略和价值的能力。

二、算法整体流程介绍

        整体伪代码如下

初始化价值网络 V 和策略网络 pi对于 i 在范围 1500 内循环:# 通过自对弈收集数据环境重置()初始化根节点当未完成时循环:动作, 动作概率 = 玩家获取动作()# 通常在 get_action 函数中涉及 400 次选择和扩展。# 如果任何一次迭代达到游戏结束,更新 MCTS 节点的值。当前状态 = 下一状态将根节点移至当前状态的节点如果收集到的数据 > 批量大小:使用收集到的数据训练策略网络和价值网络

相关文章:

强化学习-alphazero 算法理论

一、算法简介 简单地说,AlphazeroMCTS SL(策略网络价值网络) Selfplay resnet。 其中MCTS指的是蒙特卡洛树搜索,主要用于记录所有访问过的棋盘状态的各种属性,包括该状态访问次数,对该状平均评价分数等。 SL指监督学习算法&…...

使用 Rough.js 创建动态水平条形图

本文由ScriptEcho平台提供技术支持 项目地址:传送门 使用 Rough.js 创建动态可视化网络图 应用场景 Rough.js 是一个 JavaScript 库,它允许开发人员使用毛边风格创建可视化效果。该库适用于各种应用程序,例如: 数据可视化地图…...

Python教程(十):面向对象编程(OOP)

目录 专栏列表前言一、面向对象编程概述1.1 类和对象1.2 继承1.3 多态1.4 封装 二、Python 中的类和对象2.1 定义类2.2 __init__ 函数解释2.3 创建对象 三、继承3.1 基本继承3.2 创建子类对象 四、多态五、封装六. 访问限制七、综合实例结语 专栏列表 Python教程(一…...

CTFHUB-文件上传-文件头检查

开启题目 1.php内容&#xff1a; <?php eval($_POST[cmd]);?> 截屏截一个很小很小的图片&#xff0c;保存为 png 格式&#xff0c;把 1.png 和 1.php 放在同一文件夹&#xff0c;在此目录打开 cmd&#xff0c; 使用以下命令把 1.png 和 1.php 合成为图片马 copy 1.pn…...

c语言数组与指针,字符串与指针,指向函数的指针,malloca动态内存分配

数组与指针 数组: - 数组是一种数据结构&#xff0c;可以存储固定大小的一组相同类型的元素。在内存中&#xff0c;数组的元素是连续存储的。 指针: - 指针是一个变量&#xff0c;用于存储内存地址。指针本身占用内存&#xff0c;用来指向某个数据的地址。 数组与指针的关系…...

代码随想录算法训练营day30 | 452. 用最少数量的箭引爆气球 、435. 无重叠区间、763.划分字母区间

碎碎念&#xff1a;加油 参考&#xff1a;代码随想录 452. 用最少数量的箭引爆气球 题目链接 452. 用最少数量的箭引爆气球 思想 局部最优&#xff1a; 让重叠的气球尽量在一起&#xff0c;用一支弓箭射。 全局最优&#xff1a; 用最少数量的箭引爆气球。 首先对气球进行排…...

如何手动修复DLL丢失?2种手动修复dll文件方法

DLL&#xff08;动态链接库&#xff09;文件是Windows操作系统中非常重要的组成部分&#xff0c;它们包含了程序运行所需的代码和数据。然而&#xff0c;由于各种原因&#xff0c;如系统更新、软件卸载不当或病毒感染&#xff0c;DLL文件有时会丢失或损坏&#xff0c;导致程序无…...

Node.js(2)——压缩前端html

需求&#xff1a;把回车符&#xff08;\r&#xff09;和换行符&#xff08;\n&#xff09;去掉后&#xff0c;写入到新的html文件中 步骤&#xff1a; 读取源html文件内容正则替换字符串写入到新的html文件中 示例&#xff1a; 获取html文件中的内容并检查&#xff08;同时…...

堆的实现-向上调整算法-向下调整算法-堆排序-TopK问题 C语言

堆的实现与堆排序及TopK问题的C语言代码 下面是详细的堆实现&#xff0c;包括向上调整、向下调整算法&#xff0c;以及堆排序和解决TopK问题的完整C语言示例代码。 1. 堆的实现 首先&#xff0c;定义堆的数据结构&#xff1a; #include <stdio.h> #include <stdli…...

【C++BFS】1466. 重新规划路线

本文涉及知识点 CBFS算法 LeetCode1466. 重新规划路线 n 座城市&#xff0c;从 0 到 n-1 编号&#xff0c;其间共有 n-1 条路线。因此&#xff0c;要想在两座不同城市之间旅行只有唯一一条路线可供选择&#xff08;路线网形成一颗树&#xff09;。去年&#xff0c;交通运输部…...

服务器并发模型

服务器&#xff1a; 单循环服务器&#xff1a;服务器在同一时刻只能响应一个客户端的请求 并发服务器模型&#xff1a;服务器在同一时刻可以响应多个客户端的请求 UDP:无连接 TCP:有连接 1.多进程 资源空间消耗大 效率低 2.多线程 相…...

Chapter 23 数据可视化——地图

欢迎大家订阅【Python从入门到精通】专栏&#xff0c;一起探索Python的无限可能&#xff01; 文章目录 前言一、基础绘图二、视觉映射三、案例分析 前言 随着地理信息系统&#xff08;GIS&#xff09;技术的迅猛发展和大数据时代的到来&#xff0c;数据可视化已经成为分析和理…...

Linux笔记 --- 组合数据类型

结构体 简单的定义结构体的方法 struct student {char name;int age;float score; };//使用student模板创建两个结构体变量 struct student Jack,Rose; 结构体中可以存放除了函数以外的任何数据类型的数据&#xff0c;在创建结构体时student被称为结构体模板名称&#xff0c;…...

DaoCloud-Dockfile文件NGINX文件

Dockfile文件 安装依赖&#xff0c;打包&#xff0c;配置NGINX代理&#xff0c;最后把打完的包复制到服务器相应的文件夹下&#xff0c;构建镜像成功。 # syntax docker/dockerfile:experimental FROM xx.xx.xx.xx/public/node:16.14.2 as builder# LABEL maintainer"e…...

耳机行业中MIC ENC

0 Preface/Foreword ENC&#xff1a; Environment Noise Cancellation&#xff0c;环境降噪&#xff0c;主要指在通话过程中&#xff0c;戴着ENC通话降噪耳机的使用者&#xff0c;即使在嘈杂的环境&#xff0c;比如在嘈杂的街区&#xff0c;开着窗运行的汽车上&#xff0c;说话…...

python-自动化办公-Excel-Openpyxl

Python处理Excel数据之Openpyxl 1.1 Openpyxl库的安装使用 openpyxl模块是一个读写Excel 2010文档的 Python 库&#xff0c;如果要处理更早格式的Excel文档&#xff0c;需要用到额外的库&#xff0c;openpyxl是一个比较综合的工具&#xff0c;能够同时读取和修改Excel文档。其…...

图形编辑器基于Paper.js教程10:导入导出svg,导入导出json数据

深入了解Paper.js&#xff1a;实现SVG和JSON的导入导出功能 Paper.js是一款强大的矢量绘图JavaScript库&#xff0c;非常适合用于复杂的图形处理和交互式网页应用。本文将详细介绍如何在Paper.js项目中实现SVG和JSON格式的导入导出功能&#xff0c;这对于开发动态图形编辑器等…...

[STM32][Bootloader][教程]STM32 HAL库 Bootloader开发和测试教程

0. 项目移植 对于不想知道其执行过程的朋友来说&#xff0c;可以直接移植&#xff0c;我的板子是STM32F411CER6, 512K M4内核 项目地址&#xff1a; Bootloader&#xff08;可以自己写标志位用于自测&#xff0c;项目中这部分代码已经被注释&#xff0c;可以打开自行测试&…...

如何手写一个SpringBoot框架

你好&#xff0c;我是柳岸花开。 在这篇文章中&#xff0c;我们将手写模拟SpringBoot的核心流程&#xff0c;让大家能够以一种简单的方式了解SpringBoot的大概工作原理。 项目结构 我们创建一个工程&#xff0c;包含两个模块&#xff1a; springboot模块&#xff0c;表示Spring…...

vite解决前端跨域步骤

Vite 解决跨域问题的原理主要是通过其内置的开发服务器功能实现的&#xff0c;具体来说&#xff0c;是通过 HTTP 代理&#xff08;HTTP Proxy&#xff09;机制。在开发环境中&#xff0c;Vite 服务器可以配置为一个代理服务器&#xff0c;将前端应用发出的请求转发到实际的后端…...

模拟1688商品详情的Python API实现,返回符合风格的JSON数据

该文件包含两个模拟商品数据&#xff0c;结构完整覆盖以下核心字段&#xff1a;商品基础信息&#xff1a;商品ID、标题、价格&#xff08;含原价与现价&#xff09;、库存量商品描述&#xff1a;富文本描述内容视觉展示&#xff1a;多图链接列表&#xff08;主图详情图&#xf…...

QT 事件驱动架构

很多大型系统&#xff08;工业软件、机器人系统、自动驾驶、复杂 Qt 应用&#xff09;在规模变大以后&#xff0c;都会逐渐引入 事件驱动架构&#xff08;Event Bus / Event Driven Architecture&#xff09;。 原因很简单&#xff1a;当系统模块越来越多时&#xff0c;模块之间…...

如何快速构建面向业务的数据应用:Dagster数据产品开发完整指南

如何快速构建面向业务的数据应用&#xff1a;Dagster数据产品开发完整指南 【免费下载链接】dagster Dagster是一个用于构建、部署和监控数据管道的应用程序框架&#xff0c;通过其强大的元编程能力&#xff0c;组织起复杂的数据流水线&#xff0c;确保数据的可靠性和一致性。 …...

企业微信自动化操作的高效实现方案

核心能力&#xff1a;企业微信RPA自动化 能力介绍 企业微信RPA&#xff08;Robotic Process Automation&#xff09; 自动化能力旨在通过 QiWe API 模拟人工操作或直接调用底层协议&#xff0c;实现企业微信内部流程的无人值守处理。它解决了原生 API 权限受限&#xff08;如无…...

搭建虚拟机环境

在出现的虚拟机安装向导界面中&#xff0c;单击“下一步”按钮在最终用户许可协议界面选中“我接受许可协议中的条款”复选框&#xff0c;然后单击“下一步” 按钮选中“将 VMware Workstation 控制台工具添加到系统 PATH”复选框根据自身情况适当选择“启动时检查产品更新”与…...

一文读懂 RAG 与嵌入模型:大模型如何实现“读文档、答问题”

&#x1f50d; 微信搜索公众号 AI在学 获取最新 AI 技术文章与实战教程 前言 你有没有发现&#xff0c;现在的大语言模型不仅能聊天、写文案&#xff0c;还能读懂你的文档、帮你查资料&#xff1f; 比如&#xff1a;你提问“公司的报销流程是怎样的&#xff1f;”它就能从…...

自动化测试框架从入门到落地:架构设计、实操实现与效率优化

摘要&#xff1a;在软件迭代速度日益加快的今天&#xff0c;手动测试已难以满足高频迭代、多环境适配的测试需求&#xff0c;自动化测试框架成为测试工程师的核心必备技能。本文从自动化测试框架的核心价值出发&#xff0c;拆解经典架构设计、实操实现流程&#xff0c;结合Pyth…...

Qwen3-ForcedAligner-0.6B惊艳效果:M4A手机录音→实时对齐→导出SRT字幕文件演示

Qwen3-ForcedAligner-0.6B惊艳效果&#xff1a;M4A手机录音→实时对齐→导出SRT字幕文件演示 1. 项目简介&#xff1a;重新定义语音转字幕的体验 你有没有遇到过这样的烦恼&#xff1f;录了一段重要的会议内容或者精彩的视频素材&#xff0c;想要加上精准的字幕&#xff0c;却…...

Hunyuan模型部署最佳实践:config.json关键字段说明

Hunyuan模型部署最佳实践&#xff1a;config.json关键字段说明 1. 引言 当你拿到一个像HY-MT1.5-1.8B这样的翻译模型&#xff0c;第一反应可能是赶紧跑起来试试效果。但真正要把它用得好、用得稳&#xff0c;你会发现那个不起眼的config.json文件才是关键。 这个文件就像是模…...

SecGPT-14B行业落地:政企客户等保合规文档自动生成实战案例

SecGPT-14B行业落地&#xff1a;政企客户等保合规文档自动生成实战案例 1. 引言&#xff1a;当合规文档撰写遇上AI助手 对于政企客户的安全团队而言&#xff0c;每年一度的网络安全等级保护&#xff08;等保&#xff09;测评工作&#xff0c;既是一项严肃的合规任务&#xff…...