强化学习Q-learning入门

news2024/11/28 10:55:48

1. 引言

本文为最近学习的强化学习Q-learning的学习笔记,主要用于总结和日常记录,本文主要讲解相应的必备入门知识。

闲话少说,我们直接开始吧!

2. 概念

我们小时候都经历过以下情形:我们做错了某年事,受到了惩罚,我们学习后,在遇到类似的状况,我们将不会再犯错。同样,许多时候,做的好的行为会得到相应奖励回报,这将鼓励我们在更多的场合重复这些行为。

类似地,强化学习agent将根据策略采取某些行动action,并收到积极或消极的反馈reward,这取决于所采取的行动是否有益。然后,该奖励用于更新策略,并重复整个过程,直到达到最佳策略,如图1所示。
在这里插入图片描述

强化学习代理的目标是通过代理agent与动态环境Env的连续交互,优化所采取的行动action,以获得尽可能高的回报reward

3. Model-Free and Model-Based

在继续解释和实现Q-learnng算法之前,我们需要注意的是,RL算法分为两大类:Model-Based算法和Model_Free算法。

其中,Model-Based的目的是通过与环境的互动来学习环境模型,这样agent就能够在采取行动之前预测给定行动的回报(通过建立环境模型,它可以预见每次行动之后会发生什么),从而进行行动规划。另一方面,Model-Free算法必须采取行动来观察其后果,然后从中学习(见图2)。需要注意的是,“模型”一词不是指机器学习模型,而是指环境本身的模型。

在这里插入图片描述

严格来说,Q-Learning是一种Model-Free算法,因为它的学习包括采取行动、获得奖励以及从采取这些行动的结果中来不断改进学习。

4. Q-learning

Q-learning算法使用包含状态-动作二元组构成的Q表(2D矩阵),使得矩阵中的每个值Q(S,a)对应于在状态a下采取行动S的Q值的估计值(Q值将在后面介绍)。当agent与环境Env交互时,Q表的Q值随着找到最优策略的迭代而将不断收敛直到它们的最优值。

一开始理解所有这些术语很复杂,出现许多疑问也是正常的,比如什么是Q值?Q表是如何构建的?Q值是如何更新的?

接下来我们就逐渐来介绍上述概念和相应的问题吧!

5. 构建Q-Table

如上所述,Q-Table是一个矩阵,其中每个元素对应于一个状态-动作二元组。因此,Q-Table将是一个mxn的矩阵,其中m是可能状态的数量,n是可能动作的数量。Q表的Q值必须有一个初始值,一般来说,Q-Table所有初始化值都设置为零。
举例:
为了简化,假设环境Env将是一个具有4种可能状态(a,b,c,d)的房间,如下图所示。同时,不妨假设代理agent将能够执行4个可能的动作:向上、向下、向左和向右。
在这里插入图片描述
考虑到上述代理agent和环境EnvQ-Table将是一个4x4的矩阵,其中4行对应于4种可能的状态States,4列对应于4个可能的动作Actions。如下所示,所有值都已初始化为零。
在这里插入图片描述

6. Q-Values

一旦Q表被初始化,代理agent就可以开始与环境Env进行交互,并更新Q-Values以实现最优策略。但是,Q值是如何更新的?

首先,引入值函数Value Function的概念是很重要的。一般来说,值函数是衡量代理agent处于给定状态State或处于给定状态-动作sate-action二元组可以带来的益处的指标。

价值函数有两种类型:State-Value Function, v(S),它决定了处于特定状态下遵循特定策略的好处;以及Action-Value Function, q(S, A),它决定了在遵循特定策略的同时从特定状态触发采取特定行动的益处。更具体地说,这些函数返回从状态State(对于状态值函数)或状态动作state-action二元组(对于动作值函数)出发,遵循给定策略的预期好处。图示如下:在这里插入图片描述
函数Action-Value Function 的结果被称为Q值,如前所述,它是构成Q表的基本单元。因此,Q表为我们提供了从某种状态出发采取某种行动的预期好处,即代理agent将用来在环境Env中最佳行动的信息。因此,代理agent的目标是通过不断迭代,找到最优的q*(S, A),这样它就可以根据任何策略从任何状态-动作二元组state-action中返回尽可能高的回报reward

7. Q-Values 更新

最优Action-Value函数q*(S,A)的一个性质是它需要满足Bellman的最优方程,如下所示。我们知道,Bellman方程可以用来迭代最优Action-Value 函数,这是智能体的主要目标。
在这里插入图片描述
Q-learning的情况下,使用下图中所示的Bellman最优方程的自适应来迭代更新Q-Table中的Q值。该方程用于通过在每次迭代中将当前Q值与最佳Q值进行比较来减少误差,从而寻求两者的均衡。
在这里插入图片描述
请注意,上述Q值的更新方程使用了一个称为学习率的α参数,该参数用于在每次更新/迭代中对新Q值的加权程度。实际实验中,通常通过反复试验来找到该参数的理想值。

8. 算法流程

既然已经解释了算法的所有组成部分和步骤,现在是时候把它们放在一起,让代理agent学习了。以下是该算法的伪代码,将作为Q-learning实现过程中的参考。
在这里插入图片描述
流程如下:

  1. 初始化Q-Table
    Q-Table的初始化形状取决于可能的状态state和动作action的数量,并且其所有值都设置为零,如前所述。
  2. 训练一次episode
    每一次episode训练时,都需要代理agent达到目标状态。代理agent从一个随机状态开始,对于一次episode中的每个step,它将执行如下操作:
    a) 根据策略采取相应行动action(该算法最常用的是贪婪策略)。
    b) 根据前面提到的Q值更新方程,从达到的新状态和获得的奖励中计算新的Q值。
    c) 从达到的新状态开始迭代进入下一个step

训练将在所有episode完成后结束。在这一点上,Q表的Q值将是最优的(只要训练有效),这意味着如果代理agent选择具有最高Q值的动作A,则他将在每个状态S中获得最大回报reward。最后,为了在非训练环境中使用经过训练的代理agent``,只需要使其在每个步长中选择具有最高Q值的动作,因为Q表在训练期间已经被优化。

9. 总结

本文重点介绍了Q-learning算法的理论和相关概念,而没有关注它在代码中的实现。后续我会计划针对特定代码进行相应的举例讲解,嗯捏,如果你感兴趣,请多多关注。

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

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

相关文章

string

1.标准库的string类 构造函数: 构造函数的使用: 析构函数: 编译器会自己进行调用,不用管 拷贝构造函数: 追加字符函数: 追加字符串函数: 运算符重载函数: : 会用之后…

Python之socket编程(53)

​小朋友们好,大朋友们好! 我是猫妹,一名爱上Python编程的小学生。 和猫妹学Python,一起趣味学编程。 今日主题 今天的内容比较多哦,主要是网络编程的一些入门知识。 这些知识在互联网发展过程中很重要&#xff0…

Java中final关键字的理解(多线程中的final)

