强化学习基础(1)- 理论和算法

news2025/2/24 5:43:10

目录

1.基本概念

1.1组成部分

1.2 马尔可夫决策过程

2 有模型强化学习

2.1状态值函数

2.2动作值函数

2.3二者关系

2.4 探索和利用

2.5动态规划(DP)(有模型求解方法)

2.5.1预测任务

2.5.1控制任务

3.无模型强化学习

3.1 Value-Based

3.1.1蒙特卡洛法

3.1.2时序差分法

3.1.2.1 SARSA和Q-Learning

3.2 Policy-Based

3.2.1概念

3.2.2 Policy Gradient

3.2.3深度强化学习

3.3 Actor and Critic

4.主要算法

往期文章

参考文献


1.基本概念

1.1组成部分

      以吃豆人(Agent)游戏为例,游戏目标把屏幕里面所有的豆子全部吃完,同时又不能被幽灵碰到,被幽灵碰到则游戏结束。Agent每走一步、每吃一个豆子或者被幽灵碰到,屏幕左上方的分数(都会发生变化,图例中当前分数是435分。

  • Agent(智能体):强化学习训练的主体就是Agent,该游戏中Agent为吃豆人。
  • Environment(环境):整个游戏的大背景就是环境;吃豆人、幽灵、豆子以及里面各个隔离板块组成了整个环境。
  • State(状态):当前 吃豆人移动一下,幽灵也会移动,豆子数目也在会变化,也就是说,吃豆人发生一个动作,环境就会发生变化。
  • Action(行动):基于当前的状态,吃豆人可以采取哪些动作,比如向左or右,向上or下。
  • Reward(奖励):吃豆人在当前状态下,采取了某个的动作后,会获得环境的一定反馈就是奖励,在游戏中直观的表现就是分数的变化。

1.2 马尔可夫决策过程

      强化学习的训练过程可以简单理解为马尔可夫决策过程(MDP)。

MDP核心思想下一步的State只和当前的状态State以及当前状态将要采取的Action有关,只回溯一步。

马尔可夫决策过程组成部分

2 有模型强化学习

      假若 P和 R 已知,这就是基于模型的强化学习(Model-based RL),可以利用动态规划(DP)来求解最优策略。为了求解最优策略引入值函数的概念,而值函数又分为状态值函数和动作值函数。

2.1状态值函数

状态值函数:评价状态,用函数 V_{(s)}来表示,其定义为:

      上述公式表示在状态 s下未来累积回报的期望,期望越大说明当前状态越有利,在AlphaGo里面就用来衡量当前棋局的落子情况对白方/黑方的有利程度,衡量了谁最后会胜出。

2.2动作值函数

动作值函数:评价当前状态下的动作,用函数 Q_{(s,a)}来表示,其定义为:

       上述公式表示了在状态 s下采取动作 a的累积回报,在AlphaGo里面就表示当前棋局状态下采取不同落子的动作对应的回报。

       补充解释:比方说,本科毕业你可以选择工作或者读研,那么工作和读研就是两种状态,对这两种状态进行评价(长期的回报),就叫做状态值函数。如果说,你读研之后,选择了计算机或者物理学,这就是当前状态下的动作选择,对该动作评价(长期的回报),就叫做动作值函数

     一般来讲,如果可以获得最优Q_{(s,a)},那么我们的策略选择就可以贪婪地采用最优动作:

2.3二者关系

2.4 探索和利用


        实际我们在进行强化学习训练过程中,会遇到一个“EE”问题。这里的Double E是“Explore & Exploit”,“探索&利用”。比如在Value-Based中,如下图StateA的状态下,最开始Action1&2&3对应的Value都是0,因为训练前我们根本不知道,初始值均为0。如果第一次随机选择了Action1,这时候StateA转化为了StateB,得到了Value=2,系统记录在StateA下选择Action1对应的Value=2。如果下一次Agent又一次回到了StateA,此时如果我们选择可以返回最大Value的action,那么一定还是选择Action1。因为此时StateA下Action2&3对应的Value仍然为0。Agent根本没有尝试过Action2&3会带来怎样的Value。
 

所以在强化学习训练的时候

      一开始会让Agent更偏向于探索Explore,并不是哪一个Action带来的Value最大就执行该Action,选择Action时具有一定的随机性,目的是为了覆盖更多的Action,尝试每一种可能性。
      等训练很多轮以后各种State下的各种Action基本尝试完以后,我们这时候会大幅降低探索的比例,尽量让Agent更偏向于利用Exploit,哪一个Action返回的Value最大,就选择哪一个Action。

2.5动态规划(DP)(有模型求解方法)

  假设知道P 和R,就可以实现利用动态规划来完成预测和控制任务。

      预测任务的输入是\left ( S,A,P,R,\gamma \right )和策略 \pi ,目的是为了评估当前策略 \pi 的好坏,即求解状态值函数 V_{(s)}^{\pi },注意这里上标指的是当前的策略对应的状态值函数;控制任务的输入是\left ( S,A,P,R,\gamma \right ),目的是为了寻找最优策略 \pi ^{*}和 V^{*}

2.5.1预测任务

      利用上面 Q和 V 关系的公式,很容易得到 V 的迭代公式:

      那么在评估任务中,上述公式里面的 P,R, \pi都是已知的,只要迭代求解 V 即可,求解过程即上述迭代方程也称为贝尔曼期望方程(Bellman Expectation Equations)。

2.5.1控制任务

      对于control任务,由于 \pi 和 V都是未知的,可采用两种方法

策略迭代(Policy Iteration):先进行策略评估(Policy Evaluation),即固定住\pi ,使用上述预测任务的做法来求解最优值函数 V ,再进行策略提升(Policy Improvement),可以简单地 利用贪婪算法找到最优策略,重复交替进行评估和提升,即可得到最优解。

值迭代(Value Iteration):利用的是下面的公式:

两种方法分析

总结贝尔曼方程用在预测任务中,只用求解V即可,贝尔曼最优方程,是在V的基础上找到最优\pi ^{*} V^{*}

      以下图为例,白色圆圈表示状态,根节点是当前状态,当前状态下可以通过\pi \left ( a|s \right )来选取动作,黑色实心点表示动作,采取某个动作又会根据 P_{ss^{'}}^{a}转移到不同的状态 s^{'},故利用树动态规划可以得到贝尔曼期望方程和贝尔曼最优方程。

3.无模型强化学习

      此时P和R是未知的,只有智能体和环境交互后才能得到。

3.1 Value-Based

基于价值(动作)(Value-Based ):

      解释1:是输出所有可能的下一步动作的价值,我们会根据最高价值来选择动作。简单来说,选择当前State下对应Value最大的Action。强调一点这里面的Value并不只是从当前State进入下一个State的Action,还包括当前Action对未来的一系列影响的Reward。

      解释2:假设StateA状态下,可以采取的Action有3个,但是Action2带来的Value最大,所以最终Agent进入StateA状态时,就会选择Action2。(强调一点这里面的Value值,在强化学习训练开始时都是不知道的,我们一般都是设置为0。然后让Agent不断去尝试各类Action,不断与环境交互,不断获得Reward,然后根据我们计算Value的公式,不停地去更新Value,最终在训练N多轮以后,Value值会趋于一个稳定的数字,才能得出具体的State下,采取特定Action,对应的Value是多少)。

算法Q-Learning、SARSA(State-Action-Reward-State-Action)

适用场景:Action空间是离散的,比如吃豆子里面的动作空间是“上下左右”,但有些Agent的动作空间是一个连续的过程,比如机械臂的控制,整个运动是连续的。如果强行要将连续的Action拆解为离散的也是可以的,但是得到的维度太大,往往是指数级的,不适宜训练

      Value-Based有两种经典的方法,一种是蒙特卡洛法MC),一种是时间差分法TD)

