使用强化学习训练 AI 去玩神奇宝贝

news2024/9/28 3:29:29

使用强化学习训练 AI 去玩神奇宝贝

这两天在逛 Youtube 的时候意外发现了一个非常有趣的视频,十天的时间已经获得了两百多万的点击:

在这里插入图片描述


现在已经 360w 点击了


视频的名称就和题目的名称一样:Training AI to Play Pokemon with Reinforcement Learning,Git 地址在这里:PokemonRedExperiments,作者也提供了代码可以直接运行,让别人也可以跑一下基于神奇宝贝红的强化学习。

我个人觉得,这个视频对于完全不了解 AI 的人来说,也是一个非常好的入门教程,所以就总结归纳一下作者第一阶段做了什么

基础介绍

第一步还是要了解一下名词,首先是三种学习模型,提供的数据假设为动物数据,其中:

  • 监管学习中,模型会学习标签过的数据

    如数据中提供了已经标记过的分类:猫、狗、大象、老虎、狐狸等,机器会将未标记的数据与以标记的数据一一对应,再人工对其标记的数据进行对错的评判

    通过训练后,机器可以对 已分类 的数据进行正确的标签

  • 非监管学习,模型会学习没有标签的数据

    依旧以动物为例,机器会通过学习已经提供的数据集将其进行分类,如它可能推导出 一些动物具有哺乳行为,所以将其归类到一起。一些东西会飞,所以将其归类到一起

    其中必然会产生一些分类上的问题,如蝙蝠不属于鸟类,但是蝙蝠会飞,因此动物学上这个分类是错的。不过在任何阶段都不会有人工参与,而是通过塞入更多、更细化的数据让机器继续学习分类

  • 强化学习,模型会学习没有标签的数据,但是会有人工参与

    比如说模型通过数据分析将数据中的动物分成了若干类,这个时候的人工参与就是设立一个奖励机制,如机器成功的分出了一个新的类别则获取 1 点奖励,出于获取更多奖励的目的,机器会继续学习并将获取的数据进行更细的分类。

    这样完成了一个周期后,会需要再一次的人工参与,对模型运行的结果进行调校,调整奖励机制,重设数据集进行重新计算

开始游戏

这个视频就是基于这个强化学习进行实现,基础设定为:

  • AI 可以随意点击任何按钮(上下左右 AB)

  • AI 对于系统没有任何的前置知识

  • AI 在读取到不同的场景是会将其保存

  • 创建不同等级的奖励,使得 AI 可以通过简单的奖励,最终达成困难的奖励

    这里最初的奖励是去了解周边的环境

    前面已经提到,AI 会将遇到的不同场景保存下来,这样在遇到不同场景时,AI 可以将当前场景对比已经出现的场景,如果出现场景不一样的情况时,就会获得奖励,并将不同的场景保存下来

就此,作者开始了最初的几轮训练

不过在第一轮的训练过程中,作者发现 AI 会停留在固定的几个场所并且不动了。在分析了场景后,发现 AI 成功的找到了一个 bug:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

即,停留在有动画(移动的行人/水波)所在的地方。这个时候附近的动画满足了 不同的场景 这一需求,使得 AI 可以停留在这里不停的刷分

这时候作者修改了奖励机制,将本来两个场景之中只有几个像素的区别就能获得奖励,修改到了两个场景有数百个像素差距才能够获得奖励。

这时候作者重新启动了学习过程,保证其过程是可重复的

终于,在调整了奖励机制后,AI 成功抵达了第二个城市

训练神奇宝贝

这时候,单纯做旅游的奖励机制已经无法继续推进游戏了,与神奇宝贝对战的场景太过相似,无法触发奖励机制:

在这里插入图片描述

引起,比起对战,AI 的本能选择就是:

在这里插入图片描述

逃跑

这时候作者添加了第二个奖励机制,也就是神奇宝贝的等级奖励,此时对于 AI 的奖励如下:

目标奖励
探险1
等级3

按照正常的推断来说,这样 AI 的目标就会更多的关注在打赢战斗、抓小精灵、升级

最终,AI 学会了升级小精灵,并且学会在一个攻击技能次数用光后,切换到另一个技能攻击:

在这里插入图片描述

在这里插入图片描述

切换技能这一点,对于之后另一个突破来说也是非常有用的,同时,也是在版本 60 的时候,AI 第一次和其他的训练家进行了对战,也最终突破了第一个森林

在这里插入图片描述

就在前景一片大好时,作者又发现了几个奇怪的点:

  1. 尽管当对战一定会失败的时候,AI 还是会选择对战
  2. AI 不知道为什么从来不会访问医院

第一点作者并没有提出什么很好的解决方案,第二点作者最初添加了一个惩罚机制:

目标奖励
探险1
等级 ∑ i = 1 6 l e v e l \sum_{i=1}^{6} level i=16level
失败-1

但是这并没有达成作者的目的,反而是让 AI 在要失败的当口,选择不去点击任何的按钮

通过观察,作者最终发现问题出在了神奇宝贝中心里。当 AI 选择将神奇宝贝存储到电脑中时,因为小精灵的等级直接与奖励挂钩,因此 AI 一下子就会失去大量的奖励,这也造成了 AI 最终决定不去小精灵中心

比如说,AI 此刻持有两只小精灵,一只等级 13,一只等级 12,此刻小精灵的奖励为 26。AI 进入了医院,在某一次随机操作中选择将一只小精灵保存进了电脑,这样一下子 AI 就失去了 50%的小精灵奖励

这使得 AI 对小精灵中心产生了负面的印象,并且在大量的训练中都对中心唯恐避之不及的态度

最终,作者选择调整了等级的奖励:

目标奖励
探险1
等级 m a x ( Δ l e v e l , 0 ) max(\Delta level, 0) max(Δlevel,0)

在进行了这样的修改后,AI 终于访问了训练中心

打道馆

当 AI 学会移动、升级、捕捉小精灵、和训练师对战后,自然而然的它也学会了访问了道馆。不过 AI 在这里又遇到了大问题——在此之前 AI 和训练时的对战只需要使用主要技能,因此也只需要依赖主要技能。而主要技能(大多为普通系)对于第一个道馆(岩系)的效果非常不佳。

当 AI 输了太多次后,它就会尝试避免道馆

不过在调整了奖励机制,以及花费更多训练时间后,AI 终于遇到了一个边界条件,让它学会了使用更有效的技巧:

在这里插入图片描述

这个边界条件就是:

  1. AI 手中另一个神奇宝贝已经晕了过去,它手上只剩下了一个战损的杰尼龟

  2. 杰尼龟撞击的使用次数已经完全耗尽了

    AI 现在只能使用杰尼龟的泡泡技能

水系技能对岩石系技能特别的有效,在第 100 个版本时,AI 终于学会使用默认使用水系技能对战岩石系。从这以后的训练也证明了这点,在 v100 之前,AI 没有能够战胜道馆首领。在 v100 之后,AI 战胜道馆首领的次数明显增加

也就是在这之后的月亮山,因为 AI 没有能够离开月亮山,大抵是因为地图太过相似,所以探险的奖励分太低。与其继续调整奖励机制,因此作者也就暂停了继续训练,而是将此作为一个阶段性的终结。

一些反思怪时间

其实强化学习,真的跟人的学习还蛮像的,比如说第一阶段里只设置探索奖励,最终确实能够让 AI 抵达下一个城镇,但是也有可能会让 AI 停在某个点一动不动,一点进展都没有。这种情况人也可能遇到,比如说太关注片面的成长(场景带来的奖励),
而忽略了整体的成长(抵达下一个城镇乃至通关整个游戏)

比如说,AI 进入精灵中心可能会导致瞬间失去大量奖励(存储小精灵这一动作引起的),以至于从此避开精灵中心。而对于人来说,因为一次滑铁卢而产生阴影的情况也数不胜数。对于 AI 来说,简单的调整一下奖励机制重新开始就可以解决这个问题,但是对人来说,要解决这个问题不仅仅是一个 重设奖励机制 + 重新开始 就能解决的

又比如说,太过依赖于惯性思维(只使用主技能),因为这个惯性思维在大多数场景下有效,便不考虑新的方法……