一、final关键字 Java中的final关键字具有不可变性的特性,其可以修饰类、方法和变量。 1. final修饰类:final关键字可以用来修饰类,表示该类是不可继承的。final类中的所有方法都是隐式final的(不能被override或shadow&#xff0…

【深度学习-第1篇】深度学习是什么、能干什么、要怎样学?

大概4年前本专栏发布了一篇关于神经网络的入门科普文章,到现在大概有小5k赞了(Mr.看海:神经网络15分钟入门!足够通俗易懂了吧)。 这几年人工智能发生了突飞猛进的发展,时至今日甚至发展出了GPT-4、Midjourn…

经典高并发服务器设计逻辑

都是面试必问的八股,不管理不理解用不用得上,背就完事了。 服务器模型 对于并发量比较大的服务器,即listen监听端口一直忙碌于处理新建连接的场景,一般在主线程里面accept新的客户端连接并生成新连接的socket,然后将这…

Unity制作二次元卡通渲染角色材质——2、色阶化光影的多种做法对比

Unity制作二次元材质角色 回到目录 大家好,我是阿赵。 这里继续讲二次元角色渲染。之前说过,最基本的卡通渲染,包含了色阶化光影和描边二个元素。所以这里先来说一下色阶化光影的多种做法对比。 一、光照模型和色阶化的说明 从上一篇文章里…

拿捏-哈夫曼树构建及编码生成(建议收藏)

文章目录 哈夫曼树的基本概念哈夫曼树的构建构建思路代码实现 哈夫曼编码的生成编码生成思路代码实现 完整代码展示及代码测试 哈夫曼树的基本概念 在认识哈夫曼树之前,你必须知道以下几个基本术语: 1、什么是路径? 在一棵树中,从…

Kafka 分区

分区是 Kafka 的核心功能,对于 Kafka 的存储结构、消息的生产消费方式都至关重要。 Partition(分区) 每 topic 都可以分成多分区,每个分区都是一组有序的、不可变的记录序列,每个分区在存储层面是 append log 文件。…

python中Requests发送json格式的post请求方法

问题:做requests请求时遇到如下报错: {“code”:“500”,“message”:"JSON parse error: Cannot construct instance of com.bang.erpapplication.domain.User (although at least one Creator exists): no String-argument constructor/factory …

唠一唠程序员的那些事

作为一名互联网摸爬滚打多年的老兵,我可以从以下角度提供一些信息: 加班是家常便饭:程序员往往需要加班来满足项目需求或完成任务。这意味着他们经常会在晚上、周末或节假日工作。代码不仅仅是工作:对于大多数程序员来说&#xff…

【C++】成员对象和成员函数分开存储

欢迎来到博主 Apeiron 的博客,祝您旅程愉快 ! 时止则止,时行则行。动静不失其时,其道光明。 目录 1、缘起 2、详解 3、代码清单 1 3.1、类中定义成员变量 3.2、类中定义成员函数 4、代码清单 2 5、总结 1、缘起 “成员变量…

SpringBoot 增强Controller方法,@ControllerAdvice注解的使用

参考资料 ControllerAdvice 用法SpringBoot使用ControllerAdvice注解 目录 一. ControllerAdvice注解作用二. ControllerAdvice注解 assignableTypes属性2.1 ControllerAdvice增强类2.2 Controller层2.3 效果 三. ControllerAdvice注解 basePackages属性3.1 ControllerAdvic…

踩坑|以为是Redis缓存没想到却是Spring事务!

前言 最近碰到了一个Bug,折腾了我好几天。并且这个Bug不是必现的,出现的概率比较低。一开始我以为是旧数据的问题,就让测试重新生成了一下数据,重新测试。由于后面几轮测试均未出现,我也就没太在意。 可惜好景不长&…

【LeetCode】260. 只出现一次的数字 III

260. 只出现一次的数字 III(中等) 思路 这道题是136. 只出现一次的数字 的进阶版,需要找出两个仅出现一次的元素。有了上一题的基础,我们很容易就想到要用异或来解决,但是由于这题最终会剩下两个不同的元素&#xff0…

设置和使用DragGAN:搭建非官方的演示版

DragGAN的官方版还没有发布,但是已经有非官方版的实现了,我们看看如何使用。DragGAN不仅让GAN重新回到竞争轨道上,而且为GAN图像处理开辟了新的可能性。正式版本将于本月发布。但是现在已经可以在一个非官方的演示中试用这个新工具了 DragGAN…

数据结构:二叉树(初阶)

朋友们、伙计们,我们又见面了,本期来给大家解读一下二叉树方面的相关知识点,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! C 语 言 专 栏:C语言:从入门到精通 …

Unix/C/C++进阶--SocketCAN 编程

Unix/C/C进阶--SocketCAN 编程 1 介绍1.1 socketcan 简介1.2 can 发展历程1.3 can总线优点 2 知识点2.1 CAN详解--书籍、网站2.2 CAN详解--CAN与com口介绍2.3 CAN详解--各家CAN分析仪与软件的比较2.4 转载:CAN总线终端电阻2.5 如何破解汽车--CAN协议(can…

3.8 电路布线

博主简介:一个爱打游戏的计算机专业学生博主主页: 夏驰和徐策所属专栏:算法设计与分析 1.最优子结构的证明: 我的理解: 对于电路布线问题的最优子结构性质,我们可以通过数学推导进行证明。下面是对证明的…

conda在 powershell下不能激活虚拟环境

这里写自定义目录标题 问题原因解决办法增加环境变量修改PowerShell 策略初始化conda环境安装或更新conda 结果 问题原因 powershell正常是不行的,但是在cmd中是可以的 问题产生的原因有很多: 必须无法识别activate.bat激活无反应 解决办法 增加环…

【JavaSE】Java基础语法(四十六):枚举

文章目录 1. 概述2. 定义格式3. 枚举的特点4. 枚举的方法 1. 概述 枚举是一种特殊的数据类型,它列出了一组预定义的常量,并使用标识符来引用这些常量。枚举的用途很广泛,下面列举了几个常见的应用场景: 管理常量:如果您…