热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

游戏_24分钟让AI跑起飞车类游戏

本文由编程笔记#小编为大家整理,主要介绍了24分钟让AI跑起飞车类游戏相关的知识,希望对你有一定的参考价值。
本文由编程笔记#小编为大家整理,主要介绍了24分钟让AI跑起飞车类游戏相关的知识,希望对你有一定的参考价值。



WeTest 导读

本文主要介绍如何AI在24分钟内学会玩飞车类游戏。我们使用Distributed PPO训练AI,短时间内可以取得不错的训练效果。

 



 

本方法的特点:

1. 纯游戏图像作为输入

2. 不使用游戏内部接口

3. 可靠的强化学习方法

4. 简单易行的并行训练

 

1. PPO简介

PPO(Proximal Policy Optimization)是OpenAI在2016年NIPS上提出的一个基于Actor-Critic框架的强化学习方法。该方法主要的创新点是在更新Actor时借鉴了TRPO,确保在每次优化策略时,在一个可信任的范围内进行,从而保证策略可以单调改进。在2017年,DeepMind提出了Distributed PPO,将PPO进行类似于A3C的分布式部署,提高了训练速度。之后,OpenAI又优化了PPO中的代理损失函数,提高了PPO的训练效果。

 

本文不介绍PPO的算法细节,想学习的同学可以参考以下三篇论文:

【1】Schulman J, Levine S, Abbeel P, et al. Trust region policy optimization[C]//International Conference on Machine Learning. 2015: 1889-1897.

【2】Heess N, Sriram S, Lemmon J, et al. Emergence of locomotion behaviours in rich environments[J]. arXiv preprint arXiv:1707.02286, 2017.

【3】Schulman J, Wolski F, Dhariwal P, et al. Proximal policy optimization algorithms[J]. arXiv preprint arXiv:1707.06347, 2017.

 

2. 图像识别

2.1 游戏状态识别

游戏状态识别是识别每一局游戏关卡的开始状态和结束状态。在飞车类游戏中,开始状态和结束状态的标志如图1所示。因为红色框中的标志位置都固定,因此我们使用模板匹配的方法来识别这些游戏状态。

 

技术分享图片

图1 游戏状态标志

 

从开始状态到结束状态之间的图像是游戏关卡内的图像,此时进行强化学习的训练过程。当识别到结束状态后,暂停训练过程。结束状态之后的图像都是UI图像,我们使用UI自动化的方案,识别不同的UI,点击相应的按钮再次进入游戏关卡,开始下一轮的训练过程,如图2所示。

 

技术分享图片

图2 游戏流程

 

2.3 游戏图像识别

我们对游戏关卡中的图像识别了速度的数值,作为强化学习中计算激励(Reward)的依据,如图3所示。速度识别包括三个步骤:

第一步,图像分割,将每一位数字从识别区域中分割出来。

第二步,数字识别,用卷积神经网络或者模板匹配识别每一位图像中的数字类别。

第三步,数字拼接,根据图像分割的位置,将识别的数字拼接起来。

 

技术分享图片

图3 图像各个区域示意图

 

3. AI设计

3.1 网络结构

我们使用的网络结构如图4所示。输入为游戏图像中小地图的图像,Actor输出当前时刻需要执行的动作,Critic输出当前时刻运行状态的评价。AlexNet使用从输入层到全连接层之前的结构,包含5个卷积层和3个池化层。Actor和Critic都有两个全连接层,神经元数量分别为1024和512。Actor输出层使用softmax激活函数,有三个神经元,输出动作策略。Critic输出层不使用激活函数,只有一个神经元,输出评价数值。

 

技术分享图片

图4 网络结构示意图

 

3.2 输入处理

我们将小地图图像的尺寸变为121X121,输入到AlexNet网络后,在第三个池化层可以获得2304维的特征向量(576*2*2=2304)。将这个特征向量作为Actor和Critic的输入。我们使用在ImageNet上训练后的AlexNet提取图像特征,并且在强化学习的过程中没有更新AlexNet的网络参数。

 

3.3 动作设计

我们目前在设计飞车类游戏动作时,使用离散的动作,包括三种动作:左转、右转和NO Action。每种动作的持续时间为80ms,即模拟触屏的点击时间为80ms。这样的动作设计方式比较简单,便于AI快速地训练出效果。如果将动作修改为连续的动作,就可以将漂移添加到动作中,让AI学习左转、右转、漂移和NO Action的执行时刻和执行时长。

 

