AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

如何训练智能体 Agent 玩毁灭战士 ViZDoom?

  • 2018-06-24
  • 本文字数:3441 字

    阅读完需:约 11 分钟

前言

毁灭战士(Doom),是由 ID Software 开发的第一人称射击游戏,是第一人称射击游戏的开拓者。ViZDoom 是基于 Doom 游戏的人工智能研究平台,主要针对的是深度强化学习的研究。ViZDoom 平台允许人工智能 Bot 使用游戏图像信息进行对战,与传统游戏内置 Bot 的区别在于,传统游戏内置 Bot 对整个游戏的信息都是知道的。而基于人工智能的 Agent 获得的游戏信息和人是相同的,需要不断地探索地图及执行相应的行动。本节主要介绍 ViZDoom 中的两个场景:射击场景,使用了 Deep Q-learning 算法;收集医药箱场景,使用了 Policy Gradients 算法。两个场景如下图所示:

在射击场景中,怪物随机地出现在界面的一端,智能体有左、右移动和射击三个动作,怪物只要被击中一次,就会被杀死。当怪物被杀死或执行100 次行动后怪物还没被杀死,则游戏结束。当怪物被杀死,智能体得到101 奖励分数;当执行射击后,怪物没有被击中,智能体得到-5 分的奖励;当执行向左或向右行动后,怪物还在存活,智能体得到-1 分的奖励。

在收集医药箱的场景中,整个地图是矩形的,地面上是酸性的腐蚀液体,液体会周期性地腐蚀智能体的生命值。地图上随机分布着一些医药箱,并且会时不时地出现一些新的医药箱。智能体为了在地图上生存下去,需要捡起医疗包,回复生命值。当智能体死亡或时间到了,游戏结束。智能体有三个行动,向左、向右及前进。每个行动后,如果智能体生存下来,获得1 奖励分数,如果死亡获取100 惩罚分数。

本文主要基于ViZDoom 中的两个场景,讲解强化学习的基本思想,Q-Learning 算法,Deep Q-Learning 算法如何应用于射击场景及Policy Gradient 算法如何应用于收集医药箱场景。

强化学习

强化学习是机器学习的一个重要分支,目前已经广泛应用于游戏博弈,机器人控制,自动驾驶,人机对话,优化调度等领域。目前,常使用的深度强化学习算法主要有Deep Q-learning, Policy Gradients, Actor Critic, and PPO(Proximal Policy Optimization)。强化学习的基本思想为在一个环境中,智能体(agent)不断地和环境交互,执行不同的行动,然后获取到相应的奖励。这样,智能体在不断的尝试过程中,学习到完成目标的最优策略,从而获取到最高的累积奖励。

强化学习的架构中主要包含的元素为:智能体(agent),环境(env),状态(state)行动(action)及奖励(reward)。如下所示:

上图中环境(env)为超级玛丽昂这个经典游戏(Super Mario);智能体(agent)可以认为是一个AI 机器人,在不断尝试玩这个游戏,实现智能体的自我进化;状态(State)为智能体(Super Mario Bros)在特定时间点的游戏界面中的位置信息,可以认为是一张游戏界面的截图;行动(action)为智能体根据当前的状态信息,所采取的动作,比如上、下、左、右、跳,相当于智能体和环境在进行交互操作;当智能体执行完动作后,智能体会从当前状态转移到下个状态,即游戏的下一帧;奖励(reward)为智能体执行完动作后获得的分数,比如执行完向前动作后,如果智能体不死,则得分加1。强化学习的基本思想为智能体能够最大化期望的累积奖励,用数学公式可表示为:

Q-Learning

Q Learning 主要用 Q Table 记录状态 s 下采取不同行动后,得到将来的期望奖励。如下所示:

其中,图中的每个小方格表示智能体的状态,共有5*5=20 种状态,对应的每个状态智能体可采取4 个行动,为向上,向下,向左,向右移动,如果为0 表示不可以移动。这样依据状态和行动,可生成表格Q-Table,每个单元格中的分数表示对状态采取对应行动后产生最大期望奖励的度量值。表格中的4 列,分别表示向左,向右,向上,向下移动;表格中的每行表示智能体的状态。对应于上节提到的老鼠吃奶酪的游戏,生成Q-Table 后,选择对应状态的行,得分最高的行动。Q-Learning 算法的主要目的是能够学习得到Q-function,如下所示:

Q-function 以状态和行动作为输入参数,返回输入状态对应的期望累积奖励。Q-Learning 算法通过迭代化地优化 Q-Table 得到 Q-function,算法的学习流程如下所示:

