介绍下AlphaGo的原理背景,兼论击败它的围棋战术

来源:百度文库 编辑:超级军网 时间:2024/04/26 07:01:44


很多人把深蓝和阿尔法狗比较,其实这两个完全不是一回事,没什么可比性。深蓝是穷举法,也就是把所有可能的步子都算了一遍,找出最可能赢的。这方法其实挺笨的,但人却拿它无可奈何,就如同电脑排序一样,简单但人是做不了的。做围棋算法的从一开始,就没人想模仿深蓝,因为电脑根本没有那个资源,以后恐怕永远都没有。所以做围棋算法的人,一开始都用的是纯粹的AI,但效果很差,下不出什么棋,最后进入了死胡同,直到那个初出庐茅的法国人。法国人科隆对国际象棋研究有兴趣,但是他上大学的时候,深蓝出世了,一下让他“英雄无用武之地”,于是博士毕业当了教师后,他转向研究围棋。他其实不太懂围棋,倒是想着把自己擅长的,运算国际象棋那套,搬到围棋上来,但是电脑的资源远远不够。在和别人讨论时,同事跟他讲,既然你资源不够算所有的点,那你就随机抽样,算一部分好啦,比如你算不了360个点,随机抽取算40个点,还不行吗?科隆觉得这个建议有道理,于是就开始编软件写代码,那时已经是2005年,他用了不到一年,就把新的围棋软件写好了,取名叫狂石。

他的软件一出世,就轻松击败了当时世界上所有的围棋程序,一下子震动学术界。科隆又公开了自己的算法,这下子就开启了围棋的一场电脑革命,这连科隆自己都没料到。没过几年,世界上所有的围棋软件,都采用了他搞出的随机采样计算办法,就是蒙特卡洛搜索法,这个算法一下子就把电脑围棋的水平,提高到业余段级,对围棋它已经是突飞猛进了。以后各方开始不断改进算法,到2013年,它已经能在让子棋中击败石田芳夫,14年又击败了依田紀基(这个人我在学生时,还亲听过他讲棋)。这时候要插一句,围棋软件,历史上大部分都是由日本公司赞助,或者直接开发的。他们孜孜不倦,一做就是几十年,没想到临门一脚的时候,成了别人的孩子。和液晶电视一样,日本人研究了多少年,到最后普及时才发现,原来要自己命的就是它。可见,光创新也是不行,还要善于摘桃子。

谷歌是在两年前买下DeepMind这个神经元网络公司的,买下它的目的不是别的,就是做围棋软件。谷歌自己也擅长神经元,所以做这个决定,肯定也是有考虑的,那个时候正是各个围棋软件实力开始突破的时候,实用软件已经达到了段位水平,像Zen。为了不刺激对手,DeepMind的开发,完全是在秘密中进行,雇佣的开发人员也都签了保密协议。比如科隆手下博士生,来自台湾的黄士杰,就被谷歌偷偷挖了墙角,在开发AlphaGo起了很大作用。实际上用神经元网络进行深度加强学习,是下一步大家都要做的方向,只不过别人是在按步就班,量入为出地在做,而谷歌是全力以赴,不惜工本的搞,这里面到底是什么目的,很值得玩味。训练神经元网络,并不是技术上的难事,但要话费大量人力和金钱的,很费资源。

说到这里,就可以分析一下,击败电脑围棋软件,到底用什么策略最好?AlphaGo的算法,是神经元网络+抽样计算。光是随机的抽样计算,结果其实并不是太好,比如360个点了,你随机拿50个点来算,棋力会有多强?所以神经网络的作用,就是限制计算取点的范围,不要算没有意义的点,这样就提高了计算的效率,等于一个倍增器。实际AlphaGo使用的,是卷积神经元网络,这个系统传统上是被用来做图形识别的。比如我们往这个神经元网络,输入各种人的图形,让它自调参数学习,以后再给它一个没见过的人像,神经元网络依然可以判断出是人。围棋的各种棋型其实也是图像,所以用这种网络做落子预处理,应该是不错的。你把各种各样、成千上万个棋谱输入进去,网络就会对棋型做大概的辨认,再给出可能的落子概率来,AlphaGo再对这些可能的落子进行计算验证,选出最好的应子。所以,想要击败AlphaGo这样的电脑算法,要遵照下面的原则:

