强化学习笔记:马尔可夫过程 马尔可夫奖励过程

article/2025/8/22 1:40:11

1 马尔可夫性质 (Markov Property)

 

        我们设状态的历史为h_{t}=\left\{s_{1}, s_{2}, s_{3}, \ldots, s_{t}\right\}h_t包含了之前的所有状态)

        如果一个状态转移是符合马尔可夫性质的,也就是满足如下条件:

        也就是说,从当前状态s_t转移到状态s_{t+1}的概率,就直接等于它之前所有的状态转移到状态s_{t+1}的概率。

        换句话说,如果一个过程满足马尔可夫性质,那么就是说,这个过程未来状态和过去状态是独立的。未来的状态只取决于现在的状态。

 2 马尔可夫链(Markov Chain)

这个图里面有四个状态,这四个状态从s1​,s2​,s3​,s4​ 之间互相转移。转移概率就是边的权重。

2.1 状态转移矩阵

我们可以用状态转移矩阵来描述转移概率

 

它每一行其实描述了是从一个节点到达所有其它节点的概率。 

 3 马尔可夫链

         上图是一个马尔可夫链的例子,我们这里有七个状态。比如说从 s1​ 开始到s2​ ,它有 0.4 的概率,然后它有 0.6 的概率继续停留在它当前的状态。

 

        所以给定了这个状态转移的马尔可夫链后,我们可以对这个链进行采样,这样就会得到一串的轨迹。

 4 马尔可夫奖励过程(Markov Reward Process)

  马尔可夫奖励过程(Markov Reward Process, MRP) 是马尔可夫链再加上了一个奖励函数。

        在 MRP 中,转移矩阵和状态都是跟马尔可夫链一样的,多了一个奖励函数(reward function)

        

         这里是我们刚才看的马尔可夫链,如果把奖励也放上去的话,就是说到达每一个状态,我们都会获得一个奖励。

        这里我们可以设置对应的奖励,比如说到达 s1​ 状态的时候,可以获得 5 的奖励,到达 s7​ 的时候,可以得到 10 的奖励,其它状态没有任何奖励。

        因为这里状态是有限的,所以我们可以用向量R=[5,0,0,0,0,0,10] 来表示这个奖励函数,这个向量表示了每个点的奖励大小。

4.1 return &value function

4.1.1 horizon

一个回合的长度(每个回合最大的时间步数),它是由有限个步数决定的。

4.1.2 return

把奖励进行折扣后所获得的收益。Return 可以定义为奖励的逐步叠加

         越往后得到的奖励,折扣得越多。这说明我们其实更希望得到现有的奖励,未来的奖励就要把它打折扣。

 4.1.3 state value function

        当我们有了 return 过后,就可以定义一个状态的价值了,就是 state value function

        对于 MRP,state value function 被定义成是 return 的期望

         Gt​ 是之前定义的 discounted return,我们这里取了一个期望,期望就是说从这个状态开始,你有可能获得多大的价值。

        这个期望也可以看成是对未来可能获得奖励的当前价值的一个表现,就是当你进入某一个状态过后,你现在就有多大的价值。

        这里的Value值怎么计算呢 ?我们看后面的4.4

4.2 为什么return有折扣因子?

  • 有些马尔可夫过程是带环的,它并没有终结,我们想避免这个无穷的奖励。(到某一个时刻T之后,reward接近于0,轨迹停止)
  • 我们对未来的评估不一定是准确的,我们不一定完全信任我们的模型。因为这种不确定性,所以我们对未来的预估增加一个折扣。我们想把这个不确定性表示出来,希望尽可能快地得到奖励,而不是在未来某一个点得到奖励。
  • 如果这个奖励是有实际价值的,我们可能是更希望立刻就得到奖励,而不是后面再得到奖励(现在的钱比以后的钱更有价值)。【类比:通货膨胀,现在是10块钱和十年后的10块钱】
  • 有些时候可以把这个系数设为 0,γ=0:我们就只关注了它当前的奖励。我们也可以把它设为 1,γ=1:对未来并没有折扣,未来获得的奖励跟当前获得的奖励是一样的。

Discount factor 可以作为强化学习 agent 的一个超参数来进行调整,然后就会得到不同行为的 agent。

4.3 马尔科夫奖励过程举例

         和4开篇说的例子是一样的:进入第一个状态的时候会得到 5 的奖励,进入第七个状态的时候会得到 10 的奖励,其它状态都没有奖励。

        我们现在可以计算每一个轨迹得到的奖励,比如我们对于这个s4​,s5​,s6​,s7​ 轨迹的奖励进行计算,这里折扣系数是 0.5。

  • 在 4​ 的时候,奖励为零。

  • 下一个状态s5​ 的时候,因为我们已经到了下一步了,所以我们要把 s5​ 进行一个折扣,s5​ 本身也是没有奖励的。

  • 然后是到 s6​,也没有任何奖励,折扣系数应该是\frac{1}{4}

  • 到达s7​ 后,我们获得了一个奖励,但是因为s7​ 这个状态是未来才获得的奖励,所以我们要进行三次折扣。

