强化学习(一):强化学习与马尔科夫决策过程

2024-02-01 21:32

本文主要是介绍强化学习(一):强化学习与马尔科夫决策过程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 1. 强化学习概念
    • 1.1. 负反馈控制
    • 1.2. 强化学习
    • 参考资料
  • 2. 马尔科夫决策过程(Markov decision process, MDP)
    • 2.1. 定义
    • 2.2. 动态特性
    • 2.3. 折扣
    • 2.4. 价值函数
    • 2.5. 最优策略 与 最优价值函数
    • 参考资料

1. 强化学习概念

1.1. 负反馈控制

在经典的自动控制原理中,控制信号 u u u是根据被控对象的状态进行控制的,同时再考虑被控量的理想值,最终能使被控量的实际值 和 理想值达到一致。

这样的控制作用基于经典的 负反馈思想

u ( t ) = K ( y ( t ) − y s ) u(t) = K(y(t) - y_s) u(t)=K(y(t)ys)
在这里插入图片描述

而对于离散系统,在 k k k时刻施加的控制信号 u ( k ) u(k) u(k) 是指在 k k k时刻观测到了系统状态 x ( k ) x(k) x(k)之后施加的控制信号,从而使系统状态由 x ( k ) x(k) x(k)变成 x ( k + 1 ) x(k+1) x(k+1)。而 u ( k ) u(k) u(k)的设计一定是使系统状态与预期值达到一致。

这样控制器和被控对象的交互就构成了一个序列:
x ( k ) , u ( k ) , x ( k + 1 ) , u ( k + 1 ) , . . . x(k), u(k), x(k+1), u(k+1),... x(k),u(k),x(k+1),u(k+1),...

控制作用就取决于 u ( k ) u(k) u(k)的式子了,经典控制中 u ( k ) u(k) u(k)的表达式是确定的,例如经典PID中的参数是先通过阶跃曲线法调好在加入控制回路中,LQR中的增益K也是提前计算好的。

同时也可以不断实验以调整 u ( k ) u(k) u(k)实现对系统的控制,最终得到针对某个特定系统的控制信号 u ( k ) u(k) u(k),这就是强化学习的思想。

1.2. 强化学习

强化学习的思路是是使智能体不断地控制,不断地从控制结果调整控制信号 u ( k ) u(k) u(k),最终完成控制。只不过强化学习的目标不再是使被控量收敛至预定值,而是达到最大的累积奖励。

比如你在写作业,在不知后果的情况下去打游戏,发现最后会被你妈打一顿。下次在写作业的时候,又去打游戏,然后又被打。长此以往你就知道了,跑去打游戏会被妈妈打,于是你选择继续写作业而不是去打游戏。强化学习就是基于这样的奖励机制调整控制策略的。

  • 状态 State:即系统状态 x ( k ) x(k) x(k)

  • 动作 Action:针对当前状态施加的控制信号 u ( k ) u(k) u(k),从而智能体到达一个新的状态 x ( k + 1 ) x(k+1) x(k+1)

  • 奖励 Reward:在状态 x ( k ) x(k) x(k)下应用某种动作 u ( k ) u(k) u(k)转移至另一个状态 x ( k + 1 ) x(k+1) x(k+1),会给出一个奖励值 r e w a r d [ x ( k ) , u ( k ) ] reward[x(k),u(k)] reward[x(k),u(k)]

  • 值函数 Value function:在状态 x ( k ) x(k) x(k)下应用某种动作 u ( k ) u(k) u(k)会给出一个到达终止状态的累积奖励的期望 v a l u e F u n c t i o n [ x ( k ) , u ( k ) ] valueFunction[x(k),u(k)] valueFunction[x(k),u(k)]

    值函数和奖励的区别在于,奖励只表达这一步行动的奖励值,值函数表达的是 这一步为开始,最终到达终止状态的所有奖励的和的期望值。即值函数衡量的是这一步对整体的贡献。当然值函数一定包括这一步的奖励。

  • 策略 Policy:根据当前状态得出动作的方法,是基于值函数最大得出的动作,即 u ( k ) = P o l i c y ( x ( k ) , v a l u e F u n c t i o n ( ) ) u(k) = Policy( x(k),valueFunction() ) u(k)=Policy(x(k),valueFunction())。强化学习关注的是长远的利益而非眼前的奖励。

因此强化学习的目标就是得到 策略Policy,使智能体在任意状态下 达到最大的累积收益。

而这个策略的得出,则需要不断地训练调整得出。就需要智能体不断地探索数据,探索每一步的未来的累积收益如何,并利用这些探索的数据进行策略更新。

参考资料

  1. 强化学习(一):简介

