ML 学习站
跳到正文

马尔可夫决策过程

MDP、状态、动作、转移概率、贝尔曼方程。

35 分钟2 / 51,930
加载中...

马尔可夫决策过程(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)

练习思考

  1. 为什么需要折扣因子 γ?γ=0 和 γ=1 各代表什么意思?
  2. 状态转移是确定性的情况下,P(s'|s,a) 退化成什么?贝尔曼方程怎么简化?
  3. 把上面网格世界的 γ 改成 0.5 和 0.999,值函数有什么变化?

章末小测验

检验你对《马尔可夫决策过程》的掌握程度。

1

马尔可夫决策过程(MDP)的五元组中不包括以下哪个元素?

2

以下关于马尔可夫性的描述,哪一项是正确的?

3

在MDP中,状态价值函数V(s)的定义是:

4

贝尔曼期望方程的直观解释是:

5

在网格世界例子中,最优策略的特点是:

讨论区(0)

加载评论中...