3.4 激励计算

如果将游戏的胜负作为激励来训练AI,势必会花费相当长的时间。在本文中,我们根据游戏图像中的速度数值,计算当前时刻的激励。假定当前时刻的速度为Vp,前一时刻的速度为Vq,那么激励R按照以下方式计算:

If  Vp ≥ Vq , R = 0.25X(Vp - Vq)

If  Vp < Vq , R = -0.25X(Vq - Vp)

If  Vp > 250 , R = R + 5.0

If  Vp < 50 , R = R - 5.0

这样的激励计算方式可以使AI减少撞墙的概率,并且鼓励AI寻找加速点。

 

4. 训练环境

4.1 硬件

我们搭建了一个简单的分布式强化学习环境,可以提高采样效率和训练速度,硬件部署方式如图5所示。

 

技术分享图片

图5 硬件部署方式

 

主要包含以下硬件:

1)3部相同分辨率的手机,用于生成数据和执行动作。

2)2台带有显卡的电脑,一台电脑Proxy用于收集数据、图像识别以及特征提取,另一台电脑Server用于训练AI。

3)1个交换机,连接两台电脑,用于交换数据。

 

4.2 软件

Ubuntu 14.04 + TensorFlow 1.2 + Cuda 7.0

 

5. 分布式部署

我们使用的分布式部署方式如图6所示。

 

技术分享图片

图6 分布式部署方式

 

在Proxy端设置三个proxy进程,分别与三部手机相连接。

在Server端设置一个master进程和三个worker线程。master进程和三个worker线程通过内存交换网络参数。master进程主要用于保存最新的网络参数。三个proxy进程分别和三个worker线程通过交换机传输数据。

 

proxy进程有6个功能:

1)从手机接收图像数据;

2)识别当前游戏状态;

3)识别速度计算激励;

4)利用AlexNet提取图像特征;

5)发送图像特征和激励到worker线程,等待worker线程返回动作;

6)发送动作到手机;

 

worker线程有5个功能:

1)从proxy进程接收图像特征和激励;

2)从master进程拷贝最新的网络参数;

3)将Actor输出的动作发送到proxy进程;

4)利用PPO更新网络参数;

5)将更新后的网络参数传输到master进程;

 

6. 实验

6.1 参数设置

PPO的训练参数很多,这里介绍几个重要参数的设置:

1)学习速率:Actor和Critic的学习率都设置为1e-5

2)优化器:Adam优化器

3)Batch Size: 20

4)采样帧率:10帧/秒

5)更新次数:15次

6)激励折扣率:0.9

 

6.2 AI效果

 

6.3 数据分析

表1和表2分别对比了不同并行数量和不同输入数据情况下AI跑完赛道和取得名次的训练数据。最快的训练过程是在并行数量为3和输入数据为小地图的情况下,利用PPO训练24分钟就可以让AI跑完赛道,训练7.5小时就可以让AI取得第一名(和内置AI比赛)。并且在减少一部手机采样的情况下,也可以达到相同的训练效果,只是训练过程耗时更长一点。另外,如果将输入数据从小地图换成全图,AI的训练难度会有一定程度的增加,不一定能达到相同的训练效果。

 

表1 AI跑完赛道的数据对比








































输入数据


并行数量


训练时间


训练次数


训练局数


全图


2


100分钟


4200次


78局


小地图


2


40分钟


1700次


32局


全图


3


78分钟


3900次


72局


小地图


3


24分钟


1400次


25局


 

表2 AI取得名次的数据对比





































输入数据


并行数量


训练时间


训练次数


训练局数


名次


小地图


2


9小时


19000次


354局


1


全图


3


60小时


98000次


1800局


4-6


小地图


3


7.5小时


17800次


343局


1


如7展示了利用PPO训练AI过程中激励的趋势图,曲线上每一个点表示一局累计的总激励。训练开始时,AI经常撞墙,总激励为负值。随着训练次数的增加,总激励快速增长,AI撞墙的几率很快降低。当训练到1400多次时,总激励值超过400,此时AI刚好可以跑完赛道。之后的训练过程,总激励的趋势是缓慢增长,AI开始寻找更好的动作策略。

 

技术分享图片

图7 AI训练过程中激励的趋势图

 

7. 总结

本文介绍了如何使用Distributed PPO在24分钟内让AI玩飞车类游戏。当前的方法有一定训练效果,但是也存在很多不足。

 

