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

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

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

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


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

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

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

这个循环产生的序列称为轨迹 (Trajectory)


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

为了用数学描述上述过程,我们定义 MDP 五元组

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

状态是 Agent 做决策的依据。

  • GridWorld 实例: 在一个的网格中,状态空间是所有方格的集合。
    $$
    或者将其展平为索引
  • 代码视角:
    src/grid_world.py 中,self.num_states = env_size[0] * env_size[1] 定义了状态大小。

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

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

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

  • 定义:
    $$
    它表示:在状态采取动作,跳转到状态的概率。
  • 性质:
  • 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 时,必须时刻记住通常是一个概率分布,确定性只是概率为 1 的特例。

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

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

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

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

这是一个常数。为什么要它?

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

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

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

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

数学定义(Discounted Return):

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

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}")

\pi">5. 策略 (Policy,)

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

  • 定义:是在状态选择动作的概率分布。
    $$
  • 代码实战:
    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) # 可视化策略箭头
    可视化的结果是:在每个格子上,会有不同粗细的箭头指向不同方向,箭头越粗代表越大

6. 本章总结与下章预告

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

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

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

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


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