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

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

相关文章

将Mybatis升级为Mybatis-Plus的详细过程

《将Mybatis升级为Mybatis-Plus的详细过程》本文详细介绍了在若依管理系统(v3.8.8)中将MyBatis升级为MyBatis-Plus的过程,旨在提升开发效率,通过本文,开发者可实现... 目录说明流程增加依赖修改配置文件注释掉MyBATisConfig里面的Bean代码生成使用IDEA生

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

JSON Web Token在登陆中的使用过程

《JSONWebToken在登陆中的使用过程》:本文主要介绍JSONWebToken在登陆中的使用过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录JWT 介绍微服务架构中的 JWT 使用结合微服务网关的 JWT 验证1. 用户登录,生成 JWT2. 自定义过滤

java中使用POI生成Excel并导出过程

《java中使用POI生成Excel并导出过程》:本文主要介绍java中使用POI生成Excel并导出过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求说明及实现方式需求完成通用代码版本1版本2结果展示type参数为atype参数为b总结注:本文章中代码均为

SpringCloud之LoadBalancer负载均衡服务调用过程

《SpringCloud之LoadBalancer负载均衡服务调用过程》:本文主要介绍SpringCloud之LoadBalancer负载均衡服务调用过程,具有很好的参考价值,希望对大家有所帮助,... 目录前言一、LoadBalancer是什么?二、使用步骤1、启动consul2、客户端加入依赖3、以服务

Oracle存储过程里操作BLOB的字节数据的办法

《Oracle存储过程里操作BLOB的字节数据的办法》该篇文章介绍了如何在Oracle存储过程中操作BLOB的字节数据,作者研究了如何获取BLOB的字节长度、如何使用DBMS_LOB包进行BLOB操作... 目录一、缘由二、办法2.1 基本操作2.2 DBMS_LOB包2.3 字节级操作与RAW数据类型2.

C#原型模式之如何通过克隆对象来优化创建过程

《C#原型模式之如何通过克隆对象来优化创建过程》原型模式是一种创建型设计模式,通过克隆现有对象来创建新对象,避免重复的创建成本和复杂的初始化过程,它适用于对象创建过程复杂、需要大量相似对象或避免重复初... 目录什么是原型模式?原型模式的工作原理C#中如何实现原型模式?1. 定义原型接口2. 实现原型接口3

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

Spring Security注解方式权限控制过程

《SpringSecurity注解方式权限控制过程》:本文主要介绍SpringSecurity注解方式权限控制过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、摘要二、实现步骤2.1 在配置类中添加权限注解的支持2.2 创建Controller类2.3 Us

Spring AI集成DeepSeek三步搞定Java智能应用的详细过程

《SpringAI集成DeepSeek三步搞定Java智能应用的详细过程》本文介绍了如何使用SpringAI集成DeepSeek,一个国内顶尖的多模态大模型,SpringAI提供了一套统一的接口,简... 目录DeepSeek 介绍Spring AI 是什么?Spring AI 的主要功能包括1、环境准备2