AlphaGo是怎样下围棋的?

这周最出名的狗非阿尔法狗莫属了。

昨天下午,自己笔记本电脑开着直播放旁边戴上耳机听解说。。。是的听解说不是看,因为还在上班,也别问为什么周六还要上班T T

“诶怎么了,哦,投子,认输了,嗯另一位同行棋手走过来了,这时候李需要和同行一起”

都知道这一天迟早会来,却都没想到会这么快。

这里不谈任何人工智能发展对人类的影响,只谈技术,即AlphaGo是怎样下围棋的?
(PS:我非常非常非常高兴地看到今天这个情况)

Google将论文发表在了Nature上,全文对AlphaGo的技术实现做了一个大概的说明。接触过相关算法的同学,不求看完能写出一个AlphaGo,至少可以了解AlphaGo工作的细节,以下的内容全部来自于对此篇论文的理解,图片也都出自此篇,不再另外注明。

人类如何下围棋

在没有人工智能以前,人类最引以为豪的,就是“直觉”。我们人类下棋的时候,可以非常直觉地看出接下来这一步棋,大致有哪些理想的下法。而早期的下棋程序呢,并没有这种能力,机器能做的,只有暴力搜索,尝试所有可能的下法并递归下去到终局,找出能赢的下法。当然,仅凭直觉,成不了大师。

我下棋的时候,大致是这样的,相信大部分人也都是这样的:
1,凭“直觉”看出几个可能的下法。
2,对每一步可能的下法,猜测对手的应对方法,然后是接下来我的应对方法,能算几层,取决于当时脑子的灵活程度= =,大师级的棋手也都是在这里领先普通人。
3,对计算到的每一个局面,估算局面的有利程度,取有利程度最大的那一个,既是应选的下法。

可以看出,上面的三个过程,全部都要依靠“直觉”,1自然不用说,3呢,有利程度怎么估算,中国象棋可以是棋力总和的比较,车算10分,马炮各5分,兵一分,还要加上棋子在不同位置上的考量,中炮的威力和边炮的威力当然不会一样。围棋呢,算围地的大小吗?当然不会这样简单,围棋一个棋子位置的差别,在收官的时候,会使结果天差地别。你现在目数领先了并不意味着你现在局面占优,所以3其实也是靠直觉。2呢,直接又包含了一次1,2,3。

机器下围棋的难点,正是在于怎样实现这些“直觉”。
Google DeepMind实现的AlphaGo,下棋步骤基本符合上面的1,2,3。

SL policy network

为了实现1的“直觉”,DeepMind采用了KGS围棋游戏平台上面的30百万盘高手之间的对盘数据来训练AlphaGo,实现了SL policy network。训练方法叫做 supervised learning,是一类机器学习算法。

怎样理解这一类算法呢,其实就是变种的回归分析。在高中数学上,我们就知道能通过离散点的坐标数据,来计算出符合这些点的函数表达式,然后预测出下一个点的位置。而机器学习将此更近一步,计算的数据不仅限于坐标轴数据了,任何东西都可以,是的,任何东西。

人脸识别就是上述的产物。我们不用教机器人脸应该是怎样的,哪里有个鼻子哪里有个嘴巴,只需要拿出一堆照片,告诉机器,这些就是人脸,就像线性回归分析中我们直接输入已知的坐标数据一样。同样的,线性回归分析输出符合这些点数据的函数表达式。机器学习算法则输出符合人脸特征的函数表达式,你再输入一张图片,这台机器就查找这张图片有没这些特征,有就判定为人脸,没有就判定为不是人脸,就是这么暴力。

DeepMind输入了30百万盘的对盘数据,计算出了什么呢?是对于每一个局面,预测人类高手会选择的下法。这一部分,就是SL policy network。像不像人类的1步骤?

Rollout policy

相对于SL policy network,Rollout policy可以说是快棋版本。据论文上面的数据,计算出一步SL policy network,需要3ms的时间,而经过参数调整的Rollout policy,则只需要2 μs 。当然,节省了时间,也牺牲了准确率。前者预测人类高手下法的准确度为57.0%,后者仅为24.2%。后面你将会知道为什么要有Rollout policy。

RL policy network

DeepMind团队不满足于SL policy network,因为人类高手的下法一定就是正确的吗?
为了提高policy network,DeepMind用第一代的SL policy network自己和自己玩,记录每一种下法的胜率,这样就增加了对盘数据。然后把这些对盘数据又通过supervised learning更新policy network,进化出下一代,又再一次的自己和自己玩,不断进化下去。据坊间传闻,自从AlphaGo打败欧洲冠军后,在三个月时间里,自己和自己又下了两千万盘。多么恐怖的数据。。。这样出来的policy network就叫做RL policy network。这样,AlphaGo就有了无限提高自己能力的方法。

Value networks

AlphaGo可以说由两个大脑组成,一个是上述组成的policy network,另一个就是Value networks。
value networks就对应于人类的步骤3。

这东西怎么来的呢,回想下上面说过的人脸识别,既然可以通过一堆原始人脸数据,由机器提取特征,以后输入一张图片,机器就能通过匹配特征值来判断是不是人脸。那我输入一堆围棋对盘数据每一步的图片,告诉机器,这张图片结果是赢了,这张图片结果是输了。能不能通过同样的算法,机器提取出特征值,以后输入一张围棋的图片,机器就能匹配特征值来预测结果会是赢还是输呢?答案是肯定的,DeepMind团队就是这么干的,借用于自己和自己下的那几千万盘数据,训练出了Value networks。这个Value networks能对于每一个局面,预测输赢的概率。而且随着自我对盘局数的增加,这个概率将会越来越准确。想想都觉得恐怖是不是,机器根本不用知道什么是围棋,规则是什么,你只要给它足够多的图片数据,它以后就需瞄围棋棋盘一眼,就能预测输赢结果的概率,恐怖恐怖。(注:直接用图片会极大的降低准确度,所以实际用的是棋盘上棋子的坐标数据,但用图片不是不可以)


