论文笔记:Mastering the game of Go with deep neural networks and tree search

背景:完全信息博弈与MCTS算法

要完全弄清AlphaGo背后的原理,首先需要了解一下AI在博弈游戏中常用到的蒙特卡洛树搜索算法——MCTS。

在一个完全信息下的博弈游戏中,如果所有参与者都采取最优策略,那么对于游戏中的任意一个局面 s s,总有一个确定性的估值函数 v(s) v∗(s)可以直接计算出最终的博弈结果。理论上,我们可以通过构建一棵博弈树,递归地求解出 v(s) v∗(s)。这就是Minimax算法。然而在有些问题中,这棵搜索树往往十分巨大(例如在围棋游戏中达到了 250150 250150的搜索空间),以至于穷举的算法并不可行。

有两种策略可以有效地降低搜索空间的复杂度:1. 通过一个evalutaion function对当前局面进行价值的评估以降低搜索的深度;2. 剪枝以降低搜索的宽度。然而,这些策略都需要引入一些先验的知识。

于是,人们提出了蒙特卡洛树搜索(MCTS)算法。MCTS是一类通用博弈算法——理论上,它不需要任何有关博弈的先验知识。

想象一下,你站在一堆老虎 机面前,每一台老虎 机的reward都服从一个随机的概率分布。然而,一开始,你对这些概率分布一无所知。你的目标是寻找一种玩老虎 机的策略,使得在整个游戏的过程中你能获得尽可能多的reward。很明显,你的策略需要能够在尝试尽可能多的老虎 机(explore)与选择已知回报最多的老虎 机(exploit)之间寻求一种平衡。

一种叫做UCB1的策略可以满足这种需求。该策略为每台老虎 机构造了一个关于reward的置信区间:

xi±2lnnni xi±2ln⁡nni

其中, xi xi是对第 i i台老虎 机统计出来的平均回报; n n是试验的总次数; ni ni是在第 i i台老虎 机上试验的次数。你要做的,就是在每一轮试验中,选择置信上限最大对应的那台老虎 机。显然,这个策略平衡了explore与exploit。你的每一次试验,都会使被选中的那台老虎 机的置信区间变窄,而使其他未被选中的老虎 机的置信区别变宽——变相提升了这些老虎 机在下一轮试验中被选中的概率。

蒙特卡洛树搜索(MCTS)就是在UCB1基础上发展出来的一种解决多轮序贯博弈问题的策略。它包含四个步骤:

  1. Selection。从根节点状态出发,迭代地使用UCB1算法选择最优策略,直到碰到一个叶子节点。叶子节点是搜索树中存在至少一个子节点从未被访问过的状态节点。
  2. Expansion。对叶子节点进行扩展。选择其一个从未访问过的子节点加入当前的搜索树。
  3. Simulation。从2中的新节点出发,进行Monto Carlo模拟,直到博弈结束。
  4. Back-propagation。更新博弈树中所有节点的状态。进入下一轮的选择和模拟。

可以看出,通过Selection步骤,MCTS算法降低了搜索的宽度;而通过Simulation步骤,MCTS算法又进一步降低了搜索的深度。因此,MCTS算法是一类极为高效地解决复杂博弈问题的搜索策略。

关于MCTS算法更多详细的介绍,可参见博客:Introduction to Monte Carlo Tree Search

AlphaGo的基本原理

围棋是一类完全信息的博弈游戏。然而,其庞大的搜索空间,以及局面棋势的复杂度,使得传统的剪枝搜索算法在围棋面前都望而却步。在AlphaGo出现之前,MCTS算法算是一类比较有效的算法。它通过重复性地模拟两个players的对弈结果,给出对局面 s s的一个估值 v(s) v(s)(Monte Carlo rollouts);并选择估值最高的子节点作为当前的策略(policy)。基于MCTS的围棋博弈程序已经达到了业余爱好者的水平。

然而,传统的MCTS算法的局限性在于,它的估值函数或是策略函数都是一些局面特征的浅层组合,往往很难对一个棋局有一个较为精准的判断。为此,AlphaGo的作者训练了两个卷积神经网络来帮助MCTS算法制定策略:用于评估局面的value network,和用于决策的policy network。(后面会看到,这两个网络的主要区别是在输出层:前者是一个标量;后者则对应着棋盘上的一个概率分布。)

