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

在这里插入图片描述

目录

  • 一、马尔可夫奖励过程
    • 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.hqwc.cn/news/696578.html

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

相关文章

为什么C#越学越陌生,搞那么多奇怪的东西?

在开始前我分享下我的经历&#xff0c;我刚入行时遇到一个好公司和师父&#xff0c;给了我机会&#xff0c;一年时间从3k薪资涨到18k的&#xff0c; 我师父给了一些C语言学习方法和资料&#xff0c;让我不断提升自己&#xff0c;感谢帮助过我的人&#xff0c; 如大家和我一样…

3款常用的可视化工具Matplotlib、Seaborn和Pandas

大家好&#xff0c;Seaborn 是基于 Matplotlib 的扩展库&#xff0c;Pandas 的可视化功能同样也依赖于 Matplotlib。尽管二者都使用相同的底层图形库&#xff0c;但绘制图表的方法却各有千秋。本文将介绍各种柱状图的绘制&#xff0c;比较 Matplotlib、Pandas 和 Seaborn 在数据…

Java | Leetcode Java题解之第80题删除有序数组中的重复项II

题目&#xff1a; 题解&#xff1a; class Solution {public int removeDuplicates(int[] nums) {int n nums.length;if (n < 2) {return n;}int slow 2, fast 2;while (fast < n) {if (nums[slow - 2] ! nums[fast]) {nums[slow] nums[fast];slow;}fast;}return sl…

ssm125四六级报名与成绩查询系统+jsp

四六级报名与成绩查询系统的设计与实现 摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对四六级报名信息管理混乱&am…

防火墙远程桌面端口号修改,通过防火墙修改远程桌面的端口号详细操作步骤

使用防火墙修改远程桌面的端口号是一项涉及系统安全和网络配置的重要任务。 以下是详细的操作步骤&#xff0c;旨在确保您能够安全、有效地完成此操作&#xff1a; 一、准备阶段 1. 了解默认端口号&#xff1a;远程桌面端口号通常是3389&#xff0c;这是一个用于远程访问和控…

文件流-ASCII文件(中北大学-程序设计基础(2))

目录 题目 源码 结果示例 题目 编写程序实现以下功能&#xff1a;【要求处理ASCII文件】 &#xff08;1&#xff09;按职工号由小到大的顺序将5个员工的数据&#xff08;包括号码、姓名、年龄和工资&#xff09;输出到磁盘文件中保存&#xff1b; &#xff08;2&#xff…

基于SpringBoot + Vue的兼职网站管理系统设计与实现+毕业论文+答辩PPT

系统介绍 本系统包含管理员、用户、企业三个角色。 管理员角色&#xff1a;前台首页、个人中心、用户管理、企业管理、兼职信息管理、职位申请管理、留言板管理、系统管理。 用户角色&#xff1a;前台首页、个人中心、职位申请管理。 企业角色&#xff1a;前台首页、个人中心、…

【Nginx】如何在 Nginx 中阻止来自特定国家的 IP 地址访问

文章目录 前言一、准备工作二、查看 Nginx 服务器都拥有哪些模块2.1 先查看本地nginx是否有ngx_http_geoip2模块2.2 安装nginx并配置ngx_http_geoip2模块2.2.1下载所需版本的nginx到服务器2.2.2 先安装所需依赖2.2.3 解压文件2.2.4 下载ngx_http_geoip2模块2.2.5 编译安装nginx…

服务器3389端口,服务器3389端口风险提示的应对措施

3389端口是Windows操作系统中远程桌面协议&#xff08;RDP&#xff09;的默认端口。一旦该端口被恶意攻击者利用&#xff0c;可能会导致未经授权的远程访问和数据泄露等严重安全问题。 针对此风险&#xff0c;强烈建议您采取以下措施&#xff1a; 1. 修改默认端口&#xff1a;…

HarmonyOS开发案例:【生活健康app之获取成就】(3)

获取成就 本节将介绍成就页面。 功能概述 成就页面展示用户可以获取的所有勋章&#xff0c;当用户满足一定的条件时&#xff0c;将点亮本页面对应的勋章&#xff0c;没有得到的成就勋章处于熄灭状态。共有六种勋章&#xff0c;当用户连续完成任务打卡3天、7天、30天、50天、…

SpringCloud 集成 RocketMQ 及配置解析

文章目录 前言一、SpringCloud 集成 RocketMQ1. pom 依赖2. yml 配置3. 操作实体4. 生产消息4.1. 自动发送消息4.2. 手动发送消息 5. 消费消息 二、配置解析1. spring.cloud.stream.function.definition 前言 定义 Spring Cloud Stream 是一个用来为微服务应用构建消息驱动能力…

搜索引擎的设计与实现(二)

目录 3 搜索引擎的基本原理 3.1搜索引擎的基本组成及其功能 l.搜索器 (Crawler) 2.索引器(Indexer) 3.检索器(Searcher) 4.用户接口(UserInterface) 3.2搜索引擎的详细工作流程 4 系统分析与设计 4.1系统分析 4.2系统概要设计 4.2系统实现目标 前面内容请移步 搜索引…