AlphaGo 研究笔记(*长文慎入) -----转载AlphaGo 研究筆記 (*長文慎入) - 快刀 PPvS.org 【中文原創性論文比對系統】
资料:
1. www.youtube.com/watch Presentation of "Mastering the game of Go with deep neural networks and tree search"
2. www.dcine.com/2016/01/28/alphago/
谷歌旗下DeepMind 公司研发的AlphaGo ,战胜了人类职业棋王选手,不为别的,谷歌就是要向世界证明人工智慧强大。2016 年1 月28 日,DeepMind 公司在国际权威期刊《Nature》发表论文Mastering the game of Go with deep neural networks and tree search ,介绍了AlphaGo 软体的核心技术。这篇论文光作者就20 个,明显是下了血本,领军的两位,都是电脑围棋界鼎鼎大名的大神。其中一位,是来自台湾师范大学的黄士杰,另一位David Silver 是电脑围棋和深度学习的顶尖专家,可说是两位长期研究围棋领域的高手。
本文是对AlphaGo 软体工作原理,浅薄的个人研究笔记,还有一点点笔者从事人工智慧开发的心得,抛砖引玉,望其他高手指正。当然,AlphaGo 研发团队里有来自台湾电脑围棋软体高手,相信不久,黄士杰本人也会解密一下这轰动全球的技术关键。
不多说废话,这论文里的技术是出乎意料的简单,却很强大。
一,系统核心关键:搜寻+大数据深度学习。
令人意想不到,几乎完全没用到围棋领域的专业知识。
二,两套能深度学习的子系统。
面对复杂的围棋棋局,AlphaGo 不是用暴力式的搜寻比对,而是开发了两套能深度学习的子系统,来解决搜寻量太大的问题。
「策略网路」(Policy Network)子系统负责下一步的落子选择, 把理论上存在的平均200 种可能性,缩小到得分最高的几种选择;「价值网路」(Value Network)子系统负责评估落子后的局面,与最终胜负的或然率关系,判断当下局面是否处于优势,赢面多大。第一个子系统减少计算的宽度——不需要计算所有落子的可能;第二个子系统减少计算的深度,不用徒劳地去尝试算到底。AlphaGo 们用了许多真正专业棋局来训练软体产生一堆数据,这种方法称为监督学习(Supervised Learning),然后更让电脑跟电脑下棋,这种方法称为强化学习(Reinforcement Learning),每次电脑跟电脑自己下棋都能让软体的棋力精进。
三,第一个子系统(Policy Network)它有两种学习模式。
模式一:简单模式。透过采集KGS(一个围棋对弈线上主机)上的对局资料来训练系统。这可以理解为:让系统学习「定式」,也就是在一个既定的局面下,人类会怎么走,这种学习不牵扯到优劣判断这个议题。
另一个模式是复杂模式,主要功能在自我强化学习,它透过电脑自己和自己大规模对局的胜负,来学习每一步走子的优劣。因为是自我对局,资料量是无限的。
第二个子系统(Value Network)作用在学习评估整体盘面的优劣,它也是透过大规模自我对局来进行训练,若采用人类对局的数据,容易因资料量过少导致失败。
四,在对弈时,两套子系统是这样协力工作的。
第一个子系统的简单模式会判断,在当前局面下有哪些走法值得考虑,其复杂模式,则是透过蒙地卡罗树搜寻演算法MCTS 展开各种走法,推敲各种走法的优劣,即所谓的「算棋」。在这个计算过程中,第二个子系统会协助第一个系统审势度局,砍掉大量不值得深入考虑的分岔树,大大提高电脑效率。与此同时,第二个子系统透过预知新局面的优劣,也能给出下一次建议。
五,如果拥有无限比对资源,MCTS理论上可以透过探索每一局的可能步骤,去计算最佳落子。
但暴力式比对所有走法的可能性,对围棋来说变化太多了(大到比我们认知宇宙里的粒子还多)。围棋棋盘横竖各有19 条线,共有361 个落子点,双方交替落子,这意味着围棋总共可能有10 ^ 171(1 后面有171 个零)种可能性。这超过了宇宙中的原子总数是10 ^ 80(1 后面80 个零)!所以实际上没办法搜寻每一个可能的变种。MCTS 做法比其他方法好的原因,是在识别有利的变数,这样可跳过一些不利的,从而提高效率。
AlphaGo 最后是选择装上MCTS 的演算法模组,让它嵌入不同功能去评估变种。最后马力全开。
随着使用模组的不同,AlphaGo能力变化和模拟结果。
AlphaGo 的能力变化与MCTS 的使用有关。仅使用一种方法的时候,AlphaGo 跟民间围棋高手差不多,但当混合使用上述方法,就到达人类职业棋手水平。最后,两个子系统的结果,以平均加权,做出最终要输出的决定。
六,在论文中有个有趣结论。
两套子系统取平均结果,比依赖两者各自得出的结果都要好很多。这应当是AlphaGo 最拟人化的部分。这两个系统的工作方式,一个判断细部,一个纵览全局。和人类很像。但AlphaGo 最终综合两套系统的方式相当简单:让两者各自评估一下每种可能的优劣,然后取一个平均数。呵呵,这可绝不是人类的思维方式。
七,AlphaGo 采用图像处理技术来学习盘面判断。
也就是把围棋棋盘当一张照片在处理。因此,记忆体里并不是储存一套套的棋谱资料,而是把所有棋谱都转变为一个个函数。新增一个棋谱时,经过13 个网路层,得到一个19 × 19 维函数,如此一来可以知道,每个地方下子的机率有多少。换言之,输入一个棋盘,输出是一个函数。
八,论文还详细讲了一套工程最佳化的技术
分布式计算,大量的云主机去提高MCTS 速度,但核心都是相同的演算法了。
深入 AlphaGo 核心
AlphaGo 透过两套神经网路子系统合作来改进下棋。
这两套系统是多层神经网路(13层),跟Google 图片搜寻引擎识别图像的结构相似。它们从多层式开始启发,去处理围棋棋盘的定位,就像图片分类器处理图片一样。经由过滤,13 个完全连接的神经网路层,产生它们搜寻到的局面判断。这些层次能够做分类和逻辑推理。
两套深度学习系统
这些网路透过反覆训练来检查结果,然后校对调整参数,让下次执行更好。这个处理方式有大量的随机性元素, AlphaGo 开发者也无从得知软体「思考」的结果,但可以确定的是,更多的训练能让它不断进化。
第一步骤:启动落子选择器(Move Picker)
进入落子选择器之后,AlphaGo 开始执行第一个神经网路子系统,叫做「监督学习的策略网路(Policy Network)」,观察棋盘布局企图找到最佳的下一步。事实上,它能预测计算出下一步棋的最佳机率,前一步猜测的,就是那个可行性得分最高的。
落子选择器是怎么看到棋盘的?标示数字处,代表最强人类选手可能的落点。
AlphaGo 采集了KGS(网路围棋对战平台)上,超过百万套人类对弈棋局落子,来产生庞大资料,这是AlphaGo 模拟人的地方,目的是学习那些顶尖高手的下棋策略。经过大数据训练后,AlphaGo 落子选择器的预测正确性已达57%,几乎等同职业棋手的实力。但系统的最终目标不是为了赢得胜利,而是要找到跟人类高手同样的思考模式。
更快的落子
AlphaGo 为了提高效率更快落子,研发团队采取了这样的策略。AlphaGo 的落子选择器首先执行「快速搜寻」版本。快速搜寻版本不比对19 x 19 的棋盘,但会评估对手先前棋路和刚下的这一手,在两者间产生一个更小的值,让计算速度比之前快1000 倍,实现了更佳的「搜寻结构」。
传统上越强的搜寻,意味着耗时越久,为了比对到一个不错的落子,「搜寻结构」需要逐一去检查几千种落子可能性才能输出结果。但AlphaGo 这样两套系统混合使用,让这比对效率大大提高。
第二步骤:棋局评估器(Position Evaluator)
AlphaGo 的第二个步骤,相对于落子选择器,这里要解决另一个问题,这步骤「棋局评估器」在论文中叫做「价值网路(Value Network)」。在给定棋子位置情况下,预测每一个棋手赢棋的可能,透过整体局面判断来辅助落子选择器。这判断仅仅是大概的,但能有效提高搜寻速度。透过分类潜在局面的「好」与「坏」,AlphaGo 可以决定是否需要深入搜寻。如果棋局评估器比对,结果发现这数字太低,那么该程式就跳过并忽略这方向上的可能性比对。
棋局评估器是怎么看这个棋盘的?深蓝色表示下一步有利于赢棋的位置。
棋局评估器也通过百万套的棋局做训练。DeepMind 团队复制了两套相同的AlphaGo 落子选择器,精心挑选随机样本让电脑自己对弈,因此产生了大量棋局资料。这批棋局资料价值连城,可用来大规模训练局面评估器。这种落子选择器模拟各种可能性,从任意棋盘局面推断双方赢棋机率。如果单靠人类的棋局资料,难以达到这种级别的训练。
搜寻树的增删
论文里列出了几个版本的落子选择,再加上局面评估器,AlphaGo 可以很有效率的搜寻可能走法和步骤。搜寻方法就是蒙地卡罗树搜寻演算法。但因为加上两套子系统混合,因此能够更具有智慧的猜测用哪个变种去搜寻,需要多深去搜寻。
搜寻树
什么是机器深度学习?
「深度学习」是指多层的人工神经网路,和训练它的方法。第一层神经网路会把大量数字作为输入,通过非线性方法取得权重,再产生另一批数据作为输出。这就像生物神经大脑的工作原理一样,通过合适的数量,多层组织结合在一起,形成神经网路「大脑」进行精确复杂的处理,也像照片识别的原理。
人工神经网路的研究,在几十年前就出现了,但直到网路普及化后,才产生更多应用。在早期,研究先驱们能搜集的数据样本太少,而即便想依靠这些少量资料取得初阶训练效果,也都远远超过当时电脑所能处理的范围。大量的「训练」是学习的重要途径,人们逐渐发现数据背后的价值,于是最近几年,一些能获取大数据资源的团队,便开始采集大量内容来实现人工神经网路,透过「大数据」技术进行高效训练。
深度学习不是简单地搜寻比对以前的棋,而是把曾经看过的所有局面,融会贯通形成资料。以后电脑再遇到了,无论是整体还是局部,软体都能分析得到最好的作法。
什么是蒙地卡罗树搜寻演算法?
「蒙地卡罗树搜寻演算法」(Monte Carlo Tree Search 简称MCTS)并不是一个演算法,而是一类随机演算法的统称。这类方法特点是,可在随机采样中计算得到近似结果,随着采样增多,得到正确结果的机率逐渐加大。但在获得全部统计结果之前,无法肯定当下就是真实的结果。
举个例子:一篮有1000 个苹果,想挑出最大苹果。于是这样挑选:先随便拿起一个,再随机拿另一个跟这个比,手上留下比较大的,再随机拿下一个……每拿一次,手上的苹果都至少比上次的大。拿的次数越多,挑的苹果就越大。这个挑苹果的方式,就属于蒙地卡罗演算法:尽量找大的,但不保证一次就能挑中最大的。
而蒙地卡罗树搜寻演算法这种启发式的搜寻策略,能够基于对搜寻,随机抽样来扩大搜寻树,从而分析围棋这类游戏中,每一步棋该怎么走才能够创造最好机会。特别要说明的是,蒙地卡罗树搜寻演算法其中比较流行的是一种叫upper confidence bounds applied to trees 方法,简称UTC 。
参考来源
– AlphaGo首页http://goo.gl/960rvo
– Nature论文原文http://goo.gl/qcA0mg
– Nature报导http://goo.gl/AJUZKH
– Dan Maas对论文的简要结论http:/ /goo.gl/kNg3ST
为什么之前的人工智慧软体没有征服围棋?
AlphaGo 并不是第一套电脑下棋的软体。1997 年时,已有IBM 超级电脑深蓝战胜国际象棋棋王卡斯帕罗夫的先例。这很大程度上,与围棋的极大可能性和此前弈棋程序的算法限制有关。
围棋棋盘横竖各有19 条线,共有361 个落子点,双方交替落子,这意味着围棋总共可能有10 ^ 171 (1 后面有171 个零)种可能性。这超过了宇宙中的原子总数是10 ^ 80 (1后面80个零)!
而深蓝采用的是暴力搜寻法,在所有可能存在的下法构建一个树。这样无法应对围棋游戏。
AlphaGo跟人类思路的对比
人解决问题的方法至少分三种,第一种方式是搜寻。搜寻,就是全面思考一下可能的毛病,开展接下来的可能性,这是一种思考方式。
第二种方式就是直觉。处理问题经验丰富了,对整体,对局部十分了解,一看就能产生判断。
第三种方式是推理,走几步然后推敲一下。摸索看看,然后再走下去。
当然,人类处理问题的方式要复杂的多。人们并不是总是同时对事态做出宏观和微观的判断,而是有时候侧重于大局,有时候侧重于细部。具体精力分配取决于事态本身,也取决于人当时情绪、心理和反应。这也许是人类不完美之处,但也是人类行为丰富性的所在。
AlphaGo会取代什么职业的人?
应该换成这样观点,什么职业的人,用AlphaGo 技术来提升最强大?
(1) 法官/律师。
指的不是欧美那种以陪审团观点为主的法官。特别指的是台湾法官,喜欢以大量条文来解读判决的这类法官,这种不考虑社会观感公平性的判决,正是大数据+ 深度学习的电脑软体专长。
未来只要全部法律条文+ 判决文都建立在资料库以后,任何人都可轻易变成超级引经据典的法律权威。
(2) 记者。
这已不是未来猜想,电脑自动写新闻稿正在发生中,特别是一些娱乐八卦,气象,体育这方面新闻,电脑记者已写了不少稿子面世了。