【强化学习】强化学习算法 - 马尔可夫决策过程
马尔可夫决策过程 (Markov Decision Process, MDP)
1. MDP 原理介绍
马尔可夫决策过程 (MDP) 是强化学习 (Reinforcement Learning, RL) 中用于对序贯决策 (Sequential Decision Making) 问题进行数学建模的标准框架。它描述了一个智能体 (Agent) 与环境 (Environment) 交互的过程,其中智能体的目标是最大化其在一段时间内获得的总奖励。
MDP 假设环境具有马尔可夫性质 (Markov Property),即未来的状态和奖励只依赖于当前的状态和智能体采取的动作,而与过去的状态或动作历史无关。
一个 MDP 通常由以下五个核心要素组成,表示为一个五元组 ( S , A , P , R , γ ) (S, A, P, R, \gamma) (S,A,P,R,γ):
-
状态集合 (State Space, S S S):
- 表示智能体可能处于的所有不同情况或配置的集合。状态可以是离散的(例如棋盘格的位置)或连续的(例如机器人的关节角度)。这里我们主要关注离散状态空间。
- S t S_t St 表示智能体在时间步 t t t 所处的状态。
-
动作集合 (Action Space, A A A):
- 表示智能体在每个状态下可以采取的所有可能行为的集合。动作也可以是离散的(例如游戏中按键)或连续的(例如控制油门)。有时动作集合依赖于状态,记为 A ( s ) A(s) A(s)。
- A t A_t At 表示智能体在时间步 t t t 选择的动作。
-
状态转移概率 (Transition Probability Function, P P P):
- P ( s ′ ∣ s , a ) = P r ( S t + 1 = s ′ ∣ S t = s , A t = a ) P(s' | s, a) = Pr(S_{t+1}=s' | S_t=s, A_t=a) P(s′∣s,a)=Pr(St+1=s′∣St=s,At=a)。
- 它定义了在状态 s s s 下采取动作 a a a 后,转移到下一个状态 s ′ s' s′ 的概率。这体现了环境的动态性,可能包含随机性。
- 对于所有 s ∈ S , a ∈ A ( s ) s \in S, a \in A(s) s∈S,a∈A(s),必须满足 ∑ s ′ ∈ S P ( s ′ ∣ s , a ) = 1 \sum_{s' \in S} P(s' | s, a) = 1 ∑s′∈SP(s′∣s,a)=1。
-
奖励函数 (Reward Function, R R R):
- 定义了智能体在特定状态下采取特定动作后获得的即时奖励。有几种常见的定义方式:
- R ( s , a , s ′ ) R(s, a, s') R(s,a,s′):在状态 s s s 采取动作 a a a 并转移到状态 s ′ s' s′ 时获得的奖励。
- R ( s , a ) = E [ R t + 1 ∣ S t = s , A t = a ] = ∑ s ′ P ( s ′ ∣ s , a ) R ( s , a , s ′ ) R(s, a) = E[R_{t+1} | S_t=s, A_t=a] = \sum_{s'} P(s' | s, a) R(s, a, s') R(s,a)=E[Rt+1∣St=s,At=a]=∑s′P(s′∣s,a)R(s,a,s′):在状态 s s s 采取动作 a a a 后期望获得的即时奖励。这是更常用的形式。
- R ( s ) R(s) R(s):仅与进入状态 s s s 相关联的奖励。
- 奖励函数 R R R 定义了问题的目标。智能体的目的是最大化累积奖励。 R t + 1 R_{t+1} Rt+1 是在时间步 t + 1 t+1 t+1 获得的奖励。
- 定义了智能体在特定状态下采取特定动作后获得的即时奖励。有几种常见的定义方式:
-
折扣因子 (Discount Factor, γ \gamma γ):
- γ ∈ [ 0 , 1 ] \gamma \in [0, 1] γ∈[0,1]。它是一个用于衡量未来奖励相对于当前奖励重要性的参数。
- γ \gamma γ 接近 0 时,智能体更关注即时奖励(短视)。
- γ \gamma γ 接近 1 时,智能体更关注长期累积奖励(远视)。
- γ < 1 \gamma < 1 γ<1 通常也确保了无限时间范围内的累积奖励(回报)是有限的。
马尔可夫性质 (Markov Property)
这是 MDP 的核心假设: P ( S t + 1 , R t + 1 ∣ S t , A t , S t − 1 , A t − 1 , . . . , S 0 , A 0 ) = P ( S t + 1 , R t + 1 ∣ S t , A t ) P(S_{t+1}, R_{t+1} | S_t, A_t, S_{t-1}, A_{t-1}, ..., S_0, A_0) = P(S_{t+1}, R_{t+1} | S_t, A_t) P(St+1,Rt+1∣St,At,St−1,At−1,...,S0,A0)=P(St+1,Rt+1∣St,At)。这意味着,系统下一时刻的状态和获得的奖励,仅取决于当前的状态 S t S_t St 和当前采取的动作 A t A_t At,与之前的历史状态和动作无关。
目标
智能体的目标是找到一个策略 (Policy) π \pi π,该策略定义了在每个状态 s s s 下选择动作 a a a 的方式(通常是概率分布 π ( a ∣ s ) = P r ( A t = a ∣ S t = s ) \pi(a|s) = Pr(A_t=a | S_t=s) π(a∣s)=Pr(At=a∣St=s)),以最大化期望累积折扣奖励 (Expected Cumulative Discounted Reward),也称为回报 (Return) 或 价值 (Value)。
从时间步 t t t 开始的回报定义为:
G t = R t + 1 + γ R t + 2 + γ 2 R t + 3 + . . . = ∑ k = 0 ∞ γ k R t + k + 1 G_t = R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} + ... = \sum_{k=0}^\infty \gamma^k R_{t+k+1} Gt=Rt+1+γRt+2+γ2Rt+3+...=k=0∑∞γkRt+k+1
价值函数 (Value Functions)
为了评估策略的好坏,引入了价值函数:
- 状态价值函数 (State-Value Function) V π ( s ) V^\pi(s) Vπ(s): 从状态 s s s 开始,遵循策略 π \pi π 所能获得的期望回报。
V π ( s ) = E π [ G t ∣ S t = s ] = E π [ ∑ k = 0 ∞ γ k R t + k + 1 ∣ S t = s ] V^\pi(s) = E_\pi[G_t | S_t=s] = E_\pi\left[\sum_{k=0}^\infty \gamma^k R_{t+k+1} | S_t=s\right] Vπ(s)=Eπ[Gt∣St=s]=Eπ[k=0∑∞γkRt+k+1∣St=s] - 动作价值函数 (Action-Value Function) Q π ( s , a ) Q^\pi(s, a) Qπ(s,a): 在状态 s s s 采取动作 a a a,然后遵循策略 π \pi π 所能获得的期望回报。
Q π ( s , a ) = E π [ G t ∣ S t = s , A t = a ] = E π [ ∑ k = 0 ∞ γ k R t + k + 1 ∣ S t = s , A t = a ] Q^\pi(s, a) = E_\pi[G_t | S_t=s, A_t=a] = E_\pi\left[\sum_{k=0}^\infty \gamma^k R_{t+k+1} | S_t=s, A_t=a\right] Qπ(s,a)=Eπ[Gt∣St=s,At=a]=Eπ[k=0∑∞γkRt+k+1∣St=s,At=a]
贝尔曼方程 (Bellman Equations)
价值函数满足递归关系,称为贝尔曼方程,它们是大多数 RL 算法的基础。
- 贝尔曼期望方程 (Bellman Expectation Equation for V π V^\pi Vπ):
V π ( s ) = ∑ a π ( a ∣ s ) ∑ s ′ P ( s ′ ∣ s , a ) [ R ( s , a , s ′ ) + γ V π ( s ′ ) ] V^\pi(s) = \sum_{a} \pi(a|s) \sum_{s'} P(s'|s,a) [R(s,a,s') + \gamma V^\pi(s')] Vπ(s)=a∑π(a∣s)s′∑P(s′∣s,a)[R(s,a,s′)+γVπ(s′)]
(若使用 R ( s , a ) R(s,a) R(s,a),则为: V π ( s ) = ∑ a π ( a ∣ s ) ( R ( s , a ) + γ ∑ s ′ P ( s ′ ∣ s , a ) V π ( s ′ ) ) V^\pi(s) = \sum_{a} \pi(a|s) (R(s,a) + \gamma \sum_{s'} P(s'|s,a) V^\pi(s')) Vπ(s)=∑aπ(a∣s)(R(s,a)+γ∑s′P(s′∣s,a)Vπ(s′))) - 贝尔曼期望方程 (Bellman Expectation Equation for Q π Q^\pi Qπ):
Q π ( s , a ) = ∑ s ′ P ( s ′ ∣ s , a ) [ R ( s , a , s ′ ) + γ ∑ a ′ π ( a ′ ∣ s ′ ) Q π ( s ′ , a ′ ) ] Q^\pi(s, a) = \sum_{s'} P(s'|s,a) [R(s,a,s') + \gamma \sum_{a'} \pi(a'|s') Q^\pi(s', a')] Qπ(s,a)=s′∑P(s′∣s,a)[R(s,a,s′)+γa′∑π(a′∣s′)Qπ(s′,a′)]
(若使用 R ( s , a ) R(s,a) R(s,a),则为: Q π ( s , a ) = R ( s , a ) + γ ∑ s ′ P ( s ′ ∣ s , a ) V π ( s ′ ) = R ( s , a ) + γ ∑ s ′ P ( s ′ ∣ s , a ) ∑ a ′ π ( a ′ ∣ s ′ ) Q π ( s ′ , a ′ ) ) Q^\pi(s, a) = R(s,a) + \gamma \sum_{s'} P(s'|s,a) V^\pi(s') = R(s,a) + \gamma \sum_{s'} P(s'|s,a) \sum_{a'} \pi(a'|s') Q^\pi(s', a')) Qπ(s,a)=R(s,a)+γ∑s′P(s′∣s,a)Vπ(s′)=R(s,a)+γ∑s′P(s′∣s,a)∑a′π(a′∣s′)Qπ(s′,a′)))
强化学习的目标是找到最优策略 π ∗ \pi_* π∗,使得所有状态的价值 V π ∗ ( s ) V^{\pi_*}(s) Vπ∗(s) 或所有状态动作对的价值 Q π ∗ ( s , a ) Q^{\pi_*}(s, a) Qπ∗(s,a) 最大化。对应的价值函数称为最优价值函数 V ∗ ( s ) V_*(s) V∗(s) 和 Q ∗ ( s , a ) Q_*(s, a) Q∗(s,a),它们满足贝尔曼最优方程 (Bellman Optimality Equations)。
2. MDP 建模/实现步骤
将一个实际问题建模为 MDP,通常涉及以下步骤。这并不是一个具体的编程实现,而是定义问题的数学框架:
- 定义状态空间 S S S: 确定能够充分描述问题状态的所有变量和它们的可能取值。状态需要满足马尔可夫性质。选择合适的状态表示至关重要。
- 定义动作空间 A A A: 确定智能体在每个状态下可以采取的所有动作。
- 定义状态转移概率 P ( s ′ ∣ s , a ) P(s'|s, a) P(s′∣s,a): 描述环境的动态。对于每个状态 s s s 和动作 a a a,确定转移到下一个状态 s ′ s' s′ 的概率。这通常是建模中最困难的部分,可能基于物理定律、规则或数据估计。
- 定义奖励函数 R ( s , a ) R(s, a) R(s,a) 或 R ( s , a , s ′ ) R(s, a, s') R(s,a,s′): 设计奖励信号以引导智能体实现目标。奖励应该反映任务的即时成功或失败。例如,目标达成给予正奖励,危险状态给予负奖励,普通移动给予小的负奖励(鼓励效率)。
- 选择折扣因子 γ \gamma γ: 根据任务是有限期还是无限期,以及对未来奖励的重视程度来选择 γ \gamma γ。
完成建模后:
- 如果 MDP 的模型( P P P 和 R R R)已知,可以使用动态规划 (Dynamic Programming) 方法(如价值迭代 Value Iteration 或策略迭代 Policy Iteration)来精确计算最优价值函数和最优策略。
- 如果 MDP 的模型未知(这是更常见的情况),则需要使用强化学习算法(如 Q-Learning, SARSA, DQN, Actor-Critic 等),通过智能体与环境的交互(采样)来学习最优策略。
3. MDP 示例:简单网格世界 (Grid World)
假设有一个 3x3 的网格世界。
+---+---+---+
| | | G | (0,0) (0,1) (0,2)
+---+---+---+
| | W | | (1,0) (1,1) (1,2)
+---+---+---+
| S | | | (2,0) (2,1) (2,2)
+---+---+---+
- S (Start): 智能体的起始位置 (2,0)。
- G (Goal): 目标位置 (0,2),到达后获得奖励。
- W (Wall): 墙壁 (1,1),无法进入。
- 空格: 可以移动的普通格子。
MDP 组件定义:
-
状态空间 S S S: 每个格子的坐标 ( r , c ) (r, c) (r,c),其中 r ∈ { 0 , 1 , 2 } , c ∈ { 0 , 1 , 2 } r \in \{0, 1, 2\}, c \in \{0, 1, 2\} r∈{0,1,2},c∈{0,1,2}。共 9 个状态。状态 (1,1) 是障碍物。状态 (0,2) 是目标状态(可以设为终止状态)。
-
动作空间 A A A: 在每个非终止状态,智能体可以尝试向四个方向移动:{上 (Up), 下 (Down), 左 (Left), 右 (Right)}。
-
状态转移概率 P ( s ′ ∣ s , a ) P(s'|s, a) P(s′∣s,a):
- 确定性环境: 假设移动是确定的。
- 如果从状态 s = ( r , c ) s=(r, c) s=(r,c) 尝试动作 a a a,目标格子 s ′ = ( r ′ , c ′ ) s'=(r', c') s′=(r′,c′) 在网格内且不是墙壁 (1,1),则 P ( s ′ ∣ s , a ) = 1 P(s'|s, a) = 1 P(s′∣s,a)=1,其他 P ( s ′ ′ ∣ s , a ) = 0 P(s''|s,a)=0 P(s′′∣s,a)=0。
- 如果目标格子 s ′ s' s′ 超出边界或撞墙 (1,1),则智能体停留在原地,即 P ( s ∣ s , a ) = 1 P(s|s, a) = 1 P(s∣s,a)=1。
- 如果当前状态 s s s 是目标状态 G (0,2),可以设定 G 为终止状态,任何动作都停留在 G (或转移到一个特殊的终止状态)。
- 随机性环境 (可选): 假设有 80% 的概率按预期方向移动,各有 10% 的概率向预定方向的左侧或右侧移动(撞墙或边界则停留在原地)。例如,在 (1,0) 选择 ‘Up’:
- 80% 概率到达 (0,0)。
- 10% 概率向左滑,撞边界,停留在 (1,0)。
- 10% 概率向右滑,撞墙 (1,1),停留在 (1,0)。
- 因此 P ( ( 0 , 0 ) ∣ ( 1 , 0 ) , ’Up’ ) = 0.8 P((0,0)|(1,0), \text{'Up'}) = 0.8 P((0,0)∣(1,0),’Up’)=0.8, P ( ( 1 , 0 ) ∣ ( 1 , 0 ) , ’Up’ ) = 0.2 P((1,0)|(1,0), \text{'Up'}) = 0.2 P((1,0)∣(1,0),’Up’)=0.2。
- 确定性环境: 假设移动是确定的。
-
奖励函数 R ( s , a ) R(s, a) R(s,a) 或 R ( s , a , s ′ ) R(s, a, s') R(s,a,s′):
- 到达目标状态 G (0,2): R = + 10 R = +10 R=+10。
- 每次移动(到达非目标状态): R = − 0.1 R = -0.1 R=−0.1 (鼓励尽快到达目标)。
- 撞墙或边界(停留在原地): R = − 1 R = -1 R=−1 (轻微惩罚)。
- (另一种设计:只有到达目标状态 G 时获得 R = + 1 R=+1 R=+1,其他所有转移奖励为 0)。
-
折扣因子 γ \gamma γ: 例如, γ = 0.9 \gamma = 0.9 γ=0.9。
目标: 找到一个策略 π ( a ∣ s ) \pi(a|s) π(a∣s),使得从状态 S (2,0) 出发,到达 G (0,2) 的期望累积折扣奖励最大化。这通常意味着找到一条避开墙壁、最快到达目标的路径。
通过动态规划(如果 P , R P, R P,R 已知)或强化学习算法(如果未知或需要通过交互学习),可以计算出每个状态的最佳动作,形成最优策略。例如,在 (2,0) 最优动作可能是 ‘Up’,在 (1,0) 最优动作可能是 ‘Up’ 或 ‘Right’ (取决于随机性和奖励设计),最终引导智能体走向 (0,2)。