所以对于这个轨迹,它的 return 就是一个 1.25,类似地,我们可以得到其它轨迹的 return 。

4.4 贝尔曼等式(Bellman Equation)【动态规划方程】 

我们前面知道了,一个马尔科夫奖励过程的value function为:

 于是我们可以稍微改造一下

 整理一下,就有:

 这个就是贝尔曼等式 ,未来打了折扣的奖励加上当前立刻可以得到的奖励,就组成了这个 Bellman Equation。

        假设有一个马尔可夫转移矩阵是右边这个样子,Bellman Equation 描述的就是当前状态到未来状态的一个转移。

        假设我们当前是在s1​, 那么它只可能去到三个未来的状态:有 0.1 的概率留在它当前这个位置,有 0.2 的概率去到s2​ 状态,有 0.7 的概率去到s4​ 的状态

        所以我们要把这个转移乘以它未来的状态的价值,再加上它的 immediate reward 就会得到它当前状态的价值。

4.4.1 矩阵形式理解贝尔曼等式&贝尔曼等式的解析解

我们可以把 Bellman Equation 写成一种矩阵的形式

对于第i行,有:

 V(s_i)=R(s_i)+\gamma(P(s_1|s_i)V(s_1)+P(s_2|s_i)V(s_2)+......+P(s_N|s_i)V(s_N))

也即:

 当我们把 Bellman Equation 写成矩阵形式后,可以直接求解:

于是我们得到了一组解析解:

 

         我们可以通过矩阵求逆把这个 V 的这个价值直接求出来。但是一个问题是这个矩阵求逆的过程的复杂度是 O(N^3)。这导致处理大矩阵的时候是非常困难的。

        所以这种通过解析解去求解的方法只适用于很小量的 MRP。

4.5 迭代法解MRP的value

4.5.1 蒙特卡洛法(采样法)

 

 

4.5.1 动态规划法

         我们也可以用这个动态规划的办法,一直去迭代它的 Bellman equation,让它最后收敛,我们就可以得到它的一个状态。

        当这个最后更新的状态跟你上一个状态变化并不大的时候,更新就可以停止,我们就可以输出最新的 V′(s) 作为它当前的状态。

        所以这里就是把 Bellman Equation 变成一个 Bellman Update,这样就可以得到它的一个价值。


http://chatgpt.dhexx.cn/article/iGZdldPC.shtml

相关文章

马尔可夫性质、马尔可夫链和马尔可夫过程

关注:灰质,有趣有料的AI技术分享 前言 研究决策问题就一定听说过马尔可夫过程(Markov Process),这是一类非常重要的方法。现在非常热门的强化学习都是基于马尔可夫过程方法建立的。马尔可夫决策过程是研究随机序贯决策…

1.3 马尔可夫过程