Deep Q-Learning

Q-Learning 算法主要是通过不断更新 Q-Table 来学习到优化的 Q-function。但是,对于大的智能体状态空间,比如说围棋,射击游戏,很难定义和更新 Q-Table,Q-Learning 算法将不起作用。Deep Q-Learning 算法,可对智能体的状态,通过神经网络算法,来逼近该状态下执行 action 后的 Q-Value 值。如下所示:

其中,Deep Q 的输入为状态信息,可以是一系列图片,输出为执行不同动作后,Q 值的期望。为了更好地利用观测到的经验数据,训练 DQN 的时候常采用经验回放机制 Experience Replay,经验回复机制主要能够解决两个方面的问题,一个是避免网络忘掉以前学到的经验信息,二是神经网络的训练数据是独立分布的,而强化学习生成的数据一般是序列化的,通过经验回放机制可以打破这种顺序结构。经验回放机制如下所示:

其中,构建一个 ReplyBuffer 数据结构,把智能体和环境交互的信息(s,a,r,s’)放入 Buffer 中,然后随机采样生成 Batch 的训练数据,输入 DQN 网络中。DQN 的优化目标,如下所示:

射击场景中,数据预处理如下所示:

其中,首先读取游戏界面图像,为了减少训练数据大小,经过图像预处理,把游戏图像转换成 84*84 大小的灰度图片;然后,为了处理智能体所处状态的时序变化,比如移动方向,把四张预处理后的图像堆叠起来,组成 84*84*4 大小的训练数据。

射击场景使用的 Deep Q-learning 的网络模型结构如下图所示:

其中,使用了 3 个卷积网络,每个卷积特征层的大小为 20*20*32,9*9*64,3*3*128;然后,经过全链接层,最后输出执行每个 action 行动后的 Q 值。损失函数的计算方式如下所示,其中 Qtarget 可基于经验回放的方式和当前 action 的奖励,由 Q-leaning 中 Q 值的更新方式计算得到。

复制代码
# Q is our predicted Q value.
self.Q = tf.reduce_sum(tf.multiply(self.output, self.actions_), axis=1)
# The loss is the difference between our predicted Q_values and the Q_target
# Sum(Qtarget - Q)^2
self.loss = tf.reduce_mean(tf.square(self.target_Q - self.Q))

Policy Gradient

Deep Q-Learning 是基于值的强化算法,而 Policy Gradients 是基于策略的强化算法,目标是能够学习到策略方程 policy function,直接实现智能体状态到行动的映射,优化的目标为策略方程π。在强化学习中有两种类型的策略:确定性策略和随机性策略。确定性策略使用在确定性的环境中,智能体执行完行动后有确定性的输出;随机性策略是输出智能体在当前状态,选择不同 action 的概率分布,随机性策略主要用于非确定性环境。

使用策略梯度算法主要有三个优点,第一:策略梯度算法有较好的收敛性,策略梯度算法会沿着梯度方向更新策略方程里面的参数,每个迭代下参数更新平稳,算法收敛性会比较好。第二:策略梯度算法在高维的 action 空间更有效果,策略梯度会直接根据根据智能体的状态输出要执行的 action,不需要计算 Q 值。第三:策略梯度算法可以适用于非确定性环境。

策略梯度算法的主要思想为通过优化θ,改变策略的概率分布,从而使得智能体能取得高的期望奖励,优化方式如下所示:

收集医药箱的场景的数据预处理方式类似于射击场景,模型结构如下所示:

复制代码
#与射击场景的模型的差异在于,输出为该状态下执行 action 的概率分布,如下所示:
self.action_distribution = tf.nn.softmax(self.logits)
#损失函数计算如下所示,其中,discounted_episode_rewards_ 为该状态下的累积奖励,logits 为模型输出的 logist 值,actions 为对应状态下选择执行的行动。
self.neg_log_prob = tf.nn.softmax_cross_entropy_with_logits_v2(logits = self.logits, labels = self.actions)
self.loss = tf.reduce_mean(self.neg_log_prob * self.discounted_episode_rewards_)

总结

本文首先介绍了 Doom 游戏的人工智能研究平台 ViZDoom,包括射击场景和医疗包收集场景;介绍了强化学习的基本思想,包括智能体,环境,状态,行动及奖励。然后,讲解了强化学习中常用的三个算法 Q-Learning,Deep Q-Learning,Policy Gradient;应用 Deep Q-Learning 于射击场景;应用 Policy Gradient 于医药包收集场景。用户可把强化学习应用到游戏博弈,机器人控制,自动驾驶,人机对话,优化调度等工业领域中的相关场景。

