主题
马尔可夫决策过程(MDP)
马尔可夫决策过程(Markov Decision Process,MDP)是强化学习的标准数学框架,几乎所有强化学习算法都建立在它之上。它用状态、动作、转移概率、奖励和折扣因子五个要素刻画“序贯决策”问题,并在此基础上定义策略和价值函数。上一节的 多臂老虎机 只有一个状态、动作不影响未来;MDP 把状态转移和延迟奖励加了回来。本节从马尔可夫性出发,经由马尔可夫过程和马尔可夫奖励过程,逐步给出 MDP、策略、价值函数、最优性和占用度量的定义。
马尔可夫性
如果一个状态满足:未来只依赖于当前状态,而与过去的历史无关,就称该状态具有马尔可夫性:
直观地说,当前状态已经包含了历史中对预测未来有用的全部信息。比如国际象棋的棋盘局面就是马尔可夫的:知道当前局面就足以决定下一步,不需要知道之前是怎么走到这里的。
从马尔可夫过程到马尔可夫奖励过程
MDP 可以看作在更简单的模型上逐步“加东西”得到的。
马尔可夫过程(Markov Process,MP,也叫马尔可夫链)只有状态和转移:一个二元组
马尔可夫奖励过程(Markov Reward Process,MRP)在 MP 上加上奖励函数
(
MDP 再加上动作:转移和奖励都依赖智能体选择的动作。反过来看,一旦固定了策略
一个三状态的例子:天气在“晴、阴、雨”之间按下面的矩阵转移(行是今天,列是明天),每天的“出行满意度”奖励为晴 2、阴 0.5、雨 −1,
| 今天 \ 明天 | 晴 | 阴 | 雨 |
|---|---|---|---|
| 晴 | 0.7 | 0.2 | 0.1 |
| 阴 | 0.3 | 0.4 | 0.3 |
| 雨 | 0.2 | 0.4 | 0.4 |
本页末尾的代码求出平稳分布约为(晴 0.462,阴 0.308,雨 0.231),MRP 价值为
MDP 的定义
一个 MDP 由五元组
:状态集合; :动作集合; :动力学函数,在状态 执行动作 后,转移到 并获得奖励 的概率; :期望奖励, ; :折扣因子。
由动力学函数可以导出状态转移概率:
回报
从时刻
它满足一个非常重要的递归关系,这是后面贝尔曼方程的基础:
当
策略
策略
- 随机性策略:
; - 确定性策略:
。
在 MDP 中,策略只依赖于当前状态(这正是马尔可夫性带来的便利),并且可以证明,总存在一个确定性的最优策略。
价值函数
状态价值函数:从状态
动作价值函数:在状态
两者的关系:
最优策略与最优价值函数
最优状态价值函数和最优动作价值函数定义为所有策略中能取得的最大值:
一旦得到
这就是 Q-learning 和 DQN 等基于价值的方法的核心思路:先学
一个小例子:两状态 MDP
考虑一个只有两个状态的 MDP:状态 A 和状态 B。
- 在 A 执行“停留”:获得奖励 1,留在 A;执行“前往”:获得奖励 0,转移到 B。
- 在 B 执行任何动作:获得奖励 2,留在 B。
取
占用度量
价值函数从“每个状态值多少”的角度描述策略;另一个等价的角度是看策略把时间花在哪里。给定初始状态分布
乘上
- 回报是占用度量的线性函数:
- 策略与占用度量一一对应:由
可以还原出策略 ;反过来,满足“流量守恒”线性约束 的非负 都对应某个策略。
于是“求最优策略”可以改写成在一个多面体上最大化线性函数的线性规划。这个视角在后面会反复出现:GAIL 让学生的占用度量逼近专家的占用度量,约束强化学习对占用度量施加额外的线性约束,离线强化学习 中的分布偏移也可以理解为数据的占用度量与新策略的占用度量不一致。
用上面的两状态例子验证(初始总在 A,
| 策略 | |||||
|---|---|---|---|---|---|
| 总是停留 | 1.000 | 0.000 | 0.000 | 10.000 | 10.000 |
| 总是前往 | 0.000 | 0.100 | 0.900 | 18.000 | 18.000 |
| 随机 50/50 | 0.091 | 0.091 | 0.818 | 17.273 | 17.273 |
“总是前往”的策略只在第 0 步位于 A,所以
代码:MP、MRP 与占用度量
py
"""从马尔可夫过程(MP)到马尔可夫奖励过程(MRP),再到 MDP 的占用度量(occupancy measure)。
1) MP:三状态天气链,求平稳分布;2) MRP:加上奖励,用 v = (I - γP)^{-1} r 求价值并用蒙特卡洛验证;
3) 占用度量:在本章的两状态 MDP(A/B)上计算 ρ^π(s, a),并验证 V^π(s0) = <ρ^π, r> / (1 - γ)。"""
import numpy as np
rng = np.random.default_rng(0)
gamma = 0.9
# ---------- 1) 马尔可夫过程:状态 0=晴 1=阴 2=雨 ----------
names = ["晴", "阴", "雨"]
P = np.array([[0.7, 0.2, 0.1],
[0.3, 0.4, 0.3],
[0.2, 0.4, 0.4]])
w, V = np.linalg.eig(P.T) # 平稳分布:P^T μ = μ 的特征向量
mu = np.real(V[:, np.argmin(np.abs(w - 1))]); mu /= mu.sum()
print("MP 平稳分布:", {n: round(float(m), 4) for n, m in zip(names, mu)})
s, counts = 0, np.zeros(3)
for _ in range(200_000):
s = rng.choice(3, p=P[s]); counts[s] += 1
print("MP 模拟 20 万步的状态频率:", {n: round(float(c), 4) for n, c in zip(names, counts / counts.sum())})
# ---------- 2) 马尔可夫奖励过程:每天的“出行满意度”奖励 ----------
r = np.array([2.0, 0.5, -1.0])
v = np.linalg.solve(np.eye(3) - gamma * P, r)
print("MRP 解析价值 v = (I-γP)^{-1} r:", {n: round(float(x), 3) for n, x in zip(names, v)})
mc = []
for _ in range(5000): # 从“雨”出发的蒙特卡洛估计(截断 150 步)
s, G = 2, 0.0
for t in range(150):
G += gamma ** t * r[s]; s = rng.choice(3, p=P[s])
mc.append(G)
print(f"MRP 蒙特卡洛估计 v(雨):{np.mean(mc):.3f} ± {np.std(mc) / np.sqrt(len(mc)):.3f}")
# ---------- 3) 占用度量:两状态 MDP,状态 A=0, B=1;A 的动作 0=停留 1=前往,B 只有一个动作 ----------
# 为了写成统一的矩阵形式,B 的两个动作效果相同(奖励 2,留在 B)
Pmdp = np.zeros((2, 2, 2)); R = np.zeros((2, 2))
Pmdp[0, 0, 0], R[0, 0] = 1.0, 1.0 # A 停留:奖励 1,留在 A
Pmdp[0, 1, 1], R[0, 1] = 1.0, 0.0 # A 前往:奖励 0,到 B
Pmdp[1, :, 1], R[1, :] = 1.0, 2.0 # B:奖励 2,留在 B
s0 = np.array([1.0, 0.0]) # 初始总在 A
def occupancy(pi):
"""ρ(s,a) = (1-γ) Σ_t γ^t Pr(s_t=s, a_t=a)。先解 d = (1-γ) s0 + γ P_π^T d,再乘 π。"""
P_pi = np.einsum("sa,sat->st", pi, Pmdp)
d = np.linalg.solve(np.eye(2) - gamma * P_pi.T, (1 - gamma) * s0)
return d[:, None] * pi
def value(pi):
P_pi = np.einsum("sa,sat->st", pi, Pmdp); r_pi = (pi * R).sum(1)
return np.linalg.solve(np.eye(2) - gamma * P_pi, r_pi)
for name, pA in [("总是停留", 0.0), ("总是前往", 1.0), ("随机 50/50", 0.5)]:
pi = np.array([[1 - pA, pA], [0.5, 0.5]])
rho = occupancy(pi)
print(f"策略「{name}」:ρ(A,停留)={rho[0, 0]:.3f} ρ(A,前往)={rho[0, 1]:.3f} ρ(B,·)={rho[1].sum():.3f} "
f"| Σρ={rho.sum():.3f} | <ρ,r>/(1-γ)={(rho * R).sum() / (1 - gamma):.3f} | V(A)={value(pi)[0]:.3f}")1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
实际运行输出:
text
MP 平稳分布: {'晴': 0.4615, '阴': 0.3077, '雨': 0.2308}
MP 模拟 20 万步的状态频率: {'晴': 0.4629, '阴': 0.3075, '雨': 0.2296}
MRP 解析价值 v = (I-γP)^{-1} r: {'晴': 10.463, '阴': 7.575, '雨': 5.641}
MRP 蒙特卡洛估计 v(雨):5.646 ± 0.051
策略「总是停留」:ρ(A,停留)=1.000 ρ(A,前往)=0.000 ρ(B,·)=0.000 | Σρ=1.000 | <ρ,r>/(1-γ)=10.000 | V(A)=10.000
策略「总是前往」:ρ(A,停留)=0.000 ρ(A,前往)=0.100 ρ(B,·)=0.900 | Σρ=1.000 | <ρ,r>/(1-γ)=18.000 | V(A)=18.000
策略「随机 50/50」:ρ(A,停留)=0.091 ρ(A,前往)=0.091 ρ(B,·)=0.818 | Σρ=1.000 | <ρ,r>/(1-γ)=17.273 | V(A)=17.2731
2
3
4
5
6
7
2
3
4
5
6
7
小结与下一步
MDP 给出了强化学习问题的形式化描述,价值函数则衡量了策略的好坏。下一节 贝尔曼方程 将推导价值函数满足的递归方程,它是几乎所有强化学习算法的出发点。
练习题
- 在两状态例子中,若
,最优策略还是“前往”吗?求使两种策略价值相等的 。 - 证明
。 - 举一个不满足马尔可夫性的状态表示的例子,并说明如何扩充状态使其满足马尔可夫性。
- 若奖励满足
、 ,回报的取值范围是多少? - 为什么在 MDP 中只需要考虑依赖当前状态的策略,而不需要依赖历史的策略?
- 对天气 MRP,手算
时的价值,并解释为什么此时 。 - 证明占用度量满足流量守恒约束,并利用它推导
。
参考文献
- Bellman, R. (1957). A Markovian decision process. Journal of Mathematics and Mechanics, 6(5), 679–684.
- Puterman, M. L. (1994). Markov Decision Processes: Discrete Stochastic Dynamic Programming. Wiley.
- Sutton, R. S., & Barto, A. G. (2018). Reinforcement Learning: An Introduction (2nd ed.), 第 3 章.
- Altman, E. (1999). Constrained Markov Decision Processes. Chapman & Hall/CRC.(占用度量与线性规划视角)
- Syed, U., Bowling, M., & Schapire, R. E. (2008). Apprenticeship learning using linear programming. ICML.