总觉得真的是每个点都踩在了自己的痛点上……

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

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

相关文章

Kaggle - LLM Science Exam(四):Platypus2-70B with Wikipedia RAG

文章目录 一、赛事概述1.1 OpenBookQA Dataset1.2 比赛背景1.3 评估方法和代码要求1.4 比赛数据集1.5 优秀notebook1.6 RAG 二、Platypus2-70B with Wikipedia RAG(Version8)2.1 离线安装依赖2.2 导入库并设置常量2.3设置辅助功能2.4 SentenceTransforme…

phpstorm+phpstudy+xdebug快速搭建php调试环境

1、安装phpstudy 让你的项目能正常跑起来,再来进行下一步 2、安装拓展 勾选需要用到的插件,配置好端口 再php.ini最下面复制如下配置,插件的地址按实际路径配置 [Xdebug] zend_extensionD:/phpstudy_pro/Extensions/php/php5.6.9nts/ext/p…

UG\NX二次开发 实现“适合窗口”的功能

文章作者:里海 来源网站:王牌飞行员_里海_里海NX二次开发3000例,里海BlockUI专栏,C\C++-CSDN博客 感谢粉丝订阅 感谢 shsjdj 订阅本专栏,非常感谢。 简介 实现“适合窗口”的功能 效果 代码1 #include "me.hpp"extern DllExport void ufusr(char* param, int* re…

java将list转为逗号隔开字符串,将逗号连接的字符串转成字符数组,​将逗号分隔的字符串转换为List​(Java逗号分隔-字符串与数组相互转换)

一、通过testList.stream().collect(Collectors.joining(",")) &#xff0c;通过流转换&#xff0c;将list转为逗号隔开字符串 List<String> testList new ArrayList<>(); testList.add("test1"); testList.add("test2"); testList…

Jenkins部署失败:JDK ‘jdk1.8.0_381‘ not supported to run Maven projects

Jenkins部署报错&#xff1a;JDK ‘jdk1.8.0_381’ not supported to run Maven projects提示使用的jdk有问题&#xff0c;启动的jdk版本不能满足项目启动。 登录Jenkins管理页面&#xff0c;系统管理——全局工具配置——JDK安装配置满足条件的JDK版本&#xff0c;保存配置&…

Stable-diffusion-webui

AI 画图&#xff0c;之前整理的 AI换脸 CSDN不给通过&#xff0c;说是换脸之类的不给通过&#xff0c;只能自己看了。 GitHub&#xff1a;https://github.com/AUTOMATIC1111/stable-diffusion-webuihttps://github.com/AUTOMATIC1111/stable-diffusion-webui 安装完毕跑起来大概…

k8s-----18、Ingress(对外服务)

Ingress 1、Ingress概念2、 pod和ingress的关系3、 Ingress的工作流程4、 使用步骤5、对外暴露应用实战5.1 创建nginx应用&#xff0c;对外暴露端口使用NodePort5.2 部署ingress controller5.3 创建ingress规则5.4 访问 1、Ingress概念 k8s 对外暴露服务&#xff08;service&am…

uniapp解决iOS切换语言——原生导航栏buttons文字不生效

uniapp 切换语言原生导航栏buttons文字不生效&#xff1f; 文章目录 uniapp 切换语言原生导航栏buttons文字不生效&#xff1f;效果图page.json配置解决方式 效果图 场景&#xff1a;在 tabbar 页面中&#xff0c;配置 原生导航栏 buttons &#xff0c;切换语言时&#xff0c;不…

单片机中的 _nop_() 函数及 us 延时

使用 _nop_() 函数做延时遇到的一些问题 ...... by 矜辰所致前言 最近还是继续做着项目&#xff0c;因为在某 8051 内核芯片上使用到了 I2C 通讯&#xff0c;又需要 _nop_() 函数来实现 us 延时&#xff0c;那么正好来写一篇与_nop_() 函数有关的文章 。 我是矜辰所致&…

给运行中的docker容器挂载目录——筑梦之路

