【转载】David Silver公开课2——马尔可夫决策过程MDP

本文是David Silver强化学习公开课第二课的总结笔记。主要介绍了马尔可夫过程(MP)、马尔可夫奖赏过程(MRP)、马尔可夫决策过程(MDP)是什么,以及它们涉及到的一些概念,结合了课程ppt给出的例子对概念有了一些直观的了解。

【转载自】chenrudan.github.io

本文是David Silver强化学习公开课第二课的总结笔记。主要介绍了马尔可夫过程(MP)、马尔可夫奖赏过程(MRP)、马尔可夫决策过程(MDP)是什么,以及它们涉及到的一些概念,结合了课程ppt给出的例子对概念有了一些直观的了解。

本课视频地址:RL Course by David Silver - Lecture 2: Markov Decision Process

本课ppt地址:http://www0.cs.ucl.ac.uk/staff/d.silver/web/Teaching_files/MDP.pdf

文章的内容是课程的一个总结和讨论,会按照自己的理解来组织。个人知识不足再加上英语听力不是那么好可能会有一些理解不准的地方,欢迎一起讨论。

建了一个强化学习讨论qq群,有兴趣的可以加一下群号595176373或者扫描下面的二维码。

1

1.基础概念

状态集合S: 有限状态state集合,s表示某个特定状态

动作集合A: 有限动作action集合,a表示某个特定动作

状态转移矩阵P: 矩阵每一项是从S中一个状态s转移到另一个状态{s’}的概率Pss′=P[St+1=s′|St=s]Pss′=P[St+1=s′|St=s]以及执行动作a后从一个状态转移到另一个概率为Pass′=P[St+1=s′|St=s,At=a]Pss′a=P[St+1=s′|St=s,At=a]。这里的状态转移矩阵决定了马尔可夫性质,即未来状态只与当前状态有关而与过去状态无关。矩阵一行之和为1。

策略ππ: 状态s下执行动作a的概率,π(a|s)=P[At=a|St=s]π(a|s)=P[At=a|St=s]

reward函数ER: 这个函数是immediate reward的期望,即在时刻t的时候,agent执行某个action后下一个时刻立即能得到的reward Rt+1Rt+1的期望,它由当前的状态决定。状态s下immediate reward期望为ERs=E[Rt+1|St=s]ERs=E[Rt+1|St=s],状态s下执行动作a后immediate reward期望为ERas=E[Rt+1|St=s,At=a]ERsa=E[Rt+1|St=s,At=a]

Return GtGt与discount γγ: GtGt是t时刻之后未来执行一组action能够获得的reward,即t+1、t+2、t+3…未来所有时刻reward之和,是未来时刻reward在当前时刻的体现,但是越往后的时刻它能反馈回来的reward需要乘以一个discount系数,系数γ∈[0,1]γ∈[0,1]会产生一个打折的效果,这是因为并没有一个完美的模型能拟合出未来会发生什么,未来具有不确定性,同时这样计算会方便,避免了产生状态的无限循环,在某些情况下,即时产生的reward即Rt+1Rt+1会比未来时刻更值得关注,符合人的直觉。因此Gt=Rt+1+γRt+2+…=∑∞k=0γkRt+k+1Gt=Rt+1+γRt+2+…=∑k=0∞γkRt+k+1

状态值函数v(s)v(s): 即基于t时刻的状态s能获得的return的期望,v(s)=E[Gt|St=s]v(s)=E[Gt|St=s],这里是仅按照状态转移矩阵选择执行何种动作,如果加入动作选择策略,那么函数就变成了vπ(s)=Eπ[Gt|St=s]vπ(s)=Eπ[Gt|St=s]

动作值函数qπ(s,a)qπ(s,a): 基于t时刻的状态s,选择特定的一个action后能获得的return期望,这里的选择过程就隐含加入了策略。qπ(s,a)=Eπ[Gt|St=s,At=a]qπ(s,a)=Eπ[Gt|St=s,At=a]

2. MDP与实例分析

马尔可夫链/过程(Markov Chain/Process),是具有markov性质的随机状态s1,s2,…序列。由[S,P]组成。如下图1圆圈内是状态,箭头上的值是状态之间的转移概率。class是指上第几堂课,facebook指看facebook网页,pub指去酒吧,pass指通过考试,sleep指睡觉。例如处于class1有0.5的概率转移到class2,或者0.5的概率转移到facebook。

1

图1 Markov Process Example(图片来源[1])

从而可以产生非常多的随机序列,例如C1 C2 C3 Pass Sleep或者C1 FB FB C1 C2 C3 Pub C1 FB FB FB C1 C2 C3 Pub C2 Sleep等。这些随机状态的序列就是马尔可夫过程。这里可以看到有一些状态发生了循环。

