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

news2024/11/25 4:18:09

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.coloradmin.cn/o/50789.html

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

相关文章

[附源码]Python计算机毕业设计SSM科技类产品众筹系统(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

[附源码]计算机毕业设计JAVA乡村振兴惠农推介系统

[附源码]计算机毕业设计JAVA乡村振兴惠农推介系统 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM myb…

项目ERP与传统ERP的区别是什么?

许多不认为传统 ERP 有用的企业正在寻找项目 ERP。对于企业软件来说,这是一种利用项目管理实践和功能的相对新颖的方法。与传统 ERP 相比,项目 ERP 旨在提供对公司流程更全面的概述。这种类型的解决方案对于建筑公司或项目制造商等项目公司来说是一个很好…

聚类基本概念及常见聚类算法和EM算法

1. 基本概念 1.1 定义 聚类:发现数据中分组聚集的结构,根据数据中样本与样本之间的距离或相似度,依据类内样本距离小(相似度大)、类间样本距离大(相似度小)将样本划分为若干组/类/簇。 基于划分…

【毕业设计】1-基于单片机的城市轨道交通列车超速防护系统_里程表设计(原理图+PCB+源码+仿真工程+答辩论文)

typora-root-url: ./ 【毕业设计】1-基于单片机的城市轨道交通列车超速防护系统_里程表设计(原理图PCB源码仿真工程答辩论文) 文章目录typora-root-url: ./【毕业设计】1-基于单片机的城市轨道交通列车超速防护系统_里程表设计(原理图PCB源码…

postgres源码解析39 表创建执行全流程梳理--3

本文结合实例讲解表创建执行流程 [CREATE TABLE wp_shy(id int primary key, name carchar(20))],相关知识回顾见: postgres源码解析38 表创建执行全流程梳理–1 postgres源码解析38 表创建执行全流程梳理–2 执行流程图 transformCreateStmt函数是表创建真正的入口…

系统封装制作

工具网址: 镜像下载: Windows 10 22H2 - MSDN - 山己几子木 (sjjzm.com)pe工具:【新提醒】优启通 v3.7.2022.0910(2022.10.14 发布)_IT天空原创软件_IT天空 (itsk.com)万能驱动:万能驱动 v7.22.0912.2&…

国产全志T3+Logos FPGA开发板(4核ARM Cortex-A7)规格书

评估板简介 创龙科技TLT3F-EVM是一款基于全志科技T3四核ARM Cortex-A7 + 紫光同创Logos PGL25G/PGL50G FPGA设计的异构多核国产工业评估板,ARM Cortex-A7处理器单元主频高达1.2GHz。评估板由核心板和评估底板组成,核心板CPU、FPGA、ROM、RAM、电源、晶振、连接器等所有器件均…

[附源码]计算机毕业设计springboot企业售后服务管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

如何学习运放实战设计?学这些精髓

一、同相放大电路虚短:运放理想放大倍数10万倍,一般输出都是3V或5V较多,运放放大的是输入信号的压差,放大10万倍的话,只能说明输入信号的压差非常非常接近,近似相等,我们称之为虚短(…

多功能便携式吸尘器设计

目 录 摘 要 i Abstract ii 1 引言 1 2 多功能便携式吸尘器的历史及发展 2 2.1 多功能便携式吸尘器的历史 2 2.2 业界的发展情况 3 3 多功能便携式吸尘器的分类 5 3.1 卧式(Canister) 5 3.2 立式(Upright) 5 3.3 手持式 &#xff…

[附源码]SSM计算机毕业设计学校失物招领系统JAVA

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Jetbrains idea整合远程的docker服务器

Jetbrains idea整合远程的docker服务器准备工作服务端准备开发环境准备整合远程服务器的步骤服务端配置客户端配置准备工作 服务端准备 首先我们需要一台远程的安装了docker的CentOS服务器(其他Linux服务器的操作区别不大),课参考我的文章&…

防水蓝牙耳机哪个好?防水音质好的蓝牙耳机推荐

真无线蓝牙耳机即将成为人们日后必不可少的东西,它已经逐渐成为我们生活中最重要的听觉媒介,是有线耳机给不了的自由感,有一些蓝牙耳机还可以让你在下雨天没带雨伞时依然可以带着听歌,今天给大家介绍四款防水能力极好的蓝牙耳机&a…

【发表案例】智能物联网类SCIEI,仅25天录用,计算机领域必投SCI快刊,12月截稿

【期刊简介】3.5-4.0,JCR2区,中科院3区 【检索情况】SCI&EI双检,正刊 【征稿领域】基于人工智能的工业物联网智能传感器 【参考周期】3个月左右 【截稿日期】2022年12月30日 【期刊简介】2.0-3.0,JCR3区,中科院…

fastapi_No.24_日志记录系统

文章目录第一步:创建日志记录器第二步:挂载日志记录器第三步:使用日志记录第四步:清除日志记录器完整代码第一步:创建日志记录器 利用loguru包创建一个日志记录器。 from loguru import logger from datetime import…

快速提升中小企业销售效率的5个自动化小技巧

成长期的中小企业,如何提升销售/市场部效率就是CEO/COO/CMO/销售VP们非常关心的一个话题。销售效率的计算很简单,通常用销售团队的总收入除以销售团队的工资、福利、办公成本等。举例,如果一个30人的销售团队,一年的销售收入是500…

GD32串口空闲(IDLE)中断 + DMA机制接收数据

前言 串口功能在单片机开发中,是比较常用的外设,熟练使用串口功能也是驱动开发必备的技能之一。 DMA是一种CPU辅助手段,可以在CPU不参与的情况下,是做一些辅助CPU的事情,如通常的数据搬运。 在没有DMA之前,…

R语言分位数回归Quantile Regression分析租房价格

全文链接:http://tecdat.cn/?p18422本文想在R软件中更好地了解分位数回归优化。在查看分位数回归之前,让我们从样本中计算中位数或分位数(点击文末“阅读原文”获取完整代码数据)。相关视频中位数考虑一个样本 。要计算中位数&am…

1.聊聊Netty那些事儿之从内核角度看IO模型

从今天开始我们来聊聊Netty的那些事儿,我们都知道Netty是一个高性能异步事件驱动的网络框架。 它的设计异常优雅简洁,扩展性高,稳定性强。拥有非常详细完整的用户文档。 同时内置了很多非常有用的模块基本上做到了开箱即用,用户…