AlphaGo是如何炼成的:解读论文 Mastering the game of Go with deep neural networks and tree search
这篇发表在nature 2016年1月27日上的文章题目为:"Mastering the game of Go with deep neural networks and tree search"来自Google deep mind,它阐述了AlphaGo的模型过程和训练方法,让我们对这篇论文进行解读,看看为何AlphaGo可以成为迄今最强大的围棋对弈程序吧。
论文地址为:Mastering the game of Go with deep neural networks and tree search - nature
在进行棋牌游戏的时候,最理想的玩法是先得知棋盘上所有状态的完美状态值函数v∗(s)v^* (s)v∗(s),然后根据收益最大的状态来进行游戏。但是问题在于有时候棋盘的所有状态规模非常大,在围棋游戏中,这种方法的复杂度是250150250^{150}250150,这显然是做不到的,但是可以通过两种方式来减少搜索空间,一个是通过位置评估的方式,使用近似的值函数来代替完美状态值函数,以此来减少搜索树的深度。另一种方式是通过一个策略来对可能性更大的动作进行采样,这样可以减少搜索树的宽度。本文以这两种策略为基础,结合目前在视觉等领域已经取得突出成果的深度卷积神经网络和强化学习技术,设计了史上最强大的围棋AI程序。
本文的AlphaGo一共有三个阶段。它的大体流程是这样的:首先训练一个有监督学习的策略网络pσp_σpσ ,其样本来自人类棋手的围棋历史数据,AlphaGo将会在这个阶段进行快速高效的学习,得到一个初步的策略网络。接着应用强化学习对程序自己对弈的游戏收益进行优化,得到一个优化的策略网络pρp_ρpρ,最后根据pρp_ρpρ自己对弈的游戏结果,训练一个可以预测对弈胜者的值网络vθv_θvθ。其流程结构如图1所示。
图1. AlphaGo的总体流程 接下来详细解释各个阶段的网络学习和训练的过程以及他们的含义。
A. 使用有监督学习的策略网络
根据前人工作中的方法,AlphaGo首先使用有监督学习神经网络得到一个快速的策略网络。学习器的输入是棋盘的状态,来自大量的人类玩家的对弈动作历史数据,然后它将随机从动作状态空间的状态-值对(s,a)(s,a)(s,a)中选取一个动作aaa,然后神经网络通过随机梯度下降的算法最大化在状态sss下与人类玩家动作的相似度。换句话说,这个学习的目的就是使得AlphaGo的对弈动作拟合人类对弈的动作。神经网络学习的结果如下表所示。
从表中可以看出通过初步的有监督学习,AlphaGo已经获得了与人类玩家平起平坐的实力。
B. 使用强化学习的策略网络
这个阶段的学习的目的是通过策略梯度强化学习来提升上一个阶段得到的策略网络。在这个阶段使用的强化学习策略网络跟上一个阶段的有监督学习策略网络结构一致。并且它的网络权重也初始化为有监督学习网络的权重值。具体训练过程是这样的,将当前的策略网络与随机选取的以前迭代的策略网络进行对弈,在这里奖励函数在除了终止步骤之前的每步都是0,比赛结果每赢一次奖励就+1,输掉则-1,使用ztz_tzt表示。该网络的权重更新如下面的公式所表示:
Δρ∝∂logpρ(at∣st)∂ρzt\Delta \rho \propto \frac{\partial log p_{\rho}(a_t|s_t)}{\partial \rho}z_t Δρ∝∂ρ∂logpρ(at∣st)zt
使用强化学习的网络进行对弈时,从它的动作概率分布输出中采样得到下一步的动作。从对弈结果来看,使用强化学习的AlphaGo的胜率比使用监督学习的高了80%80\%80%,并且也远胜另外两种围棋算法。
C. 使用强化学习的值网络
之前说到使用值网络来预测对弈的胜者,也就是位置评估,在这里AlphaGo使用强化学习来训练一个能够预测在一个比赛状态sss中使用策略ppp的双方玩家的回报。值函数的表达式如下所示:
vp(s)=E[zt∣st=s,at…T∼p]v^p(s)=\mathbb{E}[z_t|s_t=s,a_{t\dots T}\sim p] vp(s)=E[zt∣st=s,at…T∼p]
表示的是在状态sss的时候使用策略p所得到的回报,也就是最终的比赛结果的期望。最好的情况是能够得知一个完美的玩家在状态sss的值函数,也就是开头提到的完美值函数v∗(s)v^* (s)v∗(s),但是这是很难做到的,因此AlphaGo使用值网络去近似值函数,这个值网络用vθ(s)v_θ (s)vθ(s)表示,其中θ是值网络的权重。其更新公式如下:
Δθ∝∂vθ(s)∂θ(z−vθ(s))\Delta \theta \propto\frac{\partial v_\theta(s)}{\partial \theta}(z-v_{\theta}(s)) Δθ∝∂θ∂vθ(s)(z−vθ(s))
训练的方法是将状态-回报对(s,z)(s,z)(s,z)进行回归,使用随机梯度下降来最小化预测值与相应的回报z的均方误差。
D. 使用策略网络与值网络进行搜索
AlphaGo使用蒙特卡罗树搜索的方式将策略网络与值网络进行结合。其流程示意如图2所示。
图2. AlphaGo中的蒙特卡罗树搜索 蒙特卡罗的方法是通过大量的采样(模拟),当采样的数量足够多的时候,就会更加逼近最优解。在每一次模拟的时候,都会通过前向搜索选取子节点中Q值和额外奖励u(p)值最大的分支,即赢面较大的一步操作将会被选择具体公式如下:
at=arg maxx(Q(st,a)+u(st,a))a_t = \argmax_x(Q(s_t,a)+u(s_t,a)) at=xargmax(Q(st,a)+u(st,a))
其中,额外奖励与子节点中保存的先验概率以及模拟次数有关,公式如下:
u(s,a)=∝p(s,a)1+N(s,a)u(s,a)=\propto\frac{p(s,a)}{1+N(s,a)} u(s,a)=∝1+N(s,a)p(s,a)
接着通过策略网络对扩展的子节点进行处理,计算出子节点操作的先验概率。在这一步模拟结束的时候,AlphaGo会通过两种方式对子节点进行评估:一种是使用值网络进行评估,另一种是使用一个快速rollout策略将游戏从这一步进行到结束,然后计算回报r。最后依据所有子节点的回报r和值网络的均值对Q进行更新。
N(s,a)=∑i=1n1(s,a,i)Q(s,a)=1N(s,a)∑i=1n1(s,a,i)V(sLi)\begin{aligned} N(s,a)&=\sum_{i=1}^n1(s,a,i) \\ Q(s,a)&=\frac{1}{N(s,a)}\sum_{i=1}^n1(s,a,i)V(s_L^i) \end{aligned} N(s,a)Q(s,a)=i=1∑n1(s,a,i)=N(s,a)1i=1∑n1(s,a,i)V(sLi)
值得一提的是,在AlphaGo中监督学习的策略网络表现要比强化学习的策略网络要好,或许是因为人类在对弈的过程中会选择更多可能的下法(监督学习正是模拟人类的下棋行为),然而强化学习的策略只会选择最优的一种下法。但是呢,强化学习的策略网络也不是完全没用,通过它导出的值网络表现要比通过监督学习导出的值网络要好。AlphaGo将蒙特卡罗树搜索与深度学习结合了起来,通过异步多线程的方法在CPU上运行模拟,然后在GPU上并行地计算策略网络和值网络。
E. AlphaGo在比赛中的表现
图3展示了AlphaGo在与现在最高水平的围棋程序和人类棋手对弈的能力排名,这些围棋程序都是基于高性能的蒙特卡罗树搜索算法的。可以看出AlphaGo的能力远在其他对手之上。
下图展示了AlphaGo在与人类棋手樊麾下棋的其中一个过程。
首先AlphaGo会对以该状态s为根节点的树的所有后续节点进行评估,用值网络vθ(s)v_θ (s)vθ(s)估计每个子节点的获胜概率。图4b展示的是以当前状态s为根节点的搜索树各个边的动作值Q(s,a)Q(s,a)Q(s,a),而图4c展示的是以当前状态s为根节点的搜索树各个边的rollout评估值。然后通过监督学习的策略网络预测下一步动作,以概率分布来表示。
F. 总结与感想
可以看到,AlphaGo综合使用了监督学习、强化学习和蒙特卡罗树搜索等多种算法,通过复杂的训练过程才获得了它足以傲视群雄的实力,相比于之前基于蒙特卡罗搜索树的其他围棋程序,AlphaGo多了强化学习导出值网络的过程,这也使他比之前的程序高出一筹。文中提到,由监督学习得到的策略网络的表现甚至要比强化学习得到的策略网络更好,这一点有点超出我的意料,因为强化学习的策略网络从一开始是与监督学习的策略网络一致的,在多轮强化学习之后,其性能居然没有监督学习的效果好,这是否说明在某种特定任务中强化学习会使学习到的东西更加片面,还是说这是强化学习的一个过拟合现象呢?
AlphaGo是如何炼成的:解读论文 Mastering the game of Go with deep neural networks and tree search相关推荐
- 【论文阅读】Mastering the game of Go with deep neural networks and tree search
[论文阅读]Mastering the game of Go with deep neural networks and tree search 1 本文解决了什么问题? 在所有的 完全信息博弈 中, ...
- 《Mastering the game of Go with deep neural networks and tree search》解读
转载请声明 http://blog.csdn.net/u013390476/article/details/50925347 前言: 围棋的英文是 the game of Go,标题翻译为:<用 ...
- 论文笔记:Domain Randomization for Transferring Deep Neural Networks from Simulation to the Real World
Domain Randomization for Transferring Deep Neural Networks from Simulation to the Real World 文章概况 作者 ...
- 论文阅读 (69):Collaborative Learning for Deep Neural Networks
文章目录 1 引入 1.1 题目 1.2 摘要 1.3 Bib 2 协作学习 2.1 训练图的生成 2.2 学习目标 2.3 一组分类器头的优化 2.3.1 同步SGD 2.3.2 反向传播重缩放 2 ...
- 论文阅读:Aggregated Residual Transformations for Deep Neural Networks
本萌新记录一下看过的论文,如果理解有误大佬们体谅下QAQ. 摘要: 作者提出一个用于图像分类的.简单.高度模块化的网络结构.该网络是通过重复一个构建块(building block)来构建的,该构建块 ...
- 【论文笔记】Image Privacy Prediction Using Deep Neural Networks
摘要 如今,越来越多的图片在Facebook.Flickr.Foursquare和Instagram等社交网站上在线共享.图像共享不仅发生在一群朋友之间,而且越来越多地发生在用户社交圈之外,用于社交发 ...
- 3.Deep Neural Networks for YouTube Recommendations论文精细解读
一.总述 今天分享的是Deep Neural Networks for Y ouTube Recommendations这篇论文的一些核心,这篇论文被称为推荐系统工程实践领域的一篇神文,每一个细节都值 ...
- [论文品读]·d-vector解读(Deep Neural Networks for Small Footprint Text-Dependent Speaker Verification)
Deep Neural Networks for Small Footprint Text-Dependent Speaker Verification 目录 ABSTRACT 1. INTRODUC ...
- 论文解读《Structured Pruning for Deep Neural Networks with Adaptive Pruning Rate Derivation Based on Con》
论文:Structured Pruning for Deep Neural Networks with Adaptive Pruning Rate Derivation Based on Connec ...
最新文章
- 问题:# mount –t ntfs /dev/sdb1 /mnt/ 解决办法
- [MIPS汇编语言]简单排序实现
- Rational Rose正逆向工程(类图转Java代码,Java代码转类图)
- WPF多线程UI更新——两种方法
- html实现动态多表单输入,使用javascript动态编辑多个相同的HTML表单
- (32)System Verilog模块调用包中类的方法
- 小程序-demo:快速开始
- Mac Book Pro Catalina不能打开软件,提示检查为恶意软件
- 数学基础30讲:第一讲 高等数学预备知识
- java 安卓 物联网_面向物联网的Android应用开发与实践
- linux ls 配色方案,Terminal 配色方案
- 教你如何设计ASP网上考试系统
- VirtualBox如何添加ISO文件
- vuepress-theme-reco 博客主题使用
- 分布式原理:一文了解 Gossip 协议
- FastFCN: Rethinking Dilated Convolution in the Backbone for Semantic Segmentation
- 爆火的《看漫画学Python》出PDF版了,文末自取
- 每日站会并不是只是站在开会就行了:每日站会范例
- 一个男人一天最舒服的地方在地下车库
- 一文读懂IMF和各国央行数字货币到底有何关系