用强化学习玩《超级马里奥》

Pytorch的一个强化的学习教程( Train a Mario-playing RL Agent)使用超级玛丽游戏来学习双Q网络(强化学习的一种类型),官网的文章只有代码, 所以本文将配合官网网站的教程详细介绍它是如何工作的,以及如何将它们应用到这个例子中。

强化学习是如何起作用的

机器学习可以分为三类:监督学习、非监督学习和强化学习。

在监督学习中,模型被赋予一个训练数据集,该数据集包含输入和输出(标签)。它从这些数据中学习,了解如何从输入中获得输出。训练完成后使用测试数据集(包含模型从未见过的输入),模型必须尝试预测每个数据点应该被赋予的标签。

在无监督学习中,模型被赋予一个数据集,但数据点都没有标签。它被提供数据点和一些簇来将它们分组。随着簇数量的变化,算法的输出也随之变化。这种类型的学习用于发现给定数据中的模式。

强化学习与其他两种训练方法不同:

上图t表示被处理的步骤(或时间)。在一个步骤中,环境为代理的行为以及当前状态提供响应(奖励或惩罚)。有了这些信息,代理就可以确定要采取的行动。

它的训练是不受监督的,但它不是试图将数据点分组,而是试图通过在环境中执行有利的行为来获得奖励,同时试图避免犯惩罚它的错误(R_t)。

当涉及到强化学习时,理解以下术语很重要:

Agent: Agent是一种神经网络,它通过与环境的相互作用进行学习,并了解哪些行为会导致好的结果和坏的结果,我们将它称为代理,也有叫他为智能体的,但是我觉得代理更加合适,因为它相当于是我们玩游戏的代理人。

Environment:环境是代理在其中进行交互和学习的世界

Action:动作是指行为主体在特定的环境(状态)下决定要做的事情

State:状态是对给定时刻环境中的内容的捕获

Response:响应是当一个代理做了对其下一个状态有益或有害的事情时给予它的东西

深度Q学习与双深度Q网络(DDQNs)

深度Q学习是一种使用深度神经网络的强化学习。它使用Q值(状态的质量),确定其行为对环境状态是有益的还是有害的,来进行学习

深度Q网络(DQN)是一种多层神经网络,对于给定的状态,它根据网络的权重和偏差输出一个动作值向量。对于n维状态空间和包含m个动作的动作空间,神经网络是一个从Rn到Rm的函数。

Q学习(Q-learning)算法在某些条件下会高估动作值,这可能会影响它们的性能。而双深度Q学习是对DQN算法的一种特殊改变,它不仅减少了算法的过高估计,还提高了算法的性能。双Q学习的思想是通过将目标中的最大操作分解为行动的选择和行动的评估来减少过高估计。

