3. 强化学习核心概念:智能体、环境、状态、动作、奖励,马尔可夫决策过程(MDP)

好,咱们进入正题。强化学习听起来玄乎,但核心骨架其实就五个词:智能体、环境、状态、动作、奖励。再加上一个数学框架——马尔可夫决策过程(MDP)。把这几个东西搞明白,后面写代码才不会晕。

我个人习惯,每接触一个新概念,先问自己三个问题:它是什么?它解决什么问题?它在代码里长什么样? 咱们今天就按这个路子来。

3.1 五个核心要素:先搭个认知框架

先看一张图,把整体关系理清楚。这是强化学习最基本的闭环:

强化学习核心交互闭环 智能体 (Agent) 策略 π(a|s) 环境 (Environment) 动力学 P(s',r|s,a) 动作 a 状态 s' + 奖励 r 状态 (State) 奖励 (Reward) 智能体根据当前状态选择动作 环境反馈新状态和奖励

说白了,这就是一个「试错-反馈-改进」的循环。智能体做动作,环境给反馈,智能体根据反馈调整策略。跟训练小狗握手一个道理——做对了给零食,做错了没奖励,慢慢它就懂了。

3.2 逐个拆解:从智能体到奖励

3.2.1 智能体(Agent)

智能体就是做决策的那个家伙。在代码里,它通常是一个类,里面装着策略函数。策略有两种:

  • 确定性策略:给定状态 s,直接输出动作 a = μ(s)。比如「看到红灯就刹车」。
  • 随机性策略:给定状态 s,输出动作的概率分布 π(a|s)。比如「有 80% 概率左转,20% 概率直行」。

我在项目中遇到过一个问题:用确定性策略训练机械臂抓取,结果每次卡在同一个位置。后来换成随机性策略,加了探索噪声,反而找到了更好的路径。嗯,这里要注意——探索和利用的平衡,后面会专门讲。

3.2.2 环境(Environment)

环境就是智能体生存的世界。它接收动作,更新状态,返回奖励。在机器人任务里,环境可能是仿真器(比如 MuJoCo、PyBullet),也可能是真实物理世界。

环境的核心是动力学模型:P(s', r | s, a)。意思是:在状态 s 执行动作 a 后,环境会转移到新状态 s',并给出奖励 r。

实战建议:刚开始做项目,千万别直接上真机。先在仿真环境里跑通,把奖励函数调好,再迁移到真实机器人。我曾经跳过这一步,结果机械臂直接撞坏了夹爪……修一次够买三年仿真软件授权。

3.2.3 状态(State)

状态是环境在某个时刻的快照。它包含了智能体做决策需要的所有信息。对于关节标定任务,状态通常包括:

  • 当前关节角度(比如 6 个关节的弧度值)
  • 末端执行器位姿(x, y, z, roll, pitch, yaw)
  • 目标位置
  • 可能还有关节速度、力矩等

你想想看,如果状态里缺少关键信息,智能体就像蒙着眼睛走路,永远学不会。所以状态设计是强化学习落地的第一道坎。

3.2.4 动作(Action)

动作是智能体可以施加到环境上的控制信号。在机器人领域,动作空间有两种:

动作空间类型 特点 示例
离散动作空间 动作数量有限,可枚举 左转/右转/直行;抓取/释放
连续动作空间 动作是连续值,无限可能 关节力矩 [-10, 10] N·m;目标位置偏移量

关节标定任务通常是连续动作空间。比如输出 6 个关节的目标角度,每个角度在 -π 到 π 之间。处理连续动作空间,常用的算法有 DDPG、SAC、TD3,后面章节会手撕代码。

3.2.5 奖励(Reward)

奖励是智能体的「老师」。它告诉智能体刚才的动作是好是坏。奖励函数设计得好不好,直接决定训练能不能收敛。

我踩过最大的坑就是奖励函数太稀疏。比如「到达目标点给 +100,否则给 0」。结果智能体训练了 100 万步,一次目标都没碰到,永远拿不到奖励。后来改成密集奖励:

  • 距离目标每靠近 1cm,给 +0.1
  • 关节角度超出安全范围,给 -1
  • 到达目标点,给 +10 并结束回合

效果立竿见影,训练速度快了 5 倍。

避坑指南:奖励函数不要设计得太复杂。我曾经在一个项目里加了 7 项奖励分量,结果智能体学会了「刷分」——它找到一种奇怪的动作序列,能拿到高奖励但完全没完成任务。记住:奖励函数就是你的目标函数,你优化什么,它就学会什么。

3.3 马尔可夫决策过程(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' 获得的奖励
γ 折扣因子 γ ∈ [0, 1],越靠近 0 越短视,越靠近 1 越有远见

MDP 有一个关键性质:马尔可夫性。意思是:未来只取决于当前状态,跟过去的历史无关。用数学表达就是:

P(st+1 | st, at, st-1, at-1, ...) = P(st+1 | st, at)

为什么会这样?因为状态 st 已经包含了所有历史信息。在机器人任务里,只要你的状态设计得足够好(包含位置、速度、加速度等),马尔可夫性基本成立。

3.4 MDP 的求解目标:最大化累积奖励

智能体的目标不是拿到一次高奖励,而是长期累积奖励最大化。数学上定义了一个叫「回报」的东西:

G_t = r_t + γ·r_{t+1} + γ²·r_{t+2} + ... = Σ γ^k · r_{t+k}

折扣因子 γ 的作用很微妙:

  • γ = 0:只看眼前,不管未来。适合「一步到位」的任务。
  • γ = 0.9:比较有远见,但不太考虑 10 步以后的事。
  • γ = 0.99:很有远见,适合长期规划任务,比如机器人走迷宫。

我一般从 γ = 0.95 开始调。如果任务需要长期规划,就往上加;如果任务比较短平快,就往下减。

3.5 从 MDP 到实际代码:一个最小示例

光说不练假把式。咱们用 Python 实现一个最简单的 MDP 环境——网格世界。智能体在 4×4 网格里移动,目标是走到右下角。

import numpy as np

class GridWorld:
    def __init__(self, size=4):
        self.size = size
        self.state = 0  # 状态用一维索引表示
        self.goal = size * size - 1  # 右下角

    def reset(self):
        self.state = 0
        return self.state

    def step(self, action):
        # 动作: 0=上, 1=下, 2=左, 3=右
        row = self.state // self.size
        col = self.state % self.size

        if action == 0: row = max(0, row - 1)
        elif action == 1: row = min(self.size - 1, row + 1)
        elif action == 2: col = max(0, col - 1)
        elif action == 3: col = min(self.size - 1, col + 1)

        self.state = row * self.size + col

        # 奖励设计
        if self.state == self.goal:
            reward = 10.0
            done = True
        else:
            reward = -0.1  # 每步给个小惩罚,鼓励尽快到达
            done = False

        return self.state, reward, done

# 测试一下
env = GridWorld()
s = env.reset()
print(f"初始状态: {s}")

for _ in range(5):
    a = np.random.randint(0, 4)  # 随机动作
    s_next, r, done = env.step(a)
    print(f"动作: {a}, 新状态: {s_next}, 奖励: {r}, 结束: {done}")
    if done:
        break

这个例子虽然简单,但包含了 MDP 的所有要素:状态空间(16 个格子)、动作空间(4 个方向)、转移概率(确定性的)、奖励函数(到达 +10,每步 -0.1)、折扣因子(代码里没写,但算法里会用到)。

核心要点:不管你后面学 DQN、PPO 还是 SAC,底层都是这个 MDP 框架。状态怎么定义、动作怎么编码、奖励怎么设计——这三个问题想清楚,项目就成功了一半。

3.6 本章小结

咱们把这一章的核心内容捋一遍:

  • 五个要素:智能体做决策,环境给反馈,状态描述现状,动作改变现状,奖励评价好坏。
  • MDP 五元组:(S, A, P, R, γ),是强化学习的数学骨架。
  • 马尔可夫性:未来只取决于当前状态,不依赖历史。
  • 求解目标:最大化带折扣的累积奖励。
  • 奖励设计:密集奖励 > 稀疏奖励,简单 > 复杂。