人工智能首先在围棋上战胜了人类,然后又在德州扑克上战胜人类。关于围棋的人工智能算法介绍很多,但是,在德州扑克上介绍的就相对少了,那么,今天就来尝试浅显易懂的描述一下后面的魔术算法。
围棋是一个完美信息博弈,而扑克是典型的不完美信息博弈游戏,也是我们曾经以为计算机智能面临的长期挑战。对于德州扑克这种游戏,现在常用的算法是遗憾值匹配和最小化(Regret Matching and Minimization)。
为了讲清楚这个算法,先将多步游戏简化成一步游戏,也就是说我们看看石头剪刀布这种简单游戏,其实,它们和德州扑克背后的原理和算法是相似和相通的。
相信大家都玩过石头剪刀布这种游戏。假设这回我们通过它来玩钱,开始前,每个人放一元在桌上。如果谁赢了,就得到两元。否则,每个人拿回自己的一元。进一步假设,如果我们出石头,而对手出布且赢了,那我们就赔了一元。这里,不妨把我们的净赢或是净赔当作为效用,那么我们对于刚才玩的一局,效用就是-1,因为我们赔了一元。若是我们出了布或是剪刀来对付对手的布,那我们的效用就是0(平局)和+1(我们赢了)。
这时,我们肯定后悔没有出布而造成平局,更后悔没有出剪刀,因为这时还能赢一元。既然这样,那么我们用遗憾值(Regret)来表示,对于对手的某一个固定的出法,我们由于没有选择某个出法和已经使用的出法之间的效用的差异。也就是遗憾的程度,数值越大越遗憾。
在这个例子中,我们后悔没有出布的遗憾值=对手出布我们出布的效用-对手出布我们出石头的效用=0 - (-1) = 1。我们后悔没有出剪刀的遗憾值=对手出布我们出剪刀的效用-对手出布我们出石头的效用=(+1) - (-1) = 2。
那么,这时,你是不是大概感觉到我们应该怎么做了?我们应该在下一局选择遗憾值最大的那个出法,但是我们又不想完全的让我们的出法可以预测,然后被对手利用。于是,就有了遗憾值匹配算法(Regret Matching),说来很简单,就是将遗憾值换成概率,然后按照概率分布来选择出法(注意,不是最大概率)。
还是在这个例子中,我们不能后悔出了石头因为已经做了,它的遗憾值是0。但是,后悔没有出布,它的遗憾值是1。后悔没有出剪刀,它的遗憾值是2。那么对于下一局,使用遗憾值匹配算法,我们出石头,布和剪刀的概率就相应的变成了0,1/3,和2/3,正好是遗憾值归一的结果,也就是概率。
现在假设下一局,碰巧(不一定是概率最大的)我们出了剪刀(概率是2/3),而我们的对手出了石头。这回,对于石头,布和剪刀的遗憾值分别是1,2,和0。将这些和上一局的相加,那么累积的遗憾值(Cumulative Regret)分别是1,3,和2,使用遗憾值匹配算法,为下一局准备的概率就变成了1/6,3/6,和2/6。
理想情况下,我们希望最小化长期的期望遗憾值(Expected Regret),而这个是可以通过自己和自己玩(self-play)来达到的,当玩的次数足够多,比如,百万数量级,的话,就能趋近最小化目标,从而达到一个平衡点(Nash Equilibrium)。是不是有点像AlphaGo中使用的左右手互搏的强化学习(Reinforcement Learning)。
所以,看到了吗,当机器和人下时,对于人下的每一步,机器都需要做极其据大量的遗憾值匹配和最小化的计算,最后得到一个应对的策略。现在这个简化的石头剪刀布的游戏还只有一步,像德州扑克这种来回好几个回合的游戏,需要的计算量是惊人的。
请期待下一篇怎么将这个算法的思想完整的用到德州扑克上。看你们的表现哦,给点动力。