3.1.1蒙特卡洛法

蒙特卡洛法MC):

      在当前状态 s_{t}下,想获得当前状态的V_{(s_{(t)})},该怎么办呢?从当前状态 s_{t}开始模拟运行(即采样一些运行轨迹),直到最终状态,计算这些轨迹(Trajectories)的评价累积回报,然后使 V_{(s_{(t)})}尽可能与 G_{t} 接近,那么采用更新策略:

      上述MC运行过程有两个需要注意的地方:第一,采样的轨迹必须到最终状态,因此上述得到的 G_{t} 是对 V_{(s_{(t)})}的无偏估计,但是由于轨迹比较长,会产生方差累积的情况,因而方差比较大;第二,模拟运行的策略选择是有多种方法的,不同的策略构成不同的算法,比方Q-learning和SARSA。一般是采用当前学习到的策略+探索得到的策略来模拟运行。

3.1.2时序差分法

时序差分法(TD):

      它是在当前状态s_{t}模拟运行一步,而不是模拟到最终状态,因此其更新策略为:

      TD是利用立即回报和下一状态的值函数的和  作为指导来学习的过程,前面的指导被称为TD-Target。TD因为只采样一步,因而效率比较高,但是TD-Target是有偏的,但是方差小。

总结蒙特卡洛法得到的值函数是无偏估计,但是由于轨迹比较长,会产生方差累积的情况,时序差分法因为只采样一步,因而效率比较高,但是值函数是有偏的,但是方差小。

3.1.2.1 SARSA和Q-Learning

      两个算法基于的公式很类似,都是将上述介绍的TD里面的 V 换成Q 得到:

SARSA

Q-Learning

3.2 Policy-Based

3.2.1概念

       Value-Based方法适用于离散空间,但在连续空间中存在一些问题。

问题1:对于不连续的动作,这两种方法都可行,但如果是连续的动作(机械臂控制)基于价值的方法是不能用的,如果强行要将连续的Action拆解为离散的也是可以的,但是得到的维度太大,往往是指数级的,不适宜训练。我们只能用一个概率分布在连续动作中选择特定的动作

问题2:随机策略(Stochastic policy)的学习比较困难,在基于值的强化学习里面得到的是 Q\left ( s,a \right ) ,给定一个状态 s ,选择的策略是确定性的,不适合于那些最优策略就是随机策略的问题,比如石头剪刀布的最优策略是以(1/3, 1/3, 1/3)的概率来选择石头/剪刀/布。

      Policy Based的强化学习可以解决以上问题

概念(Policy-Based):

      解释1:是强化学习中最直接的一种,它能够感官分析所处的环境(状态),直接输出采取下一步各种行动的概率,然后根据概率采取行动,所有每种行动都可能被采用,只是可能性不同。          解释2:基于每个State可以采取的Action策略,针对Action策略进行建模,学习出具体State下可以采取的Action对应的概率,然后根据概率来选择Action。
      具体解释

总结:基于值的强化学习目的在于学习到Q\left ( s,a \right ),然后获得贪心策略,当作最优策略;而基于策略的强化学习的目的就是对策略建模 。假如利用了上面的Softmax,实际上还是得到了一个策略 ,实际上已经不是基于值的强化学习了。

3.2.2 Policy Gradient

策略梯度-Policy Gradient - 知乎

3.2.3深度强化学习

      在上面介绍Value-based RL时,针对连续动作空间,可以转而使用Policy-based RL;对于很大的状态空间,比如Atari游戏的每一帧是一个状态,AlphaGo所要面对的围棋棋局的状态,这些状态空间太大,使用 Q\left ( s,a \right )来记录状态值函数需要很大的存储空间。所以引入值函数近似(Value Function Approximation),目的是

      在学习到Q 或者 V之后,就可以将其代入TD-Learning等等算法求解最优策略。当然值函数近似可以采用的近似方法有很多,比如线性函数近似、决策树近似、神经网络近似等等。最为常用的是线性函数近似和神经网络函数近似。现在基本都是神经网络。

3.3 Actor and Critic

概念

Advantage Function

补充1:关于Actor-Critic,像上面一样加了个Advantage就得到A2C算法,如果再加一个异步操作Asynchronous就得到了A3C。

补充2

      立即回报:当前动作作用于当前状态的回报。

      长期回报:当前动作对后续状态产生的影响带来的长期回报。

      贪婪算法:选择当前最大值(长期回报最大的选择)

      \varepsilon算法:优先选最大值,对于其他值也有一定选择概率。

4.主要算法

1、Q-learning

      Q-learning:Q-learning 是一种无模型、非策略的强化学习算法。它使用 Bellman 方程估计最佳动作值函数,该方程迭代地更新给定状态动作对的估计值。Q-learning 以其简单性和处理大型连续状态空间的能力而闻名。

2、SARSA

      SARSA:SARSA 是一种无模型基于策略的强化学习算法。它也使用Bellman方程来估计动作价值函数,但它是基于下一个动作的期望值,而不是像 Q-learning 中的最优动作。SARSA 以其处理随机动力学问题的能力而闻名。

