在监督学习里,模型做的事情很简单:给一个输入,输出一个预测。训练集里每个样本都有正确答案,模型学完就拿去用,训练和使用是分开的两个阶段。
强化学习(Reinforcement Learning, RL)面对的问题完全不同。一个智能体(agent)置身于环境中,需要反复做出决策,而且——
- 序贯决策:每一步的决策会改变环境状态,影响后续所有可能。不是一次性给答案,而是一连串动作。
- 延迟奖励:好的结果可能要很多步之后才显现。下棋时一步妙手的价值,可能 50 步后才以胜负的形式兑现。
- 探索 vs. 利用:已知某个动作不错,是继续用(exploit),还是尝试没试过的动作,看看有没有更好的(explore)?这个矛盾贯穿整个学习过程。
要让"决策"变成一个可以用数学求解的问题,我们需要一个形式化框架。这就是马尔可夫决策过程(Markov Decision Process, MDP)——强化学习的数学骨架。
一个 MDP 由五元组 (S,A,P,R,γ) 定义:
| 符号 | 名称 | 含义 |
|---|
| S | 状态空间 | 所有可能的状态集合 |
| A | 动作空间 | 所有可能的动作集合(也可写成 A(s) 表示状态 s 下可选的动作) |
| P | 状态转移概率 | P(s′∣s,a) —— 在状态 s 执行动作 a 后转移到 s′ 的概率 |
| R | 奖励函数 | R(s,a,s′) —— 从 s 执行 a 到达 s′ 获得的即时奖励 |
| γ | 折扣因子 | γ∈[0,1) —— 未来奖励的衰减系数 |
MDP 的"马尔可夫"三个字意味着一个关键假设:下一步只取决于当前状态,与历史无关。
P(St+1∣St,At,St−1,At−1,…)=P(St+1∣St,At)
通俗地说,"当前状态"已经浓缩了过去所有的信息。你不需要回忆整段历史,只要看到当前局面就够了。下棋时棋盘局面就是状态——你不需要知道每步棋是怎么走到这里的。
为什么需要 γ?如果不打折扣,一个永远不停的过程的总奖励可能是无穷大,数学上没法处理。加上 γ<1,远期奖励被指数衰减:
Gt=Rt+1+γRt+2+γ2Rt+3+⋯=k=0∑∞γkRt+k+1
Gt 叫回报(return),是从时刻 t 开始的折扣累积奖励。γ 越接近 1,智能体越"有远见";γ 越小,越"目光短浅"。
考虑一个 4×4 的网格世界(GridWorld):
- 智能体在网格中移动(上、下、左、右)
- 右上角是目标格,到达获得 +1 奖励
- 目标旁边有一个陷阱格,到达获得 −1 奖励
- 撞墙则停在原地,其他移动奖励为 0
这就是一个完整的 MDP:状态是格子坐标,动作是四个方向,转移是确定性的(往哪走就到哪,除非撞墙),奖励由到达的格子决定。
策略(policy)π 描述智能体的行为方式。它可以是确定性的,也可以是随机的:
- 确定性策略:a=π(s) —— 在状态 s 直接给出动作
- 随机策略:π(a∣s) —— 在状态 s 以某个概率分布选择动作
随机策略更一般。确定性策略是特例——把所有概率集中到一个动作上。
给定策略 π,状态价值函数 Vπ(s) 衡量"从状态 s 出发,按策略 π 行动,期望能拿到多少回报":
Vπ(s)=Eπ[Gt∣St=s]=Eπ[k=0∑∞γkRt+k+1∣St=s]
Vπ(s) 回答的是:状态 s 有多"好"?
动作价值函数 Qπ(s,a) 比 Vπ 多了一层:不仅指定了起始状态 s,还指定了第一步动作 a,之后再按策略 π 行动:
Qπ(s,a)=Eπ[Gt∣St=s,At=a]
Qπ(s,a) 回答的是:在状态 s 执行动作 a,然后跟着 π 走,期望回报是多少?
两个价值函数之间有简洁的关系:
Vπ(s)=a∈A∑π(a∣s)Qπ(s,a)
状态价值就是在策略 π 下对所有动作价值的加权平均。如果策略是确定性的 π(s)=a∗,则 Vπ(s)=Qπ(s,a∗)。
存在最优策略 π∗,它在每一个状态上都不比其他任何策略差:
V∗(s)=πmaxVπ(s),∀s∈S
Q∗(s,a)=πmaxQπ(s,a),∀s,a
MDP 的一个基本定理保证:对于有限状态和动作的 MDP,最优策略一定存在,而且可以是确定性的。
价值函数有一个递归结构:当前状态的价值可以分解为"即时奖励 + 折扣后的下一状态价值"。这就是贝尔曼期望方程(Bellman Expectation Equation)。
对状态价值函数:
Vπ(s)=a∑π(a∣s)s′∑P(s′∣s,a)[R(s,a,s′)+γVπ(s′)]
对动作价值函数:
Qπ(s,a)=s′∑P(s′∣s,a)[R(s,a,s′)+γa′∑π(a′∣s′)Qπ(s′,a′)]
直觉上很自然:在状态 s 按策略 π 选动作 a,环境按转移概率跳到 s′,拿到奖励 R,然后剩下的期望回报就是 γVπ(s′)。把所有可能的 a 和 s′ 用概率加权平均,就得到 Vπ(s)。
把 π 换成最优策略 π∗,期望变成了取最大:
V∗(s)=amaxs′∑P(s′∣s,a)[R(s,a,s′)+γV∗(s′)]
Q∗(s,a)=s′∑P(s′∣s,a)[R(s,a,s′)+γa′maxQ∗(s′,a′)]
贝尔曼最优方程刻画了最优价值函数的自洽条件:如果我在每一步都选让后续价值最大的那个动作,得到的就是最优价值。
一旦求出 V∗(或 Q∗),最优策略就是贪心地选 argmax:
π∗(s)=argamaxs′∑P(s′∣s,a)[R(s,a,s′)+γV∗(s′)]
贝尔曼方程给了我们递归关系,但怎么实际算出来?当 MDP 的模型(P 和 R)完全已知时,可以用动态规划(Dynamic Programming, DP)精确求解。
给定一个固定策略 π,我们想计算它的 Vπ。方法是迭代地应用贝尔曼期望方程。
初始化 V0(s)=0,然后反复更新:
Vk+1(s)=a∑π(a∣s)s′∑P(s′∣s,a)[R(s,a,s′)+γVk(s′)]
可以证明 Vk→Vπ(k→∞)。每一轮"扫描"(sweep)遍历所有状态,用旧的 Vk 计算新的 Vk+1。
策略迭代(Policy Iteration)交替进行两步:
- 策略评估:固定当前策略 πk,算出 Vπk
- 策略改进:根据 Vπk 贪心地更新策略——πk+1(s)=argmaxa∑s′P(s′∣s,a)[R+γVπk(s′)]
策略改进定理保证 V^{\pi_{k+1}} \geq V^{\pi_k}}(逐状态不递减)。有限 MDP 的策略数有限,每步都严格改进,因此算法必在有限步收敛到 π∗。
价值迭代(Value Iteration)更直接——直接迭代贝尔曼最优方程:
Vk+1(s)=amaxs′∑P(s′∣s,a)[R(s,a,s′)+γVk(s′)]
每一步把"评估"和"改进"融合在一起:先取 max(隐式的策略改进),然后用更新后的值继续。收敛后提取 π∗ 即可。
| 策略迭代 | 价值迭代 |
|---|
| 每轮做什么 | 完整评估 Vπ + 一次策略改进 | 一次 Bellman 最优更新 |
| 收敛速度 | 通常迭代次数更少 | 每轮计算量更小 |
| 适合场景 | 动作空间小时高效 | 大状态空间、需要快速近似时 |
下面的 4×4 网格世界展示了动态规划的求解过程。你可以切换"价值迭代"和"策略迭代"两种模式,点击"运行"观看价值函数逐步收敛,每个格子会显示当前 V(s) 和贪心最优动作的方向。γ=0.9。
目标 (+1)陷阱 (-1)S起点X墙壁
4x4 GridWorld:点击「运行」观看价值迭代逐步收敛,每个格子显示 V(s) 和最优动作方向。
试试观察:
- 靠近目标的格子价值最先变高,然后"扩散"到远处——这就是动态规划的信息传播过程
- 陷阱格附近的格子价值为负,最优策略会绕开它
- 两种迭代方式最终收敛到相同的最优策略