使用场景 对于一个已经运行的容器&#xff0c;如果后续需要新挂载一个目录怎么办&#xff1f;为什么不能重新创建一个容器&#xff1f; 容器内可能安装过很多东西&#xff0c;很费时&#xff0c;如果重新创建一个容器再挂载&#xff0c;还得重新安装很多东西&#xff0c;非常费…

[极客大挑战 2019]Havefun

1.打开链接 2.检查一下源代码 发现一段代码。 3.分析代码 <!-- $cat$_GET[cat]; echo $cat; if($catdog){ echo Syc{cat_cat_cat_cat}; } --> 询问ChatGPT&#xff1a; 从您提供的代码片段来看&#xff0c;这是…

【Python】Windows跟随程序启动和关闭系统代理

前言 在日常使用计算机时&#xff0c;偶尔可能需要配置代理来访问特定的网络资源或进行网络调试。 当在使用mitmproxy 时候&#xff0c; 程序开始前&#xff0c;需要手动打开系统代理&#xff1b;程序解释后&#xff0c;需要手动关闭系统代理。 这些重复性且没有技术含量工作…

CDC实时数据同步

一丶CDC实时数据同步介绍 CDC实时数据同步指的是Change Data Capture&#xff08;数据变更捕获&#xff09;技术在数据同步过程中的应用。CDC技术允许在数据源发生变化时&#xff0c;实时地捕获这些变化&#xff0c;并将其应用到目标系统中&#xff0c;从而保持数据的同步性。…

竞赛 深度学习人脸表情识别算法 - opencv python 机器视觉

文章目录 0 前言1 技术介绍1.1 技术概括1.2 目前表情识别实现技术 2 实现效果3 深度学习表情识别实现过程3.1 网络架构3.2 数据3.3 实现流程3.4 部分实现代码 4 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习人脸表情识别系…

ARM 汇编指令 orreq 的使用

orreq 阅读代码时&#xff0c;发现有个【组合指令】 orreq&#xff0c; orr 一般是 OR&#xff0c;也就是或操作&#xff0c;后面加个 eq 表示什么呢&#xff1f; 比如下面的代码&#xff1a;前面一个操作&#xff0c; tst&#xff0c;好像没做实际的操作&#xff0c;可能影响…

使用docker-compose私有化部署 GitLab

在软件开发和协作过程中&#xff0c;版本控制是至关重要的一环。GitLab 是一个功能强大的开源平台&#xff0c;提供了完整的代码管理功能&#xff0c;包括版本控制、问题跟踪以及持续集成等。这使得团队能够更高效地协作开发。前段时间翻阅笔记时&#xff0c;偶然发现了之前公司…

wf-docker集群搭建(未完结)

系列文章目录 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 系列文章目录前言一、redis集群二、mysql集群三、nacos集群1. 环境要求2. 拉取镜像2.1. 拉取镜像方式配置集群2.2. 自定义nacos镜像配置集群 3 自定义…

怎么选择好的游戏平台开发商?

选择好的游戏平台开发商需要考虑以下几个方面&#xff1a; 开发经验 了解游戏开发公司的历史和经验是找到靠谱公司的重要步骤。查看公司的官方网站、社交媒体账号等渠道&#xff0c;了解公司的发展历程、团队规模、客户案例等。同时&#xff0c;了解公司是否有相关的游戏开发经…

创建 Edge 浏览器扩展教程(下)

创建 Edge 浏览器扩展教程&#xff08;下&#xff09; 创建扩展教程&#xff0c;第 2 部分1&#xff1a;更新弹出窗口.html以包含按钮2&#xff1a;更新弹出窗口.html在浏览器选项卡顶部显示图像3&#xff1a;创建弹出式 JavaScript 以发送消息4&#xff1a;从任何浏览器选项卡…

python爬虫分析基于python图书馆书目推荐数据分析与可视化

收藏关注不迷路 文章目录 前言一、项目介绍二、开发环境三、功能介绍四、核心代码五、效果图六、文章目录 前言 随着电子技术的普及和快速发展&#xff0c;线上管理系统被广泛的使用&#xff0c;有很多商业机构都在实现电子信息化管理&#xff0c;图书推荐也不例外&#xff0c…