AlphaGo原理探讨

由于状态空间无法穷举,博弈类游戏AI都采用了(启发式)搜索算法,即从当前状态出发,尝试可靠的行动,达到终局或一定步数后停止,根据后续局面的优劣反馈,采取最优行动。为了评估行动是否可靠,引入策略函数Q(a|s)和评估函数V(s),策略函数Q即在当前状态(state)下能采取的行动(action),评估函数V对当前状态评分,AlphaGo采用卷积神经网络拟合这两个函数。AlphaGo应用的蒙特卡罗树搜索(MCTS)是一种搜索框架,它把游戏的进程用树结构表示,通过反复模拟和采样对局过程来探索状态空间。它有如下特点:
1. 并行搜索,对可靠的多个行动同时进行推演;
2. 能随时进行,随时停止。 在对方思考对策时,不停止推演,在对方走子后保留之前的状态,根据最新的状态 进行推演。对方实际走子可能出现在刚才的推演中,所以刚才的计算是有用的。
3. 随机性采样,能减小估值错误的负面影响。
4. 在探索状态空间过程中,能应用神经网络选择节点,能结合强化学习调整评估函数。
5. 它基于规则进行推演,而神经网络基于案例训练出评估函数,用来调整蒙特卡罗树搜索。


机器学习大体上可以分为四部分:数据集、系统模型、训练方法、评估方法。下面分别解释AlphaGo的这几个部分:
- 数据集:一个个独立的KGS人类在线围棋比赛棋谱、机器自我对弈棋谱作为训练集,最后的胜负作为目标;
- 模型:策略网络(policy network)和评估网络(value network),它们都是卷积神经网络。
- 策略网络P(a|s)也叫走棋网络,表示在当前状态(state)下,走子(action)的概率分布。输入当前棋局,输出棋盘上361个点的概率分布矩阵,即下一手棋子落在棋盘各个点的偏好;
- 评估网络V(s),输入当前棋局,输出单个值,给出当前棋局的总体评分,取值[0,1],也可以看作当前棋局的胜率。输入的棋局包括自己下的和对方下的,即也给对方下的这一手评判。
- 训练方法:监督学习SL(Supervised Learning)、增强学习RL(Reinforced Learning);
- 评估方法:终局获胜;


训练过程:
神经网络都存在一个激活函数y=f(x),机器学习训练的过程就是通过给定大量的x和y,学习函数f,找准映射关系。y做为训练目标,可以取一个值或者一个矩阵。AlphaGo 的训练过程如下:
- 训练策略网络P_net:采用监督学习。训练集为三千万的KGS人类对弈棋局图片,目的是对每个盘面做下一手预测。不同的盘面相互独立,没做成时间序列。一个盘面是19x19的二维向量s,将其输入神经网络,目的是让神经网络输出的a’不断逼近人类选手的下法a。 可以理解为学“定式”。
- 训练增强策略网络P_plus:采用增强学习,自我对弈。胜率高,但变化少,所以没直接应用在对弈过程中,主要用来生成盘面来训练V_net。
- 训练快速走棋模型P_fast,没采用神经网络训练,而是传统的局部模式匹配+线性回归,研究者基于对围棋的理解提炼出对局部落子算法。
- 训练评估网络V_net,采用增强学习,训练集为3000万人类对弈棋局和不断增长的自我对弈棋局,得到对当前盘面的胜率评估网络,即快速判断我这种局面能不能嬴。有了它,在比赛过程中就不必要用MCTS推演到终局才知道结果。

对弈过程
整个对弈过程以蒙特卡罗树搜索算法为框架,探索各种可能下法。
1.对于当前盘面,P_net先给出几个可能选点概率;
2.对每个选点进行自我对弈往后推演,展开搜索树;
3.对各个节点的盘面进行评估,胜率高则继续推演,胜率低则剪掉。评估结果是两种方法平均加权:V_net基于盘面给出评估分数;P_fast基于盘面自我对弈到终局,返回当前盘面的胜率。


