AlphaGo战胜人类职业围棋选手李世石已经是2016年的事儿了,而现在是2018年2月,这则轰动一时的新闻让更多的普通人见识到人工智能的潜力。自那以后,无数业界大神对AlphaGo进行了各个角度的剖析和解读,2017年10月,AlphaGo Zero的问世更使AlphaGo变得不再新鲜和神秘。受一篇大神文章的启迪,今天我也来揭一揭这块不再神秘的面纱,也算是对自己过去一周学习的总结和整理。读者放心,这一定是一篇小白都能看懂的文章……

(1)AlphaGo到底是怎么下棋的?

在面对棋局时,从小接受围棋熏陶的人类棋手会对棋局进行推演,缩小落子范围,审时度势,分析利弊,最后选择一种当前最有利于自己的着法落子。人类这一系列的过程依赖于大脑,长期的围棋训练和技巧练习使得人类大脑能越来越熟练地做到棋局推演。而AlphaGo只是一个人工智能的算法,它能依赖的只有算法,而这个算法的核心,我认为就是”模拟”,相当于人类推演棋局。大致来说就是它会对当前的棋局进行N次的“模拟”,选取“模拟”的次数最多的走法。就像下面这张棋局中所演示的,AlphaGo对可能落子的地方经过多次的推演和模拟,最终选择右下角那个模拟次数最多的“最优”走法。简单来说,AlphaGo在下棋时其算法就主要来完成这个过程。

揭开AlphaGo不再神秘的面纱

AlphaGo到底是怎么进行这种“模拟”的?

看了不少介绍AlphaGo算法的文章,它们大多操着专业的术语讲解神经网络学习机制等,我觉得不太好理解,我就用最简单直白的方式说说我自己的理解。在面对一个棋局时,AlphaGo的“模拟”其实是利用policy net、value net、rollout三者进行自我博弈最终确定落点的过程,这种模拟分两类,一个是一直模拟到能分出胜负为止(终局),另一种是根据其具有的一定形势判断能力,所以往后下几步就提前终止。在每下一子之前,它都会进行多次的模拟,使得它的推演越来越深入,越来越准确,并通过模拟出来的形势回溯到当前步,更新当前局面的判断能力,说实话,其实它模拟的就是一个职业棋手的落子行为,只是它是通过机器视觉认识输入的棋局画面,并对这些信息进行分析和计算。

每一次的模拟中,AlphaGo都会完成以下几件事情:(1)根据输入的棋局画面和当前的policy net,确定当前局面大概可落子范围(AlphaGo可不是乱下的,它会根据线下的学习确定一些有赢面的位置)(2)假设走下某一步,再用value net和rollout对之后的棋局进行形势快速预测。每步最终的落子位置由回溯得到的某个值函数决定。一次模拟结束,AlphaGo就会重新计算policy、value等,使得模拟越来越接近最优。

这就是AlphaGo的大致运行过程,它结合了当下最热门的深度学习和强化学习的优势,在复杂的高维状态动作空间中进行端到端的感知决策。一个是监督学习,一个是无监督的强化学习,这两种算法到底是如何被应用于AlphaGo的呢,看下面这张流程框图就可以清楚地明白了。

揭开AlphaGo不再神秘的面纱

可以看到监督学习主要应用于value、policy、rollout的学习,而强化学习则应用于AlphaGo左右互搏,更新策略(policy net)的过程。在与棋手进行线上博弈之前,AlphaGo需要在线下做这些准备工作:(1)向KGS围棋服务器学习大约3000万个不同局面的应对方法,形成自己的策略网络(policy net)和快速走子(rollout),也就是先学习人家职业棋手怎么走,这是典型的有训练样本的监督学习,使用的就是深度卷积神经网络算法。(2)在通过监督学习形成policy net P0和rollout之后,对P0的参数进行更改得到策略网络P1,让P0与P1进行左右互博,更新进化策略,这是超越人类棋手的重要过程。(3)用学好的policy net训练value net,价值网络也是通过监督学习形成的,监督信息就来自于多次线下模拟时的policy net,通过最强policy的模拟结果来近似正解。

(2)policy net 

之前说到,AlphaGo的模拟是根据某个策略来进行的,也就是说它首先需要有一个策略的集合或网络,我们称之为policy net。它的输入是当前的棋局,棋盘大小为19*19,每个位置有三种状态:黑子、白子、无子,每个位置都有一个概率,它是一个13层的深度卷积神经网络,其输入是由48个特征平面组成的19*19*48的图像栈,第一个隐藏层把输入处理为23*23的图像,边界补0,然后用5*5,跨度为1的卷积核对图像进行卷积。后面的隐藏层同样对图像进行补0处理再进行卷积,最后输出所有可能动作a的概率分布。

policy net负责哪些工作呢?首先,它要向KGS围棋服务器学习大约3000万个不同局面的应对方法,也就是先学习人家职业棋手怎么走,不过不只是单纯地记住某个局面,而是对于类似的局面都能应对,只要学习数据足够多,就可以几乎掌握所有的局面,很显然,这是一个有专家监督的学习过程,这些输入的棋谱就是它的老师。这个学习过程应用的就是深度学习算法。正因为使用了深度学习算法,具有很强的学习能力使得policy net更加准确。

