[新闻] Facebook工程师解疑:AlphaGo为什这厉害

楼主: zkow (逍遥山水忆秋年)   2016-03-14 15:40:47
Facebook工程师解疑:AlphaGo为什么这么厉害?
 Facebook田渊栋解析算法技术:AlphaGo为什么这么厉害?
  最近我仔细看了下AlphaGo在《自然》杂志上发表的文章,写一些分析给大家分享。
  AlphaGo这个系统主要由几个部分组成:
  走棋网络(Policy Network),给定当前局面,预测/采样下一步的走棋。
  快速走子(Fast rollout),目标和1一样,但在适当牺牲走棋品质的条件下,速度
要比1快1000倍。
  估值网络(Value Network),给定当前局面,估计是白胜还是黑胜。
  蒙特卡罗树搜索(Monte Carlo Tree Search,MCTS),把以上这三个部分连起来,
形成一个完整的系统。
  我们的DarkForest和AlphaGo同样是用4搭建的系统。DarkForest较AlphaGo而言,在
训练时加强了1,而少了2和3,然后以开源软件Pachi的缺省策略 (default policy)部
分替代了2的功能。以下介绍下各部分。
  1. 走棋网络
  走棋网络把当前局面作为输入,预测/采样下一步的走棋。它的预测不只给出最强的
一手,而是对棋盘上所有可能的下一著给一个分数。棋盘上有361个点,它就给出361个
数,好招的分数比坏招要高。DarkForest在这部分有创新,通过在训练时预测三步而非一
步,提高了策略输出的品质,和他们在 使用增强学习进行自我对局后得到的走棋网络(
RL network)的效果相当。当然,他们并没有在最后的系统中使用增强学习后的网络,而
是用了直接通过训练学习到的网络(SL network),理由是RL network输出的走棋缺乏变
化,对搜索不利。
  有意思的是在AlphaGo为了速度上的考虑,只用了宽度为192的网络,而并没有使用最
好的宽度为384的网络(见图2(a)),所以要是GPU更快一点(或者更多一点),
AlphaGo肯定是会变得更强的。
  所谓的0.1秒走一步,就是纯粹用这样的网络,下出有最高置信度的合法着法。这种
做法一点也没有做搜索,但是大局观非常强,不会陷入局部战斗中,说它建模了“棋感
”一点也没有错。我们把DarkForest的走棋网络直接放上KGS就有3d的水准,让所有人都
惊叹了下。可以说,这一波围棋AI 的突破,主要得益于走棋网络的突破。这个在以前是
不可想像的,以前用的是基于规则,或者基于局部形状再加上简单线性分类器训练的走子
生成法,需要慢慢调参数年,才有进步。
  当然,只用走棋网络问题也很多,就我们在DarkForest上看到的来说,会不顾大小无
谓争劫,会无谓脱先,不顾局部死活,对杀出错,等等。 有点像高手不经认真思考的随
手棋。因为走棋网络没有价值判断功能,只是凭“直觉”在下棋,只有在加了搜索之后,
电脑才有价值判断的能力。
  2. 快速走子
  那有了走棋网络,为什么还要做快速走子呢?有两个原因,首先走棋网络的运行速度
是比较慢的,AlphaGo说是3毫秒,我们这里也差不多,而快速走子能做到几微秒级别,
差了1000倍。所以在走棋网络没有返回的时候让CPU不闲着先搜索起来是很重要的,等到
网络返回更好的着法后,再更新对应的著 法资讯。
  其次,快速走子可以用来评估盘面。由于天文数字般的可能局面数,围棋的搜索是毫
无希望走到底的,搜索到一定程度就要对现有局面做个估分。在没有估值网络的时候,
不像国象可以通过算棋子的分数来对盘面做比较精确的估值,围棋盘面的估计得要通过模
拟走子来进行,从当前盘面一路走到底,不考虑岔路地算 出胜负,然后把胜负值作为当
前盘面价值的一个估计。这里有个需要权衡的地方:在同等时间下,模拟走子的品质高,
单次估值精度高但走子速度慢;类比走子速度 快乃至使用随机走子,虽然单次估值精度
低,但可以多模拟几次算平均值,效果未必不好。所以说,如果有一个品质高又速度快的
走子策略,那对于棋力的提高是非 常有帮助的。
  为了达到这个目标,神经网络的模型就显得太慢,还是要用传统的局部特征匹配(
local pattern matching)加线性回归(logistic regression)的方法,这办法虽然不
新但非常好使,几乎所有的广告推荐,竞价排名,新闻排序,都是用的它。与更为传统的
基于规则的方案相比,它在 吸纳了众多高手对局之后就具备了用梯度下降法自动调参的
能力,所以性能提高起来会更快更省心。AlphaGo用这个办法达到了2微秒的走子速度和
24.2%的走子准确率。24.2%的意思是说它的最好预测和围棋高手的下子有0.242的概率是
重合的,相比之下,走棋网络在GPU上用2毫秒能达到 57%的准确率。这里,我们就看到了
走子速度和精度的权衡。
  和训练深度学习模型不同,快速走子用到了局部特征匹配,自然需要一些围棋的领域
知识来选择局部特征。对此AlphaGo只提供了局部特征的数目 (见Extended Table 4),
而没有说明特征的具体细节。我最近也实验了他们的办法,达到了25.1%的准确率和4-5微
秒的走子速度,然而全系统整合下来并没有复现他们的水 平。我感觉上24.2%并不能完全
概括他们快速走子的棋力,因为只要走错关键的一步,局面判断就完全错误了;而图2(b
)更能体现他们快速走子对盘面形势 估计的精确度,要能达到他们图2(b)这样的水准
,比简单地匹配24.2%要做更多的工作,而他们并未在文章中强调这一点。
  在AlphaGo有了快速走子之后,不需要走棋网络和估值网络,不借助任何深度学习和
GPU的帮助,不使用增强学习,在单机上就已经达到了3d 的水准(见Extended Table 7倒
数第二行),这是相当厉害的了。任何使用传统方法在单机上达到这个水准的围棋程式,
都需要花费数年的时间。在AlphaGo之前,Aja Huang曾经自己写过非常不错的围棋程式,
在这方面相信是有很多的积累的。
  3. 估值网络
  AlphaGo的估值网络可以说是锦上添花的部分,从Fig 2(b)和Extended Table 7来
看,没有它AlphaGo也不会变得太弱,至少还是会在7d-8d的水准。少了估值网络,等级分
少了480分,但是少了走棋网络,等级分就会少掉 800至1000分。特别有意思的是,如果
只用估值网络来评估局面(2177),那其效果还不及只用快速走子(2416),只有将两个
合起来才有更大的提 高。我的猜测是,估值网络和快速走子对盘面估计是互补的,在棋
局一开始时,大家下得比较和气,估值网络会比较重要;但在有复杂的死活或是对杀时,
通过快速 走子来估计盘面就变得更重要了。考虑到估值网络是整个系统中最难训练的部
分(需要三千万局自我对局),我猜测它是最晚做出来并且最有可能能进一步提高的。
  关于估值网络训练资料的生成,值得注意的是文章中的附录小字部分。与走棋网络不
同,每一盘棋只取一个样本来训练以避免过拟合,不然对同一对局而 言输入稍有不同而
输出都相同,对训练是非常不利的。这就是为什么需要三千万局,而非三千万个盘面的原
因。对于每局自我对局,取样本是很有讲究的,先用SL network保证走棋的多样性,然后
随机走子,取盘面,然后用更精确的RL network走到底以得到最正确的胜负估计。当然这
样做的效果比用单一网络相比好多少,我不好说。
  一个让我吃惊的地方是,他们完全没有做任何局部死活/对杀分析,纯粹是用暴力训
练法训练出一个相当不错的估值网络。这在一定程度上说明深度卷积网络(DCNN)有自动
将问题分解成子问题,并分别解决的能力。
  另外,我猜测他们在取训练样本时,判定最终胜负用的是中国规则。所以说三月和李
世石对局的时候也要求用中国规则,不然如果换成别的规则,就需要 重新训练估值网络
(虽然我估计结果差距不会太大)。至于为什么一开始就用的中国规则,我的猜测是程式
设计非常方便(我在写DarkForest的时候也是这样 觉得的)。
  4. 蒙特卡罗树搜索
  这部分基本用的是传统方法,没有太多可以评论的,他们用的是带先验的UCT,即先
考虑DCNN认为比较好的着法,然后等到每个着法探索次数多 了,选择更相信探索得来的
胜率值。而DarkForest则直接选了DCNN推荐的前3或是前5的着法进行搜索。我初步试验下
来效果差不多,当然他们的办 法更灵活些,在允许使用大量搜索次数的情况下,他们的
办法可以找到一些DCNN认为不好但却对局面至关重要的着法。
  一个有趣的地方是在每次搜索到叶子节点时,没有立即展开叶子节点,而是等到访问
次数到达一定数目(40)才展开,这样避免产生太多的分支,分散 搜索的注意力,也能
节省GPU的宝贵资源,同时在展开时,对叶节点的盘面估值会更准确些。除此之外,他们
也用了一些技巧,以在搜索一开始时,避免多个执行绪 同时搜索一路变化,这部分我们
在DarkForest中也注意到了,并且做了改进。
  5. 总结
  总的来说,这整篇文章是一个系统性的工作,而不是一两个小点有了突破就能达到的
胜利。在成功背后,是作者们,特别是两位第一作者David Silver和Aja Huang,在博士
阶段及毕业以后五年以上的积累,非一朝一夕所能完成的。他们能做出AlphaGo并享有现
在的荣誉,是实至名归的。
  从以上分析也可以看出,与之前的围棋系统相比,AlphaGo较少依赖围棋的领域知识
,但还远未达到通用系统的程度。职业棋手可以在看过了寥寥 几局之后明白对手的风格
并采取相应策略,一位资深游戏玩家也可以在玩一个新游戏几次后很快上手,但到目前为
止,人工智能系统要达到人类水准,还是需要大量 样本的训练的。可以说,没有千年来
众多棋手在围棋上的积累,就没有围棋AI的今天。
  在AlphaGo中,增强学习(Reinforcement Learning)所扮演的角色并没有想像中那
么大。在理想情况下,我们希望人工智能系统能在对局中动态地适应环境和对手的招式并
且找到办法反制之,但是 在AlphaGo中增强学习更多地是用于提供更多品质更好的样本,
给有监督学习(Supervised Learning)以训练出更好的模型。在这方面增强学习还有很
长的路要走。
  另外,据他们的文章所言,AlphaGo整个系统在单机上已具有了职业水准,若是谷歌
愿意开几万台机器和李世石对决(这对它来说再容易不过了,改个参数就行),相信比赛
会非常精彩。
  下面是根据读者提问做的一些更新。
  问题1:“Alphago的MCTS做rollout的时候,除了使用快速走子,还用了搜寻树的已
有部分,看起来像是AMAF/RAVE反过 来:AMAF是把快速走子的资讯传导到树的其它无关部
分,Alphago是把树的其它无关部分拿来增强快速走子。我怀疑这是不是它棋力比其它
DCNN+MCTS强的原因之一。“
  这个办法在解死活题的文章中出现过,会在一定程度上提高搜索效率,但是提高多少
还不知道。
  问题2:“rollout的走法品质变好可能会导致棋力下降。”
  这里要分两种情况,tree policy和default policy。在AlphaGo的文章里面已经说过
了,tree policy的分布不能太尖,不然在搜索时太过重视一些看起来的好著,可能使得
棋力下降。但是除了这种原因,一般来说tree policy变好棋力还是会变强的。
  default policy这边,即(半)随机走子到最后然后判分,就很复杂了,品质变好未
必对局面能估得更准。default policy需要保证的是每块棋的死活大体正确,不要把死的
棋下成活的或者反之,而对大局观的要求反而没有那么高。双方完全可以配合著把每块棋
下完,然后 转战另一块,而不是说抢在对方前去别处占先手。
  (雷锋网)