相关讨论:
1、AlphaGo只求胜,不求大胜(嬴最大目数),对它来说嬴多赢少没区别。例如a选择是70%概率嬴十目,b 80%概率嬴一目,c 90%概率嬴二目,alphaGo一定会选c,而人类会选a。因为人类没有计算机强大的计算能力,只能依靠不断积累优势来获胜。
2、AlphaGo没有局部概念,求不出局部最优解。对行棋次序的组合无法遍历完。局部战斗仍然要放到最终局才能判断优劣。
3、没有采用递归神经网络RNN,所以没有基于时间序列,不会根据已经下出来的棋做决策,下棋没有逻辑。
4、遇强则强,遇弱则弱。AlphaGo每一步的推演都假设对方知道自己的决策,假设对方最强。所以遇到弱手后会删掉之前正确的策略。
5、可能会出现神经网络的通病-“过拟合”问题。长期和自己下,时间久了会达到自洽,导致遇盲点而不见。所以要用不同等级的AlphaGo对弈。
6、卷积神经网络CNN对围棋拓扑图无感。围棋不是一般意义上的图案,棋子连成的形状最重要是没有断点,而具体是什么形状厚还是薄没有关系,一块连在一起的棋子中有一个眼、两个眼还是十目以上的大空是有区别。
7、是否会有升级版BetaGo,以嬴最多目数为目的,这样就会成为棋风凶狠的棋手。这样说来围棋AI还有更多发展空间。
8、是否能引入RNN,把整个棋局看作时许序列,而不仅仅是独立的盘面,这样更有逻辑性。在棋局不同阶段,动态选取两种评估方法的权重,而不是固定的0.5。
9、AlphaGo不能通过观察一个棋手的棋局来学会他的“棋风”,再有针对性地攻其弱点,因为训练样本太小。
10、让人工智能下围棋是为了更深入理解智能的本质,理解人是怎么思考问题。


疑问:
1、一个系统需要多个神经网络还是一个神经网络?
感觉对弈过程是在海量的训练集中寻找相同的盘面,一个盘面一个结果。 训练集中有人类的盘面,有机器自我对弈的盘面,一部分基于统计,一部分基于规则。如果是这样,遇到没出现过的盘面怎么办?

2、蒙特卡罗树搜索和神经网络的在对弈过程中的角色、发挥的作用是什么?
我的理解:蒙特卡罗树MCTS基于规则推演,神经网络基于案例学习,神经网络训练完后作为盘面应对策略数据库和评分数据库。开局,蒙特卡罗树随机选择一个好开局,再基于规则对各种下法并行展开推演,对方下棋后,MCTS根据盘面,搜索到对应的策略网络,得到多种走棋方法,作为树的子节点,对每一个节点,搜索相同盘面,找到对应的评估网络,给出胜率得分(同时并行地对每个节点快速自我对弈到终局,得到胜率),综合概率和胜率得分,选择走子。对方走棋后继续这样搜索。


参考文献
1. AlphaGo如何下棋:https://www.zhihu.com/question/41176911
2. 观棋录:http://imaginary.farmostwood.net/597.html
3. AlphaGo的分析:https://zhuanlan.zhihu.com/p/20607684
4. 关于 AlphaGo 论文的阅读笔记http://imaginary.farmostwood.net/594.html

