基于文本知识库的强化学习技术——Learning to Win by Reading Manuals in a Monte-Carlo Framework

论文链接:http://people.csail.mit.edu/branavan/papers/acl2011.pdf

论文主旨:本文设计了一种能够读懂 “游戏攻略” 并根据 “游戏攻略” 进行行为决策的算法框架。其中游戏攻略是指前人总结出来的游戏经验,以文字的形式表达。该算法将 “游戏攻略” 融入到行为值函数 Q(s,a)Q(s, a)Q(s,a) 的评价中,使得在算法在评价状态 sss 下采取行为 aaa 的效用 Q(s,a)Q(s, a)Q(s,a) 时会参考人类的先验知识(游戏攻略),即 Q(s,a,d)Q(s, a, d)Q(s,a,d)ddd 代表游戏指引 documentdocumentdocument

1. 背景介绍

大多数在我们玩游戏时都会接触到游戏指引,它告诉你这个游戏的基本规则或是游戏的基本操作方法,不仅如此,每个游戏都会存在一些独特的游戏攻略,这些攻略大多由一些玩过数百个小时的玩家们总结经验得到。通过这些游戏指引,每个新手玩家都能从中学习到不少经验从而快速提升。那么,当我们想训练一个 Agent 模型来玩一款新游戏时,我们同样期望这些 “游戏指引” 能在我们 Agent 学习的时候起到启发的作用,在有了先验知识辅助的情况下,Agent 便能够更加快速和更加拟人化的进行行为决策。

但使用人类先验知识的一大难题在于,人们之间沟通常使用文字交流,攻略指引也大多使用文字进行记载,机器如何能看懂文本形式的游戏指引呢?本文通过蒙特卡洛学习的方法来解决该难题,使得经过训练后的模型能够具备:“语义分析” + ”行为决策“ 这两大能力。

  • 语义分析是指模型能够提取出一句话中对状态行为的描述词,并将这些词准确的对应到游戏状态中去。例如,“在游戏的初始阶段尽量选择矿产资源丰富的地区建造基地” 这一句游戏攻略中,模型需要提取出 “游戏初期” 这一代表状态的词语和 “在矿产资源丰富的地区建造基地” 这一代表行为的词语。
  • 行为决策是指在提取到了攻略中的关键词后相应地在游戏初期的状态下采取在建议地区进行基地建造的行为。

一种最直观完成上述任务的方法是训练一种 “直译” 模型,能够对人类的语句进行翻译,提取出语句中状态关键词并与游戏中的状态建立一对一的关系——这也是前人们大多的工作。但这种方法对于复杂的游戏环境来说是无法实现的,例如想要建立 “矿产资源丰富的地区” 这个状态描述词和游戏中的某个具体状态之间的联系就非常复杂,如何定义矿产资源封不丰富?这对于同一局游戏中的不同时刻的定义都应该有所不同。再例如,“进攻敌方基地” 这一个词语包含了许多原子行为,要想与游戏内的某一个具体的行为建立一对一的关系也是非常困难的。因此,本文并不采取 “直译” 再 “映射” 的方法,而是直接将整个攻略文本作为一个参考输入,在计算行为值函数 Q(s,a)Q(s, a)Q(s,a) 的时候会去参考攻略文本中的内容,将 Q(s,a)Q(s, a)Q(s,a) 转变为 Q(s,a,d)Q(s, a, d)Q(s,a,d),通过人类先验知识来辅助行为值函数进行效用评判。

2. 将攻略文本引入值函数 Q(s,a)Q(s, a)Q(s,a) 评价

2.1 复杂环境下使用传统 Q(s,a)Q(s, a)Q(s,a) 函数的缺陷

