当前位置: 首页 > news >正文

【DouZero】 强化学习+self play达到人类玩家斗地主水平。

文章目录

    • 所解决的问题?
    • 背景
    • 所采用的方法?
      • 状态编码
    • 取得的效果?
    • 所出版信息?作者信息?
    • 参考链接

所解决的问题?

解决斗地主游戏,斗地主中与围棋游戏很大的不同在于非完美信息、多玩家卡牌游戏、既带有合作又带有竞争。合法动作空间巨大( 1 0 4 10^{4} 104),与他同等级的有无限注德州扑克。

背景

所采用的方法?

作者总体采用的方式还是比较简单,可能是期望在单机上能够跑起来做的牺牲。但是效果还可以。论文中描述的三个步骤如下:

首先就是基于策略 π \pi π去采样,得到的采样样本用来估计 Q Q Q值,对,这里没有什么花里胡哨的做法,直接就是基于采样的数据估计 Q ( s , a ) Q(s, a) Q(s,a)。细节可以描述为:对状态 s s s(自己的手牌,底牌,历史出牌序列)进行编码。计算合法出牌动作。根据训练好的模型Q(s, a)对合法动作进行打分,选择得分最高的动作进行出牌 a = a r g m a x a ∈ l e g a l Q ( s , a ) a = argmax_{a \in legal}Q(s, a) a=argmaxalegalQ(s,a)。整体的训练流程就是:AI对弈产生对局数据,将数据发送到训练器。使用训练数据通过梯度下降更新模型。

第一步采样的时候采用的epsilon-greedy方法采样,也是有优化空间。

剩下的就是看看作者如何编码状态和合法动作空间了:

状态编码

状态及动作编码:

状态和动作都编码为上图所示的 4 × 15 4 \times 15 4×15的矩阵。

之后作者将 4 × 15 4 \times 15 4×15的矩阵展平,也就是 1 × 60 1 \times 60 1×60, 由于只有一张大小王,因此会有6个位置始终为0,也就是每个矩阵可以转换成一个54维的向量。对于历史信息,我们考虑最近15步的历史信息,然后经过一个LSTM,不够的补0。具体特征表示如下:

作者在这里不考虑花色,虽然说花色基本不带有额外信息,但是有时候地主出牌需要考虑三张底牌花色。

当前手牌矩阵,地主牌矩阵,历史出牌序列矩阵,其他玩家出过的牌的矩阵,每位玩家剩余牌的数量,炸弹数量等等。历史出牌序列是只取了最近15轮的数据。

动作是出牌矩阵。

动作空间如下:

神经网络采用简单的六层全连接网络。斗地主中,地主上家,地主下家会存在不同的出牌风格。因此DouZero中采用三个模型。地主、地主上家、地主下家。

对于叫牌阶段,采用人类数据训练一个监督网络。叫牌阶段需要考虑的是自己的手牌和其它玩家的决策。叫牌阶段的特征如下:

叫牌阶段作者的准确率可以达到83%。

取得的效果?

评估两个算法的时候,同一套牌,会评估两次,算法 A A A玩农民,算法 B B B玩地主和算法 B B B玩农民,算法 A A A玩地主。实验结果如下:

这里采用了两种衡量指标,一种是WP、另一种是ADP。

作者在实验中,最多采用了45个进程采样,并且作者发现,训练效率和模拟器几乎成线性正比的。

在4张卡的1080Ti上,48个CPU核,两天打败人类监督数据学习得到的模型。

这个监督的模型是采用,快手的斗地主上较好的人类玩家数据,训练二分类得到的。负样本是合法的动作,但是并未被采纳的。batch size为8096,决策的时候选择分数最高的那个合法动作。

斗地主这个游戏本身是存在非常的的运气成分的,所以高几个百分点就代表了水平的很大的提高了。

所出版信息?作者信息?

ICML2021上的一篇文章。一作是莱斯大学的在读博士生查道琛。共同一作谢静如,美国密歇根大学物理学博士。

参考链接

  • DouZero论文pdf:http://proceedings.mlr.press/v139/zha21a/zha21a.pdf
  • 开源代码: https://github.com/kwai/DouZero

相关文章:

  • CMake Tutorial 巡礼(5)_添加系统自察
  • 注意力机制(attention)学习笔记
  • Cocos3.x 对象池NodePool使用介绍和注意事项
  • 计算机二级WPS 选择题(模拟和解析二)
  • java计算机毕业设计基于安卓Android微信的儿童疫苗接种管理小程序uniApp
  • 什么是协程?
  • [配置] 安卓 | 将微信公众号文章保存到Notion
  • Docker启动mysql服务
  • 基于java安全管理系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
  • 为何基于树的模型在表格型数据中能优于深度学习?
  • 贪心+二分
  • Geoserver Windows 安装部署教程
  • haproxy,nginx,keepalived综合运用
  • 动态多目标优化算法:MOEA/D-FD求解FDA1、FDA2、FDA3、FDA4和FDA5(Matlab代码)
  • 【基于C的排序算法】插入排序之直接插入排序
  • gf框架之分页模块(五) - 自定义分页
  • git 常用命令
  • JavaScript学习总结——原型
  • JS学习笔记——闭包
  • 创建一种深思熟虑的文化
  • 订阅Forge Viewer所有的事件
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 跨域
  • 悄悄地说一个bug
  • 深入浅出Node.js
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 算法-图和图算法
  • 网页视频流m3u8/ts视频下载
  • 详解移动APP与web APP的区别
  • elasticsearch-head插件安装
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • #1015 : KMP算法
  • $NOIp2018$劝退记
  • %@ page import=%的用法
  • (2.2w字)前端单元测试之Jest详解篇
  • (3)nginx 配置(nginx.conf)
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (第一天)包装对象、作用域、创建对象
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (南京观海微电子)——COF介绍
  • (南京观海微电子)——I3C协议介绍
  • (十三)Maven插件解析运行机制
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (一) springboot详细介绍
  • (原)Matlab的svmtrain和svmclassify
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转)Windows2003安全设置/维护
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • .htaccess配置重写url引擎
  • .Mobi域名介绍
  • .net 7 上传文件踩坑