频道栏目
首页 > 资讯 > 其他综合 > 正文

AlphaGo解析

16-08-10        来源:[db:作者]  
收藏   我要投稿

本文基于Google在Nature上关于AlphaGo的文章解读以及Git上对于AlphaGo的复现项目学习综合而来,主要探寻AlphaGo的学习技巧以及探寻其在机器人应用方面的思路和启事。

1.设计思路

deep Q-learing的问题

这里写图片描述【Mnih V, Kavukcuoglu K, Silver D, et al. Playing atari with deep reinforcement learning[J]. arXiv preprint arXiv:1312.5602, 2013.】
直接来看这个算法流程。算法的中心思想是想通过随机的动作探索出最佳的策略。但是这个随机探索的过程存在如下问题:
1.在状态空间比较大的时候,随机探索策略可能需要巨量的时间才能够探索到一个比较好的策略
2.随机策略选取的几率只和迭代次数有关而和整体策略的评价无关,即有可能在探索初期就得到一个比较好的策略,但是机构并不会以这个策略作为蓝本进行更进一步的探索,而是继续进行随机探索,使得探索效率变得很低

但是这种随机探索策略也有其好处:
1.没有人为策略的干扰,一旦其出现智能行为,就可以认为是人工智能算法的学习成果,而并非是人为设计的规则所引导出来的东西。
2.能够找到最接近全局最优的策略(基于当前假设和考虑基准)

我们希望能够在保留原有优点的情况下增加训练速度,这也是MCTS引入的一个理由。

1.1.MCTS

蒙特卡洛树搜索(MCTS),是一种基于模拟搜索的人工智能最优决策方法。
基本的 MCTS 算法非常简单:根据模拟的输出结果,按照节点构造搜索树。其过程可以分为下面的若干步:
这里写图片描述
搜索树的构建过程
选择 Selection:从根节点 R 开始,递归选择最优的子节点(后面会解释)直到达到叶子节点 L。
扩展 Expansion:如果 L 不是一个终止节点(也就是,不会导致博弈游戏终止)那么就创建一个或者更多的字子节点,选择其中一个 C。
模拟 Simulation:从 C 开始运行一个模拟的输出,直到博弈游戏结束。
反向传播 Backpropagation:用模拟的结果输出更新当前行动序列。

1.2.MCTS搜索简化

但是在较大的搜索空间中,即使是MCTS也需要承担巨大的计算量才能保证估计的准确性。例如在围棋游戏中,平均需要走150步才能决出胜负,每一步可以考虑的走法有大约250种。这样拓展开的树将有及其庞大数量的结点,给搜索造成了极大的困难。AlphaGo通过对MCTS进行简化,缩减了搜索树的宽度和深度,从而得到最优策略。

2.AlphaGo的树结构

AlphaGo通过四个网络来进行搜索的加速
这里写图片描述
其中,RolloutPolicy和SL policy network都是针对于专家知识(棋谱)进行拟合的网络。
RL policy network用于策略网络的强化学习,而Value network用于估计各个状态的状态收益

2.1.Rollout Policy

RolloutPolicy使用的是简单的棋盘特征进行拟合训练,其特征设定如下:
这里写图片描述
【Silver D, Huang A, Maddison C J, et al. Mastering the game of Go with deep neural networks and tree search[J]. Nature, 2016, 529(7587): 484-489.】
这个网络在论文中只对专家系统的走法完成了22%左右的成功预测,但是计算速度非常快,可以用于估计快速估计当前状态的专家建议。但是AlphaGo在实际使用的时候,并不使用这个网络作为自己的预测网络,而是使用另一个更加复杂的卷积网络进行训练作为自己的策略网络。

2.2.SL policy network

该网络将围棋棋盘的落子情况视作一个19X19的图像输入,通过CNN网络结合专家知识进行训练,得到在各种情况的时候应该选择的落子方案。论文指出这个网络对于不同情况的预测和专家知识有大约50%的正确率。
看上去这个正确率并不算高,但是,这只是一个预训练系统,并不需要将这个模型调整到过高的正确率。
在强化学习的框架中,这其实可以理解为先验方案。相当于是将随机探索的动作分布从均匀分布转到了强先验条件的建议分布。但是之前我们也提到过了,我们并不希望这个建议分布过于强势,从而导致我们最终的策略严格遵从这个分布而无法进化学习。所以保持这个建议分布具有较低的正确率也是预防过拟合的一种方式。

