马尔可夫链决策过程(Markov decision process)

本文讨论如何应用强化学习中经典模型----马尔可夫链模型对外界信息进行正确处理,包含大量数学推导,但会尽量使用直白的话语让你对Markov chain有所了解。

马尔可夫三要素

在这里插入图片描述
如果你要使用该模型,必须要满足一个条件
p ( s t + 1 ∣ s t , a t ) = p ( s t + 1 ∣ s h , a t ) p(s_{t+1}|s_t, a_t) = p(s_{t+1}|s_h, a_t) p(st+1st,at)=p(st+1sh,at)
即agent所做的决定仅受当前状态的影响。这是一个大前提,那如何做到这一点呢?只有一种办法即保证 s t = s h s_t=s_h st=sh,但做到这一点相当不易,因此也会有其他模型来解决。不过这并不能否认Markov Chain依然是一个经典模型。
下面我们来讲讲这三个要素代表着什么。state代表着你观察到的状态,reward代表你采取行动时所获得的收益,action即是行动。
这个模型和人类的思维模式十分类似,Agent根据所处的状态计算每一种行动所获得的收益,选择收益最大的一种行动,此时由于行动会World产生了影响,因此会更新state和reward。
在这里插入图片描述

Value Function

对于每一种行动当然会有一个统一标准,数学表达为:
G t = r t + γ r t + 1 + γ 2 r t + 2 + γ 3 r t + 3 + . . . ( γ ≤ 1 ) G_t = r_t+\gamma r_{t+1}+\gamma^2 r_{t+2}+\gamma^3r_{t+3}+...(\gamma\le1) Gt=rt+γrt+1+γ2rt+2+γ3rt+3+...(γ1)
其中 γ \gamma γ为超参数, γ \gamma γ越大,越重视长远收益; γ \gamma γ越小,越重视即时收益。这很好理解,把 γ \gamma γ看做权重,谁的权重高,就越重视谁。是不是这个道理!
为保证结果准确,那最好的方法就是加个期望,这就是Value Function
V ( s ) = E [ r t + γ r t + 1 + γ 2 r t + 2 + γ 3 r t + 3 + . . . ∣ s ] V ( s ) = E [ r t + γ G t + 1 ∣ s ] V(s) = \Bbb{E}[r_t+\gamma r_{t+1}+\gamma^2 r_{t+2}+\gamma^3 r_{t+3}+...|s]\\V(s)=\Bbb{E}[r_t+\gamma G_{t+1}|s] V(s)=E[rt+γrt+1+γ2rt+2+γ3rt+3+...∣s]V(s)=E[rt+γGt+1s]
这时,聪明的同学开始提问了:“那期望怎么算呢?你不可能穷尽所有可能吧。”那是当然,要是我所有可能性都包含了,问题就迎刃而解,还需要什么建模呀!同学:“那该怎么办?”
在这里插入图片描述

其中一个解决方法就是模拟。发现当数据量足够大时,V’(s)就无限接近真正的V(s)。

求解V(s)

还要另一种解决方式就是数学求解。我们首先将V(s)写成矩阵形式。
在这里插入图片描述
R, γ \gamma γ, P已知,求V就很好求了。
但这里还有一个问题就是矩阵求逆的时间复杂度为 O ( n 3 ) O(n^3) O(n3),怎么做还能降低复杂度呢?
前面我们知道当样本足够大的时候, V k = V k + 1 V_k=V_{k+1} Vk=Vk+1。那可不可以利用这一点呢?答案是当然可以。具体流程如下:
在这里插入图片描述
代码实现如下:

import torch
# 初始化 V R P
gamma = 0.5
N = 5
V = torch.zeros(N)
R = torch.Tensor([1, 0, 0, 0, 5])
P = torch.Tensor([[0.6, 0.4, 0, 0, 0], 
				[0.4, 0.2, 0.4, 0, 0], 
				[0, 0.4, 0.2, 0.4, 0], 
				[0, 0, 0.4, 0.2, 0.4],
				[0, 0, 0, 0.4, 0.6]])
# 更新V
for k in track:  # track为不定长张量 k[0]=[1, 1, 1, 1, 0]
	r_future = 0
	for i in range(1, len(k)):
	 	r_future += P[i-1, k[i]]*V[k[i]]
	V[k[0]] = R[k[0]]+gamma*r_future

选择最佳策略

我们学会了如何定义Value Function,对每一种策略我们都会得到一个 V π ( s ) V^{\pi}(s) Vπ(s),使 V π ( s ) V^{\pi}(s) Vπ(s)达到最大的 π ( s ) \pi(s) π(s)就是我的最佳策略。
π ∗ ( s ) = arg ⁡ max ⁡ π V π ( s ) \pi^*(s) = \arg \max_\pi V^{\pi}(s) π(s)=argπmaxVπ(s)
要得到这个最佳 π ∗ ( s ) \pi^*(s) π(s),最简单的方法就是穷举,幸亏这并不是一个NP问题(最多需要枚举 ∣ A ∣ ∣ S ∣ |A|^{|S|} AS次),对于状态少且选择少的问题来说,这不免是一个很好的解决方案。对于大规模问题而言,复杂度太高,需要另寻它法。
迭代通常比枚举的复杂度更低,因此我们将会尝试使用迭代解决。要使用迭代的话,那状态必然不可能是随机的,状态集合会呈现一些特点,将这些特点加以利用尝试解决。因此,我们初步定下的流程是:
在这里插入图片描述
初始化使用random函数, V ( s ) V(s) V(s)也知道如何求解,当务之急是应该如何更新 π ( s ) \pi(s) π(s)。怎么样才能让 V ( s ) V(s) V(s)呈现单调递增呢?

Policy Improvement

定义一个 Q Q Q,代表在s状态下采取a行动所获得的收益。
Q π i ( s , a ) = R ( s , a ) + γ ∑ P ( s ′ ∣ s , a ) V π i ( s ′ ) π i + 1 ( s ) = arg ⁡ max ⁡ a Q π i ( s , a ) Q^{\pi_i}(s, a) = R(s, a)+\gamma\sum P(s'|s, a)V^{\pi_i}(s')\\ \pi_{i+1}(s)=\arg\max_a Q^{\pi_i}(s, a) Qπi(s,a)=R(s,a)+γP(ss,a)Vπi(s)πi+1(s)=argamaxQπi(s,a)
其中 π i + 1 ( s ) \pi_{i+1}(s) πi+1(s)便是更新后的策略。
好了,我们来总结一下这个算法的流程:
在这里插入图片描述
如果还有什么不懂的,欢迎私信或评论。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

误伤这又何妨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值