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

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

相关文章

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三

Redis中Set结构使用过程与原理说明

《Redis中Set结构使用过程与原理说明》本文解析了RedisSet数据结构,涵盖其基本操作(如添加、查找)、集合运算(交并差)、底层实现(intset与hashtable自动切换机制)、典型应用场... 目录开篇:从购物车到Redis Set一、Redis Set的基本操作1.1 编程常用命令1.2 集

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

k8s中实现mysql主备过程详解

《k8s中实现mysql主备过程详解》文章讲解了在K8s中使用StatefulSet部署MySQL主备架构,包含NFS安装、storageClass配置、MySQL部署及同步检查步骤,确保主备数据一致... 目录一、k8s中实现mysql主备1.1 环境信息1.2 部署nfs-provisioner1.2.

MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决

《MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决》MyBatis默认开启一级缓存,同一事务中循环调用查询方法时会重复使用缓存数据,导致获取的序列主键值均为1,... 目录问题原因解决办法如果是存储过程总结问题myBATis有如下代码获取序列作为主键IdMappe

linux部署NFS和autofs自动挂载实现过程

《linux部署NFS和autofs自动挂载实现过程》文章介绍了NFS(网络文件系统)和Autofs的原理与配置,NFS通过RPC实现跨系统文件共享,需配置/etc/exports和nfs.conf,... 目录(一)NFS1. 什么是NFS2.NFS守护进程3.RPC服务4. 原理5. 部署5.1安装NF

MySQL使用EXISTS检查记录是否存在的详细过程

《MySQL使用EXISTS检查记录是否存在的详细过程》EXISTS是SQL中用于检查子查询是否返回至少一条记录的运算符,它通常用于测试是否存在满足特定条件的记录,从而在主查询中进行相应操作,本文给大... 目录基本语法示例数据库和表结构1. 使用 EXISTS 在 SELECT 语句中2. 使用 EXIS

oracle 11g导入\导出(expdp impdp)之导入过程

《oracle11g导入导出(expdpimpdp)之导入过程》导出需使用SEC.DMP格式,无分号;建立expdir目录(E:/exp)并确保存在;导入在cmd下执行,需sys用户权限;若需修... 目录准备文件导入(impdp)1、建立directory2、导入语句 3、更改密码总结上一个环节,我们讲了

ShardingProxy读写分离之原理、配置与实践过程

《ShardingProxy读写分离之原理、配置与实践过程》ShardingProxy是ApacheShardingSphere的数据库中间件,通过三层架构实现读写分离,解决高并发场景下数据库性能瓶... 目录一、ShardingProxy技术定位与读写分离核心价值1.1 技术定位1.2 读写分离核心价值二

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本