强化学习实操入门随笔

2024-09-02 21:20

本文主要是介绍强化学习实操入门随笔,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

碎碎念:经过思考,打通底层逻辑,我认为未来ai的功能是在沟通领域代替人,未来人-人模式(媒介是死的语言,比如看古人留下的文字、聊天的暂时不在)会变成人-ai替身-人模式(符合本人想法的“预测个性化语言”)。由于沟通越来越虚拟化和低成本,以及各种模态(比如视频链接)的数字媒介比见面聊天效率更高,所以制作人的各种在虚拟数字空间的“替身”(模仿聊天、总结信息等秘书类事务)是很可能出现的重点问题。


一、先知道是什么

强化学习的目标是通过探索(尝试新动作)和利用(选择已知的最优动作)来学习最优策略,使得在长期内获得的奖励最大化。

智能体/代理(玩家) Agent:执行动作并学习如何优化行为的实体。

环境 Environment, 智能体与之交互并从中学习的世界。

行为 Action a :智能体如何响应环境(一般来说是有限种行为)。所有可能的行为的集合称为 action-space(行为空间)。

状态 State s :环境的当前特征。环境可以处于的所有可能状态的集合称为状态空间。

奖励 Reward r :奖励是环境对智能体的关键反馈。它驱使代理学习并改变其未来的行动。多个时间步长的奖励聚合称为回报。

策略 Policy:代理根据当前状态选择动作的规则或方法,可以是确定性的或随机的。

价值函数 Value Function:用于评估某一状态或状态-动作对的好坏,以帮助智能体决策。

截图来自:【强化学习】一小时完全入门_哔哩哔哩_bilibili

这些或全部或部分的在代码中都会有对应的实体,详见后面

二、有什么可以去做?

(1)训练模型(Agent)

Train a Mario-playing RL Agent — PyTorch Tutorials 2.2.1+cu121 documentation

pytorch官方网站的教程,可以看看这个里面的Agent是怎么构建的,act接口就是一般的step接口。

2024-04-07 23:35:36摘录——

数字实体执行一座城市的所有任务,人工智能可以与数字世界甚至物理世界的一切事物进行交互,不断学习和适应新环境,周围的人对此司空见惯,仿佛一切都理应如此……Agent 可以翻译为“代理”,在 AI 领域有了“智能体“这一含义,是当前人工智能技术的发展方向,它可以代表用户执行任务并做出决策,具有高度的自主性和适应性。

为了驱动 AI Agents 工作流程的重大进展,吴恩达在演讲中提出了四种设计模式:反思、运用工具、规划、多智能体协同。每种设计模式引用了两篇论文,一共八篇。


  “AI 程序员”席卷而来,吴恩达四步设计让 Agent 提前超越 GPT-5-CSDN博客

(2)研究算法(基于数据的、基于规则的)

(3)做平台(Environment)

用copilot可以轻松的生成一个字符界面的游戏吃豆人的代码,并且是带着强化学习基础接口风格(规则?)的代码,还可以框选解释代码,真好用。然后问GPT强化学习接口,出现了大段的切题回答,不由得去想真的是“太阳底下无新事( 《旧约:传道书》第1章9节)”吗?

强化学习环境基础接口介绍:

def __init__(self):
def reset(self):
def step(self, action):
def render(self, mode='human'):
#态势、奖惩反馈、终止信号从上面的step函数获取
next_state, reward, done, _ = env.step(action)

在强化学习(Reinforcement Learning, RL)应用于游戏开发中,通常需要游戏提供一系列接口(API)来与RL算法进行交互。以下是一些常见的接口:

1. 状态接口(State Interface)-条件构设

  • 功能: 该接口用于获取当前游戏的状态,通常是一个多维向量或矩阵,描述了游戏中的重要信息,如棋盘布局、角色位置、资源数量等。
  • 用途: RL算法需要通过该接口了解当前的游戏情境,以便选择下一步动作。

2. 动作接口(Action Interface)-操控

  • 功能: 允许RL算法对游戏做出决策并执行动作,如移动角色、攻击敌人、建造建筑等。
  • 用途: 通过该接口,RL算法能够直接影响游戏的进行,并观察其动作带来的效果。

3. 奖励接口(Reward Interface)-评估

  • 功能: 提供每个动作后游戏给出的即时反馈,通常是一个数值,表示动作的好坏。
  • 用途: 奖励信号是RL算法学习策略的核心依据,帮助算法优化决策。

4. 重置接口(Reset Interface)-导调

  • 功能: 允许重置游戏到初始状态,通常用于在每次训练迭代结束后重新开始游戏。
  • 用途: 在训练过程中,算法会反复探索游戏中的各种可能性,因此需要频繁重置游戏。