目前,我们想到以下几个改进点,以后会逐一验证:

1)将AlexNet替换为其他卷积神经网络,如VGG、Inception-V3等等,提高特征提取的表达能力。

2)提高并行数量,添加更多手机和电脑,提高采样速度和计算速度。

3)增加Batch Size,使用较长的时间序列数据训练AI。

4)将离散动作替换为连续动作,增加漂移的学习。

5)多个关卡同时训练,提高AI的泛化能力。

 

参考文献:

【1】Schulman J, Levine S, Abbeel P, et al. Trust region policy optimization[C]//International Conference on Machine Learning. 2015: 1889-1897.

【2】Heess N, Sriram S, Lemmon J, et al. Emergence of locomotion behaviours in rich environments[J]. arXiv preprint arXiv:1707.02286, 2017.

【3】Schulman J, Wolski F, Dhariwal P, et al. Proximal policy optimization algorithms[J]. arXiv preprint arXiv:1707.06347, 2017.

【4】https://morvanzhou.github.io/tutorials/machine-learning/reinforcement-learning/6-4-DPPO/

 

“深度兼容测试”现已对外,腾讯专家为您定制自动化测试脚本,覆盖应用核心场景,对上百款主流机型进行适配兼容测试,提供详细测试报告,并且首度使用AI能力助力测试

 


点击http://wetest.qq.com/cloud/deepcompatibilitytesting#/ 即可体验。

如果使用当中有任何疑问,欢迎联系腾讯WeTest企业QQ:2852350015




推荐阅读
  • 【论文】ICLR 2020 九篇满分论文!!!
    点击上方,选择星标或置顶,每天给你送干货!阅读大概需要11分钟跟随小博主,每天进步一丢丢来自:深度学习技术前沿 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 本文介绍了在Python张量流中使用make_merged_spec()方法合并设备规格对象的方法和语法,以及参数和返回值的说明,并提供了一个示例代码。 ... [详细]
  • Learning to Paint with Model-based Deep Reinforcement Learning
    本文介绍了一种基于模型的深度强化学习方法,通过结合神经渲染器,教机器像人类画家一样进行绘画。该方法能够生成笔画的坐标点、半径、透明度、颜色值等,以生成类似于给定目标图像的绘画。文章还讨论了该方法面临的挑战,包括绘制纹理丰富的图像等。通过对比实验的结果,作者证明了基于模型的深度强化学习方法相对于基于模型的DDPG和模型无关的DDPG方法的优势。该研究对于深度强化学习在绘画领域的应用具有重要意义。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • 十大经典排序算法动图演示+Python实现
    本文介绍了十大经典排序算法的原理、演示和Python实现。排序算法分为内部排序和外部排序,常见的内部排序算法有插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。文章还解释了时间复杂度和稳定性的概念,并提供了相关的名词解释。 ... [详细]
  • 2016 linux发行版排行_灵越7590 安装 linux (manjarognome)
    RT之前做了一次灵越7590黑苹果炒作业的文章,希望能够分享给更多不想折腾的人。kawauso:教你如何给灵越7590黑苹果抄作业​zhuanlan.z ... [详细]
  • 本文总结了初学者在使用dubbo设计架构过程中遇到的问题,并提供了相应的解决方法。问题包括传输字节流限制、分布式事务、序列化、多点部署、zk端口冲突、服务失败请求3次机制以及启动时检查。通过解决这些问题,初学者能够更好地理解和应用dubbo设计架构。 ... [详细]
  • 花瓣|目标值_Compose 动画边学边做夏日彩虹
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Compose动画边学边做-夏日彩虹相关的知识,希望对你有一定的参考价值。引言Comp ... [详细]
  • 工作经验谈之-让百度地图API调用数据库内容 及详解
    这段时间,所在项目中要用到的一个模块,就是让数据库中的内容在百度地图上展现出来,如经纬度。主要实现以下几点功能:1.读取数据库中的经纬度值在百度上标注出来。2.点击标注弹出对应信息。3 ... [详细]
  • 本博文基于《Amalgamationofproteinsequence,structureandtextualinformationforimprovingprote ... [详细]
  • Thisworkcameoutofthediscussioninhttps://github.com/typesafehub/config/issues/272 ... [详细]
  • 查找给定字符串的所有不同回文子字符串原文:https://www ... [详细]
author-avatar
小米-发烧友
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有