AlphaGo原理探讨相关推荐

  1. 关于 top、left 结合 translate 实现居中的原理探讨

    关于 top.left 结合 translate 实现居中的原理探讨 前情提要 在居中对齐的方法中常用的一种方法之一,就是使用绝对定位结合 translate.top.left实现居中,探讨原理之前先 ...

  2. (转) 一张图解AlphaGo原理及弱点

    一张图解AlphaGo原理及弱点 2016-03-23 郑宇,张钧波 CKDD 作者简介: 郑宇,博士, Editor-in-Chief of ACM Transactions on Intellig ...

  3. MySQL 复制夯住排查以及原理探讨

    一 引子 研发反应,有台从库和主库不同步.由于业务读操作是针对从库的,数据不同步必定会带来数据的不一致,业务获取的结果会受影响,所以这个问题必须尽快解决. 登上服务器,查看 MySQL 的从库状态,并 ...

  4. Linq的底层原理探讨

    前言 有一篇文章ABP-引入SqlSugar很多人都在催促我,出下一章因为工作忙一直没写.现在开第二节课Linq的底层原理探讨.一起探讨完,看看有没有引起SqlSugar的新思路. 这文章叫linq的 ...

  5. android monkey原理_Android Monkey原理探讨-阿里云开发者社区

    0x0 概述 本文不涉及如何使用monkey,官网说得够详细了,网上资料也一大堆.本文着重探讨monkey的实现原理,以及基于这些原理,我们可以做些什么?本文涉及的Monkey的源码位于AOSP的de ...

  6. 英特尔Intel CPU睿频原理探讨

    -- 参考自: <自动控制原理(第五版)> 胡寿松 自控课的大作业我选择通过英特尔睿频技术来讲解自控原理在实际生活中的应用,和其他人相比属于剑走偏锋.之所以选择了这个课题,完全是出于兴趣, ...

  7. STC仿真芯片原理探讨

    最近在开发一个新项目,芯片用的是STC15F2K60S2,而程序一个老工程师用汇编写的,需要在上面增加和修改一些内容.以前用惯了C,改用汇编的话的确有点吃力,里面跳转语句很多,指令也不太熟悉,用点灯的 ...

  8. 【OMNET++】OMNET安装卸载说明以及原理探讨

    前言 我们安装OMNET,参考file:///D:/omnetpp-5.4.1-src-windows/omnetpp-5.4.1/doc/InstallGuide.pdf的官方文档,其支持的平台很多 ...

  9. 达观数据刘思乡:一文详解AlphaGo原理

    摘要 1.围棋是一个MDPs问题 2.policy iteration如何求解MDPs问题? 3.WHAT and WHY is MonteCarlo method? 4.AlphaGo Zero的强 ...

最新文章

  1. JavaScript 编程精解 中文第三版 十一、异步编程
  2. 自己建服务器 语音盒子_自建sip语音服务器
  3. Java工具类——UUIDUtils
  4. 【Apache POI】基础处理方法总结
  5. curl -windows下接口通讯
  6. Centos 6.x
  7. postman 使用_Postman使用方法
  8. 我前面的杨千雪看图软件
  9. windows环境 logstash file input fail 解决
  10. 洛谷P1494 [国家集训队]小Z的袜子
  11. 使用 vue 一套功能 UI 全面 的 后台管理系统
  12. 公钥加密_河海大学陆阳、李继国:不依赖双线性对的带关键字搜索的无证书公钥加密方案构造...
  13. 读InfoGan文章
  14. centos下编译abseil-cpp
  15. 【爬虫学习笔记day51】6.1. scrapy-redis的官方文档源码分析参考:Connection
  16. Android:给图片加边框
  17. VS2015基于对话框的MFC倒计时器
  18. Java集合(一):集合的概念
  19. SELECT数据查询例题4——分组查询
  20. 浅谈ERP项目团队管理的四个方面

热门文章

  1. Framework7中文教程-中文演示DEMO
  2. linux驱动绑定设备 命令 bind,Linux设备驱动节点里的bind与unbind
  3. 研究生食堂排行榜!!
  4. linux切换用户命令
  5. Python数据结构与算法篇(四)-- 滑动窗口算法
  6. OpenJDK ZGC 源码分析(六)GC回收
  7. [现代密码学] Crypto 知识点总结(古典密码对称加密hash函数)
  8. 如何成为web前端开发高手
  9. 版本详解:Beta、Dev、Canary、Stable、Chromium等版本
  10. arm电子相册项目——主函数篇main.c