当前位置: 华文问答 > 数码

AlphaGo「理解」围棋吗?

2017-05-24数码

楼上很多人说的不错了。这里回答的稍微偏题一点(因为事情已经过了很长时间了,可以稍稍避开原问题做一个解答)。

原问题是AlphaGo是否理解围棋,但是我更感兴趣的是人们是否理解AlphaGo。

显然理解。因为算法在那里,看的懂论文的就可以试图复现一个 prototype。

但是,仔细一想就会发现,理解算法本身,和理解算法的行为,似乎不是一回事。

举一个简单的例子。一个程序,它的作用是找出一个数组中最大的数。这个再简单不过,相信会编程的都会写,也就是,对于这个算法大家都是理解的。但是,你真的理解这个算法的行为吗?比如,这个算法找到的最大值是什么?你一开始可能觉得很简单,不就找一下最大值吗?但是很快就会意识到,如果这个输入数据足够大,并且没有先验知识,那么找到最大值的唯一方法就是把这个算法忠实的跑一遍 --- 你没有获得任何理解的捷径,使得能在这个算法得到结论前得到答案。如果不到一个算法得出结果才能知道算法会得到什么结果,你真的理解这个算法的行为吗?

自由意志也是很类似的东西。如果你总能够在一个人做出行为之前得知他会做什么,那么这个人有自由意志吗?事实上对于一部分事,至少在一个人的大脑产生动作信号(计算的角度,就是得到输出或者答案)之前,你难以准确估计他会做什么。这点和之前求最大值的程序非常像。所以说如果今后人们发现人的大脑也在执行某种生物学上的简单规则,并且对这个规则理解得极其清楚,(只要在开放世界中),也不妨碍一个人有「自由意志」(你依然没法干涉和预测他的「自由」)。

现在AlphaGo是不是类似的?你是否能够在AlphaGo计算出值之前,用某种捷径得知它下面会下什么?目前来看很难,但是也很简单-让AlphaGo算出这个我们想要得知的值不就行了,因为我们充分理解它的算法,我们可以用海量的GPU和CPU让它算的更快,以便让我们更快得到那个结果,但是这样并不叫理解AlphaGo的「行为」,虽然AlphaGo每一步怎么算的你都清清楚楚,但是得出结果还得等它算完。

仔细一想,对于之前那个求最大值的程序,如果我们知道它会处理的数据是递增的,那么我们可以立即得知答案: 它会输出最后一个值。如果最大的值在后1%,那么我们可以倒过来搜索,在这种情况下我们相比那个程序看上去更加有「灵感」。

分子动力学模拟也是如此。原理当然我们明白,但是结果非得那个程序算完才完全清楚。当然如果我们知道模拟的内容是一些常温下的水和磷脂,那么我们会对结果有个大致的预期。

说了这么多,就是想说算法处理的数据本身未尝不是一种复杂和难以解释所在。算法的行为,不仅依赖于代码,也依赖于分支处判断的数据。真正脱离数据的算法是没有意义的,而非常大和复杂,并且在开放世界中不断产生的数据,可以使得一些哪怕极为简单的算法产生极难预知的行为。现在AlphaGo下的那几千万局围棋,并没有类似于「单调递增」这种强的先验知识,而算法从这些数据中得到了网络的权值,算法又根据这些权值忠实的执行,得到的行为自然也不能期望被简单理解(否则某种程度上你就你理解了几亿个棋局的数据)。

那么,什么叫理解围棋本身?首先围棋本身这个概念太宽泛,可以严实为「理解下赢围棋本身」。我们再严实一下理解为「语言可表达,按此可复现」,这对于围棋还算是适合的。比如某人给你一本围棋秘籍,你看了后便能席卷棋界,那么恐怕没人承认你不懂如何下赢围棋。这时候你的理解便是那个秘籍。AlphaGo呢?答案是它的理解是它的完整的程序(包括权值这些)的内容。你可以把它当做一本「围棋秘籍」用,方法是自己一步步手动推那个程序(比如读汇编码自己在纸上写下所有东西),只不过很慢而已。显然你可能不能接受这个---这不是human-friendly的理解,但是这个「理解」确实是可以被人「理解」的理解,虽然我们没有真正理解AlphaGo这些权值到底是什么含义。(当然咯,现在人们也发明了各种算法来试图理解这些「权值」,比如发现了某些特征,但是为什么有这个特征?为什么特征非要长这个样子?我们并不全部清楚)

那么我猜还有人一定会问AlphaGo是否理解围棋。我觉得这样的讨论是没有意义的。除非有人告诉你,你会知道围棋是一种2个人的,而且两个人面对面做的,对抗的,零和的,棋盘19*19的,棋盘是方的,上面是打格子的,格子也是方的,有黑白两个子的,黑子先下的,两个轮流下的,要下在格点而不是格子中间的,有限时要求的,棋子数量足够的,一个棋子不会占超过一格的,棋子是圆的,两边凸起的,中国古代发明的,一种博弈游戏吗?你也不知道。AlphaGo只是被训练来下赢棋---甚至都不关心能赢几目,只要达到赢的状态就行。

这点和砍树的人不必成为植物学家一样。

你或许还是不能接受AlphaGo这个样子,我想这是因为,人们下围棋,一定要先理解「围棋」什么东西,下面才可以操作。但是AlphaGo却是在不知道(或者没有被提供数据)「围棋是一种2个人的,而且两个人面对面做的,对抗的,零和的,棋盘19*19的,棋盘是方的,上面是打格子的,格子也是方的,有黑白两个子的,黑子先下的,两个轮流下的,要下在格点而不是格子中间的,有限时要求的,棋子数量足够的,一个棋子不会占超过一格的,棋子是圆的,两边凸起的,中国古代发明的,一种博弈游戏」中的任何一点的时候,可以战胜人类。我想,这可能是所谓「强AI」和「弱AI」之前的差异吧。作为「强AI」的我们,理解东西从物理世界,感情,理性决策这些出发,在上面构建上层建筑,比如下围棋。但是AlphaGo直接从「下赢围棋」出发,来做到这一点。很难说哪个更好,只是一个广泛但难以在过于特定的场景深入,另外一个狭义但是却可以做到极好。在未来弱AI可能在每个它处理的领域都要好于强AI,并且我们可以批量生产他们而不需要从头教育,这是现在已经成为现实的事情(比如围棋,还有最近的德州扑克,人脸识别,图像标注,图像识别,甚至将来可以预见的特定场合翻译,语音识别,自动驾驶,等等等等)。

最终我们创造了弱AI(AlphaGo)。因为一个特定领域的智能没法在自然界自然产生。自然界就是一个典型的开放的,数据齐全的环境,需要一个普遍适合的生物存在,弱AI会因为「没有用途」而被进化淘汰。所以一个有明显智能的群体,几乎可以确定是强AI。(现在我们搞出弱AI,恐怕也是社会的需求,因为难以接受但是必须承认的一点是一个弱AI可能在社会中的贡献可能强过很多强AI)。至于是否能在这种开放的环境中搞出强AI就是后人的问题了。