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框架串起来:

马尔可夫决策过程(MDP)知识体系 智能体 (Agent) 策略 π(a|s) 价值函数 V(s) / Q(s,a) 决策大脑 环境 (Environment) 状态转移 P(s'|s,a) 奖励函数 R(s,a,s') 物理世界 / 仿真 动作 a 状态 s' 奖励 r MDP 核心四元组 (S, A, P, R) S - 状态空间 所有可能状态的集合 如:关节角度、物体位置 A - 动作空间 所有可能动作的集合 如:移动、抓取 P - 转移概率 P(s'|s,a) 状态变化的概率模型 R - 奖励函数 R(s,a,s') 即时反馈信号 目标:找到最优策略 π*,最大化累计奖励 E[Σ γ^t r_t]

2.8 小结

好了,这一章的内容就这些。总结一下:

  • MDP 是强化学习的数学框架,用 (S, A, P, R) 描述问题
  • 状态 是智能体感知到的环境信息
  • 动作 是智能体改变环境的手段
  • 奖励 是告诉智能体什么行为好、什么行为不好
  • 策略 是智能体的决策规则
  • 价值函数 是评估状态或动作好坏的指标

这些概念就像盖房子的砖块,后面所有算法都建立在这之上。我个人建议你花点时间,用自己熟悉的场景(比如游戏、机器人、自动驾驶)把MDP的四个要素写下来,画一画状态转移图。这样做一遍,比看十遍书都管用。

下一章我们会聊动态规划——怎么在已知MDP模型的情况下,直接算出最优策略。嗯,到时候见。

可可精品资料库