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

在这里插入图片描述

目录

  • 一、马尔可夫奖励过程
    • 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.mzph.cn/bicheng/11824.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue从入门到实战Day05

一、自定义指令 自定义指令&#xff1a;自己定义的指令&#xff0c;可以封装一些dom操作&#xff0c;扩展额外功能 需求&#xff1a;当页面加载时&#xff0c;让元素将获得焦点 (autofocus在safari浏览器有兼容性) 操作dom&#xff1a;dom元素.focus() mounted() {this.$ref…

Elasticsearch解决字段膨胀问题

文章目录 背景Flattened类型的产生Flattened类型的定义基于Flattened类型插入数据更新Flattened字段并添加数据Flattened类型检索 Flattened类型的不足 背景 Elasticsearch映射如果不进行特殊设置&#xff0c;则默认为dynamic:true。dynamic:true实际上支持不加约束地动态添加…

关于milvus go sdk运行时报9223372036854775807 (untvped int constant)overflows int问题

背景 在使用milvus go sdk去查询milvus服务中并列出所有集合的时候遇到一个int溢出问题&#xff0c;依据官方文档&#xff0c;具体代码如下 package localimport ("context""fmt""github.com/milvus-io/milvus-sdk-go/v2/client""log&quo…

vue3使用依赖注入实现跨组件传值

父组件Index.vue: <script setup> import { onMounted, provide, ref } from vue import Child from ./Child.vue import ./index.cssconst count ref(0)provide(count, count)const handleClick () > {count.value }onMounted(() > {}) </script><tem…

记录:robot_localization传感器数据融合学习

一、参考资料 官方&#xff1a; http://wiki.ros.org/robot_localizationhttp://docs.ros.org/en/noetic/api/robot_localization/html/index.html2015 ROSCon 演讲官方网址&#xff08;youyube上也有这个视频&#xff09; 实践教程 https://kapernikov.com/the-ros-robot_…

纯福利|手把手教你如何白嫖免费的GPU资源(二)

大家好&#xff0c;我是无界生长。 前段时间写过一篇文章《纯福利&#xff5c;手把手教你如何白嫖免费的GPU资源&#xff08;一&#xff09;》&#xff0c;使用Google Colab提供的免费的GPU资源&#xff0c;今天接着写白嫖GPU资源攻略&#xff0c;可获得“长期免费的CPU实例资源…

【opencv】信用卡号识别实验

实验环境&#xff1a;anaconda、jupyter notebook&#xff08;其它的ide也行&#xff09; 实验用的包&#xff1a;numpy、matplotlib、opencv 实验目标&#xff1a; 识别信用卡的卡号 信用卡图片&#xff1a; 数字模板图片&#xff1a; 一、包引入 import cv2 import matplo…

kubernetes集群svc的代理模式-iptables修改为ipvs

一、概述\ 我们都知道&#xff0c;k8s集群的外部网络分发&#xff0c;借助kube-proxy组件来完成&#xff1b; 问题&#xff1a;我们为什么要将代理模式修改为ipvs而不继续使用iptables呐&#xff1f; 1&#xff0c;iptables底层使用四表五链完成网络代理&#xff0c;效率比较低…

RiProV2主题美化【支付页弹窗增加价格提示语】Ritheme主题美化RiProV2-网站WordPress美化二开

背景: 楼主的网站是用WordPress搭建的,并使用了正版主题RiProV2,但RiProV2在支付弹窗页没有价格,只在文章详情页会展示价格。本文就是美化这个支付弹窗,在支付弹窗页把价格字段加上,如下图所示: 美化前: 美化后 美化步骤: (1)定位到文件:/www/wwwroot/www.uu2i…

基于SpringBoot设计模式之创建型设计模式·抽象工厂模式

文章目录 介绍开始架构图&#xff08;以穿搭举例&#xff09;样例一&#xff08;html关于列表和表格的应用&#xff09;定义抽象工厂&#xff08;html&#xff09;定义抽象工厂需要制作抽象产物&#xff08;托盘&#xff09;定义具体工厂&#xff08;列表、表格&#xff09;定义…

海洋环境保护论文阅读记录

海洋环境保护 论文1&#xff1a;Critical role of wave–seabed interactions in the extensive erosion of Yellow River estuarine sediments 波浪-海床相互作用在黄河河口广泛侵中的关键作用 estuatine 河口的&#xff0c;港湾的 erodibility侵蚀度 sediment erodibility …

[PythonWeb:Django框架]:前后端请求调用;

文章目录 接着上篇项目app包下面创建static包&#xff0c;引入jquery&#xff0c;bootstrap 相关js文件views.py编写apicompute文件夹下面的urls.py路由模块引入views.py刚刚定义的函数html发送ajax请求 接着上篇 https://blog.csdn.net/Abraxs/article/details/138739727?sp…

24年湖南三支一扶报名详细流程(电脑报名)

24年湖南三支一扶报名详细流程&#xff08;电脑报名&#xff09; #湖南三支一扶 #湖南三支一扶考试 #三支一扶报名照片 #三支一扶考试 #三支一扶 #湖南省三支一扶

深度剖析深度神经网络(DNN):原理、实现与应用

目录 引言 一、DNN基本原理 二、DNN核心算法原理 三、DNN具体操作步骤 四、代码演示 引言 在人工智能和机器学习的浪潮中&#xff0c;深度神经网络&#xff08;Deep Neural Network&#xff0c;简称DNN&#xff09;已经成为了一种非常重要的工具。DNN模仿人脑神经网络的结…

paddle ocr v4 2.6.1实战笔记

目录 效果图&#xff1a; 安装 模型权重是自动下载&#xff0c;如果提前下载会报错。 识别orc&#xff0c;并opencv可视化结果&#xff0c;支持中文可视化 官方原版预测可视化&#xff1a; 效果图&#xff1a; 安装 安装2.5.2识别结果为空 pip install paddlepaddle-gpu…

【Python探索之旅】选择结构(条件语句)

文章目录 条件结构&#xff1a; 1.1 if单分支结构 1.2 if-else 多分支结构 1.3 if-elif 多重结构&#xff1a; 完结撒花​ 前言 Python条件语句是通过一条或多条语句的执行结果&#xff08;True或者False&#xff09;来决定执行的代码块。 Python提供了顺序、选择、循环三…

Git详解之六:Git工具

现在&#xff0c;你已经学习了管理或者维护 Git 仓库&#xff0c;实现代码控制所需的大多数日常命令和工作流程。你已经完成了跟踪和提交文件的基本任务&#xff0c;并且发挥了暂存区和轻量级的特性分支及合并的威力。 接下来你将领略到一些 Git 可以实现的非常强大的功能&…

重学java 37.多线程基本了解

尽管走自己的路&#xff0c;别被那些三言两语击倒 —— 24.5.13 一、多线程_线程和进程 进程&#xff1a;在内存中执行的应用程序 线程:是进程中最小的执行单元线程作用:负责当前进程中程序的运行,一个进程中至少有一个线程,一个进程还可以有多个线程,这…

永嘉原厂8×16点阵数码管驱动抗干扰数码管驱动IC防干扰数显芯片VK1640 SOP28

产品型号&#xff1a;VK1640 产品品牌&#xff1a;永嘉微电/VINKA 封装形式&#xff1a;SOP28 原厂&#xff0c;工程服务&#xff0c;技术支持&#xff01; 概述 VK1640是一种数码管或点阵LED驱动控制专用芯片&#xff0c;内部集成有数据锁存器、LED 驱动等电路。SEG脚接LE…