在介绍该小节之前,我们先来回顾一下行为值函数(action-value function)Q(s,a)Q(s, a)Q(s,a) 的定义,行为值函数的输入是一个 <行为 - 状态> 的组合,是评价在某一特定状态下采取某个特定行为得到的效用值。但在一些复杂游戏中,直接学习 Q(s,a)Q(s, a)Q(s,a) 函数会存在两个致命的缺陷:

  1. 状态空间非常大,进行探索学习耗费时间非常长。
  2. 在复杂游戏中某些状态之间是很 “相似的” ,但是 Agent 很难找到这种 “相似” 的关联关系。

引入 “游戏攻略” 能很好的解决以上两个问题:由于将 “游戏攻略” 作为了一个参考输入,当 Q(s,a,d)Q(s, a, d)Q(s,a,d) 在进行效用评判时,攻略 ddd 中的内容会对状态 sss 和行为 aaa 起到约束的作用,即引导评价函数参考人类的先验知识来评价行为的效用值;另外,引入 “游戏攻略” 能够帮助模型找到状态之间的 “相似性”,例如 “尽量在河边建立基地” 这一句话语中,对于一张复杂地图来说,河边包含了若干个不同的地点,但倘若没有攻略信息,模型会再每一个河边尝试不同的行为得到 <s, a> 的效用集,但加入了攻略后,模型再训练过程后会意识到虽然有这么多不同的状态,但它们都有一个相似之处——都在河边,这样在一些相似的状态下模型就会采取相似的动作行为了。

2.2 设计 Q(s,a,d)Q(s, a, d)Q(s,a,d) 神经网络

针对较为复杂的游戏环境,我们通常无法枚举所有可能状态,因此本文使用近似拟合的手段来搭建评价函数模型。本文使用多层神经网络搭建模型,其中隐藏层用于分析攻略文本中各句子之间的关系以及所包含的行为和状态,整个神经网络结构如下:

  • 输入层 x→\overrightarrow{x}x:输入 (s,a,d)(s, a, d)(s,a,d) 向量,分别代表当前状态、决策行为、文本攻略。
  • 隐藏层1:该层包含两个子集 y→,z→\overrightarrow{y}, \overrightarrow{z}y,z,这两个子集对文本攻略进行分析,提取出状态、行为的关键词。
  • 隐藏层2:该层接收输入(s,a,d,yi,zjs, a, d, y_i, z_js,a,d,yi,zj),通过映射关系 fff 计算最后结果。
  • 输出层:输出最终效用值 QQQ

其中,隐藏层的设计是本文中最重要的设计环节,接下来我们着重剖析两个隐藏层的设计。

隐藏层1 —— 提取攻略文本中关键词信息

隐藏层1的主要作用是为了提取攻略文本中包含 “状态”、“行为” 的关键词信息,该层一共分为两个子集 y→,z→\overrightarrow{y}, \overrightarrow{z}y,z。其中,y→\overrightarrow{y}y 用于判断整段攻略文本中哪一句话和当下的状态-行为最贴切,本文使用线性log函数来计算攻略文本中第iii句话的贴切程度:
p(yi∣st,at,d)∝eu→⋅∅(yi,st,at,d)p(y_i|s_t, a_t, d) \propto e^{\overrightarrow{u}·\varnothing(y_i, s_t, a_t, d)} p(yist,at,d)eu(yi,st,at,d)
note: ∅(yi,st,at,d)\varnothing(y_i, s_t, a_t, d)(yi,st,at,d)是一个特征函数(见3.3),我们需要学习的参数是向量 u→\overrightarrow{u}u