3、DDPG

      DDPG:是一种用于连续动作空间的无模型、非策略算法。它是一种actor-critic算法,其中actor网络用于选择动作,而critic网络用于评估动作DDPG 对于机器人控制和其他连续控制任务特别有用

4、A2C

      A2C(Advantage Actor-Critic):是一种有策略的actor-critic算法,它使用Advantage函数来更新策略。该算法实现简单,可以处理离散和连续的动作空间

5、PPO

      PPO(Proximal Policy Optimization):是一种策略算法,它使用信任域优化的方法来更新策略它在具有高维观察和连续动作空间的环境中特别有用。PPO 以其稳定性和高样品效率而著称。

6、DQN

      DQN(深度 Q 网络):是一种无模型、非策略算法,它使用神经网络来逼近 Q 函数。DQN 特别适用于 Atari 游戏和其他类似问题,其中状态空间是高维的,并使用神经网络近似 Q 函数。

7、TRPO

      TRPO (Trust Region Policy Optimization):是一种无模型的策略算法,它使用信任域优化方法来更新策略。它在具有高维观察和连续动作空间的环境中特别有用。

      TRPO 是一个复杂的算法,需要多个步骤和组件来实现。TRPO不是用几行代码就能实现的简单算法。

:本文前三章主要参考 基于值和策略的强化学习入坑 - 知乎,第四章主要参考7个流行的强化学习算法及代码实现_Imagination官方博客的博客-CSDN博客

往期文章

1.强化学习基础(2)—常用算法总结-CSDN博客

参考文献

1.基于值和策略的强化学习入坑 - 知乎

2.强化学习入门这一篇就够了!!!万字长文_写Bug那些事的博客-CSDN博客 

3.如何用简单例子讲解 Q - learning 的具体过程? - 知乎 

4.7个流行的强化学习算法及代码实现_Imagination官方博客的博客-CSDN博客 

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

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

相关文章

AI全栈大模型工程师(四)OpenAI API初探

五、它是怎么生成结果的? 其实,它只是根据上文,猜下一个词(的概率)…… OpenAI 的接口名就叫「completion」,也证明了其只会「生成」的本质。 下面用程序演示「生成下一个字」。你可以自己修改 prompt 试试。还可以使用相同的 prompt 运行多次。 import openai import…

哪个牌子的电容笔好用?ipad触控笔推荐平价

有哪些电容笔适合学生党入手?苹果Pencil虽然与普通的电容笔,不同的是,这款电容笔同时具有重力传感器和倾斜传感器,而平替电容笔,只有一种倾斜传感器,但在书写方面的体验很不错,可以用来写字&…

JAMA | 多中心临床试验也用RCS方法分析,卒中患者强化血压管理更有利用康复

郑老师统计课程,欢迎点击报名:临床设计与数据分析 课程 2023年9月,外国学者在《JAMA》(一区,IF120.7)发表题为:" Intensive vs Conventional Blood Pressure Lowering After Endovascular …

MySQL初级之战

华子目录 什么是数据库?数据库管理系统(DBMS)数据库系统与文件系统的区别数据库的发展史常见数据库关系性数据库关系型数据库的4大特性关系型数据库的优缺点非关系型数据库非关系数据库的优点和缺点 DBMS支持的数据模型MySQL体系架构连接层SQ…

学生用什么样的台灯比较好?分享最合适学生使用的台灯

随着现在生活水平的提高,越来越多人重视健康的问题。尤其是对于孩子,很多家长对其可谓是百般担心、千般呵护,害怕出现什么问题,其中最主要的就是近视。而如今,我国青少年儿童的近视率可不低的,达到了52.7%&…

qt中的对象树与生命期

1.为什么要使用对象树: GUI 程序通常是存在父子关系的,比如一个对话框之中含有按钮、列表等部件,按钮、列表、对话框等部件其实就是一个类的对象(注意是类的对象,而非类),很明显这些对象之间是存在父子关系的&#xff…

四、多线程服务器