之前介绍的奖励、智能体、动作、观察和环境可以看成RL的一级概念。以此为基础,我们将探索RL的二级概念,包括状态(state)、事件(episode)、历史(history)、价值(value&…

一文看懂马尔科夫过程

1.马尔科夫决策过程(MDPs)简介 马尔科夫决策过程是对强化学习(RL)问题的数学描述。几乎所有的RL问题都能通过MDPs来描述: 最优控制问题可以用MDPs来描述;部分观测环境可以转化成POMDPs;赌博机问题是只有一个状态的MDPs;注:虽然大部分DL问题都能转化为MDPs,但是以下所描述…

马尔可夫Markov决策过程 MDP、马尔可夫奖励过程MRP

引言 在概率论及统计学中,马尔可夫过程(英语:Markov process)是一个具备了马尔可夫性质的随机过程,因为俄国数学家安德雷马尔可夫得名。马尔可夫过程是不具备记忆特质的(memorylessness)。换言…

零基础学习python数据分析,需要掌握哪些技能?

对于刚刚入行的小白同学来说,在学习python的过程中,一定会遇到一些疑问。比如说: 学习Python需要多久? 学习Python需要达到什么样的程度? 学Python的书籍有哪些? 为了处理数据集,我需要精通…

Python数据分析期末复习归纳

python数据分析期末复习归纳(更新中) 文章目录 python数据分析期末复习归纳(更新中)前言一、python语言基础二、内建数据结构、函数、文件(重点)元组列表内建序列函数字典函数 三、Numpy基础(重…

Python数据分析师特训营84节

刚看完了小破站的一个数据分析的课程: “2020年Python数据分析师特训营全套84节视频完结版(就业向/零基础友好)” 趁着热乎劲儿,想记录一下课程讲到的关于python的基础知识,还有numpy、pandas、matplotlib(数据分析三大利器)工具…

Python数据分析:混淆矩阵

【小白从小学Python、C、Java】 【Python全国计算机等级考试】 【Python数据分析考试必会题】 ● 标题与摘要 Python数据分析 混淆矩阵 ● 选择题 以下关于混淆矩阵说法错误的是: A TP是被正确分类的正例个数 B FN是被错误分类的正例个数 C 主对角元素是不同类别样例…

Python数据分析和处理

数据的维度 从一个数据到一组数据:一个数据表达一个含义,一组数据表达一个或多个含义 维度:一组数据的组织形式 一维数据:由对等关系的有序或无序数据构成。采用线性方式组织 二维数据:由多个一维数据组成,是一维数…

Python数据分析之理论知识

文章目录 Python数据分析概述一、数据分析的概念1.广义数据分析2.数据挖掘 二、数据分析流程1. 需求分析:2. 数据获取3.数据预处理4.分析与建模5.模型评价与优化6. 分类模型评价指标7.回归模型8.部署 三、数据分析应用场景四、总思维导图 Python数据分析概述 一、数…

如何用Python进行数据分析,详细流程讲解!

1:为什么选择Python进行数据分析? Python是一门动态的、面向对象的脚本语言,同时也是一门简约,通俗易懂的编程语言。Python入门简单,代码可读性强,一段好的Python代码,阅读起来像是在读一篇外语文章。Pyt…

如何用Python进行数据分析?

本文为CDA数据分析研究院原创作品,转载需授权 1.为什么选择Python进行数据分析? Python是一门动态的、面向对象的脚本语言,同时也是一门简约,通俗易懂的编程语言。Python入门简单,代码可读性强,一段好的Python代码,阅读起来像是在读一篇外语文章。Python这种特性称为“伪…

Python做数据分析需要学什么?

下面分别从这四个方面来带大家学习数据分析: 第一,做数据分析要精通Python吗?第二,数据分析流程是什么?学什么?第三,如何培养数据分析思维?第四,数据分析书籍推荐 一、…

Python大作业——爬虫+可视化+数据分析+数据库(数据分析篇)

个人博客 Python大作业——爬虫可视化数据分析数据库(简介篇) Python大作业——爬虫可视化数据分析数据库(爬虫篇) Python大作业——爬虫可视化数据分析数据库(可视化篇) Python大作业——爬虫可视化数…

用python进行数据分析(入门学习)

做笔记啦!!!这几天突击了一下使用python进行数据分析,觉得还是梳理一遍比较好,不然学得快忘得也快[捂脸] 所以,今天这篇文章就主要介绍一下用python进行数据分析中常用到的三个库:numpy、pandas…

111个Python数据分析实战项目,代码已跑通,数据可下载

写在前面: 这里整理了111个数据分析的案例,每一个都进行了严格的筛选,筛选标准如下: 1. 有干货:杜绝纯可视化、统计性分析,有一定比例的讲解性文字 2. 可跑通:所有代码均经过测试,…

一文看懂怎么用 Python 做数据分析

常遇到两类朋友。一类是会爬虫但不知道如何进一步做数据分析的,一类是平常用 Excel 做分析但不太会用 Python 分析的。如果和你很像,那下面这篇系统长文会很适合你,建议先收藏。 Excel 是数据分析中最常用的工具,本文通过 Python…

数据结构—顺序表

目录 顺序表介绍 创建顺序表类型 初始化顺序表 销毁顺序表 打印顺序表 增加数据 头插 尾插 删除数据 头删 尾删 查找数据 修改指定下标的数据 整体代码 顺序表介绍 什么是顺序表? 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构&a…

Java实现顺序表

目录 一、顺序表的简单理解 1、为什么我们要以数组为基础来构建顺序表呢? 2、顺序表都具有哪些功能 二、顺序表的代码实现 1、构建并且初始化顺序表 2、在顺序表中添加元素 1、判断需要添加元素的下标是否在顺序表的范围内 2、如果添加元素下标合法&#xff…

创建一个顺序表

#include <stdio.h> #include <stdlib.h> #define Size 5 //对Size进行宏定义&#xff0c;表示顺序表申请空间的大小 typedef struct Table{ //定义个顺序表结构体 int * head;//声明了一个名为head的长度不确定的数组&#xff0c;也叫“动态数组”int length;//…