通过上述计算我们能够选择出整段攻略中最符合当前状态的一句话,隐藏层的第二个子集 z→\overrightarrow{z}z 用于判断该句子中每一个单词的词性,将每个归类为以下三类中的一类:状态描述词、行为描述词、背景词。具体分类方法使用 “语法树” 的结构进行词性归类,在给定分类规则 qi→\overrightarrow{q_i}qi 的情况下,句子中第 iii 个单词的分类标签计算如下:
p(ei→∣yi,qi)=∏jp(ei∣j,e1:j−1→,yi,qi)p(ei∣j,e1:j−1→,yi,qi)=ev→⋅ψ(ej,j,e1:j−1→,yi,qi)p(\overrightarrow{e_i}|y_i, q_i) = \prod_j p(e_i|j, \overrightarrow{e_{1:j-1}},y_i, q_i )\\ p(e_i|j, \overrightarrow{e_{1:j-1}},y_i, q_i ) = e^{\overrightarrow{v}·\psi(e_j, j, \overrightarrow{e_{1:j-1}},y_i, q_i)} p(eiyi,qi)=jp(eij,e1:j1,yi,qi)p(eij,e1:j1,yi,qi)=evψ(ej,j,e1:j1,yi,qi)
note: ψ(ej,j,e1:j−1→,yi,qi)\psi(e_j, j, \overrightarrow{e_{1:j-1}},y_i, q_i)ψ(ej,j,e1:j1,yi,qi)是一个特征函数(见3.3),我们需要学习的参数是向量 v→\overrightarrow{v}v

其中,e1:j−1→\overrightarrow{e_{1:j-1}}e1:j1 代表在目前到第 jjj 个单词之前,根据前面的单词判断出来的词性标签。z→\overrightarrow{z}z 中包含了攻略段落中每一句话每一个单词的词性标签,但由于我们只需要整个攻略段落中最符合当前v状态的句子,因此 z→\overrightarrow{z}z 会根据 y→\overrightarrow{y}y 判断出的最符合语句输出相应句子的单词词性标签。

隐藏层2 —— 根据关键词、状态、行为进行效用评价

在获得了第一个隐藏层的输出 yiy_iyiziz_izi 后我们就可以进行效用计算了,计算公式如下:
Q(st,at,d)=w→⋅fk(st,at,d,yi,zi)Q(s_t, a_t, d) = \overrightarrow{w} · f_k(s_t, a_t, d, y_i, z_i) Q(st,at,d)=wfk(st,at,d,yi,zi)
note: fk(st,at,d,yi,zi)f_k(s_t, a_t, d, y_i, z_i)fk(st,at,d,yi,zi)是一个固定的值函数(见3.3),我们需要学习的参数是向量 w→\overrightarrow{w}w

2.3 模型训练流程

对于上述神经网络模型,文中采取在线学习的策略:

  • 对于每一个当前状态 sts_tst
    • 根据 Q(s,a,d)Q(s, a, d)Q(s,a,d) 函数选择行为,并与环境互动
    • 得到环境反馈分数(在文明游戏中,玩家会得到根据当前态势评价的实时分数,因此不用等到游戏结束)
    • 更新神经网络模型中 u→,v→,w→\overrightarrow{u}, \overrightarrow{v}, \overrightarrow{w}u,v,w 三个参数

对于游戏中的每一个状态都会重复以上3个步骤若干次,由于对每个游戏状态都枚举计算了一遍所以论文题目中才提到的是基于Monte-Carlo法进行学习。

如何进行参数更新呢?由于该问题是一个非线性的问题,因此文中使用随机梯度下降法来进行参数更新,损失函数选择 mean-square error,通过 Q(s,a,d)Q(s, a, d)Q(s,a,d)R(sτ)R(s_\tau)R(sτ) 之间的差值来求解梯度:
KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ \bigtriangleup…
note: α\alphaα 是代表学习率。

更进一步的,我们更直观的写出对三个参数 u→,v→,w→\overrightarrow{u}, \overrightarrow{v}, \overrightarrow{w}u,v,w 的更新式子:
w→←w→+αw[Q−R]f→(s,a,d,yi,zi)ui→←ui→+αu[Q−R]Qx→[1−p(yi∣x→)]vi→←vi→+αv[Q−R]Qx→[1−p(zi∣x→)]\overrightarrow{w} \leftarrow \overrightarrow{w} + \alpha_w[Q - R]\overrightarrow{f}(s, a, d, y_i, z_i) \\ \overrightarrow{u_i} \leftarrow \overrightarrow{u_i} + \alpha_u[Q - R]Q\overrightarrow{x}[1 - p(y_i|\overrightarrow{x})] \\ \overrightarrow{v_i} \leftarrow \overrightarrow{v_i} + \alpha_v[Q - R]Q\overrightarrow{x}[1 - p(z_i|\overrightarrow{x})] \\ ww+αw[QR]f(s,a,d,yi,zi)uiui+αu[QR]Qx[1p(yix)]vivi+αv[QR]Qx[1p(zix)]