2. 马尔科夫决策过程(Markov decision process, MDP)

马尔科夫决策过程 是强化学习中智能体应用策略的过程,与离散系统的控制类似,在当前状态施加一个行为,得到新的状态,并得到一个收益。
x ( k ) , u ( k ) , r e w a r d ( k + 1 ) , x ( k + 1 ) , u ( k + 1 ) , . . . x(k), u(k), reward(k+1), x(k+1), u(k+1),... x(k),u(k),reward(k+1),x(k+1),u(k+1),...

2.1. 定义

典型的MDP包含如下五个要素
在这里插入图片描述
其中

  • S S S:系统状态的有限集合
  • A A A:系统可采取的行动的的有限集合
  • π ( a ∣ s ) \pi(a|s) π(as):表示在状态 s s s下选择动作 a a a的概率,可看作在该状态下的随机策略。 π ( s ) \pi(s) π(s)表示状态 s s s下选择的动作,为确定性策略。用 π \pi π表示任意状态下的动作策略。
  • R ( s , a , s ′ ) R(s,a,s') R(s,a,s):收益,表示在状态 s s s下采取动作 a a a到达新状态 s ′ s' s而获得的奖励。
  • G G G:回报,在时间 [ 1 , T ] [1,T] [1,T]内所有行动的收益累积

因此MDP就是在状态 s s s下根据 π ( a ∣ s ) \pi(a|s) π(as)求得行为 a a a而发生状态转移至 s ′ s' s,获得收益 R ( s , a , s ′ ) R(s,a,s') R(s,a,s)。其中策略 π \pi π能够使整个行动过程(或是episode)的收益累积,或是回报 G G G最大。

2.2. 动态特性

动态特性指的是在状态 s s s时采取动作 a a a,从而状态转移至 s ′ s' s并获得收益 r r r的概率
P ( s ′ , r ∣ s , a ) = P r { S t = s ′ , R t = r ∣ S t − 1 = s , A t − 1 = a } P(s',r|s,a)=Pr\{St=s',Rt=r|St-1=s,At-1=a\} P(s,rs,a)=Pr{St=s,Rt=rSt1=s,At1=a}

并满足 ∑ s ′ ∈ S ∑ r ∈ R p ( s ′ , r ∣ s , a ) = 1 \sum_{s' \in S}\sum_{r \in R}p(s',r|s,a)=1 sSrRp(s,rs,a)=1

使用动态特性可以得出很多量例如状态转移概率,期望收益等等。

对于一个MDP, S , A , R , G , P ( s ′ , r ∣ s , a ) S,A,R,G,P(s',r|s,a) S,A,R,G,P(s,rs,a)均是由环境给出,而唯有策略 π \pi π是由智能体自身给出,也是控制量。

因此问题是:如何衡量策略的好坏,如何制定最优的策略?

2.3. 折扣

episode:智能体按照策略 π \pi π行动,从起始点开始并最终终止于某个终结状态的整个过程。
因此策略 π \pi π的好坏首先体现在每个使用该策略的episode的好坏。

折扣
那么如何评价某次episode的好坏呢?评估每个episode的好坏应该去看该episode从头至尾智能体的收益的累积和。若起始时刻为 t t t,则

G t = R t + 1 + R t + 2 + R t + 3 + . . . + R T G_t= R_{t+1}+R_{t+2}+R_{t+3}+...+R_{T} Gt=Rt+1+Rt+2+Rt+3+...+RT

因此智能体的每一步决策都尽量使整个行为过程的收益累积和最大

但是如果该episode没有终止条件, G t G_t Gt的值如果不收敛将趋于无穷大。趋于无穷大的收益和不利于策略的评估,因此引入折扣变量 γ \gamma γ

G t = R t + 1 + γ R t + 2 + γ 2 R t + 3 + . . . = R t + 1 + γ G t + 1 G_t= R_{t+1}+\gamma R_{t+2}+\gamma^2 R_{t+3}+...=R_{t+1}+\gamma G_{t+1} Gt=Rt+1+γRt+2+γ2Rt+3+...=Rt+1+γGt+1

这样无限回报将变成有界的。

每个episode都有其相应的收益累积和,同一个策略 π \pi π不同的episode可能有不同的收益累积。那么如何评估策略 π \pi π的好坏呢?使用价值函数,即单个episode的收益累积和的期望值

2.4. 价值函数

价值函数就是收益和的期望,有了策略 π \pi π就可以计算价值函数了

  • 状态价值函数 v π ( s ) v_{\pi}(s) vπ(s):表示在状态 s s s开始使用策略 π \pi π进行决策的累积回报期望值
    v π ( s ) = E π [ G t ∣ S t = s ] v_{\pi}(s) = E_{\pi}[G_t|S_t = s] vπ(s)=Eπ[GtSt=s]

  • 行为价值函数 q π ( s , a ) q_{\pi}(s,a) qπ(s,a):表示在状态 s s s采取行动 a a a之后的所有状态,使用策略 π \pi π进行决策的累积回报期望值
    q π ( s , a ) = E π [ G t ∣ S t = s , A t = a ] = ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ × v π ( s ′ ) ] (重要) q_{\pi}(s,a) = E_{\pi}[G_t|S_t = s,A_t = a]=\sum_{s',r}p(s',r|s,a)[r+\gamma \times v_{\pi}(s')]\tag{重要} qπ(s,a)=Eπ[GtSt=s,At=a]=s,rp(s,rs,a)[r+γ×vπ(s)]()

注意 v π ( s ) v_{\pi}(s) vπ(s) q π ( s , a ) q_{\pi}(s,a) qπ(s,a)的关系,根据策略 π \pi π动作的选择有一个概率分布
v π ( s ) = ∑ a π ( a ∣ s ) × q π ( s , a ) (重要) v_{\pi}(s)=\sum_{a}\pi(a|s) \times q_{\pi}(s,a)\tag{重要} vπ(s)=aπ(as)×qπ(s,a)()

2.5. 最优策略 与 最优价值函数

最优策略 π ∗ \pi_* π指对于任意状态 s ∈ S s \in S sS 和该状态下的任意行为 a a a,该策略的价值函数最大,即
v ∗ ( s ) = max ⁡ π ( v π ( s ) ) , q ∗ ( s , a ) = max ⁡ π ( q π ( s , a ) ) v_*(s) = \max_{\pi}(v_{\pi}(s)), q_*(s,a) = \max_{\pi}(q_{\pi}(s,a)) v(s)=πmax(vπ(s)),q(s,a)=πmax(qπ(s,a))

那么最优策略 π ∗ \pi_* π满足什么样的条件呢?

如下图所示,对于一个状态 s s s有许多行为 a a a可供选择,每个行为都有其各自的 q ∗ ( s , a ) q_*(s,a) q(s,a),因此一定有

v π ( s ) = ∑ a π ( a ∣ s ) × q π ( s , a ) ≤ 1 × max ⁡ a ( q π ( s , a ) ) ≤ 1 × max ⁡ a ( q ∗ ( s , a ) ) v_{\pi}(s)=\sum_{a}\pi(a|s) \times q_{\pi}(s,a) ≤ 1 \times \max_{a}(q_{\pi}(s,a)) ≤ 1 \times \max_{a}(q_{*}(s,a)) vπ(s)=aπ(as)×qπ(s,a)1×amax(qπ(s,a))1×amax(q(s,a))

当且仅当 π = π ∗ \pi = \pi_* π=π取等,即最优策略的概率分布一定为
π [ arg max ⁡ a ( q ∗ ( s , a ) ) ∣ s ] = 1 (重要) \pi[\argmax_{a}(q_{*}(s,a)) |s] = 1\tag{重要} π[aargmax(q(s,a))s]=1()
不可能有其他的概率分布 π ( a ∣ s ) \pi(a|s) π(as) q π ( s , a ) q_{\pi}(s,a) qπ(s,a) max ⁡ a ( q ∗ ( s , a ) ) \max_{a}(q_{*}(s,a)) maxa(q(s,a))更大了。
在这里插入图片描述

因此最优策略的价值函数满足如下的Bellman最优方程
v ∗ ( s ) = 1 × max ⁡ a ( q ∗ ( s , a ) ) = max ⁡ a ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ × v ∗ ( s ′ ) ] (重要) v_{*}(s)=1 \times \max_{a}(q_{*}(s,a)) = \max_{a}\sum_{s',r}p(s',r|s,a)[r+\gamma \times v_{*}(s')]\tag{重要} v(s)=1×amax(q(s,a))=amaxs,rp(s,rs,a)[r+γ×v(s)]()

q ∗ ( s , a ) = ∑ s ′ , r p ( s ′ , r ∣ s , a ) [ r + γ × max ⁡ a ′ ( q ∗ ( s ′ , a ′ ) ) ] (重要) q_{*}(s,a) = \sum_{s',r}p(s',r|s,a)[r+\gamma \times \max_{a'}(q_{*}(s',a'))] \tag{重要} q(s,a)=s,rp(s,rs,a)[r+γ×amax(q(s,a))]()

特别的如果转移到状态 s ′ s' s只有一种奖励 r r r
则上式变成

v ∗ ( s ) = max ⁡ a ∑ s ′ p ( s ′ ∣ s , a ) [ R ( s , a , s ′ ) + γ × v ∗ ( s ′ ) ] v_{*}(s) = \max_{a}\sum_{s'}p(s'|s,a)[R(s,a,s')+\gamma \times v_{*}(s')] v(s)=amaxsp(ss,a)[R(s,a,s)+γ×v(s)]

q ∗ ( s , a ) = ∑ s ′ p ( s ′ ∣ s , a ) [ R ( s , a , s ′ ) + γ × max ⁡ a ′ ( q ∗ ( s ′ , a ′ ) ) ] q_{*}(s,a) = \sum_{s'}p(s'|s,a)[R(s,a,s')+\gamma \times \max_{a'}(q_{*}(s',a'))] q(s,a)=sp(ss,a)[R(s,a,s)+γ×amax(q(s,a))]

因此最优策略 π ∗ \pi_* π就为使上式中取到 m a x max max的行动 a a a,这需要对 v ∗ ( s ) v_{*}(s) v(s) q ∗ ( s , a ) q_{*}(s,a) q(s,a)进行求解。

由于这两个值函数均满足递推特性,最简单的思路就是穷举所有可能性来寻找产生 m a x max max a a a,但这样十分费力,需要一些近似算法来计算。同时上式是在动态特性已知的情况下求解的,如果动态特性未知呢?

参考资料

  1. 强化学习(二):马尔科夫决策过程(Markov decision process)
  2. 百度百科:马尔科夫决策过程
  3. 强化学习. Richard S. Sutton,Andrew G. Barto

这篇关于强化学习(一):强化学习与马尔科夫决策过程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

SpringBoot 整合 Grizzly的过程

《SpringBoot整合Grizzly的过程》Grizzly是一个高性能的、异步的、非阻塞的HTTP服务器框架,它可以与SpringBoot一起提供比传统的Tomcat或Jet... 目录为什么选择 Grizzly?Spring Boot + Grizzly 整合的优势添加依赖自定义 Grizzly 作为

mysql-8.0.30压缩包版安装和配置MySQL环境过程

《mysql-8.0.30压缩包版安装和配置MySQL环境过程》该文章介绍了如何在Windows系统中下载、安装和配置MySQL数据库,包括下载地址、解压文件、创建和配置my.ini文件、设置环境变量... 目录压缩包安装配置下载配置环境变量下载和初始化总结压缩包安装配置下载下载地址:https://d

springboot整合gateway的详细过程

《springboot整合gateway的详细过程》本文介绍了如何配置和使用SpringCloudGateway构建一个API网关,通过实例代码介绍了springboot整合gateway的过程,需要... 目录1. 添加依赖2. 配置网关路由3. 启用Eureka客户端(可选)4. 创建主应用类5. 自定

最新版IDEA配置 Tomcat的详细过程

《最新版IDEA配置Tomcat的详细过程》本文介绍如何在IDEA中配置Tomcat服务器,并创建Web项目,首先检查Tomcat是否安装完成,然后在IDEA中创建Web项目并添加Web结构,接着,... 目录配置tomcat第一步,先给项目添加Web结构查看端口号配置tomcat    先检查自己的to

SpringBoot集成SOL链的详细过程

《SpringBoot集成SOL链的详细过程》Solanaj是一个用于与Solana区块链交互的Java库,它为Java开发者提供了一套功能丰富的API,使得在Java环境中可以轻松构建与Solana... 目录一、什么是solanaj?二、Pom依赖三、主要类3.1 RpcClient3.2 Public

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

SpringBoot整合kaptcha验证码过程(复制粘贴即可用)

《SpringBoot整合kaptcha验证码过程(复制粘贴即可用)》本文介绍了如何在SpringBoot项目中整合Kaptcha验证码实现,通过配置和编写相应的Controller、工具类以及前端页... 目录SpringBoot整合kaptcha验证码程序目录参考有两种方式在springboot中使用k

SpringBoot整合InfluxDB的详细过程

《SpringBoot整合InfluxDB的详细过程》InfluxDB是一个开源的时间序列数据库,由Go语言编写,适用于存储和查询按时间顺序产生的数据,它具有高效的数据存储和查询机制,支持高并发写入和... 目录一、简单介绍InfluxDB是什么?1、主要特点2、应用场景二、使用步骤1、集成原生的Influ

SpringBoot实现websocket服务端及客户端的详细过程

《SpringBoot实现websocket服务端及客户端的详细过程》文章介绍了WebSocket通信过程、服务端和客户端的实现,以及可能遇到的问题及解决方案,感兴趣的朋友一起看看吧... 目录一、WebSocket通信过程二、服务端实现1.pom文件添加依赖2.启用Springboot对WebSocket

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert