笑谈AlphaGo对战人类从模仿到超越之奥义

chess

起源

故事从一个围棋说起,人类赖以自豪的智慧,为什么这么说,因为据统计,从这19乘19的方格中摆棋,可以有10的340次方的可能,用一个更形象的比拟,全宇宙的原子加起来,也比这个数要小。

也就是说,如果计算机靠暴力破解,是无法得到解的,而人凭着棋感可以走出非常高明的棋局,这就是为什么人那么高傲。

可是不幸的是,在IT男的世界里,总有一群倔人,他们决定做一只Go,可以碾压人类智慧的Go,全称阿法Go。

Go的进化历程

alphago-network
从官方公开的论文来看,从左到右是四只Go,英文名如上,看起来非常让人困惑,至少身为中国人的我,有一种看了等于白看的感觉,所以我决定根据它们的特点给它们起个易于理解的名字,例如Merry,笑话。

从左到右,名字为业余Go,模拟Go,进化Go和胜率Go

下面对这四只Go从输入到输出一一论述

业余Go

说它业余,是因为这只Go,只能模仿人类选手的百分之二十的行为。可以用弱智来形容。虽然如此,但是它有一个好处,快。计算快,因为简单。

构成

以一层神经网络构成

输入

以一个棋局来做输入,例如当前棋局的白子和黑子的位置,例如下图

alphago-check

输出

输出下一步所有可能的概率,例如下图

alphago-check-possible
要让一个单层的神经网络变成一个业余Go,IT男把人类在网络上下棋的棋局保存下来作为训练数据,来让业余Go在读到训练数据的棋盘的时候,模拟人类下一步的走棋。

通过一些日子的训练,业余Go从零基础成了一个业余的。

模仿Go

模仿Go跟业余Go是类似的,它们唯一的不同,是模仿Go比业余Go复杂,其他,例如模仿人类走棋,输入数据,输出数据都是一样的

构成

它以多层神经网络构成

如下图

alphago-network-go1
可以看到,模拟Go的结构是由13层的卷积加一个全连接层构成。

复杂的结构也代表着它比业余Go有更好的功力,所以同样用人类选手的下棋数据,对它进行同样的训练,它可以模仿百分之五十的人类下棋的功力。

进化Go

进化Go,顾名思义,就是它自己可以一步一步的成为武林高手。有一个非常高大上的的名字:强化学习。

进化Go一开始,是通过复制模拟Go生成的,然后进化Go就开始跟模拟Go进行武功比试,它们之间会产生千万计的棋局,然后进化Go就从这些生成的棋局中对自己进行调参,也就是优化,然后变成了进化Go一代。

然后进化Go一代又跟进化Go零代进行武功比试,如此类推。

有人可能就疑惑了,为什么进化Gon代要跟进化Gon-1代比试来提高自己的武功?

大家想想,练武的过程,开始大家只会一点武功,那么自然找个跟自己一样烂的人比试来吸取经验,随着经验的增多,武功也会比以前好,那么就要找武功更好的人来过招,一直迭代下去。

进化Go也是这样的一个过程

所以它的成长如下图

alphago-dog
可以看出,随着Go的不断进化,它变得越来越强大,但是可以看出,它依然无法跟人类顶尖高手比拟。

胜率Go

模拟Go是模拟下一步走棋的,而胜率Go是计算当前局面的胜率的。

胜率Go的构造跟模拟Go类似,差别是它的输出是一个数字,而不是19乘19的概率。

它的训练数据通过进化Go之间的对弈生成,并通过统计估算出局面的胜率,作为训练数据

可以看出,胜率Go跟进化Go之间没有什么大的武功进步。

是什么让这些Go的武功可以碾压人类智慧?那是因为它们遇到了一颗树,这棵树学名叫蒙特卡洛搜索树

蒙特卡洛搜索树

alphago-tree
这颗树,是把棋局的走势,变成一棵树,叶子节点就是决出胜负的棋局,例如当前棋局为第二层,这棵树就会通过利用业余Go模拟1000次随机走子,直到走到决出胜负为止,然后就可以估计当前节点走下去胜利的局数和失败的局数,继而得到一个胜率的估计值

那么Go通过结合胜率Go计算下一节点的胜率,通过模拟1000次随机走子计算出下一节点胜率的估计值,通过模拟Go计算出下一步走子的概率,综合这三项得出综合评分,并取最高分的为下一步走子。

综述

可以看出,AlphaGo并没有从智慧上胜过人类,而只是通过算力的优势,结合比较好的策略,来完胜人类选手。所以现在谈失业还早。好好上班。

原文地址:https://www.cnblogs.com/kukafeiso/p/13386344.html