3. 在《文明》游戏中进行算法验证

论文中使用 Civilization 2 游戏作为测试环境,该游戏是一种战旗式游戏,由多个玩家在地图上建立属于子集的国家。游戏地图是由一格一格组成的,每一格土地拥有不同的属性——海洋、陆地或是其他资源等,玩家需要尽快占领资源并发展自己的国家并侵略和吞并其余玩家的领土。在该实验中,使用一张1000块格子的地图,训练模型与游戏内置AI进行对抗,直到有一方完全占领整个地图获胜为止。

3. 1 状态-行为设置

实验中将状态定义为3个部分组成:

  1. 当前游戏地图状态,包含地图每一小格的属性
  2. 每个玩家的城市属性
  3. 每个玩家的单位属性

举个例子,部分属性如下所示:

地图格属性
- 领土类型(草地、山脉等等)
- 资源类型(小麦、煤矿等)
城市属性
- 城市人口
- 食物产量
单位属性
- 兵种(工人、建筑师等)
- 该单位是否在城市里?

在游戏中,每一个单位在对应的状态下可采取的行为空间可以通过游戏直接获取。由于一个玩家可以同时操作它所有的城市和士兵,因此,实验中把属于同一个玩家的所有对象可采取的行为空间合并为该玩家的行为空间。在该实验中每个玩家可以同时控制约18个单位,每个单位能选择15种行为,如果做组合的话,行为空间将有 102110^{21}1021 种。为了减小行为空间,实验种假定同一玩家的所有单位之间的行为互不影响,在相互独立的前提下就不用将所有可能的行为进行组合,极大缩减了玩家的行为空间。

3. 2 效用设置

通常Monte-Carlo法需要直到游戏结束得到评分之后再反向计算,考虑到文明游戏的复杂性,该实验直接通过文明游戏的 “实时评分系统” 进行 reward 的获取。该游戏中会根据玩家此刻的单位分布态势对玩家进行一个目前状态的评分,这个评分就被选为即时汇报 RRR

3. 3 关键句提取函数∅→\overrightarrow\varnothing、词性分类函数ψ→\overrightarrow\psiψ、效用值计算函数fk→\overrightarrow{f_k}fk

在2.2节中提到有几个特定的固定函数——关键句子提取函数、词性分类的函数以及最终效用计算的函数。其中∅→\overrightarrow\varnothingfk→\overrightarrow{f_k}fk 函数主要考虑状态、行为的属性和文本单词之间的关系,ψ→\overrightarrow\psiψ 函数旨在对一个独立的句子进行词性分类。下图是利用文明2游戏中的生存手册(游戏攻略)计算出的特征以及这些特征的属性值。

在整个实验中,∅→\overrightarrow\varnothingψ→\overrightarrow\psiψfk→\overrightarrow{f_k}fk 分别计算了 306800、158500、7900306800、158500、79003068001585007900个特征值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/290359.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

这是Blazor上传文件的最佳方式吗?

Blazor不得不说真是好东西&#xff0c;极大的提升了开发效率&#xff0c;很多的页面交互功能基本上只需要写很少的代码就能实现了&#xff0c;而且还是无js实现&#xff0c;你也绝对没有想到过&#xff0c;Blazor实现文件上传是有多么简单&#xff01;先说结论&#xff1a;Blaz…

ubuntu 下安装五笔输入法

