强化学习——马尔可夫奖励过程的理解

2024-05-14 03:20

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

在这里插入图片描述

目录

  • 一、马尔可夫奖励过程
    • 1.回报
    • 2.价值函数
  • 参考文献

一、马尔可夫奖励过程

  在马尔可夫过程的基础上加入奖励函数 r r r 和折扣因子 γ \gamma γ,就可以得到马尔可夫奖励过程(Markov reward process)。一个马尔可夫奖励过程由 < S , P , r , γ > <S,P,r,\gamma > <S,P,r,γ> 构成,各个组成元素的含义如下:

  • S S S 是有限状态的集合。
  • P P P 是状态转移矩阵。
  • r r r 是奖励函数,某个状态 s s s 的奖励 r ( s ) r(s) r(s) 指转移到该状态时可以获得奖励的期望。
  • γ \gamma γ 是折扣因子, γ \gamma γ 的取值范围为 [ 0 , 1 ) [0,1) [0,1)。引入折扣因子的理由为远期利益具有一定不确定性,有时我们更希望能够尽快获得一些奖励,所以我们需要对远期利益打一些折扣。接近 1 1 1 γ \gamma γ 更关注长期的累计奖励,接近 0 的 γ \gamma γ 更考虑短期奖励。

1.回报

  在一个马尔可夫奖励过程中,回报 G t G_{t} Gt 是指从某个起始时刻 t t t 的状态 S t S_{t} St 开始,直到达到终止状态时,所有获得的奖励经过时间衰减后的总和。这种计算方式可以帮助评估在整个过程中的总体收益或成本,对于决策和策略评估尤为重要。

G t = R t + γ R t + 1 + γ 2 R t + 2 + ⋯ = ∑ k = 0 ∞ γ k R t + k G_{t}=R_{t}+\gamma R_{t+1}+\gamma^{2}R_{t+2}+\cdots =\sum_{k=0}^{\infty }\gamma^{k}R_{t+k} Gt=Rt+γRt+1+γ2Rt+2+=k=0γkRt+k

  其中, R t R_{t} Rt 表示在 t t t 时刻获得的奖励。

  在图2中,我们基于之前提到的马尔可夫过程的例子,进一步引入了奖励函数,从而构建成一个马尔可夫奖励过程。在这个过程中,不同状态的进入会带来不同的奖励值。例如,进入状态 s 2 s_{2} s2 会获得奖励 − 2 -2 2 ,这意味着我们通常不希望进入这个状态。相反,进入状态 s 4 s_{4} s4 可以获得最高的奖励,即 10 10 10 分。而当进入状态 s 6 s_{6} s6 时,虽然奖励为零,但此时状态序列将终止。这种设置帮助我们了解和评估进入每个状态的奖励或代价。

在这里插入图片描述

图2 马尔可夫奖励过程示例

  比如选取 s 1 s_{1} s1 为起始状态,设置 γ = 0.5 \gamma=0.5 γ=0.5,采样到一条状态序列为 s 1 → s 2 → s 3 → s 6 s_{1} \to s_{2} \to s_{3} \to s_{6} s1s2s3s6 ,就可以计算 s 1 s_{1} s1 的回报 G t G_{t} Gt ,得到 G 1 = − 1 + 0.5 × ( − 2 ) + 0. 5 2 × ( − 2 ) = − 2.5 G_{1}=-1+0.5×(-2)+0.5^{2}×(-2)=-2.5 G1=1+0.5×(2)+0.52×(2)=2.5

  图2所示过程的马尔可夫奖励过程的回报计算Python代码如下:

import numpy as np
np.random.seed(0)
# 定义状态转移概率矩阵P
P = [[0.9, 0.1, 0.0, 0.0, 0.0, 0.0],[0.5, 0.0, 0.5, 0.0, 0.0, 0.0],[0.0, 0.0, 0.0, 0.6, 0.0, 0.4],[0.0, 0.0, 0.0, 0.0, 0.3, 0.7],[0.0, 0.2, 0.3, 0.5, 0.0, 0.0],[0.0, 0.0, 0.0, 0.0, 0.0, 1.0],
]
P = np.array(P)rewards = [-1, -2, -2, 10, 1, 0]  # 定义奖励函数
gamma = 0.5  # 定义折扣因子# 给定一条序列,计算从某个索引(起始状态)开始到序列最后(终止状态)得到的回报
def compute_return(start_index, chain, gamma):G = 0for i in reversed(range(start_index, len(chain))):G = gamma * G + rewards[chain[i] - 1]return G# 一个状态序列,s1-s2-s3-s6
chain = [1, 2, 3, 6]
start_index = 0
G = compute_return(start_index, chain, gamma)
print("根据本序列计算得到回报为:%s。" % G)

2.价值函数

  在马尔可夫奖励过程中,从某个状态出发所能获得的未来累积奖励的期望(即期望回报)被称为该状态的价值。这种期望值反映了一个状态的总体益处或收益。我们将这些价值整合成一个称为价值函数的概念。价值函数将某个状态作为输入,并输出该状态的价值。这种函数是评估不同状态在长期收益上的重要性和效用的关键工具。价值函数写为: V ( s ) = E [ G t ∣ S t = s ] V(s)=\mathbb{E}[G_{t}|S_{t}=s] V(s)=E[GtSt=s],可展开为:

在这里插入图片描述

  在上述方程的最后一个等号中,我们可以看到两部分内容。首先,即时奖励的期望值正是奖励函数给出的值,表示为 E [ R t ∣ S t = s ] = r ( s ) \mathbb{E}[R_{t}|S_{t}=s]=r(s) E[RtSt=s]=r(s)。其次,方程中的剩余部分表示从状态 s s s 出发,根据各个转移概率计算未来奖励的期望值,这可以用 E [ γ V ( S t + 1 ) ∣ S t = s ] \mathbb{E}[\gamma V(S_{t+1})|S_{t}=s] E[γV(St+1)St=s] 表达。这个部分将当前状态到其他可能状态的转移概率与那些状态的价值相乘,然后求和,从而计算出从状态 s s s 出发的期望未来回报。可以得到:

V ( s ) = r ( s ) + γ ∑ s ′ ∈ S p ( s ′ ∣ s ) V ( s ′ ) V(s)=r(s)+\gamma \sum_{s^{'}\in S}p(s^{'}|s)V(s^{'}) V(s)=r(s)+γsSp(ss)V(s)

  上式就是马尔可夫奖励过程中非常有名的贝尔曼方程(Bellman equation),对每一个状态都成立。即一个状态的价值等于在该状态获得的即时奖励和从该状态转移到其他状态后预期获得的未来奖励的总和。

  贝尔曼方程的重要性在于它提供了一种迭代求解各状态价值的方法,使我们能够有效地评估和优化决策过程。在实际应用中,通过迭代更新每个状态的价值,直至收敛到稳定值,我们可以得到每个状态的最终价值。这对于规划和决策具有重要的意义,尤其是在复杂系统和机器学习领域,如强化学习,其中贝尔曼方程是核心算法之一。

参考文献

[1] 动手学强化学习

[2] 强化学习(Reinforcement Learning)

这篇关于强化学习——马尔可夫奖励过程的理解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

深入理解Mysql OnlineDDL的算法

《深入理解MysqlOnlineDDL的算法》本文主要介绍了讲解MysqlOnlineDDL的算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小... 目录一、Online DDL 是什么?二、Online DDL 的三种主要算法2.1COPY(复制法)

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 读写分离核心价值二