马尔可夫奖赏过程(Markov Reward Process),即马尔可夫过程加上value judgement,value judegment即判断一个像上面一个特定的随机序列有多少累积reward,也就是计算出v(s)。它由[S,P,R,γ]组成,示意图如下。

1

图2 Markov Reward Process Example(图片来源[1])

可以看出比图1多了红色部分即R,但是R的取值只决定了immediate reward,在实际过程中肯定是需要考虑到后面步骤的reward才能确定当前的选择是否正确。而实际上v(s)v(s)由两部分组成,一个是immediate reward,一个是后续状态产生的discounted reward,推导如下(这里我觉得视频里似乎把ERsERs与Rt+1Rt+1的取值当成一样的了),推导出来的这个式子称为Bellman方程。

v(s)=E[Gt|St=s] =E[Rt+1+γ(Rt+2+γRt+3+…)|St=s] =E[Rt+1+γGt+1|St=s] =ERs+γ∑s′∈SPss′v(s′)(1)v(s)=E[Gt|St=s] =E[Rt+1+γ(Rt+2+γRt+3+…)|St=s] =E[Rt+1+γGt+1|St=s] =ERs+γ∑s′∈SPss′v(s′)(1)

 

那么每一个状态下能得到的状态值函数取值或者说累积reward如下所示,即原来写着class、sleep状态的地方替换成了数字(这里假设γ=1)。可以从sleep状态出发,推导出每个状态的状态值函数取值,如右上角红色公式所示。最右的-23与-13,列出二元一次方程组即可求出。

1

图3 State Value Function Example(图片来源[1])

将Bellman方程表达成矩阵形式,变成了v=ER+γPvv=ER+γPv,是个线性等式,直接求解得到v=(I−γP)−1ERv=(I−γP)−1ER。而这样求解的话计算复杂度是O(n3)O(n3),所以一般通过动态规划、蒙特卡洛估计与Temporal-Difference learning这些迭代的方式求解。

马尔可夫决策过程(Markov Decision Process),它是拥有决策能力的马尔可夫奖赏过程,个人理解是MRP是将所有情况都遍历,而MDP则是选择性的遍历某些情况。它由[S,A,P,Ras,γ,π(a|s)][S,A,P,Rsa,γ,π(a|s)]组成,并且拥有两个值函数vπ(s)vπ(s)和qπ(s,a)qπ(s,a)。根据这两个值函数的定义,它们之间的关系表示为vπ(s)=∑a∈Aπ(a|s)qπ(s,a)vπ(s)=∑a∈Aπ(a|s)qπ(s,a)以及qπ(s,a)=Ras+γ∑s′∈SPass′vπ(s′)qπ(s,a)=Rsa+γ∑s′∈SPss′avπ(s′)。第二个式子是说当选择一个action之后,转移到不同状态下之后获取的reward之和是多少。将两个式子互相代入,可以得到如下的Bellman期望方程。

vπ(s)=∑a∈Aπ(a|s)(Ras+γ∑s′∈SPass′vπ(s′))(2)vπ(s)=∑a∈Aπ(a|s)(Rsa+γ∑s′∈SPss′avπ(s′))(2)

qπ(s,a)=Ras+γ∑s′∈SPass′∑a′∈Aπ(a′|s′)qπ(s′,a′)(3)qπ(s,a)=Rsa+γ∑s′∈SPss′a∑a′∈Aπ(a′|s′)qπ(s′,a′)(3)

下图是一个MDP的例子,箭头上的单词表示action,与MRP不同的是,这里给出的immediate reward是同时在某个状态s和某个动作a条件下,所以图中R不是只取决于s,而是取决于s和a。右上角的等式表达出了这一个状态的状态值函数求解过程。

1

图4 Markov Decision Processes Example(图片来源[1])

由于策略π(a|s)π(a|s)是可以改变的,因此两个值函数的取值不像MRP一样是固定的,那么就能从不同的取值中找到一个最大值即最优值函数(这节课没有讲如何求解)。例如下面两个图就是上面的例子能找到的最优状态值函数v∗(s)v∗(s)与最优动作值函数q∗(s,a)q∗(s,a)。如果知道了q∗(s,a)q∗(s,a),那么也就知道了在每一步选择过程中应该选择什么样的动作。也就是说MDP需要解决的问题并不是每一步到底会获得多少累积reward,而是找到一个最优的解决方案。这两个最优值函数同样存在着一定关系,v∗(s)=maxaq∗(s,a)v∗(s)=maxaq∗(s,a),从而可以推出q∗(s,a)=Ras+γ∑s′∈SPass′maxa′q∗(s′,a′)q∗(s,a)=Rsa+γ∑s′∈SPss′amaxa′q∗(s′,a′),这个等式称为Bellman优化方程,它不是一个线性等式,没有闭式解。通常通过值迭代、策略迭代、Q-learning、Sarsa等方法求解。

v∗(s)=maxaq∗(s,a)(4)v∗(s)=maxaq∗(s,a)(4)

q∗(s,a)=Ras+γ∑s′∈SPass′maxa′q∗(s′,a′)(5)q∗(s,a)=Rsa+γ∑s′∈SPss′amaxa′q∗(s′,a′)(5)

 

1

图5 Optimal State-Value Function Example(图片来源[1])

1

图6 Optimal Action-Value Function Example(图片来源[1])

实际上一定存在这样的一个最优策略π∗。可以通过最大化q∗(s,a)获得。针对任意的MDP问题,总是存在一个最优的deterministic policy。

以上是第二课的主要内容,从MP开始到MRP再到MDP,了解值函数的具体概念与reward有什么联系,重点是介绍MDP面对的问题,暂时没有提到如何解决。结合课程的例子对各个概念有比较直观的了解。但是这一课有个概念是“MDP描述了强化学习的environment,且是fully Observable的”,这个意思我暂时没明白。如果MDP是environment,那么它为什么有policy,为什么需要最大化policy,个人觉得MDP应该是fully Observable的强化学习,也就是说MDP本身描述的就是一个强化学习问题,它的状态转移矩阵和reward function就是environment,它的目标就是找到最优的动作值函数或者最优Policy。

[1] http://www0.cs.ucl.ac.uk/staff/d.silver/web/Teaching_files/MDP.pdf

### 马尔可夫决策过程 MDP 原理 马尔可夫决策过程(Markov Decision Process, MDP)是一种用于建模具有随机性的动态系统的数学框架,在人工智能、机器学习等领域有着广泛应用[^1]。MDP 主要由五个要素构成: - **状态集 \( S \)**:表示环境可能处于的不同情况。 - **动作集 \( A \)**:指代理可以在给定状态下执行的动作集合。 - **转移概率 \( P(s'|s,a) \)**:定义了当采取某个行动后,从一个状态转移到另一个状态的概率分布。 - **即时奖励函数 \( R(s,a,s') \)**:描述了在特定情况下采取某项操作所能获得的即时反馈。 - **折扣因子 \( γ ∈ [0, 1] \)**:用来调整对未来奖励的重要性评估;较低的值意味着更重视眼前的回报,而较高的值则鼓励探索长远利益[^2]。 #### 折扣因子的作用 折扣因子决定了未来奖励对于当前决策的影响程度。具体来说,如果设定较大的折扣因子,则表明模型更加关注未来的潜在收益而非即刻的结果;反之亦然。这种机制有助于算法找到既能够快速见效又具备可持续发展的解决方案。 ```python gamma = 0.9 # 设置折扣因子为0.9,表示较看重未来发展 ``` ### 应用场景实例 为了说明如何利用 MDP 来解决实际问题,这里给出一个简单的例子——迷宫游戏。在这个游戏中,玩家需要在一个二维网格上移动来寻找出口位置。我们可以把每一个格子视为一种不同的状态,并允许四个基本方向作为可行的操作选项。通过不断尝试并记录每次到达新地点所得到的好处或者惩罚分数,最终就能训练出一套有效的行走路线规划方案[^3]。 ```python import numpy as np def mdp_maze_example(): grid_size = (5, 5) states = [(i, j) for i in range(grid_size[0]) for j in range(grid_size[1])] actions = ['up', 'down', 'left', 'right'] rewards = {state: -1 for state in states} # 默认每步都有负分 start_state = (0, 0) goal_state = (grid_size[0]-1, grid_size[1]-1) rewards[goal_state] = 100 # 到达终点有高正向激励 transition_probabilities = {} for s in states: for a in actions: next_s = get_next_state(s, a, grid_size) reward = rewards[next_s] if not transition_probabilities.get((s, a)): transition_probabilities[(s, a)] = [] transition_probabilities[(s, a)].append([next_s, reward]) return transition_probabilities def get_next_state(current_state, action, size): row, col = current_state new_row, new_col = { 'up': (max(row - 1, 0), col), 'down': (min(row + 1, size[0] - 1), col), 'left': (row, max(col - 1, 0)), 'right': (row, min(col + 1, size[1] - 1)) }[action] return (new_row, new_col) transition_probs = mdp_maze_example() print(transition_probs) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值