参考 **** 文献

[1] https://simoninithomas.github.io/Deep_reinforcement_learning_Course .

作者简介

武维(微信:allawnweiwu):博士,现为 IBM 架构师。主要从事深度学习平台及应用研究,大数据领域的研发工作。

2018-06-24 11:242070

评论

发布
暂无评论
发现更多内容

Edge 浏览器推出 Copilot Vision:免费实时解析屏幕内容;Aqua Voice:极速 AI 语音输入工具丨日报

声网

深度探讨操作系统运维、软件选型等社区标准,龙蜥标准化 SIG MeetUp 圆满举办

OpenAnolis小助手

操作系统 龙蜥社区 龙蜥sig 标准化 SIG 龙蜥meetup

重大升级| SecGPT V2.0:打造真正“懂安全”的大模型

云起无垠

CAD怎么将实体转换为网格

极客天地

真正懂生产的工业智能体长啥样?一个评测告诉你答案

王吉伟频道

工业互联网 智能体 工业智能体 Agents 工业大模型

赋能能源 | 智慧数据,构建更高效智能的储能管理系统

KaiwuDB

数据库 kwdb

阿里云OSS应对DDoS攻击策略

网络安全服务

阿里云 CDN 域名解析 DDoS DDoS 攻击

AI阅读眼动就翻页,领权益解锁HUAWEI Pura X内容新体验

最新动态

本周六,龙蜥社区邀您共赴第三届 eBPF 开发者大会

OpenAnolis小助手

操作系统 龙蜥社区 eBPF开发者大会

Arthas watch (方法执行数据观测)

刘大猫

Arthas 图像处理 图像分割 光学成像 光电成像技术

云备份技术解析:云备份 CT-CBR 关键技术介绍

天翼云开发者社区

云备份

StarRocks Community Monthly Newsletter (Mar)

StarRocks

OLAP 存算分离架构 StarRocks 湖仓一体 数据库 大数据

基于TiDB的应用多活架构

陈一之

TiDB 多活容灾 应用多活

虚拟化NFSoRDMA基础的分离式存储解决方案,用于AI工作负载

Sergey Platonov

性能测试 虚拟化 高性能计算, 高性能计算架构

Sentinel源码—ProcessorSlot的执行过程

电子尖叫食人鱼

如何与Cursor结对编程?

RockBot

AI技术实践 cursor

京东3D空间视频生成技术探索与应用

京东零售技术

龙蜥邀您参加 2025 全国大学生计算机系统能力大赛操作系统设计赛

OpenAnolis小助手

操作系统 开源大赛

技术干货推荐:高效解决性能瓶颈与抖动之进程热点追踪

OpenAnolis小助手

操作系统 SysOM 操作系统控制台

Java 开发玩转 MCP:从 Claude 自动化到 Spring AI Alibaba 生态整合

阿里巴巴云原生

Java

【IoTDB 线上小课 14】我们为什么要做树表双模型?

Apache IoTDB

让我看看有多少人不知道Vue3中也能实现高阶组件HOC

不在线第一只蜗牛

Java JavaScript 前端

Anolis OS 8.10 发布:软硬协同优化,满足多行业实际应用需求

OpenAnolis小助手

操作系统 龙蜥社区 龙蜥操作系统 Anolis OS

数字先锋|文化传承新引擎:班智达科研项目云端腾飞!

天翼云开发者社区

云服务 教育数字化

深入研究:微店商品详情API接口详解

tbapi

微店商品详情接口 微店API 微店数据采集

CAD怎么根据浮动范围选择圆

极客天地

通义灵码 Rules 库合集来了,覆盖Java、TypeScript、Python、Go、JavaScript 等

阿里巴巴云原生

阿里云 云原生 通义灵码

SvelteKit 最新中文文档教程(21)—— 最佳实践之图片

冴羽

前端 前端框架 React Svelte SvelteKit

小白速进!30 天吃透低代码,全是超绝干货!

代码制造者

低代码 自学 无代码

CAD如何放大图纸

极客天地

通义灵码 Rules 库合集来了,覆盖Java、TypeScript、Python、Go、JavaScript 等

阿里云云效

阿里云 云原生 通义灵码

如何训练智能体Agent玩毁灭战士ViZDoom?_语言 & 开发_武维_InfoQ精选文章