2.3.RL policy nectwork

通过专家知识的预训练之后,AlphaGo进入自我博弈阶段。其会通过最新的网络和以前版本网络的自我博弈来自我进化。每次自我博弈的网络会从旧版本的网络中随机挑选,并且在每次新版本网络更新之后,其参数也会加入旧版本网络库中。
该网络的结构和SL policy network一致,其初始化参数即为SL policy network的训练结果。该网络以随机场景为episode的起点,以一局结束(赢或者输)为episode终点,128个episode为一个minbatch进行训练,对于策略p的优化公式为:
Δp∝?logpp(at|st)?pzt
其中logpp(at|st)为在当前条件下选择各动作的概率,zt为最终收益(赢为正1,输为负1,游戏未结束为0)。
在文章method部分指出:
Δp=αn∑i=1n∑t=1Ti?logpp(ait|sit)?p(zit?v(sit))
从这个公式来看,其非常接近Q-learing,但是其在语义上面还是存在一定的差距,因为我们输出的是每个情景应该选取各动作的概率而非其状态-动作对的价值,具体的Q值估计是在程序实际对弈的时候进行的

2.4.Value network

价值网络是不同于策略网络的一个评价体系,它采用回归的方法,估计了当前状态的获胜期望。如果说策略网络利用马尔可夫性只着眼于考虑当前状态的某一部动作对于整体局面的影响,价值网络就可以说是对于当前状态所有动作情况知道动作结束的一个考虑。
不同状态的期望是通过蒙特卡洛方法进行估算的:
vpp(sU+1)=E[Zu+1|su+1,au+1,...,T~s]
模型更新采用:
Δθ=αm∑k=1m(zk?vθ(sk))?vθ(sk)?θ

2.5.search method

这样,我们就可以使用简化版本的MCTS来进行搜索了。
这里写图片描述
依照MCTS的流程,我们需要估计不同的动作选择最终的收益,但是如果将当前场景所有动作都纳入考虑,搜索树将会急剧膨胀,无法计算。所以在动作选择阶段,我们依据公式:
at=argmaxa(Q(st,a)+u(st,a))
选择动作,u(s,a)表达先验知识中对于该动作选择的几率,其具体表达式为:
u(s,a)∝P(s,a)1+N(s,a)
在每一次迭代中,这个先验概率都是由之前训练的policynet产生的。而Q初始化为0,可以发现,随着MCTS的进行,这个先验知识的重要性逐渐降低,程序开始逐渐以Q作为当前落子优劣的判断标准。
这样,通过初始化N个随机的粒子,我们希望通过这些粒子来检验落子动作的优劣性。但是由于围棋游戏深度极其深,直接展开到一局结束可能会导致另外的一些问题。所以在经历有限步数的展开之后,我们就将当前结点视作叶结点了。这时候我们可以使用之前训练的价值网络和最开始通过专家策略得到的rollout policy network进行一个状态价值的估计,其估计公式为:
V(sL)=(1?λ)V0(sL)+λzL
其中V和Z分别为rollout网络和value网络得到的最终收益的估计。这样,我们可以使用更新公式:
N(s,a)=∑i=1n1(s,a,i)
Q(s,a)=1N(s,a)∑i=1n1(s,a,i)V(siL)
对Q进行更新,从而得到策略的最佳选择。

3.启发

1.使用MCTS减少训练时间,但是这会极大增加实际使用时的规划时间,是否可以将这个方法引入到训练中去
2.先验知识和Q值结合的最优策略探寻。
at=argmaxa(Q(st,a)+u(st,a))
对于加速训练有很大的指导意义

4.其他

https://github.com/Rochester-NRT
 

相关TAG标签
上一篇:RandomForest随机森林总结
下一篇:C++面试要点总结
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站