正文
在这里我先给大家讲一下AlphaGo的原理。一般的棋盘比如围棋、象棋等,我们第一步先做一件事,把棋盘的状态向量标记成s,围棋的棋盘是19*19,它一共有361个交叉点,每个交叉点有三个状态,1表示黑子,-1表示白子,0表示没有子,考虑到每个位置还可能有落子的时间等信息,我们可以用361乘以N维的向量表示棋盘的状态。
我们把棋盘的状态向量变成s,从0开始,s0表示的棋盘里的所有状态,没有任何子,s1落的是第一个子,s2是第二个子,第二步加入落子的状态a,在当前的状态s下,我们暂时不考虑无法落子的情况。下第一个子的时候,可供下一步落子的空间是361个,我们把下一步落子的行动也用361维的向量表示,变成a。第三步我们来设计一个围棋的人工智能程序,给定s状态,然后寻找最好的策略a,让程序按照这个策略去走。有四个条件,先是棋盘的状态s,寻找下棋最好的策略a,然后让程序按照这个策略a走棋,获得棋盘上最大的地盘,这是围棋人工智能程序的基本原理和思路。
DeepMind以及我们之前在沃森那边做的,主要流程如下:
-
第一步先找一个训练样本,然后在观察棋局的时候,发现在每一个状态s里都会有落子a,那么这时候就会有一个天然的训练样本。
-
第二步,我们做一个网络,拿了一个3000万的样本,我们把s看成一个19×19的二维图像,然后乘以N,N指的是48种围棋的各种下赢的特征,落子向量a不断训练网络,这样就得到了一个模拟人下围棋的神经网络。
-
第三步我们设计一个策略函数和一个概率分布,我们拿到一个模拟人类棋手的策略函数跟某个棋局的状态s,可计算出人类选手可能在棋盘落子的概率分布,每一步选择概率最高的落子,对方对子后重新再算一遍,多次进行迭代,那就是一个和人类相似的围棋程序,这是最开始的设计思维和方式,策略函数和概率分布。
其实DeepMind还不是很满意,他们设计好这个神经网络之后,可以和六段左右过招,互有胜负,但还是下不过之前从沃森中做出来的一个电脑程序。这时候,DeepMind把他们的函数与从沃森中衍生出来的程序的函数算法结合在一块,对原来的算法重新做了一个完整详细的修正。
DeepMind最初对围棋一概不知,先假设所有落子的分值,这个大家一定要记住,在做任何科学研究的时候,当你发现你一无所知的时候,一定先要设定一个值,这个值千万不能是零。然后第二部分就简单了,就像扔骰子一样,从361种方法里随机选一个走法,落第一个子a0,那么棋盘状态就由s0变为s1,对方再走一步,这时候棋盘状态就变成s2,这两个人一直走到状态sN,N也许是360,也许是361,最后一定能分出胜负,计算机赢的时候把R值记为1。
从s0、a0开始再模拟一次,接下来如PPT中卷积所示,做激活函数。在下到10万盘次之后,这时候AlphaGo得到了非常完整的落子方案,比如说第一个子落在哪里赢的可能性比较大。
MCTS在这里起的作用是什么呢?MCTS能保证计算机可以连续思考对策,在比较的过程中发现最好的落子方式。在这之后,DeepMind发现用MCTS还不是非常好,他们就开始设计了一个比较有意思的东西,就是评价函数,我在这里就不太多讲评价函数。
AlphaGo的监督学习过程其实由两个网络组成,一个是从其他人中获得的学习经验,先是做了一个softmax,即快速落子,它的神经网络比较窄,第二部分是深度监督式神经网络。
到了做强化学习的时候,它会把原来通过机器学习过来的监督神经网络copy到强化神经网络里,然后进行初始化,让强化神经网络作为对手和另一个强化神经网络进行互相学习,来选择一个最优的结果。具体细节如PPT所示,500次做一次迭代,在这里会用到一些梯度下降的方式。