nature16961-f1.jpg

这张图说明了上述四者之间的关系。通过人类对盘数据训练出Rollout policy和SL policy network,通过SL policy network自我对局训练出了RL policy network。通过RL policy network的对盘数据,又训练出了Value network。

Monte Carlo tree search

有了1,3,还缺2呢。为了实现2,DeepMind采用了几乎所有围棋软件都会采用的方法:Monte Carlo tree,大名鼎鼎的蒙特卡洛树。

要理解蒙特卡洛树先要理解UCB算法。
想象你到商场一楼,有一堆夹娃娃的机器,你手上有一100元,怎样夹到最多的娃娃呢?
初来扎到,你当然不知道哪一台更容易夹到对不对,但你懂UCB啊,冷静的你开始喜感的夹娃娃了。
1,为每一台机器贴一张纸条,写上num=0,value=0。并且手上也拿一张纸条,写上sum=0。
1,随机挑一台机器,投入一元硬币,并将该台机器的num加1,然后开始夹,如果夹到了,value加1,否则不加。并且将sum加1。
2,计算每台机器的UCB = value/num + (2ln(sum)/num)^1/2(想知道为什么是这个公式,可查看论文《Finite-time Analysis of the Multiarmed Bandit Problem》)。哪台机器的UCB值最大,则挑哪一台进行下一次夹娃娃。
3,每次到机器夹娃娃,就将num加1,夹到value就加1,夹不到就不加。并且每次都要将sum加1,重复2和3。

这样,当你用完了100元,也即sum=100,理论上你将获得最多的娃娃而不会吃亏。
其实公式已经很明白的表达了为什么要这么做。第一项value/num。是这台机器的平均收益,称为exploit项。通过你前面的记录,这台机器夹到的次数越高,投入的钱越少,exploit项的值越高,你就越应该多来这台夹。第二项(2ln(sum)/num)^1/2,是explore项,这个项给了那些一开始表现不好的机器一些机会。你前几次夹不到,不意味着你这台机器夹到的概率低,也可能是刚好那几次运气不好,所以有时候你也应该来这台试一试,当然,很多次都夹不到了,explore值会越来越低,你就应该减少来这台机器夹的次数。由于num都是分母,当num是0时,UCB是无限大,所以UCB算法会让你把所有机器都先尝试一次。这也是非常符合常理的。UCB的每一次选择,并不能保证你这次的选择有最大的数学期望值,但能保证你这次的期望值总比上次高。

现在可以来看一下蒙特卡洛树搜索(MCTS)了。


nature16961-f3.jpg

围棋下到每一步,我们要知道接下来下哪里赢的概率最高。如上图,将接下来所有合法的下法展开来计算是不现实的,因为围棋棋盘太大了。。。直接展开算算到宇宙毁灭都算不出来。但是呢,我们就可以利用上述的UCB算法,同样的道理对不对,对于每个节点,计算UCB值,挑最大的去展开计算,然后更新UCB值,以此重复,这样,你总能保证下次算出的走法比上次的走法好。而且最重要的是这个算法可以在任意时间内结束。就相当于你有50块钱或者100块钱都不影响你去使用UCB算法来玩夹娃娃。当然,围棋用的不是那个公式,而是在exploit前面再乘上一个参数,以调整UCB值,并称之为UCT。

上面的方法,用于早期的围棋程序,但是达不到职业选手的水准,因为你还是绕不开那个问题,棋盘辣么大,就算只展开一个节点,数字也是天文数字。

而DeepMind有了新的方法,嗯,就是前面的policy networks 和value networks。DeepMind将这两者和Monte Carlo tree search结合了起来。

对于展开哪一个节点去计算,AlphaGo不是去计算UCT,而是用了SL policy network和RL policy network。通过这两个,AlphaGo“直觉”出了接下来可能的好的走法,其中有SL“直觉”出来的,也有RL“直觉”出来的。

接下来,对前面“直觉”出来的走法(节点)进行展开,用Rollout policy下到终局,不是下一盘,而是下很多很多盘,然后计算出这个节点赢的概率,现在知道为什么要有Rollout policy了吧,因为它够快。同时,对于那个展开的节点,直接用value networks预测出赢的概率。两者取平均值,就能知道这样走赢的更准确的概率了。

选出赢的概率最大的那个,就是接下来要走的子,AlphaGo就靠着这样的算法,连赢了李三盘 : )

AlphaGo的思维

有了RL policy network,现在没有人知道AlphaGo计算过程具体的每一步是怎样选择的,包括DeepMind团队也不可能知道,因为它在不断的进化,进化。

而且,要给AlphaGo献上一个稳如狗的称号,因为,它的每一步,都是选赢的概率最大的那一个。80%的概率赢1目,70%的概率赢20目,AlphaGo会毫不犹豫的选择前者。所以,在三盘和李的对局中,能明显的看到,AlphaGo会尽量的去简化局面,选择稳赢的一步,而不可能主动去冒险。阿尔法狗,真心稳如狗。


原文自谢培阳的博客

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,569评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,499评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,271评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,087评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,474评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,670评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,911评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,636评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,397评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,607评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,093评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,418评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,074评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,092评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,865评论 0 196
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,726评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,627评论 2 270

推荐阅读更多精彩内容