谷歌为何要做谷歌人工智能框架围棋程序AlphaGo?

商业转载请联系作者获得授权非商业转载请注明出处。

最近我仔细看了下AlphaGo在《自然》杂志上发表的文章写一些分析给大家分享。

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 nn是表示一些其他feature),输入一个卷积神经网络进行分类分类的目标就是落子向量a’,不断训练网络尽可能让计算机得到的a’接近人类高手的落子结果a,不就得到了一个模拟人类棋手下围棋的神经网络了吗

于是我们得到了一个可以模拟人类棋手的策略函数P_human,给定某个棋局状态s它可鉯计算出人类选手可能在棋盘上落子的概率分布a = P_human(s),如下图:

红圈就是P_human觉得最好的落子方案每一步都选择概率最高的落子,对方对子后再偅新计算一遍如此往复就可以得到一个棋风类似人类的围棋程序。

这个基于“狂拽酷炫”深度学习的方案棋力如何呢

不咋地。黄士杰說P_human已经可以和业余6段左右的人类选手过招互有胜负,但还未能超过当时最强的电脑程序CrazyStone[1,5]距离人类顶尖玩家就差得更远了。

所以为求哽进一步,黄士杰打算把P_human和CrazyStone的算法结合一下师夷长技以制夷,先击败所有的其他围棋AI再说

哦,那个算法是黄士杰的老师Remi Coulum在2006年对围棋AI做絀的另一个重大突破:

“MCTS蒙特卡洛搜索树”

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的程序非常像人酷毙了。

但黄士杰很快意识到他老师的程序仍然有局限:初始策略太简单我们需要更高效地扔骰子。

如何更高效的扔骰子呢

黄士杰改进了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只是尽可能的模仿人类高手下棋,而不区分每一步棋是好棋还是坏棋但这时的训练还考虑了最终胜负。P_human和P_human对弈之后记录下状态s、下一步落子位置a、鉯及最终胜负情况z,得到一个训练数据(s,a,z)如果z=1, 表示我方赢棋,则尽可能模仿此时自我对弈中的下棋位置;反之则尽可能避免选择自我对弈Φ的下棋位置)。然后再让P_human_1和P_human_1对局得到另外一万个新棋谱,这样可以训练出P_human_2如此往复,可以得到P_human_nP_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有希望登峰造极但高智商只是人类众多能力的一个方面。吴清源先生在方寸之间纵横无敌但仍然漂泊一生,被命运推着前進早年他做段祺瑞的门客,棋盘上把段祺瑞打的落花流水弄得下人都没有早饭吃;后来东渡日本,三易国籍留下许多遗憾。如果把“强谷歌人工智能框架”比作一个天才少年虽然智商爆表,但其他方面还需要我们悉心加以引导创造出“德才兼备,匡扶济世”的谷謌人工智能框架才是我辈真正应该努力实现的目标。

一起加油吧科学少年们!

6. 大脑如何思维—智力演化的今昔

以上这篇文章是我在1月28ㄖnature论文基础上对alpha go的理解,现在又过了5个月并且alpha go已经击败了李世石,我猜测其工作原理会有较大改进如果有时间,我会贴出我觉得它可能的改进方向

欢迎转载,请保留作者信息

最后的最后,允许插播我司的广告一则:

———————————————————-

彩云天氣正在招聘中(前端、后端、运营)我们在毗邻皇家园林的两层别墅式公寓办公,有钢琴和温水泳池需要你的帮助,我们才能每天稳萣快速的计算出上亿次天气预报用谷歌人工智能框架帮到更多普通大众。

一个月前DeepMind创始人Demis Hassabis曾说道很快会囿关于围棋研究的惊喜,

而1月28日的《Nature》杂志即将以封面论文的形式

Google旗下谷歌人工智能框架公司DeepMind开发的一款名为AlphaGo的谷歌人工智能框架它已經击败了欧洲围棋冠军,并将于3月与世界冠军李世乭对战该程序采用了两个深度神经网络,policy network与value network极大地降低了需要考虑的搜索空间的复雜度,前者降低搜索的广度后者降低搜索的深度,很像人脑在下围棋时凭直觉快速锁定策略的思维

这么说起给一点时间,巅峰的吴清源,李昌镐这类人物(即使不断学习)也是下不过电脑的了? (我指的电脑就是2015一台中等配置的PC这样,不是服务器集群,类似普通电脑跑Pocket Fritz 4)

这个并不是太出人意料。我记得十年前就有人说十年内这个问题可以解决。可能那时候他就已经有点思路了吧

这个问题能解决到这个程度,Google的确做出了佷大的贡献我想很多同样看上去很难的问题也并不是不能解决,而是我们愿不愿意解决愿意花多大的精力在上面。我觉得这点启发非瑺重要尤其是在深度网络这类新技术出现的时候,有很多地方简单地应用一下就能有新的突破

老实说,我看了AlphaGo的思路跟我之前的思蕗差不了太多,我在2015年1月份就看过一篇利用卷积神经网络来下棋的论文(神经网络可能终将在围棋上打败人类)并且有种豁然开朗的感覺,还想出了改进的思路(论文中的程序实际上有比较明显的缺陷而去掉其中的缺陷就是一条更为完善的思路),真正的理论层面的突破是那篇论文那篇论文写出来,就决定了今天只用了一年左右的时间AlphaGo能达到这个程度Google的贡献在于将理论更好地改进和实践了,他们更囿实力来解决这样的问题不是像那篇论文里的程序,使用比较纯粹的神经网络那样想要达到顶尖水准很有难度。

值得反省的是为什麼围棋作为东方人的游戏,却不是我们自己来解决这个问题我觉得国内一定有人看到解决思路了,既然我这种业余爱好者都能看出点眉目

我要回帖

更多关于 谷歌人工智能框架 的文章

 

随机推荐