AlphaGo 是怎么下棋的?

前言

本来其实不想写这个的,但是看到很多网友以及一些围棋职业选手提出了一些疑问,比如「Google 没有顶尖的棋手为什么能开发出顶尖的围棋机器人?」还有「机械为什么可以在如此直觉主导的游戏中战胜人类?」。这些问题事实上在人工智能领域已经有很多理论来做解释。而且这些理论也并不是 Google 提出的。AlphaGo 所使用的理论大多还是十余年前左右的论文的一些成果。在此之前,使用了这些理论开发出来的人工智能其实已经在 2006 年就已经在 9x9 的小棋盘上战胜周俊勋九段,之后在 2013 年 CrazyStone 程序就已经在让四子前提下战胜过石田芳夫九段,而就在去年,Facebook 的围棋机器人在不让子的前提下,胜过职业选手。至于之前「前百度深度学习研究院」的吴韧所开发的异构神机也使用的是类似的理论,也在前几天战胜过职业棋手。

这些方法上,AlphaGo 并无太大创新,很大程度上是 Google 团队实现得相对完善以及训练程度更好,以及人工智能算法的实现和调参存在很大的偶然因素。那么究竟是什么方法让机械拥有了和人一样直觉,而不是简单的机械化的思考。这事我们还是要从头讲起。

无法计算的数据量

早在 1996 年,IBM 的深蓝计算机就战胜了国际象棋世界名将加里·卡斯帕罗夫。但象棋有一个特点,那就是每一步下的选择是相对非常有限的,最多也就十几种可能。哪怕是通过最最暴力的搜索方法,把每种都跑一遍,搜索几十步内的最优解。虽然这个方法随着搜索深度是指数级增长的,但事实上由于底数比饺小,依靠强大的算力还是可以解决的。而深蓝计算机正是这么一台拥有强大算力的超级计算机。

然而在围棋上,这样就不行了,因为围棋每一步都有上百种选择,如此大的底数纯粹的暴力就显然无法满足了。至少硬件的发展并非每年成百倍成百倍地快速增长的。同样的方法,显然是不适合使用在围棋上的。

在 2002 年之前,人们长期研究一个可以通过计算静态地分析出每一子的价值出来。然而这个方法的发展一直很慢。直到人们试图尝试一种动态评估一个博弈的一种方法,这就是靠。这个方法被称为蒙特卡洛搜索树,其前身是非常著名的上世纪曼哈顿计划期间由乌拉姆和冯·诺依曼提出的蒙特卡洛方法

如果我们想知道圆周率的值,我们如何利用猜的方法来猜出圆周率呢?我们只需要在一个方形中随机而均匀地扔飞镖,数一下,多少个飞镖扔在了以方形边长为直径的圆里,多少扔在了外面,根据圆的面积公式和方形的面积公式就能把 π 算出来。而蒙特卡洛搜索树就是利用蒙特卡洛方法来优化搜索树。简单来说,就是,我们认为这一步下在一个地方是最优的,而我们不知道这地方在哪里。我们先通过一系列随机的采样,从而去猜测一个值,这个值可能是最优解,也可能是一个接近最优解的解。但至少,这可以用来估算像围棋这样大的棋盘的东西了,而不需要把每个细枝末节都同等对待地来暴力搜索。

⑨神的大局观

解决完计算量的问题,我们还要来解决人类在围棋上最大的优势——直觉,或者说「大局观」。那么如何才能拥有大局观呢?我们想一下,人们在下围棋的时候,通常会先考虑下在哪个片区,以获得什么样的目的。而这就是所谓的大局观。

AlphaGo 的另一部分重要思想,得益于神经科学的发展,即人类认识人大脑神经的发展。人类愈发了解了大脑内神经元的工作模式,包括人类学习、认知的神经模型。这样的非常基础的模型,极大地方便了利用计算机来模拟人类进行学习的过程。

蒙特卡洛方法只是简化了计算,并不具备学习的能力。无论是单纯的蒙特卡洛搜索还是与 α-β 搜索结合的还是和置信区间结合一些版本,都与人类能越学越强的围棋技巧相比差上太多。至少,人脑是一个极其复杂的计算模型,哪怕是现在最好的计算机,其算力和整个大脑比起来还是差很多的。

在 2007 年,一些科学家试图提出一个新的机器学习模型,即所谓的深度学习。所谓深度学习,你可以看做模拟许多许多人脑中的神经元构成的一个网络。网络的每一层,针对一个特性进行识别。网络的每一层,都是一个单纯分类的无监督学习模型。你可以想像一下,人眼看到一个图像。经过一系列神经元,首先识别出了里面的眼睛、然后识别了里面的鼻子、嘴,再根据这些特性,发现这是一个人。这样依次发现的机制。而学习是通过一个有监督的反向传播进行。即告诉你这张图像里有一条狗,然后反向的一步步调整网络,让网络适应符合怎么样鼻子、嘴、眼睛的是一条狗。通过不断地数据的训练,即可以让模型越来越优。这个模型在图像识别领域已经达到甚至有时超越了人的识别能力。

而 AlphaGo 使用的就是深度学习来优化蒙特卡洛搜索树。在 AlphaGo 中有两个网络,一个是策略网络,一个是价值网络。策略网络即是一个大局观的网络,机器会先通过其经验,找出其应该做出进攻的反应还是防守的反应,表现在下在哪个片区是最为合适的,是不是应该跟棋之类的大问题。然后再通过蒙特卡洛搜索树去算出具体下在哪里是最合适的。

而我们说到,深度学习模型是真的和人一样可以学习的。每下一次棋,它就可以进一步调优自己的策略网络。首先 AlphaGo 导入了上千个职业选手对弈的棋谱,使得自己有了一个基础的下棋策略。这时候的 AlphaGo 就和一个受过系统训练的围棋少年一样了。然而这和职业选手的区别还是很大。这也就是所谓的「Google 没有顶尖的棋手为什么能开发出顶尖的围棋机器人?」按照一般常理,AlphaGo 应该一段一段地和人挑战,越发提高自己能力。然而 AlphaGo 不是这么做的,它选择和自己对弈。两台 AlphaGo 来对弈,将对弈的结果调优自己的网络。这个听起来很奇怪,为什么两个下得都不怎么样的棋手一起下棋,棋艺能那么快提升呢?因为它一天能和自己下上百万盘棋,它可以把自己分身成几万份跑在几万台电脑上,以及可以昼夜不停也不会过劳死,而这是任何一个人类都做不到的。AlphaGo 的开发人员说,他曾在早期能下赢 AlphaGo,而很快,AlphaGo 的水平就远超了他。所以 AlphaGo 得到了飞速的提升。仅仅五六个月,AlphaGo 就能从战胜欧洲棋王挑战到世界顶尖选手的水平了。

人工智能的基本法

当然搞人工智能也要有基本法。这个基本法就是算力或者说是资源。虽然做了很大的优化,计算下围棋的计算量还是很大的。比起深蓝时依靠超级计算机来解决问题。AlphaGo 选择了一条适合 Google 的路径来解决算力问题。那就是分布式计算。使用分布式计算的 AlphaGo 版本比起不使用的版本其智能程度也是有相当大的提升。即使最简单,它也可以有更多时间来做随机的尝试,以找出更优的价值解。

同样利用深度学习优化蒙特卡洛搜索的 Facebook 围棋团队,相比 Google 就没有那么壕力冲天了。无论是开发资源还是人员来说也是远少于 Google。Facebook 的围棋机器人之前也取得了相当好的成绩,大概可以击败职业二段选手的水平。但是比起 AlphaGo,还是差上许多。

所以说,做这么一个人智能,背后的投入程度、重视程度也起到了很大的作用。这也是为什么深度学习目前做得很好的公司大多是一些顶尖的 IT 企业里的研发团队。

后记

比起 AlphaGo 在围棋上的成就,其实大多数人很好奇人工智能未来的何去何从。从这次中,我们看到计算机已经具备了人类大局判断能力,其本质是类似于人类的学习能力,即不告诉电脑应该怎么做,而让电脑看人类是怎么做的。这项的应用其实相当广泛,尤其在非常复杂的问题上。

比如说,无人驾驶汽车之前发展很困难,是因为人们总是试图去把驾驶规则完全讲给电脑,而这点太过复杂,难以用纯逻辑说清。而今天 Google 的无人驾驶汽车也是使用的类似的深度学习的技术,让计算机观察人类开车并学习,从而模仿人类的判断。最终依靠计算机强大的算力和不会疲劳等特点,甚至超越人类的判断。

短期来看,利用深度学习的人工智能在未来数年内将会得到很大的应用。而这也是 Google 热衷于下围棋的原因。醉翁之意不在酒,在乎山水之间也。Google 只是想利用围棋来显示他们在深度学习应用上的先进水平。

就人工智能的最终目的来看,我们已经跨出了很大的一步。之前而言,我们很大程度局限于人类强大的抽象的思考能力,而模仿人类神经系统的模型已经很好地模拟了这种思考是怎么产生的了。进一步说,如果一个机器,拥有和人完全一样的眼睛、耳朵、鼻子、触觉等作为它的输入,以及类似于人类肌肉和关节的机械部件作为它的输出。并且模拟一个和人脑一样复杂程度的神经网络,并让它观察人类进行学习。是不是在某个未来,我们可以拥有和人类功能非常接近甚至超越人类的智能的出现。深度学习都为这样的强人工智能提出了理论上的基础。

你可能感兴趣的:(AlphaGo 是怎么下棋的?)