在学习到了一定的policy之后,为了超越自己,AlphaGo还会进行自我博弈,由此来更新和优化现有的策略,这个学习过程就使用了我最近在学习的一种算法——强化学习。假设它从监督学习学到的策略是policy,P0,在自我博弈的过程中,它会另外做一个P1,刚开始P1的所有模型都和P0一模一样,参数相同,然后改变P1的参数,再让P1与P0各执一色进行博弈直到终局,如果P1赢了,则P1就更新为当前新的参数,否则要在P0的基础上重新改变参数,因此在多次试错中它可以总获得比P0更强的P1,这就是AlphaGo超越自己的过程,在这个过程中,没有直接的监督者,而是通过P与环境的交互,根据反馈不断试错和更新。强化学习有许多经典的算法,如MC Learning、TD Learning、Q-Learning等等。

在每一步落子前,AlphaGo都会在棋局上大概适合落子的位置处计算概率,这就是policy net 的选点功能,随着棋力的增长,选点的范围会逐渐缩小,从大片的可落子区域演变成锁定几个最有利的走法,再去推演该步之后的变化,这就大大提高了AlphaGo的运行速度和搜索效率。从下面这张棋局可以看到,经过选点和推演,AlphaGo大致锁定了绿色的两个落子位置。

揭开AlphaGo不再神秘的面纱

(3)value net 

AlphaGo采用策略网络和价值网络分开的结构,通过策略网络选择落子位置从而降低搜索宽度,使用价值网络评估局面以减小搜索深度,胜率的估算也更加精确。在了解了策略网络(policy net)之后,再来看看价值网络(value net)到底是什么。前面提到过AlphaGo是由某个函数决定落子位置的,这个函数包括两个部分,一个是Q(action value),还有一个是u(bonus)。Q是指在多次模拟中计算所得走a这步赢的概率。如果它在某一步模拟N次,那么赢的平均概率就按下面这个算式计算:

揭开AlphaGo不再神秘的面纱

其中s是指某个棋局状态,a是指某个走子位置,Q值用每次模拟赢的概率的累加和除以模拟得总次数,表示在模拟了N次之后,赢的概率。u是用来判断当前局面大概有那几步可以走。Q和u的共同作用可以决定在模拟中走哪一步。value net是对当前局面走某一步胜率的评估,此外还有个小型的快速模拟机制rollout。

value net 到底是如何工作的呢?

AlphaGo有个核心的公式:V*(s)=VP*(s)≈VP(s)。s用来表示棋盘的某个状态,V是对该状态S的评估,V*是这个状态的真值,P*指正确的policy,P是AlphaGo在之前学到的最强的policy。但谁也不知道V*和P*到底是什么,它就像神喻一般,似有似无,所以AlphaGo就用当前最强的policy来近似于正解P*,从而用VP来近似V*,即使VP只是一个近似值,但它的水平已经比现在的职业九段好了,而且policy net 还是在不断进步的。value net 也是深度监督学习获得的结果,它计算Q值,主要用于在线模拟,和policy net 从棋谱的线下学习不同。

总的来说,value net 和policy net是算法中两个重要的结构,前者对模拟得步骤作形势判断,后者进行选点,得出当前走哪一步能最有利于自己。

(4)rollout

这是AlphaGo的一个快速走子机制,叫rollout。它是用来在模拟中快速模拟到终局的机制。它的输入比policy net 小,所以模型也小,耗时大约2us,而一个policy耗时3ms,它加快了速度,虽然降低了一些准确度,不过这个迷你决策网络还是很有用的。

(5)树搜索问题

围棋其实是一个树搜索的问题,当前局面是树根,以树根为起点向下长出许多分支来,树不断生长,直到长到叶子节点。分支的个数是树的广度,根到叶子节点经过的树枝长度是树的深度。树的广度和深度越大,搜索量越大,计算越复杂。每一次搜索大概需要经过以下几个过程:

选择:从树根位置开始,在到达叶子节点之前的任意时间t,需要选择下一个子节点的位置,具体方法是根据当前搜索树中的统计数据:a=arg max(Q(s,a)+u(s,a))。

评估:当到达一个叶节点后,就对这个节点进行价值评估,同时使用rollout,快速模拟得终局。

回传:当rollout结束,通过分支进行回溯,更新每一条边的值,用终局代替虚拟败局。

扩充:当一条分支的访问次数超过一个阈值时,这条边的对应状态s会被加入到搜索树中。

最后,AlphaGo会选择访问次数最多的结点,也就是上文讲的模拟次数最多的位置。这样就基本完成了一个搜索过程。

嗯……

以上就是对AlphaGo所做的一个白话文浅述,什么神秘面纱早就被大神们扒光了,而我由于基础尚浅,能力有限,也只能理解到现在这个程度,过几天应该会再对AlphaGo Zero做个整理,目前对zero的最大印象应该是“大道至简”这四个字,虽然不是很确切哈。最后用一个最近在学网课视频的老师David的一句话结束这篇小白……

AlphaGo之父David Silver:监督学习能产生当时性能最优模型,但强化学习才可以超越人类已有的知识,只用监督学习算法确实可以达到令人惊叹的表现,但是强化学习算法才是超越人类水平的关键。

分类:

技术点:

相关文章: