马尔可夫决策过程(MDP)是强化学习(RL)的核心数学框架,用于形式化描述智能体与环境交互的问题。其核心概念包括五元组(S, A, P, R, γ),其中S为状态集合,A为动作集合,P(s'|s,a)为状态转移概率,R(s,a)为奖励函数,γ为折扣因子,体现了未来奖励的折现。MDP的马尔可夫性表明未来状态仅依赖于当前状态和动作,与历史无关。策略π(a|s)描述了从状态到动作的映射,可以是确定性的或随机性的。目标是找到最优策略π*,以最大化期望累计奖励。价值函数包括状态价值V(s)和动作价值Q(s,a),分别表示从状态s出发和从状态s选择动作a后能获得的长期奖励。贝尔曼方程是RL求解的基础,描述了当前价值与立即奖励及未来价值之间的关系。最优价值函数满足最优贝尔曼方程,最优策略则是选择Q值最大的动作。在实际应用中,对于小规模问题可以使用值迭代或策略迭代求解,而对于大规模问题则需要借助函数逼近方法,如深度神经网络,这构成了深度强化学习的基础。
马尔可夫决策过程
把 RL 问题形式化是入门关键。马尔可夫决策过程(MDP)是 RL 的标准数学框架。
一句话定义
MDP = 一个有"记忆"的过程,智能体在每步根据状态选动作,环境给新状态和奖励,目标是最大化未来累计奖励的期望。
MDP 的五元组
<S, A, P, R, gamma>
| 符号 | 含义 | 例子(CartPole) |
|---|---|---|
| S | 状态集合 | 位置、速度、角度、角速度 (连续) |
| A | 动作集合 | 左推 / 右推 |
| P(s'|s,a) | 状态转移概率 | 当前状态选 a 跳到 s' 的概率 |
| R(s,a) | 奖励函数 | 平衡 +1, 倒 -1 |
| γ | 折扣因子(0~1) | 0.99 意味着未来 1 步的奖励打 99 折 |
马尔可夫性:未来只与现在有关,与过去无关。P(s_{t+1} | s_t, a_t, s_{t-1}, ...) = P(s_{t+1} | s_t, a_t)。
什么是"好的策略"?
策略 π(a|s) 是从状态到动作的分布。
- 确定性策略:
a = π(s)— 给定状态,必选某个动作 - 随机性策略:
π(a|s) = P(A=a|S=s)— 给定状态,选不同动作的概率
目标:找到最优策略 π*,最大化期望累计奖励:
G_t = R_{t+1} + γ * R_{t+2} + γ^2 * R_{t+3} + ...
= sum_{k=0}^{infty} γ^k * R_{t+k+1}
γ < 1 让无穷级数收敛,也让智能体更看重近期奖励(避免学"无限拖延")。
价值函数:衡量"我有多好"
状态价值 V(s)
在状态 s 出发,长期能拿多少奖励:
V^π(s) = E[ G_t | S_t = s, π ]
= E[ R_{t+1} + γ * R_{t+2} + ... | S_t = s, π ]
直觉:"我站在这里,长期看有多好?"
动作价值 Q(s, a)
在状态 s 选动作 a,然后按策略 π 走,长期能拿多少奖励:
Q^π(s, a) = E[ G_t | S_t = s, A_t = a, π ]
直觉:"我现在选这个动作,长期看有多好?"
关键关系:
V^π(s) = sum_a π(a|s) * Q^π(s, a) (按策略 π 加权)
Q^π(s, a) = R(s, a) + γ * sum_{s'} P(s'|s, a) * V^π(s') (拿立即奖励 + 折扣的未来)
贝尔曼方程:RL 的"牛顿第二定律"
把上面两个公式组合一下,得到贝尔曼期望方程:
V^π(s) = sum_a π(a|s) * [ R(s, a) + γ * sum_{s'} P(s'|s, a) * V^π(s') ]
直觉:"现在的价值 = 立即奖励 + 未来价值(打折扣)"。
这看起来像套娃(等式两边都有 V),但这就是强化学习求解的基础:
- 值迭代:不停迭代这个方程,直到 V 收敛
- Q-Learning:学习 Q 而不是 V,直接逼近最优
最优价值与最优策略
我们关心的不是"任意策略的价值",而是最优价值:
V*(s) = max_π V^π(s) (所有策略里, 这个状态最好能拿多少)
Q*(s, a) = max_π Q^π(s, a) (所有策略里, 这个状态选这个动作最好能拿多少)
最优贝尔曼方程(最优价值必须满足):
V*(s) = max_a [ R(s, a) + γ * sum_{s'} P(s'|s, a) * V*(s') ]
Q*(s, a) = R(s, a) + γ * sum_{s'} P(s'|s, a) * max_{a'} Q*(s', a')
找到最优 Q 之后,最优策略极其简单:
π*(s) = argmax_a Q*(s, a)
"在每个状态选 Q 最大的那个动作"——这就是确定性最优策略。
例子:5 个状态的网格世界
0 1 2 3 4
5 6 7 8 9
10 11 12 13 14
15 16 17 18 19
- 从 0 出发,目标走到 14(奖励 +1)
- 走过 19 掉悬崖(奖励 -1,回到起点)
- 每步奖励 -0.01(鼓励走最短路径)
- 动作:上下左右
- γ = 0.99
目标:找到从每个格子出发最优的下一步。
用值迭代求解
import numpy as np
# 5x4 的网格, 状态 0-19
states = list(range(20))
actions = ['up', 'down', 'left', 'right']
goal = 14
cliff = 19
# 奖励
def reward(s, a):
if s == goal: return 1
if s == cliff: return -1
return -0.01
# 转移: 大部分时间按方向走, 有 0.1 概率偏到垂直方向
def transition(s, a):
# 返回 [(s', prob), ...]
probs = []
if a == 'up': candidates = [s-5, s+1, s-1] # 上, 右, 左
elif a == 'down': candidates = [s+5, s+1, s-1]
elif a == 'left': candidates = [s-1, s-5, s+5]
else: candidates = [s+1, s-5, s+5]
main = candidates[0]
sides = candidates[1:]
probs.append((main, 0.8))
for sp in sides:
probs.append((sp, 0.1))
return probs
# 值迭代
V = np.zeros(20)
gamma = 0.99
for it in range(100):
V_new = np.zeros(20)
for s in range(20):
if s in [goal, cliff]: continue
values = []
for a in actions:
v = reward(s, a)
for sp, p in transition(s, a):
v += gamma * p * V[sp]
values.append(v)
V_new[s] = max(values)
V = V_new
print(V.reshape(4, 5))
输出(每个状态的最优价值):
[[ 0.86 0.87 0.88 0.89 0.90]
[ 0.85 0.86 0.88 0.90 -1.00]
[ 0.84 0.85 0.87 0.92 1.00]
[ 0.83 0.84 0.85 0.87 0.89]]
直觉:
- 离目标(右下)越近,价值越高
- 悬崖(右下角那个)价值 -1
- 最优策略会绕开悬崖,贴着底部走
实际中 MDP 怎么用?
对于小问题(状态 < 10000):
- 值迭代 / 策略迭代 几行代码搞定
对于大问题(状态几百万到几十亿):
- 状态转移矩阵 P 太大,装不下
- 价值函数 V 是 |S| 维向量,不可能枚举
- 用函数逼近(比如神经网络)来表示 V 或 Q
这就是深度强化学习(DQN 等)——用神经网络代替表格。
小结
- MDP = (S, A, P, R, γ) — RL 的标准形式化
- 马尔可夫性:未来只与现在有关
- 价值函数 V(s) / Q(s,a):衡量状态/动作的长期价值
- 贝尔曼方程:价值的递推关系,RL 求解的核心
- 最优策略:argmax Q*(s, a) — 选 Q 最大的动作
- 实际问题用神经网络逼近 Q 函数(下章 DQN)
练习思考
- 为什么需要折扣因子 γ?γ=0 和 γ=1 各代表什么意思?
- 状态转移是确定性的情况下,P(s'|s,a) 退化成什么?贝尔曼方程怎么简化?
- 把上面网格世界的 γ 改成 0.5 和 0.999,值函数有什么变化?
章末小测验
检验你对《马尔可夫决策过程》的掌握程度。
马尔可夫决策过程(MDP)的五元组中不包括以下哪个元素?
以下关于马尔可夫性的描述,哪一项是正确的?
在MDP中,状态价值函数V(s)的定义是:
贝尔曼期望方程的直观解释是:
在网格世界例子中,最优策略的特点是: