1. 为什么需要强化学习?

在进入数学公式之前,我们需要理解强化学习(Reinforcement Learning, RL)解决的是什么核心问题。

与监督学习(Supervised Learning)不同,RL 没有“上帝视角”的标签(Label)。Agent(智能体)是在未知的环境中,通过**试错(Trial-and-Error)**来学习的。这就像一个婴儿学习走路,没有说明书,只有摔倒时的疼痛(负奖励)和站稳时的喜悦(正奖励)。

本章我们将基于 Westlake University 赵世钰老师 的课程,结合配套的 GridWorld 代码,从零构建 RL 的数学大厦——马尔可夫决策过程 (MDP)


2. 核心图景:Agent 与 Environment 的交互

RL 的世界观可以浓缩为一张图(对应视频中的核心板书):

  1. Time $t$: Agent 处于状态 $S_t$(State)。
  2. Decision: Agent 观察到 $S_t$,根据策略 $\pi$ 选择动作 $A_t$(Action)。
  3. Interaction: Agent 将 $A_t$ 施加给 Environment。
  4. Feedback: Environment 根据物理规则(Dynamics)演变到新状态 $S_{t+1}$,并反馈即时奖励 $R_{t+1}$(Reward)。
  5. Loop: 时间来到 $t+1$,循环继续。

这个循环产生的序列称为轨迹 (Trajectory)
$$ \tau = S_0, A_0, R_1, S_1, A_1, R_2, S_2, A_2, R_3, \dots $$


3. 马尔可夫决策过程 (MDP) 深度解析

为了用数学描述上述过程,我们定义 MDP 五元组 $\mathcal{M} = (\mathcal{S}, \mathcal{A}, \mathcal{P}, \mathcal{R}, \gamma)$。

3.1 状态空间 (State Space, $\mathcal{S}$)

状态是 Agent 做决策的依据。

  • GridWorld 实例: 在一个 $5 \times 5$ 的网格中,状态空间是所有方格的集合。
    $$ \mathcal{S} = { (x,y) \mid x,y \in {0,1,2,3,4} } $$
    或者将其展平为索引 $s \in {0, 1, \dots, 24}$。
  • 代码视角:
    src/grid_world.py 中,self.num_states = env_size[0] * env_size[1] 定义了状态大小。

3.2 动作空间 (Action Space, $\mathcal{A}$)

  • GridWorld 实例: Agent 可以向四个方向移动或原地不动。
    $$ \mathcal{A} = { \text{Up}, \text{Down}, \text{Left}, \text{Right}, \text{Stay} } $$
  • 代码视角:
    1
    2
    # 动作被编码为坐标的变化量
    self.action_space = [(0, -1), (0, 1), (-1, 0), (1, 0), (0, 0)]

3.3 状态转移概率 (State Transition Probability, $\mathcal{P}$) —— 核心中的核心

这是环境的“物理定律”。当我们执行动作 $a$ 时,环境并不一定 100% 听话。

  • 定义:
    $$ p(s’ | s, a) = \mathbb{P}(S_{t+1} = s’ \mid S_t = s, A_t = a) $$
    它表示:在状态 $s$ 采取动作 $a$,跳转到状态 $s’$ 的概率。
  • 性质: $\sum_{s’ \in \mathcal{S}} p(s’ | s, a) = 1$。
  • GridWorld 代码逻辑:
    虽然书中的数学定义允许随机性(例如:想向右走,但有 10% 概率被风吹向上),但在配套代码 grid_world.py 的基础实现中,转移是确定性 (Deterministic) 的:
    1
    2
    3
    4
    def _get_next_state_and_reward(self, state, action):
    # 确定性计算:当前坐标 + 动作向量
    new_state = tuple(np.array(state) + np.array(action))
    # ... (然后进行边界检查,撞墙则弹回)
    注意:理解 MDP 时,必须时刻记住 $p(s’|s,a)$ 通常是一个概率分布,确定性只是概率为 1 的特例。

3.4 奖励函数 (Reward Function, $\mathcal{R}$)

奖励是指挥棒,引导 Agent 学习我们期望的行为。

  • 定义:
    $$ r(s, a) = \mathbb{E}[R_{t+1} \mid S_t = s, A_t = a] $$
    或者更通用的形式 $r(s, a, s’)$,依赖于下一状态。
  • GridWorld 设计哲学:
    在代码中,Reward 设计不仅是为了告诉 Agent “好坏”,更是为了“引导”。
    • reward_target = 1: 正向激励,到达终点。
    • reward_forbidden = -10: 强负反馈,踩到陷阱(禁区)。
    • reward_step = -0.1 (假设值): 生存惩罚。每走一步都扣分,这不仅不是坏事,反而是为了鼓励 Agent 走最短路径(因为走得越久扣得越多)。

3.5 折扣因子 (Discount Factor, $\gamma$)

这是一个常数 $\gamma \in [0, 1)$。为什么要它?

  1. 数学收敛性: 避免无限时间序列求和发散。
  2. 经济学/心理学: “双鸟在林不如一鸟在手”。未来的奖励充满不确定性,且价值随时间衰减。

4. 回报 (Return) —— 真正要最大化的目标

初学者容易混淆 Reward (即时奖励)Return (回报)

  • Reward ($R_t$): 这一步走得怎么样?
  • Return ($G_t$): 从这一步开始,未来这一辈子总共能拿多少分?

数学定义(Discounted Return):
$$ G_t = R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} + \dots = \sum_{k=0}^{\infty} \gamma^k R_{t+k+1} $$

从代码看 Return 的计算:
example_grid_world.py 的循环中,我们其实是在收集 $R$:

1
2
3
4
5
6
7
8
9
10
11
state = env.reset()
total_return = 0
gamma = 0.9

for t in range(1000):
action = random.choice(env.action_space) # 随机策略
next_state, reward, done, info = env.step(action)

# 累积 Return (这里演示的是未折扣的累加,实际 RL 算法使用折扣形式)
# 若要计算 discounted return,需要保存整条轨迹然后反向计算
print(f"Step: {t}, Reward: {reward}")

5. 策略 (Policy, $\pi$)

MDP 给了我们环境规则,Policy 则是 Agent 的玩法。

  • 定义: $\pi(a|s)$ 是在状态 $s$ 选择动作 $a$ 的概率分布。
    $$ \sum_{a \in \mathcal{A}} \pi(a|s) = 1 $$
  • 代码实战:
    example_grid_world.py 中,有一段代码手动添加了一个策略矩阵:
    1
    2
    3
    4
    5
    6
    7
    # 创建一个随机策略矩阵 (num_states x num_actions)
    policy_matrix = np.random.rand(env.num_states, len(env.action_space))

    # 归一化:保证每一行的概率和为 1
    policy_matrix /= policy_matrix.sum(axis=1)[:, np.newaxis]

    env.add_policy(policy_matrix) # 可视化策略箭头
    可视化的结果是:在每个格子上,会有不同粗细的箭头指向不同方向,箭头越粗代表 $\pi(a|s)$ 越大

6. 本章总结与下章预告

本章我们构建了 RL 的静态框架

  • 我们有了地图 (State)。
  • 我们知道能怎么走 (Action)。
  • 我们知道走一步会发生什么 (Transition)。
  • 我们知道什么是好的结果 (Reward)。
  • 我们定义了终极目标:最大化 Return ($G_t$),而不是短视地看 $R_t$。

遗留问题:
现在 Agent 只是在“瞎走”(Random Policy)。如果你是 Agent,站在某个格子上,你怎么知道往哪走才是通往高 Return 的路?
你需要一个“地图导航”,告诉你每个格子的价值 (Value)

这就引出了下一章的核心:状态价值函数 (State Value)贝尔曼方程 (Bellman Equation) —— 它们是 RL 中评估策略好坏的标尺。


下一章:第2章 - 状态值与贝尔曼方程 >>