深入理解深度Q学习和双深度Q网络(DDQNs)涉及复杂的数学。我们这里不详细介绍,如果有兴趣想详细了解请看这篇论文(https://arxiv.org/pdf/1509.06461.pdf)

MarioNet

下面我们进入正题“Train A Mario-Playing RL Agent”的教程详解,非常感谢Yuanson Feng, Suraj Subramanian, Howard Wang和Steven Guo制作了这个教程。

背景知识

在训练玩马里奥的背景下:

  • 我们的代理是马里奥。
  • 游戏环境就是马里奥的世界——它包含敌人、障碍和道具,如管子、蘑菇等。
  • 行动就是马里奥执行的动作
  • 动作空间是马里奥可以执行的所有可能的动作:向右跑,向右跳,向左跑,向左跳。在这种情况下,我将马里奥限制在右侧移动,以便进行更快的训练。
  • 状态包括以下几项内容:马里奥的位置、障碍、升级道具和敌人的位置、马里奥的当前分数(不重要)以及所有物体的前进方向。
  • 状态空间是环境中所有可能状态的集合。
  • 奖励是环境对代理的反馈,这将推动马里奥学习并改变自己未来的行动。
  • 回报是经过多次游戏或章节的累积奖励。
  • 状态中行为的质量是给定状态和行为的预期回报。

环境预处理

在我们开始训练神经网络之前,我们可以优化环境,这样训练的计算量就不会那么大。

灰度化:环境的大小是一个3x240x256的窗口,其中3表示RGB通道,240x256表示窗口的尺寸。状态中每个对象的颜色并不会真正影响代理的最终行动,例如马里奥穿红色衣服或砖块是棕色并不会改变代理的行动。所以我们可以将整个图像转换为灰度图,而不是处理一个计算量很大的3x240x256窗口,这样我们可以使用1x240x256的灰度图。

调整大小:对于计算机来说,以每秒15帧的速度处理一个240 × 256像素的窗口可能不是最简单的(稍后会详细介绍)。所以我们可以调整代理接收的图像的大小,比如缩小到到84像素乘84像素。

跳帧:我们的代理处理每一帧并不会增加多少价值,因为通过查看连续的帧,代理不会获得太多信息,因为连续的帧包含非常相似的状态。所以我们可以跳过给定数量的中间帧而不会丢失太多信息。

叠加帧:帧叠加用于将连续的帧合并为一个统一的学习模型输入。使用这种方法,可以通过查看给定的帧,更容易地识别之前发生的动作。

所以我们堆叠四个连续的,灰度化的,调整大小的帧,这样得到了一个4x84x84的大小的输入。

定义代理

马里奥(我们的代理)需要能够行动、记忆和学习。

动作:代理的行为基于环境的当前状态和最优的行为策略。在每个状态下,马里奥要么执行一个动作(探索),要么使用他的神经网络(MarioNet)为他提供的一个最佳执行动作(利用)。马里奥根据自己的探索速度决定是否进行探索或利用。

在训练开始时,探索率被设置为1,这意味着马里奥肯定会做一个随机的动作。然后,随着每个堆叠帧的流逝,探索速率会随着一个叫做探索速率衰减的数字而减少,这将引导马里奥使用神经网络而不是随机行动进行探索。

记忆(缓存和回忆):马里奥根据当前状态、奖励和下一个状态来记住自己以前的动作。对于每个动作,马里奥都会缓存他的经验(将它们存储在内存中)。然后,他从记忆缓存中回忆(随机抽取一批体验),并使用它来学习如何更好地玩游戏。

学习:随着时间的推移,马里奥需要能够使用自己的经验去完善自己的行动(或行动策略)。为了完成这项任务,我们使用DDQN算法。在这种情况下,DDQN使用两个近似最优动作值函数的卷积神经网络。采用时间差分法(TD)计算TD_estimate和 TD_target,并计算损失来优化神经网络参数。

运行MarioNet

我查看官方教程的代码,了解它是如何工作的。代码注释得非常好。它可以让我们了解双Q学习中的所有数学概念是如何转化为代码的。

运行网络并观察网络是如何工作的非常有趣。我们这里不对这个模型进行完整的训练步骤,因为这需要4万轮次。我花了大约9分钟在笔记本电脑上看完100轮。按照这个速度,需要60-70个小时才能够训练万4万的轮次。

下面列出了一些在整个训练过程中生成的输出图表和日志。通过观察这张图,我可以观察到神经网络是如何逐步学习的。注意在前几轮中,马里奥的行动是完全随机的。直到第40轮(图表中的第8轮)左右,马里奥才开始利用他的神经网络。

x轴上的值乘以5是论次数。y轴是这5轮的平均奖励。

每五轮训练的平均时常。y轴表示每一轮的时间。

上图是5轮的操作数,探索率,平均奖励,长度,损失和Q值,花在这5轮上的时间,以及完成这5轮的时间。

看看训练一轮是什么样子的:

注意事项

加载和保存模型

在对该程序进行试验时,每次运行该应用程序时都是从头开始的,并没有保存神经网络的最后一个训练状态。因此需要找到一种通过多次运行来训练网络的方法,这样我就不必让计算机的CPU超负荷60个小时。在PyTorch中有多种方法可以保存和加载模型。虽然在代码中正确地实现了保存,但我发现在程序开始时并没有真正加载之前保存的神经网络状态。

这导致我们每次训练都是从头开始的。所以我们需要修改代码:

在程序结束时,保存神经网络的状态、epsilon(探索率)值和轮次。在程序开始时,加载先前保存的神经网络状态、epsilon值和轮次,这样训练就可以从以前的点恢复训练。

cpu和gpu

使用CPU的训练很慢,但我尝试使用GPU训练时,它就会耗尽内存(因为笔记本显卡的显存不大)。GPU内存耗尽的原因是,它一直在填充缓存,直到缓存满了,但在训练过程中从未清空任何数据。这是一个需要研究的问题。

总结

非常感谢Yuanson Feng, Suraj Subramanian, Howard Wang和Steven Guo,他们制作了这个简单的教程,通过这个教程可以学习很多多关于强化学习的知识,包括使用PyTorch和OpenAI Gym(提供了这些很棒的环境来训练我的神经网络)这是一个学习并创建自己的强化学习应用程序非常好的开始。

官网教程在这里,有兴趣的可以自行查看:

https://avoid.overfit.cn/post/a625743c337e48a6839ffe2121f90369

作者:Sohum Padhye

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

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

相关文章

新功能提醒:Midjourney v5.2 已发布!

您准备好踏上艺术与人工智能相遇的视觉之旅了吗?介绍 Midjourney V5.2,这是突破性 AI 艺术工具的最新版本,只需一个文本提示即可将您的想象力变为现实。凭借其卓越的功能和一系列新功能,Midjourney V5.2彻底改变了您轻松创建令人惊…

拉上谷歌高通 三星围攻苹果

时隔4年,三星又在VR领域出手了。 在几天前的新品发布会上,三星宣布正在开发新的XR(扩展现实)产品和体验,为提高产品竞争力,三星找来了谷歌和高通两大“帮手”,前者提供生态系统和软件支持&…

Uniapp+SpringBoot即时通讯聊天安卓APP源码_全开源

Uniapp SpringBoot即时通讯聊天安卓APP源码_完全开源。 前端使用uniapp,后端使用SpringBoot。 移动端使用uniapp实现。 目前仅支持Android、iOS和H5终端。 后期会继续适配小程序终端、桌面终端(windows、mac)和web终端。 使用的技术&#x…

股票筛选。如何查找股票?如何查找潜力股?

网址 : http://www.czc123.top/mytools/codeSearch.php 沪深A总共有3700多只股票,一只只股票去看肯定不现实,这时候就需要一个股票筛选的工具。 最近一直想找一款股票查询的工具,可是世面上有的不是收费的,就是不满足…

购买高分红股票是不是一个好的投资策略?

购买高分红(High Dividend)股票,是一个受到很多投资者追捧的投资策略。今天这篇文章,就来帮助大家好好分析一下这样的投资方法。 首先,我们不妨想一下这个问题:为什么有那么多人喜欢高分红股票?…

MT4如何添加交易品种?

MT4是一种广泛使用的交易平台,许多投资者都在平台上完成外汇交易。添加新的交易品种可以提高交易组合的多样性和灵活性,从而增加市场机会。在本文中,我们将介绍MT4如何添加新的交易品种。   步骤一:打开MT4交易平台   首先&am…

使用Tushare筛选今天适合投资的股票

使用Tushare筛选今天适合投资的股票tushare ID418443 一.Tushare介绍二.安装Tushare三.编写代码1、初始化tushare,并且获取所有股票信息。2、收盘价跌破lower线,买入信号计算3、收盘价超过upper线,卖出信号计算4、遍历所有股票,找…

分享一个简单的双色球程序

前几天写了个双色球的小程序还挺有意思的。分享一下思路和代码。下图是该程序的需求。 ①可以发现红球和蓝球是分开来判定的,所以可以将红球组成一个数组,蓝球因为只有一个所以可以放一边。 ②我们可以先将随机生成的 红色球 的号码组成一个数组A&#…

Python分析一下双色球,中大奖指日可待!

点击上方“志斌的Python笔记”,选择“星标”公众号超级无敌干货,第一时间送达!!!一、需求简介 之前偶然见到一位网友提出了关于双色球数据的分析需求,感觉颇有趣味,便着手操作了一番。如下为某双…

双色球 python

对双色球数据探索 数据准备 爬取双色球的数据 # -*- coding: utf-8 -*- import os import os.path import sys reload(sys) sys.setdefaultencoding("utf-8") #开奖日期中的字符需要引入 import urllib2 from bs4 import BeautifulSoup# 创建/打开一个文件放数据…

2023年7月1日起,五险一金缴费基数上调,到手工资变少了!

上一篇:被裁员了,月底走人拿n1,多待一个月拿n,该怎么选? 今天给大家盘点了一下各省市2023年最新的社保、公积金缴费基数。 2023社保缴费基数定了 一、上海 2023年6月28日,上海市人社局官方微信发布了《本市…

chatgpt赋能python:PythonUp:优秀的Python教育平台

Python Up: 优秀的Python教育平台 Python学习的重要性 随着大数据、人工智能等技术的蓬勃发展,Python作为一种可读性强、代码简洁、可扩展性好的编程语言,已经成为数据科学领域中最受欢迎的编程语言之一。因此,Python学习已成为现在最流行的…

chatgpt赋能Python-python_his

Python HIS: 基于Python的医院信息系统 作为现代医院管理的重要组成部分,医院信息系统(HIS)的重要性不言而喻。通过使用HIS,医院管理人员可以更加高效地处理管理任务,医疗人员可以更加便捷地记录、查看和互相交流患者信息,患者可…

抖音爆款脚本文案怎么写?写作时需要注意什么。

世上当然不会有这么简单的事情,虽然表面上看就是填一个表格,但是实际上有很多潜规则的要求,今天我们就主要讲讲我们在写脚本文案的时候,用的语言文字需要符合一个什么样的规则。其他的话我就不多说了,我们直接看案例&a…

云媒易推广:实体店铺抖音推广技巧分享

近两年,短视频和直播越来越火,除电商行业外,很多线下实体店也逐渐开始发展线上推广业务,意图通过抖音推广打开线上营销市场。但是,线上推广并不是一件简单的事情。那么,实体店铺究竟该怎么做抖音推广&#…

抖音的文案怎么做|成都聚华祥

要知道,开抖音直播不仅仅可以通过带货赚钱,但是还是有很多朋友不知道怎么去做,也在一定程度上花了很多时间,那么抖音的合拍带货是怎么样做的呢?跟着小编来看看吧! 1.遵循选择的三个要素 广度:就…

PHP对接抖音开发平台接口

一、说明二、代码三、代码运行需知四、功能扩展五、接口调用需要注意的点六、接口文档中的 坑(以订单列表接口为例)1、请求参数、响应参数 代表的具体值不清晰2、页码从第0页开始(这个属于需要注意的点)3、金额 是元 还是 分&…

抖音怎么运营?分享个人抖音运营思路方案

抖音怎么运营? 符合这三点,你的视频很容易受欢迎,账号也很容易上升。她是如何做到这三点的? 1.让平台向您推荐更多流量。 2.让用户完全观看您的视频。 3.看完一段视频后,我想看下一个。 让平台向您推荐更多流量。 …

一篇文章带你了解抖音来客功能的使用方法和注意事项

抖音是近年来备受欢迎的社交媒体平台之一,其中的“来客”功能更是让许多人喜爱。那么什么是抖音来客呢?抖音来客是指在直播过程中,可以邀请其他抖音用户进行互动和参与,从而增加直播的热度和粉丝数量。下面不若与众科技就来介绍一…

抖音平台如何推广?代运营还是用优化系统

近年来,互联网进入下半场,移动端的新媒体抢到了流量风口,尤其是以抖音小红书为首的短视频平台深受关注。小马识途的客户开始通过抖音做推广、做宣传的企业越来越多,其中有一些公司已经尝到了抖音seo带来的甜头,加入抖音…