1. MDP 概述与基本概念

马尔可夫决策过程,简写 MDP,是强化学习里最基础的数学框架。我最早接触它的时候,觉得不就是一堆概率和状态吗?后来调 DQN 调到头秃才明白——MDP 这套框框架得不对,后面全是白搭。

说白了,MDP 就是描述智能体怎么跟环境交互的模子。你每走一步,环境给你一个反馈,然后你根据反馈决定下一步怎么走。这个过程用数学语言包装一下,就成了 MDP。

一句话记忆:MDP 是“状态 → 动作 → 奖励 → 下一个状态”的闭环。

1.1 核心五元组

一个标准的 MDP 由五个元素组成,我们叫它五元组。我习惯用 ⟨S, A, P, R, γ⟩ 来标记。

符号 含义 简单解释
S 状态集合 环境可能处于的所有情况
A 动作集合 智能体可以做的所有选择
P 状态转移概率 从状态 s 做动作 a 后到 s' 的概率
R 奖励函数 在某个状态做动作后能拿到的即时奖励
γ 折扣因子 未来奖励打多少折扣,0~1 之间

嗯,这里要注意:P 和 R 严格来说都是依赖于当前状态和动作的。不少人刚学的时候以为 R 只跟状态有关,其实不对——奖励通常是在执行动作之后收到的,所以是 R(s, a, s') 或者简写为 R(s, a)。

1.2 状态空间与动作空间

状态空间 S 可以是离散的或者连续的。离散的比如棋盘上的 361 个交叉点;连续的比如机器人关节的角度。动作空间 A 也类似。

我曾在项目里碰到过状态空间爆炸的问题——把每个传感器的读数都当独立状态,结果状态数比宇宙原子还多。后来才意识到,你得好好地做状态抽象。

  • 离散状态/动作:可以用表格存,适合小规模问题。
  • 连续状态/动作:必须用函数近似,比如神经网络。
  • 混合状态:一半离散一半连续,比较棘手。

我的个人习惯:一开始先把动作空间和状态空间降维到最少必要维度,再逐步增加。别一上来就搞大而全。

1.3 状态转移概率矩阵

P 是 MDP 里最麻烦的部分。它描述的是:在状态 s 做了动作 a,环境会以什么概率跳到状态 s'。你想想看,在现实系统中,这个概率通常不知道,得从数据里学——这就是无模型的由来。

举个例子,假设有两个状态 S={0,1},两个动作 A={left, right}:

在状态 0 时,若动作 left:
  -> 0 的概率 0.8
  -> 1 的概率 0.2
在状态 0 时,若动作 right:
  -> 0 的概率 0.3
  -> 1 的概率 0.7

这就是转移概率矩阵的一小部分。全矩阵大小是 |S| × |A| × |S|,所以状态一多你就存不下了。我记得有一次帮团队优化一个库存调拨模型,状态数才 100 个,转移矩阵就有 1 万项,还能忍;等加到 1000 个状态,数据就直接崩了。

我曾经踩过的坑:手算转移概率时用了不合理的假设,导致训练的智能体一直做奇怪的动作。最后发现统计概率时没考虑动作依赖,把独立概率当成了条件概率。这玩意一定要小心。

1.4 奖励函数与折扣因子

奖励函数 R 告诉智能体这一步走得好不好。通常我们设 R(s, a) 是一个实数,正数表示好,负数表示惩罚。但这里有个坑——奖励稀疏的问题。比如围棋,只有下完最后一步才知道输赢,中间几千步全是零奖励。

我建议你一开始就规划好奖励结构:

  • 即时奖励不要太大,否则模型会变成“近视眼”。
  • 稀疏奖励要多设计一些辅助奖赏,比如接近目标就给小奖励。
  • 折扣因子 γ 很重要:γ=0 的话只关心眼前利益;γ→1 的话几乎不折扣,未来和现在一样重要。

实际项目中,我一般把 γ 设 0.9 ~ 0.99 之间。太久远的奖励会指数衰减,你的策略就不太会为很远的事考虑。反过来,如果你的任务需要长期规划,比如物流配送,γ 就要靠近 1。

1.5 策略与价值函数

策略 π 是智能体的决策规则:给定状态 s,选哪个动作 a。可以是确定性的(π(s)=a),也可以是随机性的(π(a|s)=概率)。

价值函数分两种:

  • 状态价值函数 V(s):从状态 s 开始,按照策略 π 走,未来累计折扣奖励的期望。
  • 动作价值函数 Q(s,a):从状态 s 采取动作 a 开始,之后再按策略 π 走,累计奖励的期望。

我个人觉得 Q 函数更直观——直接告诉我每个动作的“好坏”。你想想看,在训练 DQN 的时候,我们一直在拟合的就是 Q 函数。

关键公式记忆:Bellman 期望方程:V(s) = ∑a π(a|s) [ R(s,a) + γ ∑s' P(s'|s,a) V(s') ]

1.6 知识结构图

下面我用一张 SVG 图把 MDP 的核心概念串起来。方便你脑子里面建立整体结构。

MDP 核心概念关系图 S 状态集合 A 动作集合 P 转移概率 R 奖励函数 γ 折扣因子 ↓ 输出到 ↓ 输出到 ↓ 输出到 ↓ 输出到 ↓ 输出到 核心衍生概念 策略 π 状态价值 V(s) 动作价值 Q(s,a) ... ↓ 基础数学表示 Bellman 方程家族 V(s) = Σ π(a|s) [R(s,a) + γ Σ P(s'|s,a) V(s')] Q(s,a) = R(s,a) + γ Σ P(s'|s,a) maxa' Q(s',a') ↓ 实际算法落地 Q-Learning Policy Gradient Actor-Critic MCTS 等

1.7 总结避坑

这一章先给你搭个框架。你要记住几个最核心的东西:

  1. MDP 假设:未来的状态只取决于当前状态和动作,与历史无关(马尔可夫性)。如果你的环境不满足这个,MDP 就不太适用了。
  2. 概率转移矩阵往往未知,需要从采样中估计或直接用无模型方法。
  3. 奖励设计决定智能体的行为倾向,千万别随便拍脑袋。
  4. 折扣因子 γ 控制视野长短,选错会直接导致策略质量差。

一个小建议:学 MDP 的时候,试着去把现实里一个简单的任务(比如“打开冰箱拿水”)抽象成 S、A、P、R、γ。不用形成代码,就是脑内模拟。你会发现很多直觉性的错误——比如你认为“拿水”是个动作,但在 MDP 里它可能要拆成“走向冰箱→打开门→伸手→拿到”一系列动作。这种练习做多了,你写算法时的抽象能力会突飞猛进。