【论文详解】—AlphaGo中用到的3个关键技术

Alpha Go详细梳理

来源:【知乎-机器学习前言-13-Alpha Go】

最近又回顾了一下之前经典的AlphaGo,有一种温故知新的感觉,在这里再记录下最新的想法。

原文传送门

Silver et al_2016_Mastering the game of Go with deep neural networks and tree search_Nature

背景

在AlphaGo出现前,传统的电脑围棋策略是通过一种称为Monte Carlo Tree Search(MCTS)的方法实现,其主要思想是通过计算推算不同落子方式的胜负情况,类似于人类思想的“往后想几步”,然后选择获胜概率最大的落子方式来执行。

在这里插入图片描述

但这种方法存在一个挑战就是,假如把所有的落子可能都进行计算,那么最多会有宽度为250,深度为150的树,以当前的算力,很难在1个小时内走出一步。因此,如何降低搜索树的size成为一个棘手的问题。

在深度学习和强化学习出现后,学者们把目光转向了使用机器学习方法,让机器自己学习各种情况可能带来的收益和风险,来最大程度降低搜索树的搜索深度和宽度。

方法

总的来说,这篇工作一共使用了3种技术:监督学习,强化学习和MCTS。

  1. 首先监督学习(SL)训练了一个落子网络 p σ p_\sigma pσ和一个快速走子网络 p π p_\pi pπ,其中落子网络模型较大,需要耗费 3 m s 3ms 3ms来做出决策,而快速走子网络则仅需要 2 μ s 2\mu s 2μs来做出决策,但是落子网络更像人类的下棋方法,具有57.0%的预测正确率,而快速走子网络则稍逊,仅有24.2%的正确率。
  2. 其次强化学习(RL)对训练好的落子网络 p σ p_\sigma pσ进行提升,主要通过自博弈来提升网络的落子策略,其次再训练了一个价值网络 v θ ( s ) v_\theta(s) vθ(s),用于MCTS的剪枝操作。
  3. 最后使用MCTS执行最终的动作选择。

在这里插入图片描述

1 监督学习过程

  • 落子网络 p σ p_\sigma pσ:使用人类棋类博弈时的数据,使用监督学习方法训练一个策略网络来预测人类落子的策略,通过不断缩小与人类真实策略之间的误差,使得当前网络的落子方式更像人类,从而学得基本的走棋策略。其参数更新可表示为: Δ σ ∝ ∂ log ⁡ p σ ( a ∣ s ) ∂ σ \Delta \sigma\propto\frac{\partial\log p_\sigma(a|s)}{\partial \sigma} Δσσlogpσ(as)
  • 快速走子网络 p π p_\pi pπ:和落子网络训练方式一致,但网络模型更小,选择动作更快。

2 强化学习过程

强化学习方法是一种通过不断试错来优化自身策略的方法,这里使用RL提升落子网络的性能:

  • 策略网络:通过复制训练好的落子网络得到初始网络 p ρ p_\rho pρ,权重为 ρ = σ \rho=\sigma ρ=σ
  • 对手:每个模型通过与自身历史版本中随机的一个模型来搏弈,来决定当前策略的好坏,从而进行不断提升,选择随机版本主要是防止过拟合于单一的博弈对象。
  • reward:只在最终决定胜负后才会获得+1或者-1的奖励,其余步的奖励均为0。
  • 训练:采用随机梯度上升的方法,来增大最后的期望回报: Δ ρ ∝ ∂ log ⁡ p ρ ( a t ∣ s t ) ∂ ρ \Delta \rho\propto\frac{\partial\log p_\rho(a_t|s_t)}{\partial \rho} Δρρlogpρ(atst)

在提升策略网络性能的同时,RL另外训练了一个价值网络 v p ( s ) v^p(s) vp(s)来估计棋盘的胜率:

  • 价值网络:与策略网络类似,但输出由动作概率变为一个标量值,用来表示状态 s s s的胜率。
  • 优化目标:通过减小自身预测胜率 v θ ( s ) v_\theta(s) vθ(s)与真实胜率 z z z间的均方误差,来预测不同状态的真实胜率 Δ θ ∝ ∂ v θ ( s ) ∂ θ ( z − v θ ( s ) ) \Delta \theta\propto\frac{\partial v_\theta(s)}{\partial \theta}(z-v_\theta(s)) Δθθvθ(s)(zvθ(s))

在这里插入图片描述

3 MCTS

MCTS是一种搜索树,通过访问不同动作导致的状态来推测各个动作的价值,然后选择价值最高的动作执行。MCTS的流程如下图所示:

在这里插入图片描述

  1. 选择:每个节点保存两个值:Q(s,a)表示动作a在状态s下的价值; u ( s , a ) u(s,a) u(s,a)表示探索价值,与先验P值正相关,和探索次数负相关,该值越高说明这个动作越值得探索,尽管可能Q值不是很高,类似于人类的大胆尝试。在每一轮选择时,MCTS选择这两个值和最高的动作执行。
  2. 扩张:每选择一个动作后,都需要落子网络 p σ p_\sigma pσ计算该状态下的动作概率,生成新的P值。
  3. 评价:在仿真结束时,对展开的叶子节点的价值进行计算,通过两种方式同时进行:价值网络 v p ( s ) v^p(s) vp(s)的估计,以及快速走子网络快速模拟至游戏结束计算的价值。
  4. 回溯:利用展开的叶子结点的价值,更新根节点的动作价值。

本以为是选择Q值最高的动作来执行,但论文中写“最终模型选择访问次数最多的动作来执行”,这里还不是很懂为什么?先记录一下,希望能得到解答。

结论

本文只是对AlphaGo的知识点梳理了一下,具体的实施细节还是要查看论文,例如落子网络的输入,网络的结构,卷积核个数的影响等等。当前游戏AI的不少问题,仍然需要借鉴这篇著作的部分思想,包括搜索树的剪枝,自我博弈等等。

的确,生搬硬套强化学习方法来暴力解决游戏中遇到的问题并不实际,游戏和算法的发展仍然需要人类来不断推动。对游戏AI有兴趣的同学,可以在下方评论区进行讨论,也可以私信我,一起为强化学习/机器学习社区增添热闹。
的发展仍然需要人类来不断推动。对游戏AI有兴趣的同学,可以在下方评论区进行讨论,也可以私信我,一起为强化学习/机器学习社区增添热闹。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值