2019独角兽企业重金招聘Python工程师标准>>> 从两年开始用五笔的吧&#xff0c;自从我学会用五笔之后&#xff0c;基本上就没有用过拼音了&#xff0c;我记忆中使用拼音也就那么几次&#xff0c;好像都是在远程协助别人的时候&#xff0c;用他们电脑上的拼音。然后我…

openstack horizon国际化分析

2019独角兽企业重金招聘Python工程师标准>>> 参考 官网国际化介绍&#xff1a;https://docs.djangoproject.com/en/1.7/topics/i18n/translation/#module-django.conf.urls.i18n Django模板&#xff08;网页多语种支持/国际化&#xff09;&#xff1a; http://blog.…

6. 堪比JMeter的.Net压测工具 - Crank 实战篇 - 收集诊断跟踪信息与如何分析瓶颈

1. 前言上面我们已经做到了接口以及场景压测&#xff0c;通过控制台输出结果&#xff0c;我们只需要将结果收集整理下来&#xff0c;最后汇总到excel上&#xff0c;此次压测报告就可以完成了&#xff0c;但收集报告也挺麻烦的&#xff0c;交给谁呢……找了一圈、没找到愿意接手…

被AI人机疯狂单杀?王者荣耀AI“绝悟”亲测体验

文章目录&#xff08;一&#xff09; 如何评测“绝悟”的智能程度&#xff1f;&#xff08;二&#xff09;“绝悟”个体操作能力分析2.1 草丛埋伏2.2 越塔强杀2.3 技能避伤2.4 技能combo&#xff08;三&#xff09;“绝悟”团队意识能力分析3.1 团队支援3.2 团队控龙3.3 反野意…

background意识(两)

今天看到了有关学习的价值的文章background于background-position该博客&#xff0c;现在与大家分享&#xff1a;语法&#xff1a; background-position : length || length background-position : position || position 取值&#xff1a; length&#xff1a;百分数 |由浮点数字…

js 月份加6个月_美国切削工具6月份订单较上月增加10.1

根据美国切削工具协会(USCTI)和AMT美国制造技术协会的数据&#xff0c;2020年6月&#xff0c;美国切削工具的总消费额为1.506亿美元。根据参与切削工具市场报告合作的公司报告&#xff0c;这一总额比5月份的1.368亿美元增长了10.1%&#xff0c;与2019年6月报告的1.997亿美元相比…

selenium 使用js执行脚本儿链接整理

2019独角兽企业重金招聘Python工程师标准>>> 使用Webdriver执行js小结&#xff1a;http://lijingshou.iteye.com/blog/2018929 SeleniumWebdriver学习(三)执行JS脚本&#xff1a;http://www.tuicool.com/articles/buIbeiN selenium webdriver 执行javascript代码&am…

接口返回json对象出现套娃递归问题 | System.Text.Json 版本

前言看到一篇文章《Asp-Net-Core开发笔记&#xff1a;接口返回json对象出现套娃递归问题》原文是使用 NewtonsoftJson 解决的返回json对象出现套娃递归问题&#xff1a;services.AddControllersWithViews().AddNewtonsoftJson(options > {options.SerializerSettings.Refere…

高效性跨平台分布式软件开发技术——gRPC

文章目录1. gRPC&#xff08;google Remote Procedure Call&#xff09; 技术 —— 高效性地跨平台、跨语言开发2. 基于 python 实现 gRPC 框架2.1 一个 gPRC 项目必须包含的几大部分2.2 helloworld.proto 文件——定义全局可调用函数及其参数数据结构2.3 server.py 文件——实…

在VS中设置比较和谐的字体和颜色的方法

作者&#xff1a;朱金灿来源&#xff1a;http://blog.csdn.net/clever101先在studiostyl.es网站选择你喜欢的字体方案&#xff0c;我个人比较喜欢这款&#xff1a;Humane Studio&#xff0c;注意在网页上选择你使用VS版本&#xff0c;然后单击Downlaod this scheme就可以了&…