1.进程的缺陷和线程的优点 1.进程的缺陷 创建进程(复制)的工作本身会给操作系统带来相当沉重的负担。 而且,每个进程具有独立的内存空间,所以进程间通信的实现难度也会随之提高。 同时,上下文切换(Cont…

cmd:读取电脑硬件序列号

一、读取电脑硬件序列号 1.cmd 在没有使用第三方库的情况下,要读取电脑的硬件序列号通常需要使用操作系统提供的工具或命令行。以下是一个示例,展示如何使用Windows操作系统的命令行工具 wmic 来获取硬件序列号: 打开命令提示符&#xff0…

尚硅谷Flink(三)时间、窗口

1 🎰🎲🕹️ 🎰时间、窗口 🎲窗口 🕹️是啥 Flink 是一种流式计算引擎,主要是来处理无界数据流的,数据源源不断、无穷无尽。想要更加方便高效地处理无界流,一种方式就…

【Linux学习笔记】代码编辑工具vim

1. vim工具基本模式的转换2. vim命令模式下的各种编辑命令2.1. 光标行定位2.2. 光标自由定位2.3. 复制粘贴2.4. 删除2.5. 文本的大小写替换2.6. 文本的替换2.7. 文本的前删后删2.8. 撤销操作 3. vim底行模式下的命令3.1. 设置行号与取消设置行号3.2. 分屏操作3.3. 在不退出vim的…

Postman简单使用

文章目录 一.接口测试流程二、Postman接口测试工具三、接口关联四、全局变量和环境变量 一.接口测试流程 拿到API接口文档(从开发拿或者抓包获取),熟悉接口业务,接口地址,错误码等等 编写接口的测试用例以及评审 编写…

SSL证书续费要如何操作

SSL证书一旦到期,网站会立即无法访问,而且会提出不安全警告,如果是电商或者品牌网站影响还是很大的。 SSL证书和域名续费有很大区别,域名续费只要交钱就可以了,SSL证书续费还需要认证和更新服务器SSL证书文件才算收工…

【多线程】JUC(java.util.concurrent)的常见类 信号量 线程安全的集合类

目录 1. Callable接口 1.1 Callable接口和Runnable接口的区别? 1.2 使用Callable接口编写代码。 2. ReentrantLock 可重入锁 3.信号量 semaphore 3.1 Java中信号量的使用 4.CountDownLatch JUC: java.util.concurrent -> 这个包里的内容主要是一些多线程…

智能变电站自动化系统的应用与产品选型

摘要:现如今,智能变电站发展已经成为了电力系统发展过程中的内容,如何提高智能变电站的运行效率也成为电力系统发展的一个重要目标,为了能够更好地促进电力系统安全稳定运行,本文则就智能变电站自动化系统的实现进行了…

青藏高原连续日光诱导叶绿素荧光数据集(2000-2018)

简介: 青藏高原连续日光诱导叶绿素荧光数据集(2000-2018)是通过MODIS各通道反射率和SIF观测数据建立神经网络模型,从而得到较高时空分辨率的SIF数据,常作为初级生产力的参考。前言 – 人工智能教程 源数据范围为全球&…

网工实验笔记:MQC原理与配置

一、概述 MQC(Modular QoS Command-Line Interface,模块化QoS命令行)是指通过将具有某类共同特征的数据流划分为一类,并为同一类数据流提供相同的服务,也可以对不同类的数据流提供不同的服务。 MQC三要素 流分类&am…

15-k8s-高级存储之pv与pvc

文章目录 一、相关概念二、创建pv二、创建pvc三、创建pod调用pvc四、StorageClass动态制备pv 一、相关概念 关系 生命周期相关概念 2.1 静态构建:集群管理员创建若干PV卷。这些卷对象带有真实存储的细节信息,并且对集群用户可用(可见)。PV卷对象存在于Kubernetes …

摩尔信使MThings的设备高级参数

摩尔信使MThings支持三级参数管理方案,依次为:数据级、设备级、通道级。 设备级参数不仅包含设备名称、设备地址等常用信息,同时提供了诸多高级参数,其同样是为了满足不同用户应用场景中所面临的差异化需求,以更加灵活…

勒索病毒LockBit2.0 数据库(mysql与sqlsever)解锁恢复思路分享

0.前言 今天公司服务器中招LockBit2.0勒索病毒,损失惨重,全体加班了一天基本解决了部分问题,首先是丢失的文件数据就没法恢复了,这一块没有理睬,主要恢复的是两个数据库,一个是16GB大小的SQLserver数据库&…

安徽阳光心理测量平台目录遍历

安徽阳光心理测量平台目录遍历 FOFA指纹 title"心理测量平台"漏洞复现 路由后拼接/admin/UserFiles/ GET /admin/UserFiles/ HTTP/1.1 Host: {{Hostname}}修复方案 针对路径设定对应权限