第1章:马尔可夫决策过程——MDP的数学框架
各位同学,今天我们来聊聊强化学习里最核心的一个概念——马尔可夫决策过程,简称MDP。说实话,我刚接触强化学习那会儿,看到一堆数学符号就头大。但后来我发现,MDP其实就是一套描述“智能体怎么跟环境打交道”的数学语言。
你想想看,强化学习要解决的问题是什么?就是一个智能体在环境里做决策,每一步都会影响后续的状态和收益。MDP就是用来建模这个过程的。嗯,咱们一步步拆开来看。
MDP的五元组
一个标准的MDP可以用一个五元组来表示:(S, A, P, R, γ)。我习惯这么记:
- S:状态空间,所有可能的状态集合
- A:动作空间,智能体可以采取的动作集合
- P:状态转移概率,描述环境怎么响应你的动作
- R:奖励函数,告诉你这一步做得怎么样
- γ:折扣因子,决定你有多“短视”
说白了,MDP就是给强化学习问题画了个框框。你只要把问题塞进这个框里,剩下的数学工具就能帮你找到最优策略。
状态转移概率——环境的不确定性
状态转移概率 P(s' | s, a) 表示:在状态s下执行动作a后,环境变成状态s'的概率。这个概率矩阵是MDP的灵魂。
我在项目中遇到过一个问题:机器人导航时,明明给了“前进”指令,但轮子打滑导致实际移动方向偏了。这就是状态转移概率在起作用——环境不是100%确定的。
核心公式:
P(s' | s, a) = Pr{S_{t+1} = s' | S_t = s, A_t = a}
注意:所有可能的下一个状态的概率之和必须等于1。
奖励函数——学习的信号源
奖励函数 R(s, a, s') 告诉智能体:从s到s'这一步,你得到了多少回报。奖励设计得好不好,直接决定了学习效果。
我曾经犯过一个错误:在训练一个游戏AI时,只给了最终胜利的奖励,结果AI在前几百步完全不知道自己在干嘛。后来我改成每一步都给一个小奖励,学习速度明显快了。
我的经验:奖励函数要稀疏但不过于稀疏。太密集的奖励会让智能体钻空子,太稀疏又学不动。折中一下,用“阶段性奖励”效果最好。
折扣因子——未来的价值
折扣因子 γ ∈ [0, 1] 决定了智能体对未来的重视程度。γ越接近1,智能体越有远见;γ越接近0,智能体越只顾眼前。
举个例子:γ=0.9时,未来第10步的奖励折算到现在只有 0.9^10 ≈ 0.35。你想想看,如果γ=0,那智能体就是个“近视眼”,只看下一步的奖励。
注意:γ不能等于1,除非任务有明确的终止状态。否则累计奖励会发散到无穷大,算法根本没法收敛。
用MDP建模强化学习问题
好了,理论讲完了,咱们来点实际的。怎么把一个强化学习问题塞进MDP的框架里?我一般按这个步骤来:
- 定义状态空间S:把环境里所有跟决策相关的信息都抽象成状态。比如机器人位置、速度、角度等。
- 定义动作空间A:智能体能做的所有操作。比如左转、右转、前进、停止。
- 定义状态转移概率P:这个通常由环境本身决定,你只需要知道它存在就行。
- 定义奖励函数R:这是你作为设计者最需要花心思的地方。奖励要能引导智能体走向目标。
- 选择折扣因子γ:根据任务性质来定。长期任务用大γ,短期任务用小γ。
下面我用一个简单的网格世界来演示MDP的建模过程。这个例子我经常在课上用,因为它足够直观。
# 一个3x3网格世界的MDP建模示例
# 状态:每个格子是一个状态,共9个状态
# 动作:上、下、左、右
# 奖励:到达目标格子得+10,掉入陷阱得-10,其他步得-1
states = [(i, j) for i in range(3) for j in range(3)]
actions = ['up', 'down', 'left', 'right']
# 状态转移概率:假设动作有80%概率成功,20%概率随机偏移
def transition_prob(s, a, s_next):
# 简化版:如果动作成功且s_next是目标位置,返回0.8
# 否则返回0.2 * 随机概率
pass
# 奖励函数
def reward(s, a, s_next):
if s_next == (2, 2): # 目标
return 10
elif s_next == (1, 1): # 陷阱
return -10
else:
return -1
# 折扣因子
gamma = 0.9
你看,就这么几行代码,一个强化学习问题就被MDP框架描述清楚了。接下来就可以用各种算法(比如值迭代、策略迭代)来求解最优策略了。
MDP的核心逻辑图
为了让你更直观地理解MDP的工作流程,我画了一张图。这张图我每次讲MDP都会拿出来用,因为它把整个决策过程串起来了。
这张图把MDP的决策循环讲得很清楚:智能体根据当前状态选择动作,环境根据状态转移概率给出新状态和奖励,然后智能体再根据新状态做下一步决策。循环往复,直到任务结束。
避坑指南
最后,分享几个我踩过的坑:
- 状态空间太大:我曾经试图用一个MDP描述整个城市交通,结果状态数爆炸了。后来才意识到,MDP只适合状态空间有限的问题,或者你需要用函数近似来压缩状态。
- 奖励函数设计不当:有一次我给了机器人“到达目标”的奖励,结果它学会了在原地转圈——因为转圈也能触发某些奖励信号。嗯,从那以后我设计奖励时都会仔细检查有没有漏洞。
- 折扣因子选错:在一个长期投资策略里,我把γ设成了0.5,结果智能体只关注短期收益,完全忽略了长期价值。后来改成0.95才正常。
好了,MDP的数学框架就讲到这里。记住一句话:MDP是强化学习的基石,你把问题建模成MDP,就等于拿到了解决问题的钥匙。下一章我们会讲怎么在MDP上求解最优策略,到时候见。