一个脚本实现全量增量备份,并推送到远端备份中心服务器

2019独角兽企业重金招聘Python工程师标准>>> 摘要 由于工作需要&#xff0c;刚好需要这样一个功能的脚本&#xff0c;主要解决&#xff1a; 1. 不想在crontab中调度两条备份任务&#xff0c;一个做全量一个做增量 2. 如果每小时做增量&#xff0c;凌晨4点做全量&…

地壳中元素含量排名记忆口诀_Nature:利用熔融包裹体的元素和同位素示踪俯冲带流体来源...

Nature&#xff1a;利用熔融包裹体的元素和同位素示踪俯冲带流体来源在汇聚板块边缘&#xff0c;大洋岩石圈通过俯冲作用携带挥发分(尤其是水)进入地幔。这些俯冲下去的水/流体控制着岩浆产物、地震活动、陆壳形成和资源成矿。但是&#xff0c;识别不同流体的来源(沉积物&#…

Windows 10开发基础——文件、文件夹和库(一)

Windows 10开发基础——文件、文件夹和库&#xff08;一&#xff09; 原文:Windows 10开发基础——文件、文件夹和库&#xff08;一&#xff09;主要内容&#xff1a; 1.枚举查询文件和文件夹 2.文本文件读写的三种方法——创建写入和读取文件 3.获得文件的属性 枚举查询文件和…

Sigmoid函数与逻辑回归

文章目录(1). Sigmoid函数的由来——伯努利分布的衍生物1.1 为什么会有 sigmoid 函数的出现&#xff1f;1.2 sigmoid 函数推导过程1.3 sigmoid 函数求导(2). 逻辑回归&#xff08;Logistic Regression&#xff09;2.1 逻辑回归算法的最终本质——求决策边界2.2 逻辑回归算法中的…

Avalonia跨平台入门第二十二篇之人脸检测

在前面分享的几篇中咱已经玩耍了Popup、ListBox多选、Grid动态分、RadioButton模板、控件的拖放效果、控件的置顶和置底、控件的锁定、自定义Window样式、动画效果、Expander控件、ListBox折叠列表、聊天窗口、ListBox图片消息、窗口抖动、语音发送、语音播放、语音播放问题、玩…

pkpm板按弹性计算还是塑性_PKPM中的S\R验算显红原因分析

PKPM软件砼结构施工图中的&#xff0c;梁的配筋面积中&#xff0c;SR验算&#xff0c;经常会有个别构件显红的情况。查了一下PKPM说明书&#xff0c;并没有针对此情况的详细说明。根据本人的实际经验&#xff0c;总结了一下解决此问题的主要方法&#xff1a;一.超筋SR的值显示为…

多智能体连续行为空间问题求解——MADDPG

目录1. 问题出现&#xff1a;连续行为空间出现2. DDPG 算法2.1 DDPG 算法原理2.2 DDPG 算法实现代码2.2.1 Actor & Critic2.2.2 Target Network2.2.3 Memory Pool2.2.4 Update Parameters&#xff08;evaluate network&#xff09;2.2.5 Update Parameters&#xff08;targ…

在.NET 6 中如何创建和使用 HTTP 客户端 SDK

如今&#xff0c;基于云、微服务或物联网的应用程序通常依赖于通过网络与其他系统通信。每个服务都在自己的进程中运行&#xff0c;并解决一组有限的问题。服务之间的通信是基于一种轻量级的机制&#xff0c;通常是一个 HTTP 资源 API。从.NET 开发人员的角度来看&#xff0c;我…

ttl接地是高电平还是低电平_功放技术参数1——高电平

在汽车音响中的功放或者DSP再或者是DSP功放中我们都会遇到高电平信号或者低电平信号输入&#xff0c;我们该如何判断主机输出的到底是高电平信号还是低电平信号呢&#xff1f;我们可以用一个很简单的方法来鉴定&#xff0c;那就是主机输出能够直接驱动喇叭的为高电平信号输出&a…