深入浅出Alpha Zero技术原理

1、蒙特卡洛树搜索

(1)蒙特卡洛方法

蒙特卡罗法也称统法模拟法、统计试验法。是把概率现象作为研究对象的数值模拟方法。

上图中,求中间曲线区域的面积。曲线区域的面积不易计算,而正方形面积易于计算。则可以进行随机地采样,将属于曲线内的点的数量记作NaN_{a}Na​,一共采样了N次。

则中间曲线区域的面积为:
S=SsquareNaNS=S_{square} \frac{N_{a}}{N} S=Ssquare​NNa​​
SSS -曲线区域面积

SsquareS_{square}Ssquare​ -正方形的面积

于是通过随机采样的方式计算出了曲线区域的面积,采样的次数越多,则越精确。

(2)博弈树和剪枝

大多数的博弈,可以当做一棵树。在树上找路径。围棋有3^(19x19)的可能,有些路径是死路,需要修剪掉。神经网络有记忆能力,由神经网络做剪枝,将需要的部分记忆下来。

(3)蒙特卡洛树

上图展示的是蒙特卡洛树的建立过程,选择路径、扩张、模拟、反向传播。

下面详细讲解蒙特卡洛树建立的过程。

首先开始一局围棋。此时的棋盘上没有一颗棋子,我们先建立一个节点。

此时该节点属于叶子节点。并且是蒙特卡洛树的初始状态。

于是我们需要扩展该节点。

也就是说,此时围棋中,是执黑手的一方下棋。现在我们看棋盘,有19X19个位子可供选择,于是可以拓展出361个子节点。见下图所示:

然后我们随机地选这一步棋,并走出这一步棋。比如下图所示这一步棋子:

然后我们就开始模拟这一步棋将会带来的结果。便是随机下棋,直到棋局终止,计算结果。

假定模拟下棋至终点的结果为胜。那么我们统计导致该结果所经过的节点。见下图:

其中,图中每个节点式中,分子代表获胜的次数,分母代表途经该节点的次数。

于是我们开始玩第二把围棋。我们从空棋盘下,走出一步,依旧走第一次下棋的那步棋。

然后发现该节点是叶子节点,于是要拓展。于是发现有如下位置可以下子,见绿色部分。

现在我们随机的选择一步棋下下去:

之后,我们模拟该步棋子的结果,随机地下至局终:

发现该棋局为败,于是我们更新抵达这一结果的所有节点。

同样的,在每个节点,分子代表获胜的次数,分母代表途经该节点的次数。

然后,再一次开始玩游戏。

下出如此的棋,并在走至节点A后,发现该节点是叶子节点,于是拓展一下,建立出绿色的可行棋的子节点。

然后选择一步棋,并下出来。之后随机地下至局终,得到该结果。

于是更新出抵达这一结果的路经的所有节点:

我们可以看到,如果持续这样的过程,只要经过很多很多步,则可以建立一个庞大的树结构,称之为蒙特卡洛树。每一个节点的比例,则代表的是该节点的胜率。只要建立这样的一棵树以后,在实际下棋的过程中,按照每一个节点的胜率,选择最大的一个即可。

2、带神经网络的蒙特卡洛树

然而这样的一个蒙特卡洛树并不容易建立,因为围棋中的最大变化次数为10^172种,即使部分的棋局不可能出现局面,也将是庞大的。以现在算力,计算至宇宙灭亡也是不可能完全建立这样的一棵蒙特卡洛树。其中最花费计算力的是,模拟过程,因为每下一次棋,都要模拟下棋至局终。

(1)选择策略

于是,我们建立一个神经网络,使用神经网络来给出该节点的胜负。并使用神经网络来选择节点,而非完全是随机选择节点。

在每一次选择节点的时候,选择Q(s,a)+U(s,a)Q(s,a)+U(s,a)Q(s,a)+U(s,a)最大的一步棋:
U(s,a)=cpuctP(s,a)∑bN(s,b)1+N(s,a)U(s,a)=c_{puct}P(s,a)\frac{\sqrt{\sum_{b}N(s,b)}}{1+N(s,a)} U(s,a)=cpuct​P(s,a)1+N(s,a)∑b​N(s,b)​​

—P(s,a)P(s,a)P(s,a) :网络输出的先验概率

—∑bN(s,b)\sum_{b}N(s,b)∑b​N(s,b) : 父节点访问次数

—N(s,a)N(s,a)N(s,a) : 该节点访问次数

—cpuctc_{puct}cpuct​ : 探索系数

—Q(s,a) : 该节点的价值,即胜率

如此,在选择落子的时候,最开始会更加倾向于高先验概率(P)和低访问次数(N)的,但逐渐地会更加倾向于有着更高价值(Q)的地方落子。

