Alphago Zero的原理及实现:Mastering the game of Go without human knowledge
近年来强化学习算法广泛应用于游戏对抗上,通用的强化学习模型一般包含了Actor模型和Critic模型,其中Actor模型根据状态生成下一步动作,而Critic模型估计状态的价值,这两个模型通过相互迭代训练(该过程称为Generalized Policy Iteration GPI过程),最终将收敛到某个近优的点。
但对于围棋游戏来说,早些年很多人作为通过计算机来战胜人类顶尖棋手是不可能的,因为围棋总共下法大概在范围,比可观测宇宙的原子数目都要大很多,如此巨大的状态空间和动作空间,通过传统的强化学习方法来进行探索几乎是不可能的。
早期Alphago所采用方法是先通过监督学习专家决策序列,然后再通过强化学习策略来优化。而Alphago Zero是Alphago的升级版,它完全依赖自我对弈的强化学习,无需人类专家的动作监督。
Alphago Zero通过采用MCTS策略,从大量的动作空间中搜索当前最优的动作序列,然后让模型根据这些最优动作序列进行训练,不需要先监督学习专家决策,就能通过自我学习达成最优的效果。
Alphago Zero的训练主要分为了self-play、训练网络和网络评估三个阶段:
1. self-play阶段
在self-play阶段,采用了一种高效样本探索策略MCTS(Monte Carlo Tree Search),其从庞大的动作空间中寻找出当前最优的动作序列,并将其作为后续强化模型训练的优质样本。通过这种方式,MCTS能够在大规模、复杂的环境中做出明智且有效的决策,并帮忙逐步优化强化模型的学习。
在每轮self-play过程中,都会通过MCTS策略采样生成一系列的游戏轮数,每轮游戏都是指游戏结束(直接出现获胜者)或者游戏步数达到设定最大值(以当前游戏得分判定获胜者)。
每轮游戏都包含围棋双方在整轮过程全部(状态State、动作Action、价值Value)元组,其都是根据MCTS策略进行决策和计算的。每轮游戏在开始前,会构建一个搜索树,然后依次根据当前状态决策动作,具体决策动作方式:
在每轮self-play过程中,通过MCTS策略进行采样,生成一系列的游戏轮次。每轮游戏以两种方式结束:一是游戏直接出现获胜者,二是游戏步数达到设定的最大值,此时根据当前游戏得分判定获胜者。
每轮游戏都会记录下围棋双方的完整过程,包括每步中状态State、动作Action和价值Value等信息,这些数据都是基于MCTS策略进行决策和计算的。
-
状态State:这是围棋的当前局面,包括棋盘上的黑白棋子布局、提子情况等。
-
动作Action:这是围棋的下一步行动(如落子在棋盘的某个位置)。
-
价值Value:当前状态下的获胜概率
每轮游戏在开始之前会构建一个搜索树,然后根据当前状态依次决策动作。具体决策动作的方式如下:
- 动作选择概率
计算,其中
是归一化因子,
是温度控制的超参数,可以随着本轮动作进行,会越趋向于选择概率最大的动作。
的计算逻辑:
- 如果
已经在搜索树中,即该轮游戏已经探索。
- 选择最优的动作,此时为
的一次访问
是一个平衡先验后验动作概率的超参数。
-
表示当前状态-动作的价值估计累计值,
表示从
继续探索直到遇到一个未探索的结点,
表示当未探索结点为对手状态时取负号,否则为正号。
-
表示当前状态-动作在本轮游戏的访问次数,每轮访问后$+1$
-
表示当前状态的本轮游戏的访问次数
-
-
表示归一化的模型先验预估动作概率
- 选择最优的动作,此时为
-
如果
不在搜索树中,即未被探索。
-
通过模型求解
、
,并返回。
-
-
上述过程也可以用select、expand、Backup、play四个阶段来表示:
- Select:表示选择最优的动作
- Expand:表示在选择最优动作后,一直继续探索直到一个未探索的结点,通过模型预估其先验动作概率
及状态价值
,如果是中途遇到已探索的结点,通过Select选择最优的动作。
- Backup:表示在探索直到一个未探索的结点后,沿路径更新树上各状态结点的
、
- Play:该轮游戏采样并确定动作,进入下一状态。
- Select:表示选择最优的动作
2. 训练网络阶段
经过每轮self-play后,会生成一系列的游戏轮数,每轮游戏都会保存正反双方在每步的状态、动作概率
、价值
,作为此轮网络训练阶段的数据,其中:
-
表示当前状态
所属棋方最终是否胜出,其值为
,分别表示负平胜。
-
表示根据该轮游戏在过程中的双方的得分数归一化的值。
-
表示该轮游戏总共的走子数,该项主要是为了平衡初始开局的噪声。
最终loss包含了三个部分:动作分类交叉熵损失、价值预估的MSE损失、参数正则项
3. 网络评估阶段
该阶段主要判断上述经过新一轮训练后的新模型是否是最优,如果是最优的替换最优模型进入下一轮的self-play阶段。
评估最优的方式同self-play阶段是类似的,每一步动作都是还需要通过MCTS策略来进行决策。只不过正反双方分别基于基线模型和更新模型来进行比较。
4. 特征组织形式
-
状态
的维度为
,其中
表示围棋棋盘的二维结构,并在第3维叠加黑白双方在过去8步的位置信息,另外为了区分当前走子是黑子还是白子,增加了一维来标识。
-
动作
的维度为
,表示在
棋盘中下子的位置以及不走子的动作。在实际决策动作时,会直接将不合法的动作概率置为0。
5. 模型结构
-
输入卷积层:
-
残差模块层
-
policy层
-
value层
相关文章:

Alphago Zero的原理及实现:Mastering the game of Go without human knowledge
近年来强化学习算法广泛应用于游戏对抗上,通用的强化学习模型一般包含了Actor模型和Critic模型,其中Actor模型根据状态生成下一步动作,而Critic模型估计状态的价值,这两个模型通过相互迭代训练(该过程称为Generalized …...

STM32 堆栈空间分布
参考 运行时访问__initial_sp和__heap_base 无RTOS时的情况 在以上配置的情况下,生成工程。在工程的startup.s文件中,由如下代码: Stack_Size EQU 0x400AREA STACK, NOINIT, READWRITE, ALIGN3 __Stack_top ; 自己添加 Stack_Mem…...

小程序制作(超详解!!!)第十五节 自动随机变化的三色旗
1.例题描述 设计一个小程序,开始时界面上显示一个三色旗和一个按钮,当点击按钮时,三色旗的颜色会发生随机变化,即使不点击按钮,三色旗的颜色也会每隔一定时间自动发生变化。 2.index.wxml <view class"box&…...
MySQL_主从复制_环境搭建
MySQL主从复制配置 CentOS 7 配置 阿里云 yum 源 sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo sudo yum clean all sudo yum makeca…...

Linux 设置静态IP(Ubuntu 20.04/18.04)
以Ubuntu20.04示例 第一步:查看当前网络信息 ifconfig 本机网卡名为:ens32,IP地址为:192.168.15.133,子网掩码为:255.255.255.0 第二步:查看当前网关信息 route -n 网关地址为:1…...

计网----累积应答,TCP的流量控制--滑动窗口,粘包问题,心跳机制,Nagle算法,拥塞控制,TCP协议总结,UDP和TCP对比,中介者模式
计网----累积应答,TCP的流量控制–滑动窗口,粘包问题,心跳机制,Nagle算法,拥塞控制,TCP协议总结,UDP和TCP对比,中介者模式 一.累积应答 1.什么是累计应答 每次发一些包࿰…...
OpenCV 直方图和归一化
直方图可以反映图片的整体统计信息, 使用函数 CalcHist() 实现. 但CalcHist() 统计出的数量信息和图像大小相关, 如果要剔除图像大小因素, 需要做归一化处理, 归一化处理后的信息, 反映出各个颜色值得占比情况, 这样更方便不同size图像做对比, 归一化的函数为 Normalize(). ///…...

Flink架构
1、Apache Flink集群的核心架构: 1、client(作业客户端):提交任务的地方叫做客户端 2、JobManager(作业管理器):作用是用于管理集群中任务 3、TaskManager(任务管理器)&a…...
Packet Tracer路由器连接终端设备怎么配置?
在Packet Tracer中配置一台路由器和三台终端设备可以帮助你建立一个简单的局域网,以下是配置的基本步骤: 打开Packet Tracer,从左侧设备栏中拖拽一个路由器和三个终端设备到工作区。 连接设备:使用网线将路由器的端口与每台终端设…...

评估APP网页小程序代码UI开发H5估价师怎么评估开发精确研发价格?
作为一名应用程序开发评估师,可能涉及到的主要任务是为特定的应用程序提供估算开发成本和所需时间预测。为了为一个应用程序更准确地评估价格,须遵循以下几个步骤: 问: 如何让一个App更好、更精确地评估出价格? 答: 以下是一个可…...

16 Linux 内核定时器
一、Linux 时间管理和内核定时器简介 1. 内核时间管理简介 Linux 内核中有大量的函数需要时间管理,比如周期性的调度程序、延时程序、定时器等。 硬件定时器提供时钟源,时钟源的频率可以设置,设置好以后就周期性的产生定时中断,系…...
C++11 shared_ptr类型智能指针学习
智能指针和普通指针的用法类似,但是智能指针可以在适当时机自动释放分配的内存。 C++11有三种类型的智能指针,shared_ptr、unique_ptr 以及 weak_ptr; 先学习shared_ptr类型; shared_ptr<T> 的定义位于<memory>头文件,并位于 std 命名空间中; T 表示指针指…...

网络流量分类概述
1. 什么是网络流量? 一条网络流量是指在一段特定的时间间隔之内,通过网络中某一个观测点的所有具有相同五元组(源IP地址、目的IP地址、传输层协议、源端口和目的端口)的分组的集合。 比如(10.134.113.77,47.98.43.47,TLSv1.2&…...
JavaWeb篇_02——服务器简介及Tomcat服务器简介
服务器简介 硬件服务器的构成与一般的PC比较相似,但是服务器在稳定性、安全性、性能等方面都要求更高,因为CPU、芯片组、内存、磁盘系统、网络等硬件和普通PC有所不同。软件服务器(英文名称Server),也称伺服器。指一个…...
2311d游戏引擎适配ios
原文 通过遵循arsd:simpledisplay(v11.0.0之前)上的一些旧代码,Apple的文档和Jacob的这一惊人贡献桥, 我已从金属绑定中删除了所有extern(Objective-C)代码,现在,所有Objective-C桥接代码都是使用D的反射生成的. 因此,给定此例代码: import core.attribute : selector; extern…...

网络唤醒(Wake-on-LAN, WOL)
远程唤醒最简单的方法:DDNSTOOpenwrt网络唤醒,完美实现。 原帖-远程唤醒_超详细windows设置远程唤醒wol远程连接(远程开机) WOL Web# 访问 Wake on Lan Over The Interweb by Depicus 可以无需借助软件很方便的从网页前端唤醒远…...

接口测试框架实战(一) | Requests 与接口请求构造
Requests 是一个优雅而简单的 Python HTTP 库,其实 Python 内置了用于访问网络的资源模块,比如urllib,但是它远不如 Requests 简单优雅,而且缺少了许多实用功能。所以,更推荐掌握 Requests 接口测试实战技能࿰…...

【C++】详解 void*
文章目录 1. void *是什么?2. void*详解3. 和void的区别4. 应用场景4.1 函数传参时不确定类型,或者要支持多类型的传参;4.2 当函数的返回值不考虑类型指关心大小的时候 5. 总结 今天看到一段代码,觉得非常有意思。 void* say_hell…...
Linux家目录变成了-bash-4.2$
Linux家目录变成了-bash-4.2$ Mark a workarround: 使用root用户,执行cp -a /etc/skel/. /home/zookeeper/(不是root用户也可以) 其中/home/zookeeper/目录是对应自己的家目录地址~ 若有帮到你,记得点赞,收藏呀…...
Python和SQLite游标处理多行数据
如果您需要处理多行数据,使用游标或其他适当的方法是更好的选择。以下是一些处理多行数据的方法: 使用游标:游标可以逐行处理查询结果,这对于大量数据或需要逐行处理的场景非常有用。以下是一个使用Python和SQLite的游标示例&…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...

高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...

iview框架主题色的应用
1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题,无需引入,直接可…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...