5. 结束状态接口(Terminal State Interface)

  • 功能: 检查游戏是否已经结束(如赢得比赛或游戏失败)。
  • 用途: 确定训练过程是否需要结束并重置游戏,以便进行新的训练迭代。

6. 渲染接口(Rendering Interface)-态势显示

  • 功能: 用于显示游戏画面,虽然对算法本身不直接有用,但在调试和可视化时非常重要。
  • 用途: 开发者可以使用该接口监控游戏过程和算法决策,以更好地理解和优化算法。

7. 历史记录接口(History Interface)-回放

  • 功能: 提供先前游戏状态和动作的记录,用于回溯和分析。
  • 用途: 这种记录对于分析算法的学习过程和策略优化非常有帮助。

这些接口使得游戏能够与强化学习算法有效互动,支持算法在游戏环境中不断学习和改进策略。实际应用中,这些接口通常由游戏引擎或自定义的API提供,例如OpenAI Gym、Unity ML-Agents等。

三、哪里算力薅羊毛?

我被网上是算力竞赛弄得对自己2016年买的神舟战神都没信息了,后来跑几个简单的强化学习例子发现除了慢点没啥别的……我的i7-6700HQ还能再战!

蹭算力的话,谷歌的colab不错。

https://colab.research.google.com/

2022年10月学人工智能导论时做实验用的华为云modelarts(学校发的300元额度)

https://console.huaweicloud.com/modelarts


四、配置强化学习环境

Gymnasium Documentation (farama.org)icon-default.png?t=N7T8https://gymnasium.farama.org/Gymnasium是OpenAI Gym库的维护分支,里面有很多的雅达利(Atari)游戏环境,可以作为智能体所要交互的环境。

PS:今天折腾了一天的Bowling这个小游戏,由于gym在0.20.0有重大更新,导致过去的常见的可以复制过来的代码都没法直接用……貌似调用位置也在变,什么AlE之类的也都有改名……调用方法也都有所变化……最好直接找官方说明文档。

这篇关于强化学习实操入门随笔的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1131104

相关文章

从入门到精通MySQL联合查询

《从入门到精通MySQL联合查询》:本文主要介绍从入门到精通MySQL联合查询,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下... 目录摘要1. 多表联合查询时mysql内部原理2. 内连接3. 外连接4. 自连接5. 子查询6. 合并查询7. 插入查询结果摘要前面我们学习了数据库设计时要满

从入门到精通C++11 <chrono> 库特性

《从入门到精通C++11<chrono>库特性》chrono库是C++11中一个非常强大和实用的库,它为时间处理提供了丰富的功能和类型安全的接口,通过本文的介绍,我们了解了chrono库的基本概念... 目录一、引言1.1 为什么需要<chrono>库1.2<chrono>库的基本概念二、时间段(Durat

解析C++11 static_assert及与Boost库的关联从入门到精通

《解析C++11static_assert及与Boost库的关联从入门到精通》static_assert是C++中强大的编译时验证工具,它能够在编译阶段拦截不符合预期的类型或值,增强代码的健壮性,通... 目录一、背景知识:传统断言方法的局限性1.1 assert宏1.2 #error指令1.3 第三方解决

从入门到精通MySQL 数据库索引(实战案例)

《从入门到精通MySQL数据库索引(实战案例)》索引是数据库的目录,提升查询速度,主要类型包括BTree、Hash、全文、空间索引,需根据场景选择,建议用于高频查询、关联字段、排序等,避免重复率高或... 目录一、索引是什么?能干嘛?核心作用:二、索引的 4 种主要类型(附通俗例子)1. BTree 索引(

Redis 配置文件使用建议redis.conf 从入门到实战

《Redis配置文件使用建议redis.conf从入门到实战》Redis配置方式包括配置文件、命令行参数、运行时CONFIG命令,支持动态修改参数及持久化,常用项涉及端口、绑定、内存策略等,版本8... 目录一、Redis.conf 是什么?二、命令行方式传参(适用于测试)三、运行时动态修改配置(不重启服务

MySQL DQL从入门到精通

《MySQLDQL从入门到精通》通过DQL,我们可以从数据库中检索出所需的数据,进行各种复杂的数据分析和处理,本文将深入探讨MySQLDQL的各个方面,帮助你全面掌握这一重要技能,感兴趣的朋友跟随小... 目录一、DQL 基础:SELECT 语句入门二、数据过滤:WHERE 子句的使用三、结果排序:ORDE

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示