首先,Huang等人利用人类之间的博弈数据训练了两个有监督学习的policy network: pσ (SL policy network)和 pπ (fast rollout policy network)。后者用于在MCTS的rollouts中快速地选择策略。接下来,他们在 pσ 的基础上通过自我对弈训练了一个强化学习版本的policy network: pρ (RL policy network)。与用于预测人类行为的 pσ 不同, pρ 的训练目标被设定为最大化博弈收益(即赢棋)所对应的策略。最后,在自我对弈生成的数据集上,Huang等人又训练了一个value network: vθ ,用于对当前棋局的赢家做一个快速的预估。

pipeline of neural networks

因此,用一句话简单概括一下AlphaGo的基本原理:在MCTS的框架下引入两个卷积神经网络policy network和value network以改进纯随机的Monte Carlo模拟,并借助supervised learning和reinforcement learning训练这两个网络。

接下来将对AlphaGo的细节进行展开讨论。

有监督学习的Policy Networks

Huang等人首先训练了一个有监督的Policy Network用来模拟人类专家的走子。SL policy network是一个卷积神经网络;其输出层是一个Softmax分类器,用来计算在给定的棋面状态 s s下每一个位置的落子概率 pσ(a|s) pσ(a|s)。对一个棋面状态 s s的描述如下:
input features for policy networks
(这里的Features对应着卷积神经网络里的Channels。)

经过人类高手三千万步围棋走法的训练后,SL policy network模拟人类落子的准确率已经达到了57%;相应地,网络的棋力也得到大大的提升。但是,如果直接用这个网络与人类高手,甚至是MCTS的博弈程序进行对弈,依然是输面居多。而且,这个网络的走子太慢了!平均每步 3ms 3ms的响应时间,使得这个网络很难被直接用于MCTS的rollout中进行策略的随机。因此,Huang等人通过提取一些pattern features又训练了一个更快速(响应时间达到了 2μs 2μs)但准确率有所降低(24.2%)的rollout policy network:  pπ

强化学习的Policy Networks

接下来,为了进一步提高policy network的对弈能力,Huang等人又采用一种policy gradient reinforcement learning的技术,训练了一个RL policy network: pρ 。这个网络的结构与SL policy network的网络结构相同,依然是一个输出为给定状态下落子概率的卷积神经网络。网络的参数被初始化为 pσ 的参数;接下来,通过不断地自我对弈(与历史版本),网络的权重向着收益最大化的方向进化。此时,网络的学习目标不再是模拟人类的走法,而是更为终极的目标:赢棋。

具体来说,我们定义了一个reward function  r(st) r(st):对于非终止的时间步 t<T t<T,总有 r(st)=0 r(st)=0。每一步的收益 z(t) z(t)被定义为 ±r(sT) ±r(sT):即对当前玩家而言对弈的最终结果( +1 +1代表赢棋; 1 −1代表输棋)。网络的权重通过随机梯度上升法进行调整:

Δρlogpρ(at|st)ρzt Δρ∝∂log⁡pρ(at|st)∂ρzt

通过这种方式训练出来的RL policy network,在与SL policy network对弈时已有80%的赢面。即便是与依赖Monte Carlo搜索的围棋博弈程序相比,不依赖任何搜索的RL policy network,也已经达到了85%的赢面。

强化学习的Value Networks

最后,Huang等人又开始寻求一个能快速预估棋面价值(棋势)的Value Network。一个棋面的价值函数 vp(s) vp(s),被定义为在给定的一组对弈策略 p p的情况下,从状态 s s出发,最终的期望收益(也即赢棋的概率):

vp(s)=E[zt|st=s,at...Tp] vp(s)=E[zt|st=s,at...T∈p]

显然,理想情况下,我们想知道的是在双方均采用最优策略的条件下得到的最优期望收益 v(s) v∗(s)。然而,我们并不知道什么才是最优的策略。因此,在实际应用中,Huang等人采用了目前最强的策略函数 pρ (RL policy network )来计算一个棋面的价值 vpρ(s) vpρ(s),并训练了一个value network  vθ(s) vθ(s)来拟合这个价值函数: vθ(s)vpρ(s)v(s) vθ(s)≈vpρ(s)≈v∗(s)

Value Network的网络结构与前面的Policy Network类似,也是一个卷积神经网络,只是输出层变成了一个单神经元的标量。我们可以通过构造一组 (s,z) (s,z)的训练数据,并用随机梯度下降法最小化网络的输出 vθ(s) vθ(s)与目标收益 z z的均方差,来调整网络的参数:

Δθvθ(s)θ(zvθ(s)) Δθ∝∂vθ(s)∂θ(z−vθ(s))

在构造训练数据时有一些技巧。如果我们从人类对弈的完整棋局中抽取足够数量的训练数据,很容易出现过拟合的问题。这是因为,在同一轮棋局中的两个棋面的相关性很强(往往只相差几个棋子);此时,网络很容易记住这些棋面的最终结果,而对新棋面的泛化能力很弱。为了解决这个问题,Huang等人再次祭出强化学习的大杀器:通过RL policy network的自我对弈,产生了三千万个从不同棋局中提取出来的棋面-收益组合的训练数据。基于这份数据训练出来的Value Network,在对人类对弈结果的预测中,已经远远超过了使用fast rollout policy network的MCTS的准确率;即便是与使用RL policy network的MCTS相比,也已是不遑多让(而Value Network的计算效率更高)。

accuracy of value network

整合

到这里,我们手头上已经有一个牛逼但是巨慢的SL policy network;有一个不那么牛逼但是很快的fast policy network;有一个一心只想着如何赢棋的RL policy network;还有一个能一眼洞穿棋局的value network。那么,将这些networks放在一起互相补足,会得到什么呢?

答案就是AlphaGo。而把这些networks整合在一起的框架,就是MCTS算法。

与经典的MCTS算法类似,APV-MCTS(asynchronous policy and value MCTS)的每一轮模拟也包含四个步骤:

  1. Selection:APV-MCTS搜索树中的每条连边 (s,a) (s,a)都包含三个状态:决策收益 Q(s,a) Q(s,a),访问次数 N(s,a) N(s,a),和一个先验概率 P(s,a) P(s,a)。这三个状态共同决定了对一个节点下行为的选择:
    at=argmaxa(Q(st,a)+u(st,a)) at=arg⁡maxa(Q(st,a)+u(st,a))

    其中, u(s,a)P(s,a)1+N(s,a) u(s,a)∝P(s,a)1+N(s,a)
  2. Expansion:步骤1中的selection终止于叶子节点。此时,要对叶子节点进行扩展。这里采用SL policy network  pσ 计算出叶子节点上每个行为的概率,并作为先验概率 P(sL,a) P(sL,a)存储下来。
  3. Evaluation。使用value network  vθ(s) vθ(s)和fast rollout policy network  pπ 模拟得到的博弈结果对当前访问到的叶子节点进行估值:
    V(sL)=(1λ)vθ(sL)+λzL V(sL)=(1−λ)vθ(sL)+λzL
  4. Backup。更新这一轮模拟中所有访问到的路径的状态:
    N(s,a)=i=1n1(s,a,i) N(s,a)=∑i=1n1(s,a,i)

    Q(s,a)=1N(s,a)i=1n1(s,a,i)V(siL) Q(s,a)=1N(s,a)∑i=1n1(s,a,i)V(sLi)

    其中, n n是模拟的总次数; 1(s,a,i) 1(s,a,i)标示第 i i轮模拟中是否经过边 (s,a) (s,a) siL sLi是第 i i轮模拟中访问到的叶子节点。

下图展示了一轮模拟的动态过程。

MCTS with policy networks and value networks

模拟结束后,算法会选择访问次数 N(s,a) N(s,a)最大的策略 a a作为当前的走子策略。

值得注意的是,在整个模拟的过程中,我们见到了SL policy network(用于Expansion中先验概率的计算);见到了fast rollout policy network(用于Evaluation中的快速走子);见到了value network(用于Evaluation中对棋势的预估)。等等,RL policy network去哪了?为什么不用RL policy network替代SL policy network?明明RL policy network有着更强的棋力啊(85%的赢面)?

这是因为,与RL policy network相比,由人类专家走法训练出来的SL policy network在策略上的多样性更强;因此更适用于MCTS中的搜索。但是,用RL policy network的自我对弈结果训练出来的value network的泛化能力就要比SL policy network训练出来的value network要强得多了。

结语

回顾一下,我们发现AlphaGo本质上是CNN、RL、MCTS三者相结合的产物。其中,MCTS是AlphaGo的骨骼,支撑起了整个算法的框架;CNN是AlphaGo的眼睛和大脑,在复杂的棋局面前寻找尽可能优的策略;RL是AlphaGo的血液,源源不断地提供新鲜的训练数据。三者相辅相成,最终4:1战胜了人类围棋世界冠军李世石。其实还有很多细节我没有详细的展开,包括如何在分布式的机器上更高效地训练;如何更新MCTS中的权重等等。然而,其背后的基本原理差不多就是这些了。

