AI算法实现与云平台应用( 五 )


用到了增强学习,自己跟自己下,把赢棋的那部分拿出来,认为这部分是好的样本 。然后去学好的样本,得到一个新的模型,新的模型与旧的模型对比,赢出来的就作为一个新的好样本 。它其实是用了一个增强学习,生成更好的样本,而且是用有监督学习的方法生成这个样本 。大家不要觉得它很神奇,它并不是真的掌握了围棋的规则,其实都是计算出来的 。但计算很有技巧,样本不是随便给的,也不是人类最顶尖的棋局给他,而是自己跟自己比,把赢的棋局作为样本 。其实训练了很多的模型,有的模型训练完了以后效果不如前一个模型,到后面直接扔了 。
最后怎么表达这个模型呢?给一个棋局要怎么告诉我赢棋的概率是多少?里面是用一个,它的好处是层数可以做得特别多 。这个模型就是一个,输入特征,也就是当前棋局的形势,输出概率 。这个效果比我们用专家规则好 。
只适用于 game 。零和,即一定会有输赢,没有合作的机制;完全信息,即双方都可以看到棋局;无随机,即每一个操作都是确定的 。它不能迁移到德州扑克,麻将之类的游戏 。
图11
这里介绍博弈论里面比较简单的算法,通过简单的算法,然后过渡到的蒙特卡罗树搜索 。每个圆圈表示你的下法,可以选择左边或者右边 。当你选择到左边或者右边以后,对手也可以选择左边到右边 。这个棋局很小,我们可以枚举所有可能的情况 。我们的目标是让最终得分最高 。显然正无穷是最高分,但是上一局是对手的回合,对手看到正无穷肯定只会选10,下一回合我会在10和5中选择10,但到再下一句对手会选择-10 。
这种博弈的游戏并不是自己找一个最优解就可以了,你得考虑对方 。对方有可能很傻,直接让你赢,也有可能跟你一样聪明 。在这个游戏里面我们既可以枚举所有情况,也可以用一个的算法找最优解 。这个算法很好理解,在某个阶段是对手的回合,我们假设对手很聪明的,总会选择最低分(min) 。我们的回合里面就在可以选择的范围里面选择一个最高分(max) 。假设对手是很聪明的,就会选择一个更低分的给我 。如果我们玩这个游戏,我们一开始应该选择右边,这里就达到了博弈论里面的纳什均衡点 。我们做出决策,对手也做出决策,当双方不能通过改变决策拿到一个更优解的时候,我们就达到了一个均衡点 。这是解决博弈论里面的算法,你要遍历所有的情况才能找到最优解 。大家听到过alpha-beta剪枝,其实就是优化的算法,不需要每个值都算一遍 。
图12 蒙特卡洛搜索树
围棋可以这样做吗?刚才说了基于蒙特卡罗树,也是一个数的结构 。这是一个棋盘,有361种可能,当我下某一个子时候,对方有360种可能,这样我们可以得到一个维度超高的树结构 。假设计算能力足够,我们知道最后一个回合是输还是赢,我们假设对方让我输,就不选择这种方法了,每次都选择自己最优的,假设对手也让我选择输的,理论上可以用算法解决的问题 。这个算法很简单,但是不能用在里面,因为它的维度很大,每个点都有300多个选择,300多层,几乎不可能遍历,即使有alpha-beta剪枝也解决不了 。
图12就是一个蒙特卡罗搜索树 。我们要在一定的 里面,找到效果比较好的分支,我们可以自己模拟下棋,下完发现这一个分支赢了,那就认为这个可能是好的分支,但对方改变一下策略你可能就输了 。蒙特卡罗树要解决的问题是怎么样找到一个好的分支,你可以尝试很多次,但是你不能无限次的尝试 。换言之就是怎么权衡和的问题 。就是有的棋没有下过,所以会尽可能探索一下,但是却不可能穷尽 。如果我们只有探索的策略,就是一个随机的策略,哪儿没有探索过就去探索一下,这种算法效率很低的,没有启发式的,就是盲目的探索,得到的有效的样本是很少的 。就是当我发现走这边可以赢,我尽可能前面都走这边,下面不断的稍微调整一下,把这一块都搞清楚了,以后如果继续都这样下,后面就会赢,探索空间很小,有些是没有探索过的 。怎么解决这两个问题呢?比较简单的就是给一个权重,比如说0.01,我们每次生成一个随机数,1%的机会会去探索新的节点,否则就会利用旧的节点 。