如何搭建围棋算法间国际围棋对战平台台

DeepMind 研发的围棋 AI AlphaGo 是如何下棋的?
看到了正在进行的圆桌,想邀请嘉宾来讲讲它的工作原理如何?其中应用了哪些技术?相关问题:人类有什么破解的方法?
左右互搏,青出于蓝而胜于蓝?—阿尔法狗原理解析这些天都在没日没夜地关注一个话题,谷歌人工智能程序AlphaGo(国内网友亲切地称为“阿尔法狗”)以5:0击败欧洲职业围棋冠军樊麾二段,并在和世界冠军的比赛中2:0领先。什么!!19年前计算机击败国际象棋冠军卡斯帕罗夫的情景还历历在目,现在计算机又要来攻克围棋了吗!?虚竹在天龙八部里自填一子,无意中以“自杀”破解“珍笼”棋局,逍遥子方才亲传掌门之位。难道以后“阿尔法狗”要出任逍遥派掌门了?1933年,东渡日本19岁的吴清源迎战当时的日本棋坛霸主、已经60岁的本因坊秀哉,开局三招即是日本人从未见过的三三、星、天元布阵,快速进击逼得对方连连暂停“打卦”和弟子商量应对之策。随后以“新布局”开创棋坛新纪元。难道阿尔法狗会再造一个“新新布局”?作为一个关心人工智能和人类命运的理科生,近些天刷了好些报道,记者们说“阿尔法狗是个‘价值神经网络’和‘策略神经网’络综合蒙特卡洛搜索树的程序”,但我觉得光知道这些概念是不够的。我想看看“阿尔法狗”的庐山真面目。准备好棋盘和脑容量,一起来探索吧?围棋棋盘是19x19路,所以一共是361个交叉点,每个交叉点有三种状态,可以用1表示黑子,-1表示白字,0表示无子,考虑到每个位置还可能有落子的时间、这个位置的气等其他信息,我们可以用一个361 * n维的向量来表示一个棋盘的状态。我们把一个棋盘状态向量记为s。当状态s下,我们暂时不考虑无法落子的地方,可供下一步落子的空间也是361个。我们把下一步的落子的行动也用361维的向量来表示,记为a。这样,设计一个围棋人工智能的程序,就转换成为了,任意给定一个s状态,寻找最好的应对策略a,让你的程序按照这个策略走,最后获得棋盘上最大的地盘。如果你想要设计一个特别牛逼惊世骇俗的围棋程序,你会从哪里开始呢?对于在谷歌DeepMind工作的黄士杰和他的小伙伴而言,第一招是:“深度卷积神经网络”深度卷积神经网络早在98年就攻克了手写数字识别,近些年在人脸识别、图像分类、天气预报等领域无往而不利,接连达到或超过人类的水平,是深度学习火遍大江南北的急先锋。我们现在看到的Picasa照片自动分类,Facebook照片识别好友,以及彩云小译同声传译(软广出现,不要打我)都是此技术的应用。这等天赐宝物,如果可以用来下围棋,岂不是狂拽酷炫吊炸天?所以2015年黄士杰发表在ICLR的论文[3]一上来就使出了“深度神经网络”的杀招,从网上的围棋对战平台KGS(外国的qq游戏大厅)可以获得人类选手的围棋对弈的棋局。观察这些棋局,每一个状态s,都会有一个人类做出的落子a,这不是天然的训练样本&s,a&吗?如此可以得到3000万个样本。我们再把s看做一个19x19的二维图像(具体是19x19 x n,n是表示一些其他feature),输入一个卷积神经网络进行分类,分类的目标就是落子向量a’,不断训练网络,尽可能让计算机得到的a’接近人类高手的落子结果a,不就得到了一个模拟人类棋手下围棋的神经网络了吗?于是我们得到了一个可以模拟人类棋手的策略函数P_human,给定某个棋局状态s,它可以计算出人类选手可能在棋盘上落子的概率分布a = P_human(s),如下图:红圈就是P_human觉得最好的落子方案。每一步都选择概率最高的落子,对方对子后再重新计算一遍,如此往复就可以得到一个棋风类似人类的围棋程序。这个基于“狂拽酷炫”深度学习的方案棋力如何呢?不咋地。黄士杰说P_human已经可以和业余6段左右的人类选手过招,互有胜负,但还未能超过当时最强的电脑程序CrazyStone[1,5],距离人类顶尖玩家就差得更远了。所以,为求更进一步,黄士杰打算把P_human和CrazyStone的算法结合一下,师夷长技以制夷,先击败所有的其他围棋AI再说。等等,CrazyStone的算法是什么?哦,那个算法是黄士杰的老师Remi Coulum在2006年对围棋AI做出的另一个重大突破:“MCTS,蒙特卡洛搜索树”蒙特卡洛搜索树(Monte-Carlo Tree Search)是一种“大智若愚”的方法。面对一个空白棋盘S0,黄士杰的老师Coulum最初对围棋一无所知,便假设所有落子方法分值都相等,设为1。然后扔了一个骰子,从361种落子方法中随机选择一个走法a0。Coulum想象自己落子之后,棋盘状态变成S1,然后继续假设对手也和自己一样二逼,对方也扔了一个筛子,随便瞎走了一步,这时棋盘状态变成S2,于是这两个二逼青年一直扔骰子下棋,一路走到Sn,最后肯定也能分出一个胜负r,赢了就r记为1,输了则为0,假设这第一次r=1。这样Coulum便算是在心中模拟了完整的一盘围棋。Coulum心想,这样随机扔骰子也能赢?运气不错啊,那把刚才那个落子方法(S0,a0)记下来,分值提高一些:新分数= 初始分+ r我刚才从(S0, a0)开始模拟赢了一次,r=1,那么新分数=2,除了第一步,后面几步运气也不错,那我把这些随机出的局面所对应落子方法(Si,ai)的分数都设为2吧。然后Coulum开始做第二次模拟,这次扔骰子的时候Coulum对围棋已经不是一无所知了,但也知道的不是太多,所以这次除(S0, a0)的分值是2之外,其他落子方法的分数还是1。再次选择a0的概率要比其他方法高一点点。那位假想中的二逼对手也用同样的方法更新了自己的新分数,他会选择一个a1作为应对。如法炮制,Coulum又和想象中的对手又下了一盘稍微不那么二逼的棋,结果他又赢了,Coulum于是继续调整他的模拟路径上相应的分数,把它们都+1。随着想象中的棋局下得越来越多,那些看起来不错的落子方案的分数就会越来越高,而这些落子方案越是有前途,就会被更多的选中进行推演,于是最有“前途”的落子方法就会“涌现”出来。最后,Coulum在想象中下完10万盘棋之后,选择他推演过次数最多的那个方案落子,而这时,Coulum才真正下了第一步棋。蒙特卡洛搜索树华丽转身为相当深刻的方法,可以看到它有两个很有意思的特点:1)没有任何人工的feature,完全依靠规则本身,通过不断想象自对弈来提高能力。这和深蓝战胜卡斯帕罗夫完全不同,深蓝包含了很多人工设计的规则。MCTS靠的是一种类似遗传算法的自我进化,让靠谱的方法自我涌现出来。让我想起了卡尔文在《大脑如何思维》中说的思维的达尔文主义[6]。2)MCTS可以连续运行,在对手思考对策的同时自己也可以思考对策。Coulum下完第一步之后,完全不必要停下,可以继续进行想象中的对弈,直到对手落子。Coulum随后从对手落子之后的状态开始计算,但是之前的想象中的对弈完全可以保留,因为对手的落子完全可能出现在之前想象中的对弈中,所以之前的计算是有用的。这就像人在进行对弈的时候,可以不断思考,不会因为等待对手行动而中断。这一点Coulum的程序非常像人,酷毙了。但黄士杰很快意识到他老师的程序仍然有局限:初始策略太简单。我们需要更高效地扔骰子。如何更高效的扔骰子呢?用P_human()来扔。黄士杰改进了MCTS,一上来不再是二逼青年随机掷骰子,而是先根据P_human的计算结果来得到a可能的概率分布,以这个概率来挑选下一步的动作。一次棋局下完之后,新分数按照如下方式更新:新分数= 调整后的初始分+ 通过模拟得到的赢棋概率如果某一步被随机到很多次,就应该主要依据模拟得到的概率而非P_human。所以P_human的初始分会被打个折扣:调整后的初始分= P_human/(被随机到的次数+ 1)这样就既可以用P_human快速定位比较好的落子方案,又给了其他位置一定的概率。看起来很美,然后实际操作中却发现:“然并卵”。因为,P_human()计算太慢了。一次P_human()计算需要3ms,相对于原来随机扔骰子不到1us,慢了3000倍。如果不能快速模拟对局,就找不到妙招,棋力就不能提高。所以,黄士杰训练了一个简化版的P_human_fast(),把神经网络层数、输入特征都减少,耗时下降到了2us,基本满足了要求。先以P_human()来开局,走前面大概20多步,后面再使用P_human_fast()快速走到最后。兼顾了准确度和效率。这样便综合了深度神经网络和MCTS两种方案,此时黄士杰的围棋程序已经可以战胜所有其他电脑,虽然距离人类职业选手仍有不小的差距,但他在2015年那篇论文的最后部分信心满满的表示:“我们围棋软件所使用的神经网络和蒙特卡洛方法都可以随着训练集的增长和计算力的加强(比如增加CPU数)而同步增强,我们正前进在正确的道路上。”看样子,下一步的突破很快就将到来。同年2月,黄士杰在Deepmind的同事在顶级学术期刊nature上发表了“用神经网络打游戏”的文章[2]。这篇神作,为进一步提高MCTS的棋力,指明了前进的新方向:“左右互搏,自我进化”红白机很多人小时候都玩过,你能都打通吗?黄士杰的同事通过“强化学习”方法训练的程序在类似红白机的游戏机上打通了200多个游戏,大多数得分都比人类还好。“强化学习”是一类机器学习方法,Agent通过和环境s的交互,选择下一步的动作a,这个动作会影响环境s,给Agent一个reward,Agent然后继续和环境交互。游戏结束的时候,Agent得到一个最后总分r。这时我们把之前的环境状态s、动作a匹配起来就得到了一系列&s,a&,设定目标为最后的总得分r,我们可以训练一个神经网络去拟合在状态s下,做动作a的总得分。下一次玩游戏的时候,我们就可以根据当前状态s,去选择最后总得分最大的动作a。通过不断玩游戏,我们对&s,a&下总得分的估计就会越来越准确,游戏也玩儿得越来越好。打砖块游戏有一个秘诀:把球打到墙的后面去,球就会自己反弹得分。强化学习的程序在玩了600盘以后,学到这个秘诀:球快要把墙打穿的时候评价函数v的分值就会急剧上升。黄士杰考虑给围棋也设计一个评价函数v(s),在P_human()想象自己开局走了20多步之后,不需要搜索到底,如果有一个v(s)可以直接判断是否能赢,得到最后的结果r,这样肯定能进一步增加MCTS的威力。黄士杰已经有了国外的qq游戏大厅KGS上的对局,但是很遗憾这些对局数量不够,不足以得到局面评价函数v。但是没关系,我们还可以左右互搏自对弈创造新的对局。机器学习的开山鼻祖Samuel早在1967年就用自对弈的方法来学习国际跳棋[7],而之前的蒙特卡洛搜索树也是一个自对弈的过程。但是现在黄士杰不仅有一个从人类对弈中学习出的P_human这样一个高起点,而且有一个神经网络可以从对弈样本中学习,有理由相信这次会有更好的结果。先用P_human和P_human对弈,比如1万局,就得到了一万个新棋谱,加入到训练集当中,训练出P_human_1。然后再让P_human_1和P_human_1对局,得到另外一万个新棋谱,这样可以训练出P_human_2,如此往复,可以得到P_human_n。P_human_n得到了最多的训练,棋力理应比原来更强。我们给最后这个策略起一个新名字:P_human_plus。这时,再让P_human_plus和P_human对局,在不用任何搜索的情况下胜率可达80%,不加任何搜索策略的P_human_plus和开源的MCTS相比也有85%的胜率。自对弈方法奏效了。既然P_human_plus这么强,我们先代入到MCTS中试试,用P_human_plus来开局,剩下的用P_human_fast。可惜,这样的方法棋力反而不如用P_human。黄士杰认为是因为P_human_plus走棋的路数太集中,而MCTS需要发散出更多的选择才好。看来,P_human_plus练功还是太死板,还没有进入无招胜有招的境界。没关系,黄士杰还有局面评价函数v(s)这一招,有了v(s),如果我可以一眼就看到“黑棋大势已去”,我就不用MCTS在想象中自我对弈了。但考虑到P_human_plus的招法太过集中,黄士杰在训练v( )的时候,开局还是先用P_human走L步,这样有利于生成更多局面。黄士杰觉得局面还不够多样化,为了进一步扩大搜索空间,在L+1步的时候,干脆完全随机掷一次骰子,记下这个状态SL+1,然后后面再用P_human_plus来对弈,直到结束获得结果r。如此不断对弈,由于L也是一个随机数,我们就得到了开局、中盘、官子不同阶段的很多局面s,和这些局面对应的结果r。有了这些训练样本&s,r&,还是使用神经网络,把最后一层的目标改成回归而非分类,黄士杰就可以得到一个v( )函数,输出赢棋的概率。v( )可以给出下一步落子在棋盘上任意位置之后,如果双方都使用P_human_plus来走棋,我方赢棋的概率。如果训练v()的时候全部都使用P_human不用P_human_plus呢?实验表明基于P_human_plus训练的v,比基于P_human训练的v’,棋力更强。强化学习确实有效。万事俱备,只欠东风。准备好P_human(),MCTS,以及评价函数v(),黄士杰和小伙伴们继续进击,向着可以和人类专业选手过招的围棋AI前进:“阿尔法狗”黄士杰准备在MCTS框架之上融合局面评估函数v()。这次还是用P_human作为初始分开局,每局选择分数最高的方案落子,下到第L步之后,改用P_human_fast把剩下的棋局走完,同时调用v(SL),评估局面的获胜概率。然后按照如下规则更新整个树的分数:新分数= 调整后的初始分+ 0.5 * 通过模拟得到的赢棋概率 + 0.5 * 局面评估分前两项和原来一样,如果待更新的节点就是叶子节点,那局面评估分就是v(SL)。如果是待更新的节点是上级节点,局面评估分是该节点所有叶子节点v()的平均值。如果v()表示大局观,“P_human_fast模拟对局”表示快速验算,那么上面的方法就是大局观和快速模拟验算并重。如果你不服,非要做一个0.5: 0.5之外的权重,黄士杰团队已经实验了目前的程序对阵其他权重有95%的胜率。以上,便是阿尔法狗的庐山真面目。上图演示了阿尔法狗和樊麾对弈时的计算过程,阿尔法狗执黑,红圈是阿尔法狗实际落子的地方。1、2、3和后面的数字表示他想象中的之后双方下一步落子的地方。白色方框是樊麾的实际落子。在复盘时,樊麾觉得位置1的走法更好。深度学习、蒙特卡洛搜索树,自我进化三招齐出,所有其他围棋ai都毫无还手之力。99%的胜率不说,“阿尔法狗”还可以在让四子的情况下以77%的胜率击败crazystone。“阿尔法狗”利用超过170个GPU,粗略估算超过800万核并行计算,不仅有前期训练过程中模仿人类,自我对弈不断进化,还有实战时的模拟对局可以实时进化,已经把现有方法发挥到了极限,是目前人工智能领域绝对的巅峰之作。后记围棋是NP-hard问题,如果用一个原子来存储围棋可能的状态,把全宇宙的原子加起来都不够储存所有的状态。于是我们把这样的问题转换为寻找一个函数P,当状态为S时,计算最优的落子方案a = P(s)。我们看到,无论是“狂拽酷炫”的深度学习,还是“大智若愚”的MCTS,都是对P(s)的越来越精确的估计,但即使引入了“左右互搏”来强化学习,黄士杰和团队仍然做了大量的细节工作。所以只有一步一个脚印,面对挑战不断拆解,用耐心与细心,还有辛勤的汗水,才能取得一点又一点的进步,而这些进步积累在一起,终于让计算机达到并超过了人类职业选手的水平。因为一盘棋走一步需要3ms(P_human_plus遍历整个棋盘的时间),谷歌用大规模集群进行并行化计算,自我对弈3000万盘棋生成训练集只需要一天左右的时间[4],所以如果对弈更多棋局可以提高棋力的话,黄士杰他们早就做了。目前的方案可能已经达到了CNN网络能力的极限。完整的阿尔法狗不仅需要生成训练集,还要用训练集来生成局面评估函数v(),而这还使用了两周时间,一局比赛需要花掉4个小时,自我对局速度不够快,这也许是阿尔法狗并没有能够完全使用强化学习,而仅仅是在整个过程的一小部分使用左右互搏的原因。左右互博用的还不够多,这是一个遗憾。如果存在一个“围棋之神”,一个已经穷尽了所有的围棋步法的“上帝”,那他每一步都是最优应对。一些顶尖棋手在接受采访时表示[8],“围棋之神”对战人类选手可能还有让4子的空间,也就是说,就算下赢了人类,计算机也还有很大进步的空间。面对一个如此高难度的问题,计算机和人类都无法在有限时间内找到完全的规律(柯洁和李世乭比赛是一人有3小时时间思考,阿尔法狗今年3月和李世乭进行的比赛则是每人2小时)。计算机和人都是在对问题做抽象,然后搜索最佳策略。要下好围棋所需要的能力已经接近人类智力的极限:要有大局观、要懂得取舍、还要会精打细算,治理一个国家也不过如此。计算机可以学会围棋,就能学会很多一样难度的技能。在未来,也许围棋、自动驾驶、同声传译(「彩云小译」已经开始公测,)都会被一一攻克。甚至在数论、量子场论等领域,深度学习和搜索相结合,可能也会带给我们更多惊喜,比如攻克“哥德巴赫猜想”。那么,人工智能是否真的会很快登顶呢?虽然在智力方面AI有希望登峰造极,但高智商只是人类众多能力的一个方面。吴清源先生在方寸之间纵横无敌,但仍然漂泊一生,被命运推着前进。早年他做段祺瑞的门客,棋盘上把段祺瑞打的落花流水,弄得下人都没有早饭吃;后来东渡日本,三易国籍,留下许多遗憾。如果把“强人工智能”比作一个天才少年,虽然智商爆表,但其他方面还需要我们悉心加以引导。创造出“德才兼备,匡扶济世”的人工智能,才是我辈真正应该努力实现的目标。一起加油吧,科学少年们!To the infinity and beyond !参考文献:1, EfficientSelectivity and Backup Operators in Monte-Carlo Tree Search2, Human-level control through deep reinforcementlearning3, Move Evaluation In GO Using Deep Convolutional Neural Networks4. Masteringthe Game of Go with Deep Neural Networks and Tree Search5. A Survey ofMonte Carlo Tree Search Methods6. 大脑如何思维—智力演化的今昔7. Some Studies in Machine LearningUsing the Game of Checkers.II-Recent Progress8.-------------------------------------以上这篇文章是我在1月28日nature论文基础上对alpha go的理解,现在又过了5个月,并且alpha go已经击败了李世石,我猜测其工作原理会有较大改进,如果有时间,我会贴出我觉得它可能的改进方向。欢迎转载,请保留作者信息。最后的最后,允许插播我司的广告一则:———————————————————-彩云天气正在招聘中(前端、后端、运营),我们在毗邻皇家园林的两层别墅式公寓办公,有钢琴和温水泳池。需要你的帮助,我们才能每天稳定快速的计算出上亿次天气预报,用人工智能帮到更多普通大众。
我来贡献一点干货和八卦~
AlphaGo的第一作者David Silver还在MIT做post-doc的时候(也有可能是visit?),曾经和我们组师兄合作利用机器学习和蒙特卡罗树搜索玩《文明2》。当时也有不小的轰动:有兴趣的同学可以参考项目主页和论文 。可以翻墙youtube的同学还可以看到一段游戏视频。作为其他答案的补充,下面浅显地针对性地介绍一下蒙特卡罗树搜索(MCTS)。(***本文图片来源DeepMind和师兄论文)一、为什么要用搜索?-------由于状态数有限和不存在随机性,象棋和五子棋这类游戏理论上可以由终局自底向上的推算出每一个局面的胜负情况,从而得到最优策略。例如五子棋就被验证为先手必胜
。遗憾的是,由于大部分博弈游戏状态空间巨大(围棋约为),严格计算评估函数是办不到的。于是人们设计了 (启发式的) 搜索算法,一句话概括如下:由当前局面开始,尝试看起来可靠的行动,达到终局或一定步数后停止,根据后续局面的优劣反馈,选择最优行动。通俗的说就是“手下一着子,心想三步棋”、“三思而后行”的意思。二、哪些是“看起来可靠”的行动?怎么评价局面的优劣?-------这里就要引入游戏论和强化学习里面的概念了。在数学上,“最优策略”和“局面判断”可以被量化成为函数,。这里表示局面状态,表示下一步(走子)行动。在强化学习里,两者被称为 策略函数(policy function) 和 局面函数(value function),前者衡量在局面下执行能带来的价值,后者衡量某一局面的价值,越大的值表示对当前行动的选手越有利。Q和V函数是对我们所谓的“棋感”和“大局观”的量化。有了这两个估值函数,在搜索的时候我们尽量选择估值更大的行动,达到缩小思考范围(减少搜索分支)的目的。同时即使在未达到终局的情况下,我们也可以依靠局面函数对当前局势优劣做判断。那么如何得到精确的估值函数就很重要了。由于不能通过枚举状态空间来精确计算Q和V,传统的做法是人为的设计估值。例如五子棋的局面可以依靠计算“三连”、“四连”等特征的数量乘以相应的分值来估算。这里就涉及到识别特征和衡量特征分值两个问题。对于更加复杂的游戏(例如文明、围棋等),现代的做法是利用机器学习和大量数据,自动的找到特征,同时拟合出估值函数。AlphaGo利用深度学习达到了该目的。三、蒙特卡洛树搜索(MCTS)-------蒙特卡洛树搜索是集以上技术于一身的搜索框架,通过反复模拟和采样对局过程(称为Rollout)来探索状态空间。可以看出它的特点是非常容易并行、可任何时候停止(时间和收益上的平衡)、引入了随机性采样而减小估值错误带来的负面影响,并且可以在随机探索的过程中,结合强化学习(Reinforcement Learning),“自学”式的调整估值函数,让算法越来越聪明。直观一点的图示如下:(a) 从当前状态(带有随机性)的模拟对局,该过程可以并行:(b) 通过采样和估值结果,选择最优行动,并重复执行这个过程:(c) 如果选择强化学习,则根据结果更新估值函数的参数(c) 如果选择强化学习,则根据结果更新估值函数的参数
有兴趣的同学可以阅读AlphaGo或其他相关论文。四、总结-------AlphaGo结合了3大块技术:先进的搜索算法、机器学习算法(即强化学习),以及深度神经网络。这三者的关系大致可以理解为:蒙特卡洛树搜索 (MCTS) 是大框架,是许多牛逼博弈AI都会采用的算法强化学习 (RL) 是学习方法,用来提升AI的实力深度神经网络 (DNN) 是工具,用来拟合局面评估函数和策略函数这些都不是AlphaGo或者DeepMind团队首创的技术。但是强大的团队将这些结合在一起,配合Google公司强大的计算资源,成就了历史性的飞跃。一些个人见解:MCTS 、RL 和 DNN这三者,前两者让具有自学能力、并行的博弈算法成为可能,后者让“量化评估围棋局面”成为了可能(这个大神的里已经解释了)。对于AlphaGo来说,这每一个模块都是必要的,DeepMind论文中已经展示了各个模块对于棋力的影响:五、RL / MCTS 的其他应用-------除了最开始提到的《文明2》游戏和围棋,MCTS和RL还可以应用到各种博弈、游戏场景下。因为评论里有不少讨论,这里增加几个有意思的干货:Flappy Bird:不知道大家还记不记得这个曾近很火的让人抓狂的游戏,有人利用强化学习让AI 从0 进化到了100多分: 星际母巢之战AI:,曾经得过AI比赛冠军。飞龙甩得飞起 (主页有youtube视频,需翻墙)红白机游戏:DeepMind在围棋之前利用RL和DNN玩红白机小游戏,同样在《自然》杂志上发表 。其他小八卦作为论文第一作者的David Silver,整个Phd都投身在了蒙特卡罗搜索、计算机围棋和强化学习的领域。十年磨一剑。AlphaGo的成功离不开团队和个人兢兢业业的努力。据说DeepMind CEO Hassabis 和 David是一对大学时期的好基友?David也是因为Hassabis教他围棋而入了这个坑..(?)参考文献-------[1] [2] [3] [4] [5]
谷歌DeepMind宣布他们研发的神经网络围棋AI,AlphaGo,在2015年10月首次5:0战胜了人类职业选手欧洲围棋冠军Fan Hui二段。这篇论文由David Silver等完成。里面的技术是出于意料的简单却又强大。为了方便不熟悉技术的小白理解,这里是我对系统工作原理的解读。下面主要编译与: ,原作者是SpinPunch CTO DAN MAAS。本文首发微信公众号“董老师在硅谷”(donglaoshi-123)深度学习“深度学习”是指多层的人工神经网络和训练它的方法。一层神经网络把大量矩阵数据作为输入,通过非线性激活方法取权重,再产生另一个数据集合作为输出。这就像生物神经大脑的工作机理一样,通过合适的矩阵数量,多层组织链接一起,形成神经网络“大脑”进行精准复杂的处理,就像人们识别物体标注图片一样。虽然神经网络在几十年前就有了,直到最近才形势明朗。这是因为他们需要大量的“训练”去发现矩阵中的数字价值。对早期研究者来说,想要获得不错效果的最小量训练都远远超过计算能力和能提供的数据的大小。但最近几年,一些能获取海量资源的团队重现挖掘神经网络,就是通过“大数据”技术来高效训练。两个大脑AlphaGo是通过两个不同神经网络“大脑”合作来改进下棋。这些大脑是多层神经网络跟那些Google图片搜索引擎识别图片在结构上是相似的。它们从多层启发式二维过滤器开始,去处理围棋棋盘的定位,就像图片分类器网络处理图片一样。经过过滤,13 个完全连接的神经网络层产生对它们看到的局面判断。这些层能够做分类和逻辑推理。这些网络通过反复训练来检查结果,再去校对调整参数,去让下次执行更好。这个处理器有大量的随机性元素,所以我们是不可能精确知道网络是如何“思考”的,但更多的训练后能让它进化到更好。第一大脑: 落子选择器 (Move Picker)AlphaGo的第一个神经网络大脑是“监督学习的策略网络(Policy Network)” ,观察棋盘布局企图找到最佳的下一步。事实上,它预测每一个合法下一步的最佳概率,那么最前面猜测的就是那个概率最高的。你可以理解成“落子选择器”。落子选择器是怎么看到棋盘的?数字表示最强人类选手会下在哪些地方的可能。团队通过在KGS(网络围棋对战平台)上最强人类对手,百万级的对弈落子去训练大脑。这就是AlphaGo最像人的地方,目标是去学习那些顶尖高手的妙手。这个不是为了去下赢,而是去找一个跟人类高手同样的下一步落子。AlphaGo落子选择器能正确符合57%的人类高手。(不符合的不是意味着错误,有可能人类自己犯的失误)更强的落子选择器AlphaGo系统其实需要两个额外落子选择器“大脑”。一个是“强化学习的策略网络(Policy Network)”,通过百万级别模拟对局来完成。姑且称之为更强的选择器。对比基本的训练,那只是教网络去模仿单一的人类落子,高级训练会与每一个模拟棋局下到底,教网络最可能赢的下一手。Sliver团队通过更强的落子选择器总结了百万级训练棋局,比他们之前版本又更新改进了不少。如果就只用这种落子选择器已经是强大的对手了,可以到业余棋手的水平,或者说跟之前最强的围棋AI媲美。这里重点是这种落子选择器不会去“读”。它就是简单审视从单一棋盘位置,再提出从那个位置分析出来的落子。它不会去模拟任何未来的走法,展示了朴素的深度神经网络学习的力量。更快的落子选择器AlphaGo当然团队没有在这里止步。下面我会阐述是如何将阅读能力赋予AI的。为了做到这一点,他们需要更快版本的落子选择器大脑。越强的版本在耗时上越久-为了产生一个不错的落子也足够快了,但“阅读结构”需要去检查几千种落子可能性才能做决定。Silver团队建立简单的落子选择器去做出“快速阅读”的版本,他们称之为“滚动网络”。简单版本是不会看整个19*19的棋盘,但会在对手之前下的和新下的棋子中考虑,观察一个更小的窗口。去掉部分落子选择器大脑会损失一些实力,但轻量级版本能够比之前快1000倍,这让“阅读结构”成了可能。第二大脑:棋局评估器 (Position Evaluator)AlphaGo的第二个大脑相对于落子选择器是回答另一个问题。不是去猜测具体下一步,它预测每一个棋手赢棋的可能,在给定棋子位置情况下。这“局面评估器”就是论文中提到的“价值网络(Value Network)”,通过整体局面判断来辅助落子选择器。这个判断仅仅是大概的,但对于阅读速度提高很有帮助。通过分类潜在的未来局面的“好”与“坏”,AlphaGo能够决定是否通过特殊变种去深入阅读。如果局面评估器说这个特殊变种不行,那么AI就跳过阅读在这一条线上的任何更多落子。局面评估器是怎么看这个棋盘的。深蓝色表示下一步有利于赢棋的位置。局面评估器也通过百万级别的棋局做训练。Silver团队通过 复制两个AlphaGo的最强落子选择器,精心挑选随机样本创造了这些局面。这里AI 落子选择器在高效创建大规模数据集去训练局面评估器是非常有价值的。这种落子选择器让大家去模拟继续往下走的很多可能,从任意给定棋盘局面去猜测大致的双方赢棋概率。而人类的棋局还不够多恐怕难以完成这种训练。增加阅读这里做了三个版本的落子选择大脑,加上局面评估大脑,AlphaGo可以有效去阅读未来走法和步骤了。阅读跟大多数围棋AI一样,通过蒙特卡洛树搜索(MCTS)算法来完成。但AlphaGo 比其他AI都要聪明,能够更加智能的猜测哪个变种去探测,需要多深去探测。蒙特卡洛树搜索算法如果拥有无限的计算能力,MCTS可以理论上去计算最佳落子通过探索每一局的可能步骤。但未来走法的搜索空间对于围棋来说太大了(大到比我们认知宇宙里的粒子还多),实际上AI没有办法探索每一个可能的变种。MCTS做法比其他AI有多好的原因是在识别有利的变种,这样可以跳过一些不利的。Silver团队让AlphaGo装上MCTS系统的模块,这种框架让设计者去嵌入不同的功能去评估变种。最后马力全开的AlphaGo系统按如下方式使用了所有这些大脑。1. 从当前的棋盘布局,选择哪些下一步的可能性。他们用基础的落子选择器大脑(他们尝试使用更强的版本,但事实上让AlphaGo更弱,因为这没有让MCTS提供更广阔的选择空间)。它集中在“明显最好”的落子而不是阅读很多,而不是再去选择也许对后来有利的下法。2. 对于每一个可能的落子,评估质量有两种方式:要么用棋盘上局面评估器在落子后,要么运行更深入蒙特卡罗模拟器(滚动)去思考未来的落子,使用快速阅读的落子选择器去提高搜索速度。AlphaGo使用简单参数,“混合相关系数”,将每一个猜测取权重。最大马力的AlphaGo使用 50/50的混合比,使用局面评估器和模拟化滚动去做平衡判断。这篇论文包含一个随着他们使用插件的不同,AlphaGo的能力变化和上述步骤的模拟。仅使用独立大脑,AlphaGo跟最好的计算机围棋AI差不多强,但当使用这些综合手段,就可能到达职业人类选手水平。AlphaGo的能力变化与MCTS的插件是否使用有关。这篇论文还详细讲了一些工程优化:分布式计算,网络计算机去提升MCTS速度,但这些都没有改变基础算法。这些算法部中分精确,部分近似。在特别情况下,AlphaGo通过更强的计算能力变的更强,但计算单元的提升率随着性能变强而减缓。优势和劣势我认为AlphaGo在小规模战术上会非常厉害。它知道通过很多位置和类型找到人类最好的下法,所以不会在给定小范围的战术条件下犯明显错误。但是,AlphaGo有个弱点在全局判断上。它看到棋盘式通过5*5金字塔似的过滤,这样对于集成战术小块变成战略整体上带来麻烦,同样道理,图片分类神经网络往往对包含一个东西和另一个的搞不清。比如说围棋在角落上一个定式造成一个墙或者引征,这会剧烈改变另一个角上的位置估值。就像其他的基于MCTS的AI, AlphaGo对于需要很深入阅读才能解决的大势判断上,还是麻烦重重的,比如说大龙生死劫。AlphaGo 对一些故意看起来正常的局也会失去判断,天元开盘或者少见的定式,因为很多训练是基于人类的棋局库。我还是很期待看到AlphaGo和李世石9段的对决!我预测是:如果李使用定式,就像跟其他职业棋手的对决,他可能会输,但如果他让AlphaGo陷入到不熟悉情形下,他可能就赢。参考资料:Nature 论文:--------------------报名翻译:关注如下我的微信公众号“董老师在硅谷”,关注硅谷趋势,一起学习成长。
AlphaGo赢了,担心找不到工作,吓得赶紧去读了nature的论文。Background:首先一切机器学习都是存在y=f(x),给了大量的x和y,来学习这个f的过程,就叫做训练。输出y是自己规定的,可以取一个值或者一个矩阵。AlphaGo也是这个过程。其他答主提到的policy network和value network实际上都是卷积神经网络,根据这里功能不同起了不同的名字。那么什么是卷积神经网络呢?上面是最早的卷积神经网络LeNet5,多用来处理图片等,用一层一层的滤波器处理最后得到输出,这里也是把围棋棋盘当作图片来处理的。上面是最早的卷积神经网络LeNet5,多用来处理图片等,用一层一层的滤波器处理最后得到输出,这里也是把围棋棋盘当作图片来处理的。------------------------------------------正文:根据文章里所说,阿法狗的训练分为3步:1)使用监督学习的方法训练一个policy network,记为,同时做一个简化版,记为2)使用强化学习(RL)继续训练policy network,记为3)训练一个value network那么这三步是什么意思呢?1、训练policy network上面我们卷积神经网络是机器学习的一种手段,用来寻找x和y之间的关系。第一步的policy network的输入数据来自KGS的三千万个棋局,输出是人类是怎么下子的。把输出设置为矩阵,得到的就是一个概率分布上面我们卷积神经网络是机器学习的一种手段,用来寻找x和y之间的关系。第一步的policy network的输入数据来自KGS的三千万个棋局,输出是人类是怎么下子的。把输出设置为矩阵,得到的就是一个概率分布,即在当前状况(state)s下采取行动(action) a的情况下人类落子的概率分布。就是输入一个棋局,得出人可能怎么下。简化输入特征参量训练,得到网络。2 使用强化学习(RL)强化学习的意思是当我们执行某个操作,并不能立即得到结果,需要不停摸索和反馈。这里RL采取和policy network完全相同的结构,初始参数设置为policy network的参数,然后自己和自己下棋(心好累),根据最终的胜负反馈调节网络参数,得到网络3训练一个value network前面得到policy网络的输出是个概率矩阵,这里value network的结构和policy大致相同,但是输出的是单个值,即当前这个位置的值(奖励?价值?大致这个意思)。输入采用第二部RL的输入,输出也采用RL最后胜负的积分,来训练这个网络。前面得到policy网络的输出是个概率矩阵,这里value network的结构和policy大致相同,但是输出的是单个值,即当前这个位置的值(奖励?价值?大致这个意思)。输入采用第二部RL的输入,输出也采用RL最后胜负的积分,来训练这个网络。到此为止训练阶段已经完成,下面在战斗的时候(事实上在训练过程应该也用到)蒙特卡洛树搜索(MCTS)MCTS有四个步骤:MCTS有四个步骤:挑选一个叶子节点;往下扩展一个节点;仿真沿这个节点运行下去的结果;反馈。实际上上面的卷积网络与MCTS的结合就在挑选节点上。(懒得输公式我要贴图了!)公式如下(不想看公式的直接跳到下面结论):也就是决策函数,等于取得最大的action value和概率(也就是policy network的值)/(仿真节点访问次数+1).那么action value是啥等于采取行动a所得的Value()的均值,那么是啥呢等于value network的值和这次仿真到结尾的结果zL等于value network的值和这次仿真到结尾的结果zL最后的落子的选择是多次仿真后policy network和value network的加权值。实际上中间训练的其他神经网络也有用到,并不止policy和value两个network。结论:AlphaGo的工作原理就是利用卷积神经网络的学习能力,通过输出分布的policy network和输出单个值的value network来分析每一步的收益,并以此来简化蒙特卡洛树的搜索空间,达到落子合理性和时间消耗的平衡。所以我感觉整个过程中从技术来讲,并没有什么新的突破。担心AI统治人类大可不必。这是人类计算能力发展到一定阶段量变引起质变的一个结果。但我依然认为这是一个里程碑式的成就~AI训练起来好累。感觉还是能找到工作的。参考文献:
看了一晚上alphaGo的paper。还是相当复杂的。首先用19*19*48的feature作为input,用专家棋谱做训练得到一个neural network用来预测给定棋局下一手位置的概率。以此neural network的结构及参数为基础然后通过自己和自己之前的模型下棋(数千局)的方式更新参数以达到赢棋最大概率。至此alphaGo构建了一个给定棋面下一步下哪里的分布(policy network)。在自己和自己下棋的同时,alphaGo以此中每一棋面为训练集,用上述相同的feature,训练得到一个预测当前棋面会输还是会赢的模型(value network)。以上述训练所得两个模型为基础,alphaGo来进行策略选择。大致思路如下。下一步的选择由两个模型共同决定,棋局越开始越贴近policy network,越后来越贴近value network。值得注意的是这里的value network是由之前训练所得的value network和一个快速Monte Carlo预测结果的线性加和。这个思路相当机智,一开始棋面简单可供学习的专家棋谱多,因此下棋就以学人下为主,后期搜索空间变少了,则已暴力穷举为主。
为什么AlphaGo会遇强则强某些人猜测AlphaGo会遇强则强,认为AlphaGo会模仿对手的棋风下棋,如果遇到樊麾二段,就会下出樊那样的水平较低的棋,而如果遇到好战的李世乭九段,则会变成一头嗜血的怪兽。事实上,AlphaGo的确会遇强则强,遇到李世乭可能赢二目半,遇到业余6段可能也就赢二目半。但这并非是因其会模仿对手的棋风。因为AlphaGo是通过海量人类对局数据库来训练对棋型的感觉,再从模仿人类选点中筛选胜率最高的一招棋的,因此它不会去专门去模仿特定对手的所谓棋风。但由于AlphaGo筛选选点的唯一考虑因素是胜率最大,而非最凶狠走法和局部最佳应手,也就是能赢就行,不求大胜,比如说选点A有99%的概率赢半目,选点B有98%的概率赢20目半,那AlphaGo就会选择A,而淘汰B,而且为计算获胜概率,它要假定你是最强对手,假定你会算到它能算到的各种变化,所以面对弱手,AlphaGo也会淘汰掉会因强手才能下出的强烈反击从而招致自己胜率下降的棋。这导致AlphaGo遇到弱敌也会走出看似很缓的棋,似乎它遇弱则弱。在与樊麾的第2局棋中,执黑的AlphaGo第135手没有选择扳杀白右上角的走法,而是选择跳,放活白角,这一手被中国职业棋手广为诟病,认为AlphaGo计算力太差,连这么简单的死活都没算出来,其实这是没有理解AlphaGo的选点标准,它肯定是算出杀棋的胜率不如放活的胜率高,所以选择了稳赢的放活。因此,在局面领先的情况下,AlphaGo常会走出人类棋手所认为的缓手,从而缩小了领先优势,其实这正是AlphaGo的强大之处,它通过选择胜率更高的退让走法,虽然损目但提高了胜率,从而将其优势转化为不可动摇的胜势。而很多人类棋手反而会在优势局面下贪吃争胜,从而走出过分的招法导致逆转。必须指出的是,AlphaGo并非一味退让,只有当损目的走法胜率更高时它才会选择退让,否则它永远会走在最大的地方。3月9日对李世乭九段完胜的第一局,就非常完美地体现出了AlphaGo的这个特点。AlphaGo的棋让人想起了李昌镐九段全盛时期的招法,经常走一些看似缓手的自补,其实这正是李昌镐和AlphaGo的英雄所见略同啊,已走下神坛的李昌镐,看到AlphaGo想必会别有一番滋味在心头。写于日夜
AlphaGO拥有两个深度神经网络:基于谷歌云计算巨量数据的策略网络(Policy Network)和估值网络(Value Network),再结合传统人工智能方法蒙特卡洛树搜索(MCTS),构成了人工智能的三大武器。1. 策略网络Policy Network,其实是一个落子选择机制,它着眼于每一步弈棋的下法。它又细分为三个部分:突破策略网络(RolloutPolicy Network),通过对盘面的初步判断,得出一个准确率较低的落子选择。模仿策略网络(SLPolicy Network),通过调用谷歌云存储中上百万的人类对弈棋谱,模仿人类的下棋走法,预测人类的下一步落子位置。学习策略网络(RLPolicy Network),通过两个AI之间互相自对弈,不断地学习和提高棋力。在学习期间,AlphaGO每天可以自对弈一百万盘之多,而人类一辈子也下不到一万盘棋。2. 估值网络Value Network,则是一个局面评估机制,它注重于对全局形势的判断。估值网络通过对全局位置的判断,分析出局面形势,并进行一个价值评估,准确率可达80%以上。虽然AlphaGo评估的位置只有深蓝的几千分之一,但这正是由于它使用了策略网络,可以更智能地选择位置;再加上估值网络,可以实现更精准的局面评估。这才是更接近人脑下棋的方式,而不是简单粗暴的穷举法。3. 蒙特卡洛树搜索 Monte-Carlo Tree Search,则是实现围棋这样超高复杂博弈机制的一种随机算法。蒙特卡洛算法,是由乌拉姆最早提出,再经数学天才冯·诺伊曼发展和完善,以赌城蒙特卡洛命名的一种算法。在过于复杂的局面中,人工智能由于硬件缺陷,无法实现穷举级别的采样,而蒙特卡洛算法正是在采样不足的情况下,通过尽可能多次的随机采样,一步一步接近最优解。举个简单例子你就可以理解。比如有一堆钻石,每次随机选一枚,选中更大的就留下。那么经过越来越多次随机选择,最终留下的那枚钻石,就必然越来越接近这堆钻石中最大的。但是由于随机的缘故,在不遍历每一枚钻石的情况下,只能接近最大,而不能确认最大。与之对应的是另一个以赌城之名命名的算法——拉斯维加斯算法,则是为了一步一步确认最优解。它的例子是,比如有一堆钥匙,只有一个能打开锁。每次随机选一把,打不开则再选。那么经过越来越多次随机选择,找到正确钥匙的几率也就越来越大。但是由于随机的缘故,在不遍历每一把钥匙的情况下,并不能确定一定可以找到。在围棋这样的博弈游戏中,并不存在绝对正确的下法,所以自然应当运用前者。并且,正是由于蒙特卡洛算法的运用,围棋的人工智能才得到了突飞猛进。AlphaGO是怎样下棋的?身为集结多种尖端技术于一身的人工智能,AlphaGO的下棋思路可以简化为以下四个步骤:Step 1:通过突破策略网络和模仿策略网络,找出下一步棋的数个备选走法。Step 2:利用蒙特卡洛树搜索,从数个备选走法中找出接近最优的走法。Step3:利用估值网络对这一走法产生的局面进行评估,将评估结果作为当前棋局下的下一步走法的估值。Step 4 :结合下一步走法的估值和模仿策略网络进行反复的模拟,根据选择次数最多的下法,确定最终的走法。 AlphaGO的下棋思路和步骤在和樊麾的对弈中,AlphaGO表现得并不仅仅纠结于局部的得失,而更注重通盘大局的考虑。这也恰恰是人类围棋智慧的体现。说AlphaGO真的像人类一样下棋,并不为过。原文链接:创建于 著作权归作者所有
说人话!5分钟带你看懂阿法狗。写在前面的话:昨天天的结果也出来了,李世石试图用比较攻击性的打法,结果还是完败。作为一个算是勉强会下围棋的IT从业者,心情有点复杂。一方面我知道计算机战胜人是迟早的事情,另一方面却没有想到李世石会败得这么彻底。或许大时代的潮流终会将一切碾压而过,却总会留下一些落寞的身影。平心而论,李世石下的不太好,但是首次面对机器人,其实压力之大,是不可想象的,李世石勇敢的做了第一个吃螃蟹的人,值得我们尊敬。计算机下棋的历史:其实AI下围棋已经有了快20年了。之前我们没有太关注,是因为还不够强,印象中最好的AI有业余5段的水平。1997年,IBM公司的“深蓝”计算机战胜了国际象棋世界冠军卡斯帕罗夫,然后大概是2006年,人类最后一次战胜过计算机。因为国际象棋的规则简单,下法也比较固定(兵不能后退,象只能斜着走什么的),IBM凭借单纯的硬件堆叠,用最粗暴的方式。计算所有下一步,之后的可能性,就直接解决了问题。为什么围棋那么复杂?国际象棋所有的可能性性是10^47,1后面跟着47个“0”。但是围棋不一样,19*19 的交叉点中蕴含了2*10^170种可能,就是2后面跟着170个“0”。这个数字大到什么概念呢?全宇宙的原子数量是10^80,也就是全宇宙每个原子代表一张棋谱,都还差得远。大家不要小看那几个“0”,给大家用面积表示下。请看看上面的图,围棋可是整整比国际象棋多了127个“0”,每一个0都会呈现几何级的增大,大家想想一下相差127个“0”面积差多少吧,反正我的电脑是画不出来了。请看看上面的图,围棋可是整整比国际象棋多了127个“0”,每一个0都会呈现几何级的增大,大家想想一下相差127个“0”面积差多少吧,反正我的电脑是画不出来了。所以这这种情况下,阿法狗被研究出来开始了。下面正式开始介绍学习狗从前,有一只学习狗。这只狗很喜欢看人来下棋,并且能记住看过的每一盘棋。我们管他叫学习狗。在初期,他学习的是西方国家的人在QQ游戏中下围棋的棋谱。然后他记住,哦,当出现这个局面的时候,下在天元会输,下小目会赢。他只会做输赢判断,其他一概不知。请大家记住他的技能,学习狗过目不忘。但是下着下着,他发现自己总是输,因为之前说过了,围棋可能性太多,他学过的棋谱根本数量不够。人类思考一下就能打败他。乱走猫于是,他的邻居--乱走猫出现了。这只猫的特别是动作特别快,但是她懒得思考,从来不看棋谱。就是瞎走。然后她会记住,哦,这样瞎走最后会赢,那样瞎走最后会输。记住,瞎走猫,是乱走的,但是她能记住,怎么乱走赢的可能性更大。分身术但是很快问题出现了,由于乱走猫总是乱走。没人愿意和她下棋了(废话,谁这么无聊啊)。于是乱走猫用了分身术,自己和自己下,并且记住怎么会赢。反正是自己和自己下,不想学习狗只是自己背棋谱,那当然可以用很多分身了。与是乱走猫每天能下好多盘。题外话:当然,分身数量是有限的,不能无限分身,原因嘛,是因为给的经费是有限的,只能有那么多机器。什么,你问如果要强行无限分身会怎么样?你拿你家电脑开一万个网页你就知道了。:)合体!但是当乱走猫和人类下棋的时候,还是输。因为可能性太多,2*10^170种可能种呢。怎么能下的完。他们的主人--科学家想了想说,这样,学习狗和乱走猫,你们一起来下。如果出现的情况谁碰见过,并且知道该怎么下就听谁的。他们合体后,当然就很厉害了,打遍电脑届无敌手。但是和人类比赛有时候还是会输。于是科学家再想办法,这样,你们分身出来自己和自己下,然后。注意,这个自己和自己下和当初的乱走猫完全不同,由于学习狗记住了棋谱。遇到有些情况,知道该怎么下,乱走猫终于不会再乱走一气了,但是学习狗的棋谱里,没有的乱走猫就依据乱走的经验来,他们的水平提高非常快。学习狗与乱走猫的真身其实学习狗就是IT界的“深度学习”,目前用于人脸识别,语音识别。由于需要大量的数据(比如很多棋谱棋谱),所以和大数据结合紧密。大家最常用的应该就是---汽车驾驶导航。乱走猫呢,就是大名鼎鼎的“蒙特卡洛搜索树”他最大的特别是可以并行,可以理解成同时下很多种可能,把每种可能都分身成一盘新棋来下。乱走猫呢,就是大名鼎鼎的“蒙特卡洛搜索树”他最大的特别是可以并行,可以理解成同时下很多种可能,把每种可能都分身成一盘新棋来下。用处嘛,可以理解凡是排序都能用,比如你要某电商网站搜索北京最便宜的拖鞋。就有无数拖鞋相互比较价格,最终经过预赛、初赛、半决赛、决赛,得出冠军。但是遇到简单的排序就排他的小弟就行了,不用他亲自出马闹矛盾但是新的问题又出现了,一猫一狗配合出现了问题,他们先各思考,再合计,一合计就容易闹矛盾。所以,他们特别慢!指点鹰科学家一看,好啦,大家不要吵了。其实不就是对局面的看法不一致嘛,我给你们个专门看局面的家伙--“指点鹰”。这家伙不用计算该怎么下,专门看如果这样下,胜率是多少。这样速度就快多了。为了防止,猫、狗、鹰。互相打起来。科学家定了个规矩。你们分别给出几个候选,给了候选后就没有学习狗的事情了。剩下的决策者,乱走猫和指点鹰的意见各占一半。偶像天团组合然后整个组合的成员就都找齐了。学习狗、乱走猫、指点鹰成为给了一个天团组合,名字就叫SHE! 啊不!叫阿法狗。为什么叫这个名字其实人家不是狗。。。Alpha是希腊字母的第一个。GO是围棋的英文说法,翻译过来应该是:围棋一号。不过我认为起名的时候,科学家想的是:奔跑吧,阿尔法!然后科学家进行了一些人为的调整,让阿法狗养成了这样的习惯。然后科学家进行了一些人为的调整,让阿法狗养成了这样的习惯。1、开始阶段,先主要由学习狗来下。因为布局越经典,越不容易有错误。这阶段不求有功,但求无过。2、中盘后,逐渐由乱走猫接手,因为之后的可能性越来越小,很可能乱走猫已经走过一模一样的局面。3、指点鹰随时辅助。4、局部争夺的时候,也由乱走猫接手。乱走猫把棋盘假设成只有5*5大小,然后集中精力来计算,这5*5里面有多少种可能。----------------------------------------------------分割线----------------------------------------------------好了,阿法狗,基本上就是这样一个东西,下面说一点私人的看法。当然,目前阿法狗还在不断和自己下棋,不断进化,之后变成究极态,就几乎没有人能战胜了。但是只要他还没有下到2*10^170种情况,人胜利的可能就一直存在。于怎么战胜他嘛,很简单。那就是李世石抡起棋盘砸向电脑!---这是门外汉的说法,人家的主机不在韩国啦,这么多服务器,得多大啊。得专门有自己的发电站、水冷系统、专门的保安和电工好吗!或者拔网线?黑客入侵?都行~~好啦,换回严肃脸,估计下一个对手就是柯洁了。我认为,只是我认为。唯一的胜算在开局阶段,需要不断的下一子换一个地方,跳出5*5的范畴。也许,只是也许,能战胜他,因为如果中盘后,还是势均力敌的话。人类战胜乱走猫的几率几乎为0当然,李世石第一局也是这么想的,当然结局大家看到了。阿法狗的科学家黄世杰,就是代替阿法狗落子那位,人家好歹业余五段啊!好啦,先写到这里,之后想到什么再补充,欢迎大家留言讨论。然后也欢迎大家搜索h4cj250,或者扫描我的头像二维码关注。我喜欢写一些,关于历史体育,游戏的东西。。。
谷歌AlphaGo大胜人类冠军李世石,交大文科软妹纸程序员和创业者鼓励师访谈谷歌工程师,解密背后的算法。欢迎广大工科技术男关注程序员和创业者鼓励师(微信公众号),欢迎拍砖。谷歌工程师给文科妹纸聊AlphaGo许丞:谷歌中国第三位工程师,之前在谷歌参与谷歌中国地图,谷歌地图以及谷歌光纤网络等项目,
现创业担任心橙互联信息技术有限公司的CEO。5.7 北京大学计算机6.2
IBM0.4 谷歌中国5.5 美国谷歌最近,AlphaGo和李世石的围棋大战刷爆了朋友圈,之前的比赛AlphaGo首次击败人类围棋冠军,朋友圈都在转发人工智能的前景有多么乐观,其在未来发生的应用场景会非常多,机器代替人类的一天将在不久会出现。随着日李世石第一次取胜AlphaGo,朋友圈又引起了一片哗然,都是对人类充满了希望,感慨人类未来会越来越好,未来的世界还是人类主宰。AlphaGo的出现,无疑反应了谷歌的技术实力,研究水平之深。今天,我们采访曾经的谷歌中国第三位工程师,许丞,李开复的50大弟子之一,试图从一个谷歌人的角度谈谈AlphaGo与李世石的这场激战。Q1: 您之前在谷歌有从事过人工智能相关的工作吗?A1: 老实说,其实没有。。。我在谷歌参与的项目主要有谷歌地图搜索,谷歌生活搜索以及谷歌光纤网络。我参与过使用机器学习的项目,比如条件随机场进行命名实体识别和Logistic Regression做点击概率预测,但是没有直接做跟Deep
Learning等相关的项目。有两个项目可能跟目前热得发紫的深度学习相关的吧:
在谷歌我们有一个去学习深度学习的codelab,工程师都可以去学习如何使用像DistBelief(第一代谷歌大脑项目)来进行实验研究。我研究过如何用DistBelief去完成MINST手写数字识别,我写的程序还进了后来的tutorial。之前的研究者如果要去做手写数字识别,需要自己先定义好各个features,
然后再训练模型。谷歌大脑系统完全不用写features,直接把原始手写数字标注好,直接让机器去寻找最好的features并生成模型。这个过程简直太奇妙了。第二个项目是在参与谷歌光纤网络项目的时候,我们需要去用计算机视觉的方式去解决一个物体识别的问题。简单来说的话,就是从街景车的全景图里面,用谷歌大脑去识别是不是有电线杆子,听起来这个电线杆子没什么用。。。。嗯。。。在做光纤布线的时候还是有用的。街景图里面去识别物体已经用在了抹去车牌或者说隐私保护的很多场景下,经过对比测试之后,目前我知道的数字是谷歌大脑识别这些数字或者名字的能力已经超过了人眼。Q2:AlphaGo为什么可以下围棋?之前深蓝击败卡斯帕罗夫的时候是用了什么原理?呃。。。计算机是怎么可以下棋的?A2: 计算机下棋的一个基本原理就是在状态空间上进行搜索。。。。嗯,太专业了是吧?好吧,那我们用一个简单的方式来描述一下这个过程。我们把围棋简化一下,简化成一个叫做九宫棋的棋类游戏。这个棋就是个简化版的五子棋,规则就是谁能把3个棋子连一片,就算赢(这也太简单了吧?围棋比这个可复杂多了。。。嗯,所有的抽象模型都是由简单开始的)。我们把每个棋的一个形态当做一个状态,把所有的可能性都作为它的子状态。那么久可以形成一个如下类似的一颗树,这颗树就叫做博弈树。这样的一棵树基本上把自己接下来可能的步数,以及对手可能走的步数都模拟了一遍,这就是大家下棋的时候所说的能够往后看几步了。看得步数越多,显然赢的可能性就越大,因此就越厉害。对于九宫棋(三子棋),所有的状态空间是一定的,所以其实是能够知道必胜的走法的。但是对于围棋或者象棋来说,每一次可能的步数都很多,这样每多看一步,就产生很多倍的新的状态空间,对于机器来说,可能就会内存不够或者时间不够了。因此大家会定义一个用来评估当前局面的函数,叫做评估函数。比如拿九宫棋来说,可以有很多,比如那可以是目前已经连成2个子的个数,或者任然空着的行列对角线的个数等等。评估这个局面可以告诉计算机,目前我这一步的情况如何,是不是很好。对于某些特别不好的局面,那么评估之后就会被剪掉,这叫做剪枝法。因为博弈树是一个下完一个,另外一个跟着下,因此剪枝的方法一般用的是α–β剪枝法(Alpha–beta pruning)通过这颗搜索树,那么机器就知道如何下子跟走棋了。Q3: 这样就明白了。那么《自然》论文的AlphaGo的原理是什么样的呢?跟刚刚讲的一样吗?A3:其实所有的计算机下棋的程序抽象来看都是上面那个的过程。只是因为难度不一样,所以具体的算法复杂性也会有巨大的区别。AlphaGo最厉害的地方是用人工神经网络来建模了“棋感”这一个完全无法用计算机语言来描述的概念。通过上面的学习我们可以知道,评估一个棋局的局面实际上可以用简单的函数来描述,也可以通过往后看几步来分析。这个评估函数建模了棋局的胜负概率,因此至关重要。人类经过训练之后,能够比较快速的去数目并判断棋盘的局势,但是机器显然很难(对于计算来说,数数显然是很快的,但是围棋的目数和局势显然不是单纯数一下数目)。AlphaGo的几个核心部分是
Policy Network: 用来预测如果是人类最好的选手,他会选择哪一个走法。这个模型是用深层神经网络实现的,其实是建立了最好棋手棋感的一部分。2.
Fast rollout: 快速走子,跟1的功能一样,但是用了不同的模型,这个模型跟预测点击率的Logistic Regression模型没有区别。3.
Value Network: 评估当前的棋局形势。4.
Monte Carlo Tree Search: 蒙特卡洛树搜索。用来进行状态空间的快速搜索的概率模型。拿着刚刚学习的东西来对比:Policy/Value Network是对比与上文说的评估函数。在上面的搜索树里面用了一个简单的数数的方式,而在AlphaGo中,用的是棋感和预测走子的方式来进行构建状态空间。而蒙特卡洛树搜索是一个概率搜索算法,跟上面的博弈树搜索是一个套路的东西,只是用的是概率模型来进行更有效的搜索。Q3: 太复杂了没看懂,那么你直接告诉我。。。他的贡献是什么吧?A3:建立了棋感是很重要的贡献。人和机器根本的不一致在于: 如果你给他看一个图片;对于机器而言,他看到的都是0/1这样的二进制数字,除了最基础的可以去数里面有多少不同颜色什么信息以外,啥都不知道。而人可以从全局的角度看这个图片,这样就能知道这个图片大概是什么东西,是什么内容。棋感也是一样 - 人工神经网络应用在计算机视觉上的重要突破,就是人不再让计算机用0/1来去识别图像内容了,而是让计算机自动的去抽取图像的语义特征--当然很可能只是一个一个小图块tiles这种组合方式的语义特征。这样计算机就可以开始慢慢的能够开始感知到这个物体可能是什么特征通过线性组合出来的。慢慢的也就形成了概念。而棋感就是类比于这样的概念!其二是增强学习。也就是说计算机可以开始通过自己和自己进行比赛的方式来提高自己的模型的精度。在此之前,所有的机器学习大部分都可以说是监督学习,人类在扮演着一个家长的角色,不停的告诉自己的计算机模型说这个是对的,这个需要修正。而现在在AlphaGo中,他们实现的无监督学习已经可以让人不用再去当家长,他们左右互搏也能学习到非常强的知识。这个结果非常可怕。Q4:目前不管是AlphaGo战胜李世石还是李世石战胜了AlphaGo ,这场人机大战对未来会有什么影响呢?A4:我认为这个影响将会是巨大的。在此之前,虽然人工智能,机器学习也算是人尽皆知的词汇,但是此次新闻的传播影响之大,从来没有过让普通人去这么去关心人工智能的进展。这次人机大战可以说是影响力全面超越了卡斯帕罗夫深蓝大战那次。可以预言人工智能在接下来的几年之内一定是最热的热点话题,可以想象会有更多大学生投入到其中的学习和研究之中,也可能会让投资更多的聚焦于这个领域,更多的应用和场景,进而会产生让人不可思议的结果。AlphaGo中的技术和算法显然不会只用于下棋,有意思的是历史上的每一次人机棋类大战都会带来更多新技术的进步。1989年我的老师李开复博士带着他的实习生在奥赛罗比赛中,利用统计学习打败了当时的世界冠军。也许当时对大部分的人来说,其实也仅仅是一次人机大战而已。然而那次之后,统计学习在非特定人语音识别系统开始发挥无与伦比的作用,传统的基于规则的语音识别系统被打得找不着北。现在我们能用到的siri, 自动电话应答机都是从此变为现实。更重要的是,从此之后,统计学习理论基本上统治了整个机器学习这个学科的所有研究方向,延续了差不多20多年。今天,风水轮流转,曾经被认为没前途的神经网络技术卷土重来,通过深度学习的方式再次让人类在视觉识别,棋类竞技等项目上败给机器,重新占据了学术研究的焦点。这是一场计算机智能革命,这些比人机大战结果的更有现实意义。我相信,随着这些算法应用到计算机视觉,自动驾驶,自然语言理解等领域,AlphaGo及其带来的人工智能革命必将改善我们所有人的生活。
大神说的都很精彩,我来随便说点我自己在看论文时候记下的理解和想法(噪音引入~),欢迎指正错误,随意讨论~AlphaGo(这里简称AG)首先有一个machine learning system。对于明确的目的任务,machine learning分为四个部分,数据集dataset,系统模型model,训练(学习)算法 training algorithm,评估方法 performance measure。之前大家喜欢把model和training algorithm放在一起讨论,但是随着现在的model和algorithm变得越来越复杂,其中可做的文章越来越多,还是分开来讨论比较好;AG没有选用处理时许序列的模型,所以AG下棋没什么逻辑性,做的就是基于当前局面选出感觉最好的一手棋,因此它的数据集就是一个个独立的瞬时局面,以及最后的胜负;model的结构主要有两部分,policy network & value network。pol-net称为策略网络,或者网上也喜欢叫走棋网络,目的就是输入当前棋局,输出下一手棋落在棋盘上各个点的偏好,也可以看成是一个对于棋盘上各个点的概率分布。val-net称为评估网络,输入也是当前棋局,但输出是对于当前棋局的一个总体评分,基于(0,1)之间,可以解释为当前棋局下的胜率;训练方法有点复杂,主要有两种,一个是监督学习(supervised learning),一个是增强学习(reinforce learning)首先是pol-net的训练,用的是监督学习。根据KGS server上弄来的3000万+人类棋谱,对每一个盘面进行下一手的预测;论文里说如此训练完后的预测准确率能达到五成以上,只用这样训练好的pol-net去下棋可以有KGS server上2~3D的水平(我去KGS server上和2D的下过一盘,比我现在水平强一点,但感觉要弱于我当年刚考出业余初段的水平)pol-net还有一个增强版,是让pol-net自己和自己下棋进行训练。这个就是增强学习,网上俗称左右互搏。增强学习后的pol-net增强版对普通版的胜率达到80%。但是他有一些缺陷,就是走棋缺乏变化,这个不是很利于他在之后的大系统里发挥作用,所以原始的pol-net没有完全被取代;pol-net虽然可以走棋但是走的很慢,AG还有一个快速走棋的模型,但这个模型不是用神经网络训练的,是基于之前的研究者对于围棋的理解提炼出的一些局部特性来决定的落子算法,这个快速走棋模型虽然在预测棋手落子上表现一般,只有两成多一点的准确率,但是实力也有KGS3D的水平。最后一个是val-net的训练,用的也是监督训练,但数据量更大一些,除了之前的3000万+人类棋谱,它还对之前提到的pol-net左右互搏的棋局进行采样评估,最后就训练得到一个对于当前局面下的胜率判断网络。模型和训练部分基本就是这样了。然后有了这些功能迥异的模型后,问题就变成了如何把这些能力整合起来变成一个超级围棋AI。这里还没有提到之前围棋AI的一个核心算法蒙特卡罗树搜索(Monte Carlo Tree Search, MCTS)。这个不是我的专长解释不好,大致的理解是对于棋局的进程(你走这儿我走这儿你再走这儿我再走这儿。。。)可以表示成一个树状结构,这棵树当然是大的不行,永远遍历不完,但是可以通过MC算法来去掉一些感觉明显不好的分枝,如此来减少最佳策略的搜索范围。AG的下棋程序是这样的:首先对于当前局面,用pol-net给出几个可能的选点,这个类似于人类棋手先根据棋感找出几个第一落点;然后用pol-net通过自我对弈的方式往后走几步,由此展开搜索树;上面那个过程中对于各个节点的盘面进行评估,胜率高的就继续展开搜索下去,胜率太低一看就不行的那就放弃;这里评估的方式有两个,这两个方法在AG里是以55开的比例加权:一个是用val-net对于盘面直接给一个分数;另一个是用之前提到的基于局部特征的快速走棋法用来进行成千上万次直到终盘的自我对弈,由此返回一个当前分支节点下的胜率;搜索树展开的算法里还有一些技巧,这里就不提了,总之通过MCTS这个神奇的算法把几个部分合起来,就成了这样一个超强的围棋AI。稍稍总结一下,其实这个过程里有一些很像人类学棋和下棋的过程:人类学棋的时候首先要打谱,就是学习前人的棋谱,然后培养一个作为棋手的棋感;然后要和自己下棋也要和别人下棋,进一步训练自己的棋感和着法;在下棋的时候人也是首先根据自己的棋感找出第一感的几个落点然后,有时候是直接根据盘面做判断,比如布局的时候;但在局部战斗中,会更依赖于深入的计算。但是和AG不太一样的是,人对于局部战斗的判断可以仅限于局部,而不需要也不可能像AG那样自我对弈到棋局终结然后看胜率。嗯。。。然后说说我对于AG的看法。
首先AG是一个完全基于全局和最终胜负来下棋的机器,目前看来它最出色的地方反而是在人类觉得比较虚的大局的把控和运营上。AG通过学习人类上千万的棋谱获得棋感,我觉得越是在铺地砖的棋局中效果越明显(AG喜欢打太极~);但是在局部变化比较复杂的情况下棋感对于落子选点的帮助不是特别大,计算才更重要。Policy Network的大局观不说超越人类吧,应该也是人类顶尖的水平(从那5盘棋中来看至少超越了李世石,虽然柯洁说李世石的布局是他整盘棋中最弱的部分。。。)但是在局部变化的计算上可能还是有问题,因为AG完全没有局部的概念嘛。局部计算应该是基于local feature的快速走棋的强项。但是google目前是把这快速走棋的判断和val-net的全局判断以55开的方式合在一起。而且之前很多人对于围棋AI的计算能力有点误会。虽说在单纯的计算量上是远远胜过人类的,但是对于每一个局部变化的计算质量来说,是不如人类的。目前看来计算机在局部计算上还是不如顶尖高手,会下不出最优解,甚至失误。顶尖的围棋选手在局部计算上大概最多可以在四五十个选点中往后推算三四十步吧,这其中任何一步的选点都是不能有一丝的偏差的,而且很多时候行棋的次序很重要。这个组合数对于计算机来说还是没有办法穷尽吧。而且从论文里可以看出计算机还是没有什么局部的概念,唯一的损失函数是棋局结束时的输赢,这样的好处是在处理大局的时候可能更好一点,坏处就是局部战斗的好坏一定要放到最后的棋局里才能判断优劣,会浪费更多的计算量。而且计算量的分配也没有变化,在一些需要精细计算的局部死活,和需要大局的着法判断的地方是同一套方法匀速的在下棋,这样的话对于计算量的分配感觉也是一个可研究和提升的方向~。个人觉得这里还是有值得改进的地方。一是或许能引入局部判断的概念,但是这个可能对于当前系统不是特别容易,因为整个系统是基于全局判断的。那还有一个办法是把整盘棋看成一个时序序列数据,在棋局进行到不同阶段的时候,动态的选择两种评估方式的权重,而这个参数的调整也是作为模型训练的一部分,这样的话感觉可以引入反馈神经网络(RNN)啊~ 这样会不会下棋更有逻辑性一点呢~在围棋中形状是很重要的,但不仅仅是几何图形,还有拓扑结构(比如两块棋的连接是直线连接还是绕一圈连接,其实差别不大;厚势的形状是笔笔直的还是有一些扭曲的差别也不大,重要的是其中有没有断点;一坨棋里有一个眼,两个眼,还是十目以上的大空,差别是挺大的)。CNN是很擅长学习几何图形的, 但是对于拓扑结构好像没什么关注。CNN还有一个问题可能是,CNN具有对于输入图像的平移不变性,但是围棋里类似的结构,角部边部和中部的局部变化差别其实是比较大的,不知道CNN能不能区别对待。还有一个我看到木遥提出的很有意思的观点是,目前AG的performance measure是最终局面的胜负,也就是说赢多赢少没区别。它的棋风也偏稳健,古力也说有当年石佛李昌镐的风范。如果能把performance measure改成输赢的多少的期望的话,会不会培养出一个棋风犀利的围棋AI呢~不管怎么说AG带给围棋界,计算机界乃至全世界都是非常深远的影响。我在看比赛的那段时间里也去网上的围棋对战平台下了几局棋,我碰到好些人都说自己是看了AlphaGo和李世石的比赛后,来重温一下自己当年学棋和下棋的经历。这项据说吸引了全球一亿观众的对决也让围棋这个代表着人类智力最高成就的古老博弈游戏受到了中日韩欧美以及全世界的关注(据说柯洁的微博粉丝好像几天里就涨了几十万,古力也去开了微博)。我也想强烈安利大家去学围棋,尤其是学龄前儿童~ 谷歌的这个现象级的成果应该也会给计算机领域注入巨大的能量。他们至少向全世界显示了目前学界对于Deep Learning和AI的研究是可以有fancy的成果的,至少方向上不会错的太离谱。这也给计算机科学家们以更大的信心在今后开更大的脑洞获取更多的研究经费吧~AG还远远没有达到围棋之神的境界,而我们追求人工智能的道路也还很漫长~最后推荐两篇我觉得写的最好的评述:
田渊栋博士应该是除了DeepMind团队自己的人以外,对于AG最了解的研究者了~ 作为一个不搞AI也不会下围棋的数学phd,木遥的观点感觉异常的犀利啊~
已有帐号?
无法登录?
社交帐号登录}

我要回帖

更多关于 弈城围棋对战平台 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信