1. 不要指望开局能迅速占优,要把战线拉长,让棋盘各处都落子。开局时盘上的子不多,可下子的地方其实也不多(无非是星、小目、挂角...),棋型的特征明显,容易识别,这正适合神经元网络的发挥。指望它这时犯大错,不太现实,最好是耐心下,到处走子。

2. 不要开局急于挑起战斗,要耐心等到中盘才短兵相接。开局时各处都没多少子,你在此时挑起战斗,AlphaGo在其他地方没有太多要算的,可以集中计算战斗附近的应点,那样你就未必占便宜。如李的第三盘,跨断电脑的大跳,导致被反击、局势被动。所以,最好要等到棋盘到处都有子,到处存在未定型的时候开战。

3. 对角、其次是边上的厮杀要谨慎,不要轻敌。角的地方两边受限,外方受敌,腾挪地方有限。对AfghaGo这样的软件算法来说,这种地方可以计算得非常准确。其次是边,神经元网络,对这里2、3、4路的行棋可以非常熟悉,人想占便宜不容易。第一局里,李就是在局势还不错的情况下,于右下边角的作战,未仔细算而吃了大亏,导致被逆转。

4. 和AlphaGo的短兵交战,最好在中腹地带,进入中盘后进行。围棋向有“千古无同局”之说,这么大的变化,主要是中腹的变化带来的。这个地方,对神经元网络,绝对是最大的考验,因为这里棋型盘盘都差的很大,以什么做学习蓝本呢?如果双方同时有几块死活不定的棋子犬牙交错,那是什么神经元网都无法应付的,算法就只能回归到纯粹的蒙特卡洛计算,这时的棋力就会大降,甚至很可能会漏算胜负手,如李的第四局那样。

5. 充分使用弃子争先,打劫这样的缠斗战法。神经元网络对于弃子争先,弃子转换这样的作战方式,判断起来是很困难的。听说AlphaGo在遇到大块棋的生死时,会停用神经元选点网络,而落回到蒙特卡洛算法,因为神经元选点是比较模糊的,生死计算需要非常精确。但蒙特卡洛算法,在盘面相对空旷,但混沌不明、犬牙交错时,计算错误明显升高。其实这时候,AlphaGo并没有一个好的办法,也就是说这时它的棋力,很可能会一落千丈,正如第四局我们看到的那样。这个表现,和人类的高手,差别很大,也很容易被利用。



很多人把深蓝和阿尔法狗比较,其实这两个完全不是一回事,没什么可比性。深蓝是穷举法,也就是把所有可能的步子都算了一遍,找出最可能赢的。这方法其实挺笨的,但人却拿它无可奈何,就如同电脑排序一样,简单但人是做不了的。做围棋算法的从一开始,就没人想模仿深蓝,因为电脑根本没有那个资源,以后恐怕永远都没有。所以做围棋算法的人,一开始都用的是纯粹的AI,但效果很差,下不出什么棋,最后进入了死胡同,直到那个初出庐茅的法国人。法国人科隆对国际象棋研究有兴趣,但是他上大学的时候,深蓝出世了,一下让他“英雄无用武之地”,于是博士毕业当了教师后,他转向研究围棋。他其实不太懂围棋,倒是想着把自己擅长的,运算国际象棋那套,搬到围棋上来,但是电脑的资源远远不够。在和别人讨论时,同事跟他讲,既然你资源不够算所有的点,那你就随机抽样,算一部分好啦,比如你算不了360个点,随机抽取算40个点,还不行吗?科隆觉得这个建议有道理,于是就开始编软件写代码,那时已经是2005年,他用了不到一年,就把新的围棋软件写好了,取名叫狂石。

