公众号关注 “GitHubPorn”
设为 “星标”,每天带你逛 GitHub!
论文链接:https://arxiv.org/abs/2106.06135
GitHub 链接:https://github.com/kwai/DouZero
在线演示:(电脑打开效果更佳;如果访问太慢,可从 GitHub 上下载并离线安装:https://github.com/datamllab/rlcard-showdown)
合作与竞争并存:无论是德州扑克还是麻将,玩家之间都是竞争关系。然而,在斗地主中,两个农民玩家要相互配合对抗地主。虽然过去有论文研究过游戏中的合作关系 [1],但是同时考虑合作和竞争仍然是一个很大的挑战。
庞大而复杂的牌型:斗地主有复杂的牌型结构,例如单张、对子、三带一、顺子、炸弹等等。
用价值网络生成一场对局
记录下该对局中所有的状态、动作和最后的收益(胜率)
将每一对状态和动作作为网络输入,收益作为网络输出,用梯度下降对价值网络进行一次更新
很容易对动作进行编码。斗地主的动作与动作之前是有内在联系的。以三带一为例:如果智能体打出 KKK 带 3,并因为带牌带得好得到了奖励,那么其他的牌型的价值,例如 JJJ 带 3,也能得到一定的提高。这是由于神经网络对相似的输入会预测出相似的输出。动作编码对处理斗地主庞大而复杂的动作空间非常有帮助。智能体即使没有见过某个动作,也能通过其他动作对价值作出估计。
不受过度估计(over-estimation)的影响。最常用的基于价值的强化学习方法是 DQN。但众所周知,DQN 会受过度估计的影响,即 DQN 会倾向于将价值估计得偏高,并且这个问题在动作空间很大时会尤为明显。不同于 DQN,蒙特卡罗方法直接估计价值,因此不受过度估计影响。这一点在斗地主庞大的动作空间中非常适用。
蒙特卡罗方法在稀疏奖励的情况下可能具备一定优势。在斗地主中,奖励是稀疏的,玩家需要打完整场游戏才能知道输赢。DQN 的方法通过下一个状态的价值估计当前状态的价值。这意味着奖励需要一点一点地从最后一个状态向前传播,这可能导致 DQN 更慢收敛。与之相反,蒙特卡罗方法直接预测最后一个状态的奖励,不受稀疏奖励的影响。
DeltaDou [5] 是首个达到人类玩家水平的 AI。算法主要基于贝叶斯推理和蒙特卡罗树搜索,但缺点是需要依赖很多人类经验,并且训练时间非常长。即使在用规则初始化的情况下,也需要训练长达两个月。
CQN [3] 是一个基于牌型分解和 DQN 的一种方法。虽然牌型分解被证明有一定效果,但是该方法依然不能打败简单规则。
SL (supervised learning,监督学习)是基于内部搜集的顶级玩家的对战数据,用同样的神经网络结构训练出来的模型。
除此之外,作者尽可能搜集了所有已知的规则模型,包括 RHCP、RHCP-v2、RLCard 中的规则模型 [2],以及一个随机出牌策略。
WP (Winning Percentage) 代表了地主或农民阵营的胜率。算法 A 对算法 B 的 WP 指标大于 0.5 代表算法 A 强于算法 B。
ADP (Average Difference in Points) 表示地主或农民的得分情况。每有一个炸弹 ADP 都会翻倍。算法 A 对算法 B 的 ADP 指标大于 0 代表算法 A 强于算法 B。