(2)网络学习过程

神经网络输入的是棋盘的情况,输出的是当前棋局每一步的概率,以及获胜的概率。
神经网络Pytorch实现

在网络刚刚初始化的时候,传入棋局,输出的概率都是随机的。首先我们开始一盘下棋过程。

开始还是叶子节点,于是拓展出子节点,并依照Q(s,a)+U(s,a)Q(s,a)+U(s,a)Q(s,a)+U(s,a)选择出最大的一个节点,走出这一步棋:

此时,我们不再随机地下棋来得到最后输赢的结果,而是采用网络的方式,直接得到胜负。但网络得到的胜负一定是一个概率值。例如,在该节点,网络判断胜负的概率为0.5,则更新为:

接着,我们又再一次的下棋

同样由神经网络判断该节点的胜负。于是又更新为:

再一次模拟:

这样我们能够快速地建立蒙特卡洛树。

但是网络并不是训练好的,此时得到的价值、概率也好都是随机的。

所以,但像这样下棋达到一定次数后,所以需要真的下一盘直至终点的棋:

这样,就采集到了实际样本。

在每一个抵达该结果所途径的节点,都可以采集一条数据。格式为:
(S1,P1,V1)(S2,P2,V2)(S3,P3,V3)……(Sn,Pn,Vn)(S_1,P_1,V_1)\\ (S_2,P_2,V_2)\\ (S_3,P_3,V_3)\\ ……\\ (S_n,P_n,V_n) (S1​,P1​,V1​)(S2​,P2​,V2​)(S3​,P3​,V3​)……(Sn​,Pn​,Vn​)
—S 为该节点的棋局,

—P 为 各个子节点获胜次数比该节点。

—V为价值

最后一步白旗取得胜利则:
(S1,P1,0)(S2,P2,1)(S3,P3,0)……(Sn,Pn,1)(S_1,P_1,0)\\ (S_2,P_2,\ \ \ 1)\\ (S_3,P_3,0)\\ ……\\ (S_n,P_n,\ \ \ 1) (S1​,P1​,0)(S2​,P2​,   1)(S3​,P3​,0)……(Sn​,Pn​,   1)
这里之所以奇偶步的价值不相同,是由于,下围棋中是自我博弈,交替进行。在S1、S3、Sn−1S_1、S_3、S_{n-1}S1​、S3​、Sn−1​时,是黑旗在行棋,即为失败的,价值为0。而在S2、S2、SnS_2、S_2、S_{n}S2​、S2​、Sn​时,为白旗行棋,为获胜,则价值为1。

这样就采集到一组数据,提供给神经网络训练。

整体步骤为:

  1. 使用不准确的网络提供胜负,来建立一个不准确的蒙特卡洛树。
  2. 网络下棋至一定的程度后,下一盘真的棋,获取真实样本。
  3. 真实样本训练神经网络。
  4. 训练了一次的神经网络变得比较靠谱,继续建立这个蒙特卡洛树,蒙特卡洛树则进一步变得准确。
  5. 重复1~4步,直到满意为止。

如此循环往复,不断地让网网络构建树,并采集样本训练。

(3)使用过程

神经网络提供先验,真正下棋是蒙特卡洛树。

每一次的下棋过程中,在当前状态下,会先向下探索若干步。并选择最大的Q(s,a)+U(s,a)Q(s,a)+U(s,a)Q(s,a)+U(s,a)的一步,来行棋。模拟了人下棋时想的过程。这是实际下棋时会比较耗费时间的原因。当然,如果训练得特别好,也可以直接使用先验概率P最高的一步棋来走,相当于人记住了当前局面,直接下出一样。

深入浅出Alpha Zero技术原理相关推荐

  1. 深入浅出学习透析Nginx服务器的架构分析及原理分析「底层技术原理+运作架构机制」

    Nginx再次回顾 也许你已经忘记了Nginx是做什么的?我来再次给你夯实一下概念. 多协议反向代理 Nginx是个高性能的Web和反向代理服务器及HTTP服务器,它能反向代理HTTP,HTTPS和邮 ...

  2. 「深入浅出」了解语音识别的技术原理和应用价值?

    2019-04-15 20:34:55 语音识别是什么?他有什么价值,以及他的技术原理是什么?本文将解答大家对语音识别的常见疑问. 语音识别技术(ASR)是什么? 机器要与人实现对话,那就需要实现三步 ...

  3. 【深入浅出Spring原理及实战】「技术原理」Spring Security的核心功能和加载运行流程的原理分析

    SpringSecurity的架构总览 Spring Security的简介说明 Spring Security对认证.授权和常见漏洞保护提供了全方位支持.使用的版本为:Spring Security ...

  4. AI绘画火了!一文看懂背后技术原理

    导语 | 近些年AI蓬勃发展,在各行各业都有着不同方式的应用.而AI创作艺术和生产内容无疑是今年以来最热门的话题,AI创作到底发生过什么,原理又是如何,是噱头还是会有对我们有用的潜在应用场景呢?我们旨 ...

  5. 深入浅出,ARCore开发原理 1

    作者:李超 前"跟谁学"直播研发高级经理 原文:深入浅出,ARCore开发原理 - SegmentFault 思否 其实关注 ARCore也蛮久了,但一直没有腾出时间来写个总结.正 ...

  6. 清华博士后用10分钟讲解AlphaCode背后的技术原理,原来程序员不是那么容易被取代的!...

    来源:AI科技评论 不久前,DeepMind 的团队发布了一个可以自动生成竞赛级代码的人工智能系统--AlphaCode,号称「媲美普通程序员」,一经发表就在国内外的AI圈里引起了巨大轰动. -论文地 ...

  7. python原理书籍_python书籍推荐:《深入浅出深度学习:原理剖析与Python实践》

    在过去的这十年,深度学习已经席卷了整个科技界和工业界,2016年谷歌阿尔法狗打败围棋世界冠军李世石,更是使其成为备受瞩目的技术焦点. 今日,小编就为大家推荐一本能让初学者和"老司机" ...

  8. 人人看得懂的ChatGPT技术原理解析

    人人看得懂的ChatGPT技术原理解析 编者按:自ChatGPT面世以来,我们在热切挖掘其丰富应用的同时,也在孜孜探求其背后的工作原理. 今天我们为大家带来的文章,深入浅出地阐释了ChatGPT背后的 ...

  9. 视频千倍压缩背后的技术原理之环路滤波

    随着5G的成熟和广泛商用,带宽越来越高,让传输视频变得更加容易.移动设备算力的提升.存储容量的提升,也使得视频技术的应用越来越广泛.视频相关的技术,特别是视频压缩技术,因其专业性,深入开发的门槛较高, ...

  10. Alpha GO核心原理

    以下文章摘录自: <机器学习观止--核心原理与实践> 京东: https://item.jd.com/13166960.html 当当:http://product.dangdang.co ...

最新文章

  1. cytoscape插件下载_cytoscape插件BinGO安装以及GO富集分析和网络可视化
  2. Microsoft 的 OpenSource Licence
  3. ubuntu安装新字体
  4. python软件怎么运行-python软件怎么用
  5. 【C++ 语言】智能指针 引入 ( 内存泄漏 | 智能指针简介 | 简单示例 )
  6. python公里转海里_海里、公里、英里之间的转换
  7. 局域网计算机中arp,在局域网中的一台计算机上使用了arp-a命令,有如下输出: C:\arp.a Interface: 192.168.0.1 0n - 赏学吧...
  8. Cognos TM1_10.1.1服务端配置
  9. 沉降观测曲线图 沉降观测汇总_这些沉降观测要求,工程人必须掌握!
  10. java sql范围查询语句,java类中写sql语句,查询条件包含换行
  11. MATLAB是一种面向数值计算,MATLAB是一种面向数值计算的高级程序设计语言。
  12. In App Purchases 入门
  13. 手机广讯通修改服务器,如何完成平台数据初始化向导?
  14. Dlib+Opencv库实现疲劳检测
  15. 最低销售量计算机公式,最低、最高、安全库存量的计算公式
  16. 草图vr3.6许可证服务器安装失败,SU2018装Vray3.6出现这个是怎么回事啊
  17. PowerDesigner 15及破解补丁下载
  18. 【Java学习】JUC并发编程
  19. 深圳互联网科技公司|外企篇
  20. 2018-8-10-三种方式设置特定设备UWP-XAML-view

热门文章

  1. 广东取消英语和计算机考试,广东停考全国英语等级考试、全国计算机等级考试...
  2. 【华为】某中小型企业网 组网案例—总公司+分公司模式
  3. 动态规划——1296:开餐馆
  4. python 计算均值 方差 标准差
  5. join有哪几种方式?内外连接有什么区别?
  6. Windows语言栏不见了,解决办法。任务栏的语言栏没了、不显示了。语言栏异常导致不能输入中文。默认中文输入法设置。
  7. java 释放锁_Java并发编程:锁的释放
  8. 嵌入式系统开发笔记88:认识51微控制器系统架构
  9. 小体积智能直流无刷伺服电机驱动控制器TMCM
  10. iOS闪退日志的收集和解析