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

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

相关文章

Linux进程CPU绑定优化与实践过程

《Linux进程CPU绑定优化与实践过程》Linux支持进程绑定至特定CPU核心,通过sched_setaffinity系统调用和taskset工具实现,优化缓存效率与上下文切换,提升多核计算性能,适... 目录1. 多核处理器及并行计算概念1.1 多核处理器架构概述1.2 并行计算的含义及重要性1.3 并

Spring boot整合dubbo+zookeeper的详细过程

《Springboot整合dubbo+zookeeper的详细过程》本文讲解SpringBoot整合Dubbo与Zookeeper实现API、Provider、Consumer模式,包含依赖配置、... 目录Spring boot整合dubbo+zookeeper1.创建父工程2.父工程引入依赖3.创建ap

Linux下进程的CPU配置与线程绑定过程

《Linux下进程的CPU配置与线程绑定过程》本文介绍Linux系统中基于进程和线程的CPU配置方法,通过taskset命令和pthread库调整亲和力,将进程/线程绑定到特定CPU核心以优化资源分配... 目录1 基于进程的CPU配置1.1 对CPU亲和力的配置1.2 绑定进程到指定CPU核上运行2 基于

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

Java进程异常故障定位及排查过程

《Java进程异常故障定位及排查过程》:本文主要介绍Java进程异常故障定位及排查过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、故障发现与初步判断1. 监控系统告警2. 日志初步分析二、核心排查工具与步骤1. 进程状态检查2. CPU 飙升问题3. 内存

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

SpringBoot整合liteflow的详细过程

《SpringBoot整合liteflow的详细过程》:本文主要介绍SpringBoot整合liteflow的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋...  liteflow 是什么? 能做什么?总之一句话:能帮你规范写代码逻辑 ,编排并解耦业务逻辑,代码

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

MySQL中的InnoDB单表访问过程

《MySQL中的InnoDB单表访问过程》:本文主要介绍MySQL中的InnoDB单表访问过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、访问类型【1】const【2】ref【3】ref_or_null【4】range【5】index【6】

浏览器插件cursor实现自动注册、续杯的详细过程

《浏览器插件cursor实现自动注册、续杯的详细过程》Cursor简易注册助手脚本通过自动化邮箱填写和验证码获取流程,大大简化了Cursor的注册过程,它不仅提高了注册效率,还通过友好的用户界面和详细... 目录前言功能概述使用方法安装脚本使用流程邮箱输入页面验证码页面实战演示技术实现核心功能实现1. 随机