他的软件一出世,就轻松击败了当时世界上所有的围棋程序,一下子震动学术界。科隆又公开了自己的算法,这下子就开启了围棋的一场电脑革命,这连科隆自己都没料到。没过几年,世界上所有的围棋软件,都采用了他搞出的随机采样计算办法,就是蒙特卡洛搜索法,这个算法一下子就把电脑围棋的水平,提高到业余段级,对围棋它已经是突飞猛进了。以后各方开始不断改进算法,到2013年,它已经能在让子棋中击败石田芳夫,14年又击败了依田紀基(这个人我在学生时,还亲听过他讲棋)。这时候要插一句,围棋软件,历史上大部分都是由日本公司赞助,或者直接开发的。他们孜孜不倦,一做就是几十年,没想到临门一脚的时候,成了别人的孩子。和液晶电视一样,日本人研究了多少年,到最后普及时才发现,原来要自己命的就是它。可见,光创新也是不行,还要善于摘桃子。

谷歌是在两年前买下DeepMind这个神经元网络公司的,买下它的目的不是别的,就是做围棋软件。谷歌自己也擅长神经元,所以做这个决定,肯定也是有考虑的,那个时候正是各个围棋软件实力开始突破的时候,实用软件已经达到了段位水平,像Zen。为了不刺激对手,DeepMind的开发,完全是在秘密中进行,雇佣的开发人员也都签了保密协议。比如科隆手下博士生,来自台湾的黄士杰,就被谷歌偷偷挖了墙角,在开发AlphaGo起了很大作用。实际上用神经元网络进行深度加强学习,是下一步大家都要做的方向,只不过别人是在按步就班,量入为出地在做,而谷歌是全力以赴,不惜工本的搞,这里面到底是什么目的,很值得玩味。训练神经元网络,并不是技术上的难事,但要话费大量人力和金钱的,很费资源。

说到这里,就可以分析一下,击败电脑围棋软件,到底用什么策略最好?AlphaGo的算法,是神经元网络+抽样计算。光是随机的抽样计算,结果其实并不是太好,比如360个点了,你随机拿50个点来算,棋力会有多强?所以神经网络的作用,就是限制计算取点的范围,不要算没有意义的点,这样就提高了计算的效率,等于一个倍增器。实际AlphaGo使用的,是卷积神经元网络,这个系统传统上是被用来做图形识别的。比如我们往这个神经元网络,输入各种人的图形,让它自调参数学习,以后再给它一个没见过的人像,神经元网络依然可以判断出是人。围棋的各种棋型其实也是图像,所以用这种网络做落子预处理,应该是不错的。你把各种各样、成千上万个棋谱输入进去,网络就会对棋型做大概的辨认,再给出可能的落子概率来,AlphaGo再对这些可能的落子进行计算验证,选出最好的应子。所以,想要击败AlphaGo这样的电脑算法,要遵照下面的原则:

1. 不要指望开局能迅速占优,要把战线拉长,让棋盘各处都落子。开局时盘上的子不多,可下子的地方其实也不多(无非是星、小目、挂角...),棋型的特征明显,容易识别,这正适合神经元网络的发挥。指望它这时犯大错,不太现实,最好是耐心下,到处走子。

2. 不要开局急于挑起战斗,要耐心等到中盘才短兵相接。开局时各处都没多少子,你在此时挑起战斗,AlphaGo在其他地方没有太多要算的,可以集中计算战斗附近的应点,那样你就未必占便宜。如李的第三盘,跨断电脑的大跳,导致被反击、局势被动。所以,最好要等到棋盘到处都有子,到处存在未定型的时候开战。

3. 对角、其次是边上的厮杀要谨慎,不要轻敌。角的地方两边受限,外方受敌,腾挪地方有限。对AfghaGo这样的软件算法来说,这种地方可以计算得非常准确。其次是边,神经元网络,对这里2、3、4路的行棋可以非常熟悉,人想占便宜不容易。第一局里,李就是在局势还不错的情况下,于右下边角的作战,未仔细算而吃了大亏,导致被逆转。

