强化学习系列博客 · 第二篇 本篇目标:理解 MDP 的完整数学定义,搞清楚"马尔可夫性"的直觉含义,以及状态转移、奖励函数、折扣因子、策略这些概念在数学上是怎么表达的。不会只堆公式,每个概念都会给你一个能抓得住的直觉。
强化学习系列博客 · 第二篇
本篇目标:理解 MDP 的完整数学定义,搞清楚"马尔可夫性"的直觉含义,以及状态转移、奖励函数、折扣因子、策略这些概念在数学上是怎么表达的。不会只堆公式,每个概念都会给你一个能抓得住的直觉。
上一篇我们用马里奥游戏建立了对强化学习的直觉:Agent 在环境里不断试错,通过奖励信号学习最优策略。
但光有直觉不够。就像你理解"速度是快慢",但没有 $v = \Delta s / \Delta t$ 这个公式,你就没办法计算、推导、比较。算法需要建立在严格的数学定义上,否则你设计出来的方法根本无法证明它是对的,也没法系统地改进它。
强化学习的数学框架叫做马尔可夫决策过程(Markov Decision Process,MDP),它是这个领域几乎所有算法的共同出发点。搞清楚 MDP,你就拥有了理解后续所有内容的地基。
这篇博客的目标不是让你背下公式,而是让你在看到这些符号的时候,脑子里能立刻浮现出对应的直觉图像。
我们用一个比游戏更简单的例子来进入状态:一个学生的每日学习决策。
假设这个学生每天的状态只有三种: - 状态 A:精力充沛 - 状态 B:有点疲倦 - 状态 C:精疲力竭
每天他可以做以下三个动作之一: - 动作 1:努力学习 - 动作 2:正常休息 - 动作 3:躺平摆烂
不同的状态下做不同的动作,会得到不同的奖励(比如今天的学习效率得分),也会以一定概率转移到明天的某个状态。
这就是一个完整的 MDP 场景。接下来我们把它正式化。
一个 MDP 由五个要素组成,通常写作一个五元组:
$$\mathcal{M} = (\mathcal{S},\ \mathcal{A},\ \mathcal{P},\ \mathcal{R},\ \gamma)$$
我们逐一解释。
$\mathcal{S}$ 是所有可能状态的集合。在学生的例子里,$\mathcal{S} = \{A, B, C\}$,只有三个状态。在 Atari 游戏里,状态是游戏画面的像素矩阵,状态空间就大得多。在语言模型里,状态可以是当前的对话历史。
状态空间可以是有限离散的(比如我们这个例子),也可以是连续的(比如机器人关节的角度和角速度)。
$\mathcal{A}$ 是 Agent 能够采取的所有动作的集合。在学生例子里,$\mathcal{A} = \{1, 2, 3\}$,只有三个动作。动作空间同样可以是离散的,也可以是连续的。
有时候,不同状态下可用的动作集合是不一样的,可以记作 $\mathcal{A}(s)$,表示在状态 $s$ 下允许的动作集合。
这是 MDP 里比较绕的一个概念,但理解它很关键。
$\mathcal{P}$ 描述的是:当前处于状态 $s$,执行动作 $a$ 之后,会以多大概率转移到下一个状态 $s'$。
数学上写作:
$$\mathcal{P}(s' | s, a) = P(S_{t+1} = s' \mid S_t = s, A_t = a)$$
这是一个条件概率——给定当前状态和动作,下一个状态是 $s'$ 的概率。
为什么是概率,而不是确定的? 因为现实世界很多时候是随机的。学生努力学习(动作1),大概率明天还是精力充沛(状态A),但也可能因为熬夜导致明天变成疲倦(状态B)——这个随机性是客观存在的。
状态转移函数满足一个约束:对于任意状态 $s$ 和动作 $a$,转移到所有可能下一状态的概率之和必须等于 1:
$$\sum_{s' \in \mathcal{S}} \mathcal{P}(s' | s, a) = 1$$
这就是个基本的概率归一化条件,没什么神秘的。
$\mathcal{R}$ 定义了 Agent 在某个状态下采取某个动作之后能得到的即时奖励。最常见的定义方式是:
$$\mathcal{R}(s, a) = \mathbb{E}[R_t \mid S_t = s, A_t = a]$$
即:在状态 $s$ 下执行动作 $a$,期望得到的奖励是多少。
有时候奖励还和下一个状态有关,写作 $\mathcal{R}(s, a, s')$,但很多情况下 $\mathcal{R}(s, a)$ 这种形式就够用了。
奖励函数是人为设计的,这是强化学习和其他学习范式一个很重要的区别。你得告诉系统什么叫"好",而这个判断是你来做的。
上一篇讲过,$\gamma \in [0, 1)$ 控制对未来奖励的重视程度。
$$G_t = \sum_{k=0}^{\infty} \gamma^k R_{t+k} = R_t + \gamma R_{t+1} + \gamma^2 R_{t+2} + \cdots$$
$\gamma$ 越接近 1,Agent 越有远见;越接近 0,Agent 越短视。
MDP 里的 "M" 来自数学家安德烈·马尔可夫(Andrey Markov)。他研究的核心问题是:一个系统的未来,只和它的当前状态有关,和历史无关。
这就是马尔可夫性(Markov Property),数学上写作:
$$P(S_{t+1} \mid S_t, A_t) = P(S_{t+1} \mid S_t, A_t, S_{t-1}, A_{t-1}, \ldots, S_0, A_0)$$
翻译成人话:知道现在的状态和动作,就足够预测下一个状态了,不需要知道之前发生了什么。
想象你正在开车,路口有一个红绿灯。你需要决定是继续前进还是踩刹车。
你需要知道的信息:当前灯的颜色、你的车速、和停止线的距离。
你不需要知道的信息:你今天几点出门的、一小时前堵了多久、上周在这个路口有没有被拍到闯红灯。
这就是马尔可夫性的直觉——当前状态已经"总结"了所有对决策有用的历史信息,历史本身不需要再看了。
现实中,马尔可夫性是一个近似假设。比如你打扑克,当前的手牌(状态)并不包含"哪些牌已经出过"这个信息,但这个历史信息对于决策是有用的。
一个常见的解决方案是把历史打包进状态。比如在 Atari 游戏里,DeepMind 的 DQN 不是把单张画面作为状态,而是把连续的 4 帧画面叠在一起作为状态——这样状态里就包含了物体的运动速度信息,满足(近似的)马尔可夫性。
要记住:MDP 是一个建模工具,现实世界不一定完美符合这个假设,但这个框架已经足够强大,能处理大量实际问题。
在 MDP 框架里,策略(Policy) $\pi$ 是一个函数,它告诉 Agent 在每个状态下该做什么。
策略有两种形式:
确定性策略(Deterministic Policy):
$$\pi(s) = a$$
在状态 $s$ 下,确定地执行动作 $a$,没有随机性。
随机性策略(Stochastic Policy):
$$\pi(a | s) = P(A_t = a \mid S_t = s)$$
在状态 $s$ 下,以概率 $\pi(a|s)$ 执行动作 $a$。比如 60% 的概率选择学习,40% 的概率选择休息。
随机性策略看起来奇怪——为什么不直接选最好的那个动作呢?原因有几个:
第一,在很多情况下,最优策略本身就是随机的(比如剪刀石头布,你必须随机出手才不会被对手读穿)。
第二,在学习的过程中,随机性策略提供了探索的能力——Agent 偶尔会尝试不那么确定的动作,从而发现更好的路径。
大多数现代算法(包括后面要讲的 PPO)使用的都是随机性策略。
有了 MDP 的基本定义,我们可以引入两个非常重要的概念——价值函数。
价值函数是强化学习里的核心工具,它回答的问题是:"我现在所处的状态,从长远来看值多少?"
在策略 $\pi$ 下,从状态 $s$ 出发,一路走下去能期望得到的累积奖励:
$$V^\pi(s) = \mathbb{E}_\pi\left[G_t \mid S_t = s\right] = \mathbb{E}_\pi\left[\sum_{k=0}^{\infty} \gamma^k R_{t+k} \mid S_t = s\right]$$
$V^\pi(s)$ 告诉我们:按照策略 $\pi$ 行动,状态 $s$ 的"长期价值"是多少。
回到学生的例子:处于"精力充沛"状态(状态A)的价值,肯定比处于"精疲力竭"状态(状态C)的价值高——因为从A出发,未来能做更多有价值的事。
$Q^\pi(s, a)$ 比 $V^\pi(s)$ 多了一个维度:不只考虑状态,还考虑在这个状态下采取了哪个动作:
$$Q^\pi(s, a) = \mathbb{E}_\pi\left[G_t \mid S_t = s, A_t = a\right]$$
翻译:在状态 $s$ 下强制先执行动作 $a$,然后再按照策略 $\pi$ 走下去,期望的累积奖励是多少。
$Q$ 函数(也叫 Q 值)在强化学习里极其重要,后面讲 DQN 的时候,整个算法核心就是学习 $Q$ 函数。
$V$ 和 $Q$ 的关系:
$$V^\pi(s) = \sum_{a \in \mathcal{A}} \pi(a|s) \cdot Q^\pi(s, a)$$
状态价值,就是在该状态下所有可能动作的 Q 值,按照策略的概率加权求和。这个关系很直观:你在某个状态的期望收益,就是"以某概率选这个动作,以某概率选那个动作"的加权平均。
现在来到这篇文章最重要的部分——贝尔曼方程(Bellman Equation)。
贝尔曼方程之所以重要,是因为它提供了一个递推关系:当前状态的价值,可以用下一个状态的价值来表示。这个关系是几乎所有强化学习算法的核心。
我们来一步步推导 $V^\pi(s)$ 的贝尔曼方程:
$$ \begin{aligned} V^\pi(s) &= \mathbb{E}_\pi\left[G_t \mid S_t = s\right] \\ &= \mathbb{E}_\pi\left[R_t + \gamma G_{t+1} \mid S_t = s\right] \\ &= \mathbb{E}_\pi\left[R_t + \gamma V^\pi(S_{t+1}) \mid S_t = s\right] \end{aligned} $$
展开之后:
$$\boxed{V^\pi(s) = \sum_{a} \pi(a|s) \sum_{s'} \mathcal{P}(s'|s,a) \left[\mathcal{R}(s,a) + \gamma V^\pi(s')\right]}$$
这就是贝尔曼方程。初次看到可能有点复杂,我们来拆解它:
一句话理解贝尔曼方程:当前状态的价值 = 即时奖励 + 折扣后的下一个状态价值。
这是一个天才般的递推思想。整个漫长序列的价值,被分解成了"一步收益 + 未来价值"的形式。就像你计算从北京到上海的路程,不需要一步步量,只需要知道"北京到郑州的距离 + 郑州到上海的距离"就行了。
类似地,$Q^\pi(s, a)$ 也满足贝尔曼方程:
$$\boxed{Q^\pi(s, a) = \sum_{s'} \mathcal{P}(s'|s,a) \left[\mathcal{R}(s,a) + \gamma \sum_{a'} \pi(a'|s') Q^\pi(s', a')\right]}$$
这个公式说的是:在状态 $s$ 执行动作 $a$ 的价值,等于即时奖励加上下一状态的 V 值(而下一状态的 V 值又可以用下一状态的 Q 值表示)。
在所有可能的策略中,存在一个最优策略 $\pi^*$,对应着最优价值函数:
$$V^*(s) = \max_\pi V^\pi(s)$$
最优价值函数满足贝尔曼最优方程(Bellman Optimality Equation):
$$\boxed{V^*(s) = \max_{a} \sum_{s'} \mathcal{P}(s'|s,a) \left[\mathcal{R}(s,a) + \gamma V^*(s')\right]}$$
注意这里的区别:原来是按照策略 $\pi$ 做加权平均 $\sum_a \pi(a|s)$,现在变成了取最大值 $\max_a$。
直觉上很好理解:最优策略在每个状态下,选的都是能带来最大长期价值的那个动作,而不是随机选。
同样,最优 Q 函数满足:
$$Q^*(s, a) = \sum_{s'} \mathcal{P}(s'|s,a) \left[\mathcal{R}(s,a) + \gamma \max_{a'} Q^*(s', a')\right]$$
这个方程是 Q-Learning 算法的理论基础,后面我们会专门讲它。
实际问题中,MDP 有几种常见的分类方式,了解它们有助于你选择合适的算法。
有限 Horizon(Finite-horizon MDP): 每个 Episode 有固定的时间步数上限,比如棋类游戏最多走 200 步就结束。
无限 Horizon(Infinite-horizon MDP): 没有明确的终止时间,一直进行下去。这时候折扣因子 $\gamma < 1$ 是必须的,否则累积奖励会发散到无穷大。
这个区分后面会多次遇到,很重要:
有模型(Model-based): Agent 知道状态转移函数 $\mathcal{P}$ 和奖励函数 $\mathcal{R}$。就像你拥有游戏的完整规则书,可以在脑子里模拟每一步的结果。这样可以做规划(Planning),不需要真的去试。
无模型(Model-free): Agent 不知道 $\mathcal{P}$ 和 $\mathcal{R}$,只能通过实际与环境交互来收集数据。现实中大多数问题都是这种情况——你不可能知道真实世界的完整"规则书"。
目前最主流的深度强化学习算法(DQN、PPO、SAC 等)都是无模型的方法,我们系列的重点也在这里。
确定性环境: 同样的状态 + 同样的动作,永远导致同样的下一个状态。下围棋就是确定性环境。
随机性环境: 同样的状态 + 同样的动作,可能有不同的结果。大多数现实场景都有随机性。
我们回到文章开头的学生例子,把它完整地用 MDP 表示出来。
状态空间: $\mathcal{S} = \{A(\text{充沛}),\ B(\text{疲倦}),\ C(\text{枯竭})\}$
动作空间: $\mathcal{A} = \{1(\text{努力学}),\ 2(\text{正常休息}),\ 3(\text{躺平摆烂})\}$
状态转移函数(部分示例):
奖励函数(示例):
一个简单策略 $\pi$: - 状态A:努力学习(100%) - 状态B:正常休息(100%) - 状态C:正常休息(100%)
这个策略合理吗?你可以用贝尔曼方程计算每个状态的 $V^\pi(s)$,然后尝试改进策略,看看有没有更好的选择。
这正是后面"策略迭代"和"值迭代"算法要做的事情。
学完 MDP,你得到的是一张"地图"——它精确描述了强化学习问题的结构:状态、动作、转移、奖励、折扣。
但有了地图不够,你还需要"导航算法"——如何在这张地图上找到最优策略。
接下来几篇,我们会介绍: - 价值函数(V 和 Q)的进一步理解 - 怎么用动态规划求解小规模的 MDP - 当状态空间太大、模型未知时,如何用采样方法来逼近
每一步都是在 MDP 这个地基上往上建的。地基越扎实,后面的大楼越稳。
有了 MDP 和贝尔曼方程,下一篇我们深入聊聊价值函数——它是怎么"工作"的,为什么说 $Q$ 函数比 $V$ 函数在实际中更有用,以及贝尔曼方程给了我们一个什么样的迭代计算思路。
这一篇我们打好了理论基础,下一篇开始向算法靠近。
上一篇:第1篇:什么是强化学习?从游戏说起 下一篇:第3篇:价值函数——我现在的处境值多少分?(即将发布)
还没有评论,来抢沙发吧!
博客管理员
40 篇文章
还没有评论,来抢沙发吧!