### 回答1: 掌握DMA(直接内存访问)和IOMMU(输入/输出内存管理单元)APIs是非常重要的。DMA是在计算机系统中实现高速数据传输的机制,它允许外设(如硬盘、网络适配器)直接访问系统内存,而无需通过CPU的干预。这样可以大大提高数据传输的效率和速度。然而,DMA的使用需要正确地配置和管理,否则可能会导致数据丢失或损坏。 而IOMMU是一种硬件设备,用于管理和映射DMA请求,以保护系统的安全性。它允许对DMA请求进行地址转换和访问权限控制,以避免恶意设备对系统或其他设备的干扰。掌握IOMMU的APIs可以帮助开发人员正确地配置和管理IOMMU,确保系统的安全性和可靠性。 要掌握DMA和IOMMU的APIs,首先需要了解其基本概念和原理。还需要熟悉相关的编程语言和操作系统的API文档,以了解如何使用和调用这些APIs。掌握正确的API使用方法和参数配置对于正确、高效和安全地使用DMA和IOMMU是至关重要的。 实践是掌握这些APIs的关键。开发人员可以通过编写示例代码和进行实验来熟练掌握API的使用方法。同时,也可以参考其他开发者的经验和文档,从中学习和总结最佳实践。 最后,密切关注DMA和IOMMU相关的安全漏洞和更新也是非常重要的。由于这些APIs涉及系统的核心组件和数据传输,任何漏洞或错误都可能导致严重的安全问题。因此,及时更新和修复相关的补丁是掌握DMA和IOMMU APIs的重要一环。 ### 回答2: 掌握 DMA(直接内存访问)和 IOMMU(输入/输出内存管理单元)的 API 是非常重要的。 DMA 是一种直接访问内存的技术,允许外设(如网络适配器、磁盘控制器)直接与系统内存进行数据传输,而无需通过 CPU 的干预。掌握 DMA 的 API,可以使我们能够更好地理解和利用这种技术。通过使用 DMA,我们可以提高数据传输的效率,减少 CPU 的负载,从而提高系统性能。 IOMMU 则是一种硬件设备,用于管理输入和输出设备对于内存的访问。IOMMU 的主要作用是提供安全性和隔离性,防止外设读写不安全的内存区域。掌握 IOMMU 的 API,可以帮助我们更好地管理和控制设备对内存的访问权限,确保系统的安全性和稳定性。 掌握 DMA 和 IOMMU 的 API,可以让我们更好地理解和控制系统与外设之间的数据传输和内存访问。这对于开发高效的设备驱动程序和操作系统非常重要。同时,了解和使用这些 API 还可以帮助我们更好地解决与外设和输入/输出相关的问题,提高系统的稳定性和可靠性。总之,掌握 DMA 和 IOMMU 的 API 对于我们进行系统开发和维护是非常有益的。 ### 回答3: 掌握DMA(直接内存访问)和IOMMU(输入/输出内存管理单元)API是非常重要的。 DMA是一种技术,允许外部设备(如网卡、显卡等)直接访问系统内存,而不需要CPU的干预。通过使用DMA技术,设备可以像访问自己的内存一样快速高效地读写系统内存。掌握DMA API意味着我们能够编写程序来管理设备的DMA传输,包括启动传输、传输数据和处理传输完成的通知等。 另一方面,IOMMU是一种硬件设备,可以提供地址转换和访问控制功能,能够增强系统的安全性和性能。通过IOMMU,系统可以将设备的物理地址转换成虚拟地址,并且可以对设备的访问进行权限控制,以确保设备只能访问其被授权的内存区域。掌握IOMMU API意味着我们可以编写程序来管理和配置IOMMU,包括设置地址转换规则、配置访问权限和处理IOMMU事件等。 掌握DMA和IOMMU API对于开发者来说至关重要。通过使用这些API,我们可以更好地管理系统的内存资源和设备访问,提高程序的性能和安全性。同时,以这些API为基础,我们还可以构建更复杂的系统、驱动程序和应用程序,以满足不同的需求和应用场景。因此,深入理解和熟练运用DMA和IOMMU API对于系统开发和驱动程序开发人员来说是非常重要的技能。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值