4. 和AlphaGo的短兵交战,最好在中腹地带,进入中盘后进行。围棋向有“千古无同局”之说,这么大的变化,主要是中腹的变化带来的。这个地方,对神经元网络,绝对是最大的考验,因为这里棋型盘盘都差的很大,以什么做学习蓝本呢?如果双方同时有几块死活不定的棋子犬牙交错,那是什么神经元网都无法应付的,算法就只能回归到纯粹的蒙特卡洛计算,这时的棋力就会大降,甚至很可能会漏算胜负手,如李的第四局那样。

5. 充分使用弃子争先,打劫这样的缠斗战法。神经元网络对于弃子争先,弃子转换这样的作战方式,判断起来是很困难的。听说AlphaGo在遇到大块棋的生死时,会停用神经元选点网络,而落回到蒙特卡洛算法,因为神经元选点是比较模糊的,生死计算需要非常精确。但蒙特卡洛算法,在盘面相对空旷,但混沌不明、犬牙交错时,计算错误明显升高。其实这时候,AlphaGo并没有一个好的办法,也就是说这时它的棋力,很可能会一落千丈,正如第四局我们看到的那样。这个表现,和人类的高手,差别很大,也很容易被利用。

问题是围棋是两个人(或机器)下的,你的战术对手可能不予理会,开局你到处落子,大场绝对被机器抢去,几盘棋下来证明机器对形势判断,行棋方向感觉非常好,如果你开局尽量避免战斗,但忍耐退让或脱先对手肯定欺负你。总之,靠无理棋(基于目前人类棋手的普遍认知)赢不了机器。
warry 发表于 2016-3-15 19:30
问题是围棋是两个人(或机器)下的,你的战术对手可能不予理会,开局你到处落子,大场绝对被机器抢去,几盘 ...

我说"到处落子", 当然也包括“大场”啊,这有什么矛盾呢?我什么时候说“尽量避免战斗”过?

你说的根本都不是我的意思,不知道谁不懂“棋理”?
第五盘棋基本验证了我说的。AlphaGo的大局观挺强,你很难找到露洞。因为它是神经元网络的判断,这个神经元网络是专做图形的,又受过很多训练,所以它对棋型很敏感。

在右下角,电脑挑起战斗,反倒吃了亏;而李在上边,和左下角打入,也吃了亏,导致逆转。
关于第4盘棋,电脑的输招,乐TV的那个教授在讲第5盘时也解释了,就是蒙特卡洛法的短处,和本人讲的完全一样。

当棋局异常复杂,或者涉及到电脑有棋块可能被吃时,AlphaGo会停止使用神经元,只用蒙特卡洛法,但光用这个方法是有严重缺陷的,如第5盘在右下部,又好像不会下了。

AlphaGo最厉害的时候,就是同时使用神经元网络+蒙特卡洛法,它在自身没有危险的时候,都是这么用。
无数种组合,刚好只有一两种组合样能达到最优解时,蒙特卡洛随机抽样会出错。这样的概率本来就极小,绝大多数情况下,蒙特算法都会朝最优解前进。
阿狗的神经网络不知道怎么个原理,普通来说,对于特征值固定的神经网络,他的采样数据是有上限的,采样少了显然没效果,多了会饱和,产生过拟合现象。
总的来说,机器已经胜利,不要纠结如何击败它了。有限规则,有限组合的博弈,机器总会超过人类。
从目前几盘来看,机器并没有表现出令人信服的实力:就是说对它的招法,人无论怎么走都会输。现在这个还看不出来,主要它赢得因素,是人出的错比较多。这个应该比较自然,因为机器比人要稳定,尽管它也出错。

这个就涉及到一个有趣的问题,就是对一个人和机器都找不到圆满解的问题,是否机器会比人,更高明一些?现在机器的表现,是建立在人的知识之上,是否它会进入一个能力的平顶区?未来一段时间,会很有意思,看看是否AlphaGo的棋力,会显著的超过人脑,还是在现在的能力附近徘徊?