http://sports.sohu.com/20160314/n440358534.shtml
作者: birdy590 (Birdy)   2016-03-14 15:44:00
推一个 这篇是目前看过写的最简单而且清楚的而且他已经对论文内的几个要点进行过实际测试有些效果接近 有些实力差很远(估计要需要很多时间调整)
作者: MicroB ( )   2016-03-14 15:59:00
推!这是不是说快走子品质不够导致78手胜率误判呢?但最后又说rollout不能太高 看来AG可能有瓶颈?
作者: birdy590 (Birdy)   2016-03-14 16:05:00
把 MCTS 漏算看成结果的话 前面是一环扣一环 都有可能
作者: goldduck (哥达鸭)   2016-03-14 16:09:00
最后应该是要补安全机制 自爆手不下
作者: birdy590 (Birdy)   2016-03-14 16:10:00
"他们完全没有做任何局部死活/对杀分析" 觉得这点很重要从这里看起来 安全机制是不可能的 因为这和理念背道而驰因为开发 AlphaGo 的目的应该是"让电脑自己学会下围棋"
作者: Uizmp (黑袍法师)   2016-03-14 16:12:00
同意, DM原本的计画还要把棋谱拿掉, 让电脑从零开始学
作者: MicroB ( )   2016-03-14 16:14:00
不过如果有一个死活超过一定量的职棋会走错 他走子网络算的局部死活会不会出问题啊?
作者: birdy590 (Birdy)   2016-03-14 16:17:00
很有可能啊, 跟传统方法有专门设计各式检查的软件相比不想办法再训练个网络补强的确有可能变成弱点
作者: MicroB ( )   2016-03-14 16:22:00
想想AG根本秀哉战法嘛 一堆高手门徒(走子网络)帮他想 然后提供解果给他让他选 只是以前门徒们要几个月所以用暂停大法 现在靠GPU可以缩时用时还比小李少 XD
作者: birdy590 (Birdy)   2016-03-14 16:25:00
楼上比喻挺妙的 只是徒子徒孙不需要高手 只是俗手而已
作者: bbbtri (cycling)   2016-03-14 16:33:00
"如果有一个死活超过一定量的职棋会走错" 样本数应该低到
作者: FloydChen (建构式摸鱼)   2016-03-14 16:33:00
推,这篇是目前最清楚的技术文
作者: bbbtri (cycling)   2016-03-14 16:34:00
不足计吧?除非它跟自己对战时也频错 但这样会影响胜率
作者: MicroB ( )   2016-03-14 16:36:00
他自行对战有25%机率跟职棋一样 假设这走子网络三段好了有一个死活高过半数的三段高手会走错 那他的走子网络可能会误判吧?
作者: birdy590 (Birdy)   2016-03-14 16:39:00
没这么简单 @@ 希望走子网络强 但也要保留足够随机性这就是文章最后补充问题2里面讲的... 真的很复杂 @@
作者: MicroB ( )   2016-03-14 16:43:00
难怪有人说像虚竹+段延庆 虚竹保持弹性 段延庆走子强这一了解真是有点佩服小李了根本是以一打百啊都下到发抖了
作者: birdy590 (Birdy)   2016-03-14 17:01:00
又来一篇新的 "第四局AlphaGo败招的分析"http://zhuanlan.zhihu.com/yuandong/20644427
作者: fallcolor (秋天走了)   2016-03-14 17:04:00
Yuandong Tian真的很不错!不过rollout policy中的default policy论文里有吗?
作者: birdy590 (Birdy)   2016-03-14 17:28:00
default policy应该是他在开发Darkforest的时候自己用的前面有讲到他用 Pachi 的 default policy 替代 rollout
作者: bbbtri (cycling)   2016-03-14 18:05:00
作者好强喔 不过birdy版友要不要直接把文章发版上?
作者: birdy590 (Birdy)   2016-03-14 18:13:00
我不敢确定转载有没有问题呀 转连结是最保签的
作者: smellgood   2016-03-14 19:52:00
good!
作者: darkseer   2016-03-15 02:04:00
感谢birdy590大,官方外的围棋AI最高看法 :O
作者: H45 (!H45)   2016-03-15 09:01:00
推一个,够专业
作者: sunev (Veritas)   2016-03-15 09:28:00
第四局田渊栋的分析,有人转到板上了 #1MvjmKPj

Links booklink

Contact Us: admin [ a t ] ucptt.com