2、强化学习基础(一):马尔可夫决策过程(MDP)、状态、动作、奖励、策略与价值函数
各位同学,欢迎来到强化学习的第一课。
说实话,每次讲这个章节我都挺感慨的。当年我刚接触强化学习时,被一堆术语砸得晕头转向——MDP、状态、动作、奖励……感觉每个字都认识,连起来就不知道在说什么。后来在机器人抓取项目里踩了不少坑,才慢慢把这些概念串起来。
今天咱们就把这些基础概念掰开揉碎,用机器人抓取这个场景来理解。你想想看,一个机械臂要抓杯子,它得知道「现在手在哪」、「该往哪动」、「抓对了有什么好处」——这不就是强化学习的核心吗?
2.1 马尔可夫决策过程(MDP)——强化学习的骨架
先说MDP。说白了,它就是描述「智能体与环境交互」的数学框架。
我个人习惯把MDP想象成一个游戏:你(智能体)在某个场景(环境)里,每走一步,场景会变化,你会得到分数(奖励),然后继续下一步。关键点是——未来的状态只取决于当前状态和当前动作,跟过去无关。这就是马尔可夫性质。
核心四元组 (S, A, P, R):
- S:状态空间,所有可能状态的集合
- A:动作空间,所有可能动作的集合
- P:状态转移概率,P(s'|s,a) 表示在状态s执行动作a后,转移到s'的概率
- R:奖励函数,R(s,a,s') 表示在状态s执行动作a转移到s'时获得的即时奖励
我在做抓取项目时,一开始没重视MDP建模。结果呢?机械臂在桌面上乱晃,完全不知道自己在干嘛。后来老老实实把状态空间、动作空间画出来,问题一下子就清晰了。
避坑指南:我曾经犯过一个错误——把状态空间定义得太大。比如抓取任务,我一开始把「桌面上所有物体的位置」都算进状态,结果维度爆炸,训练根本跑不动。后来只保留「目标物体位置 + 夹爪状态」,效果反而更好。
2.2 状态(State)——智能体眼中的世界
状态就是智能体感知到的环境信息。注意,是「感知到的」,不是「真实的全部」。这很重要。
在机器人抓取中,状态可能包括:
- 机械臂各关节的角度
- 夹爪的开合程度
- 目标物体的位置(来自视觉传感器)
- 物体与夹爪的距离
我习惯把状态分为两类:
- 完全可观测状态:智能体能获取环境的全部信息。比如仿真环境里,所有物体的坐标你都知道。
- 部分可观测状态:只能获取部分信息。比如真实场景中,摄像头可能有盲区,或者物体被遮挡。
注意:部分可观测性是个大坑。我曾经在真实机器人上跑训练好的策略,结果因为传感器噪声,机械臂直接抓空了。后来加了状态估计模块才解决。
2.3 动作(Action)——智能体改变世界的方式
动作就是智能体能做的操作。在MDP里,动作决定了状态如何转移。
机器人抓取的动作空间通常有两种:
- 离散动作:比如「向左移动1cm」、「向右移动1cm」、「夹紧」、「松开」
- 连续动作:比如「移动速度0.5m/s,方向30度」、「夹爪力矩2.0Nm」
我个人经验是:能离散就离散,实在不行再用连续。离散动作训练起来稳定得多。但有些任务(比如精密装配)必须用连续动作,那就得用DDPG、SAC这类算法了。
举个栗子:抓取任务中,动作可以定义为:
# 离散动作示例
actions = {
0: "向前移动5cm",
1: "向后移动5cm",
2: "向左移动5cm",
3: "向右移动5cm",
4: "夹爪闭合",
5: "夹爪张开"
}
# 连续动作示例
# action = [dx, dy, dz, gripper_force]
# 其中dx, dy, dz ∈ [-1, 1],gripper_force ∈ [0, 1]
2.4 奖励(Reward)——智能体的指南针
奖励函数设计,是强化学习里最艺术的部分。说白了,就是告诉智能体「什么行为是好的」。
在抓取任务中,常见的奖励设计:
- 稀疏奖励:只有成功抓取才给+1,其他情况给0。简单粗暴,但训练极慢。
- 密集奖励:根据距离、速度等连续给分。比如「越靠近物体分数越高」。训练快,但容易让智能体钻空子。
我的经验:一开始用稀疏奖励,训练了三天三夜没动静。后来改成密集奖励,半天就收敛了。但要注意——密集奖励设计不好,智能体会「作弊」。比如我遇到过机械臂为了靠近物体,直接撞上去的……
奖励函数的一般形式:
R(s, a, s') = w1 * r_distance + w2 * r_grasp + w3 * r_penalty
其中w1、w2、w3是权重,需要调参。嗯,调参也是个坑,后面再细说。
2.5 策略(Policy)——智能体的决策大脑
策略就是「在某个状态下,应该做什么动作」的规则。用数学表示就是 π(a|s)。
策略分两种:
- 确定性策略:给定状态,输出唯一动作。比如「看到杯子在左边,就向左移动」。
- 随机性策略:给定状态,输出动作的概率分布。比如「有80%概率向左,20%概率向右」。
为什么需要随机策略?你想想看,如果机械臂每次都走同一条路径,万一这条路被挡住了呢?随机策略能探索更多可能性。
策略表示示例:
# 确定性策略(用神经网络表示)
def policy_deterministic(state):
# 输入:状态向量 [x, y, z, gripper_state]
# 输出:动作向量 [dx, dy, dz, gripper_force]
return model(state)
# 随机性策略
def policy_stochastic(state):
# 输出动作的概率分布
mean, std = model(state)
action = sample_from_normal(mean, std)
return action
2.6 价值函数(Value Function)——智能体的长远眼光
价值函数回答一个问题:「我现在这个状态(或状态-动作对),未来能拿到多少总奖励?」
两种主要的价值函数:
- 状态价值函数 V(s):从状态s开始,按照策略π行动,能获得的期望累计奖励。
- 动作价值函数 Q(s,a):在状态s执行动作a,之后按照策略π行动,能获得的期望累计奖励。
区别在哪?V(s) 评估「这个状态好不好」,Q(s,a) 评估「在这个状态下做这个动作好不好」。做决策时,我们通常用Q函数——比较不同动作的Q值,选最大的那个。
避坑指南:我曾经在项目中直接用V函数做决策,结果发现效果很差。为什么?因为V函数只告诉你状态好坏,不告诉你具体该做什么动作。后来换成Q函数,问题迎刃而解。
价值函数的数学形式(贝尔曼方程):
V(s) = E[ R(s,a,s') + γ * V(s') ]
Q(s,a) = E[ R(s,a,s') + γ * max_a' Q(s',a') ]
其中γ是折扣因子,取值范围[0,1]。γ越大,智能体越「有远见」;γ越小,越「短视」。
2.7 知识体系总览
说了这么多,咱们用一张图把整个MDP框架串起来:
2.8 小结
好了,这一章的内容就这些。总结一下:
- MDP 是强化学习的数学框架,用 (S, A, P, R) 描述问题
- 状态 是智能体感知到的环境信息
- 动作 是智能体改变环境的手段
- 奖励 是告诉智能体什么行为好、什么行为不好
- 策略 是智能体的决策规则
- 价值函数 是评估状态或动作好坏的指标
这些概念就像盖房子的砖块,后面所有算法都建立在这之上。我个人建议你花点时间,用自己熟悉的场景(比如游戏、机器人、自动驾驶)把MDP的四个要素写下来,画一画状态转移图。这样做一遍,比看十遍书都管用。
下一章我们会聊动态规划——怎么在已知MDP模型的情况下,直接算出最优策略。嗯,到时候见。