概述

马尔可夫决策过程(Markov Decision Process,MDP)是强化学习的数学基础框架。MDP将sequential decision making问题形式化,其中:

  • 智能体(Agent)与环境(Environment)交互
  • 每个时间步,智能体观测状态并采取动作
  • 环境根据动作转移到新状态并给予奖励
  • 目标是学习最优策略最大化累积奖励

MDP的核心假设:马尔可夫性——未来仅依赖于当前状态,与历史无关。

MDP五元组

MDP由五元组 定义:

符号名称说明
状态空间所有可能状态的集合
动作空间所有可能动作的集合
转移函数$\mathcal{P}(s’
奖励函数 表示获得的奖励
折扣因子 衡量未来奖励的重要性

状态空间与动作空间

根据空间类型,MDP可分为:

类型状态空间动作空间
离散-离散有限集合有限集合
连续-离散无限集合(如有限集合
离散-连续有限集合无限集合
连续-连续无限集合无限集合

转移概率

转移函数满足:

对于确定性环境,

奖励函数

奖励函数有两种形式:

  • 即时奖励
  • 后继奖励

奖励的设计对学习效果至关重要,需要根据任务目标精心设计。

折扣因子

折扣因子 衡量未来奖励的重要性:

  • :只考虑即时奖励(“短视”策略)
  • :同等重视所有未来奖励
  • 通常

折扣因子有两个重要作用:

  1. 避免无限回报:确保 episodic 和 continuing 任务都有有限回报
  2. 体现时间偏好:人类/智能体通常更重视近期收益

策略

定义

策略(Policy) 定义了在每个状态下选择动作的概率分布:

  • 确定性策略,输出单一动作
  • 随机策略,输出动作概率分布

分类

类型表达式特点
贪婪策略exploit exploit exploit
-贪婪exploration + exploitation
软策略$\pi(as) \propto \exp(Q(s,a)/T)$
随机策略用于连续动作空间

轨迹与回报

轨迹

从初始状态 开始的轨迹(trajectory):

注意: 表示在步采取动作后获得的奖励。

回报

从时刻开始的回报(return)

回报也可递归计算:

Episodic vs Continuing

类型描述示例
Episodes有终止状态的任务游戏、机器人抓取
Continuing无限持续的任务股票交易、控制系统

价值函数

状态价值函数

状态价值函数(State Value Function) 表示从状态开始,遵循策略的期望回报:

展开:

动作价值函数

动作价值函数(Action Value Function) 表示从状态开始,执行动作后遵循策略的期望回报:

优势函数

优势函数(Advantage Function) 衡量在状态下执行动作相对于策略的平均优势:

  • :动作优于平均
  • :动作劣于平均
  • :动作等于平均

函数关系

最优策略

定义

最优策略 是使状态价值函数最大化的策略:

对应的最优价值函数:

最优性条件

策略 为最优,当且仅当:

即:最优策略在每个状态下总是选择能最大化最优Q值的动作。

示例:Grid World

问题描述

网格世界:
+---+---+---+---+---+
| 0 | 1 | 2 | 3 | 4 |
+---+---+---+---+---+
| 5 | 6 | 7 | 8 | 9 |
+---+---+---+---+---+
|10 |11 |12 |13 |14 |
+---+---+---+---+---+

- 智能体可执行4个动作:up, down, left, right
- 目标状态:14(获得+1奖励)
- 边界状态:墙壁(保持原位)
- 其他状态:每步获得-0.1奖励
- 折扣因子:γ = 0.9

Python实现

import numpy as np
 
class GridWorld:
    """简单的4x5网格世界"""
    
    def __init__(self):
        self.n_states = 15  # 0-14
        self.n_actions = 4  # 0:up, 1:down, 2:left, 3:right
        self.gamma = 0.9
        self.reward_target = 1.0
        self.reward_step = -0.1
        
        # 转移概率(确定性环境)
        self.P = np.zeros((self.n_states, self.n_actions, self.n_states))
        self._build_transition()
    
    def _build_transition(self):
        """构建转移概率矩阵"""
        for s in range(self.n_states):
            row, col = s // 5, s % 5
            
            for a in range(self.n_actions):
                # 计算下一个位置
                if a == 0:   # up
                    nr, nc = max(0, row - 1), col
                elif a == 1: # down
                    nr, nc = min(2, row + 1), col
                elif a == 2: # left
                    nr, nc = row, max(0, col - 1)
                else:        # right
                    nr, nc = row, min(4, col + 1)
                
                next_s = nr * 5 + nc
                self.P[s, a, next_s] = 1.0
    
    def step(self, s, a):
        """执行动作,返回(next_state, reward, done)"""
        next_s = np.argmax(self.P[s, a])  # 确定性转移
        reward = self.reward_target if s == 14 else self.reward_step
        done = (s == 14)
        return next_s, reward, done
    
    def reward_fn(self, s, a, next_s):
        """奖励函数"""
        return self.reward_target if s == 14 else self.reward_step
 
 
def evaluate_policy(env, pi, theta=1e-6, max_iterations=1000):
    """策略评估:计算给定策略下的状态价值函数"""
    V = np.zeros(env.n_states)
    
    for _ in range(max_iterations):
        delta = 0
        for s in range(env.n_states):
            v = 0
            for a in range(env.n_actions):
                next_s = np.argmax(env.P[s, a])
                r = env.reward_fn(s, a, next_s)
                v += pi[s, a] * (r + env.gamma * V[next_s])
            delta = max(delta, abs(v - V[s]))
            V[s] = v
        if delta < theta:
            break
    
    return V
 
 
# 均匀随机策略
env = GridWorld()
pi = np.ones((env.n_states, env.n_actions)) / env.n_actions
 
# 评估策略
V = evaluate_policy(env, pi)
print("状态价值函数:")
for row in range(3):
    print([f"{V[row*5+col]:.3f}" for col in range(5)])

输出示例

状态价值函数:
['-0.613', '-0.552', '-0.492', '-0.431', '-0.372']
['-0.672', '-0.610', '-0.548', '-0.486', '-0.424']
['-0.730', '-0.668', '-0.605', '-0.542', '-0.479']

可见越靠近目标状态(右下角),价值越高。

与其他模型的关系

MDP vs 马尔可夫链

马尔可夫链只有状态转移,没有动作和奖励:

  • 马尔可夫链:
  • MDP: + 动作选择

详见 马尔可夫链

MDP vs 隐马尔可夫模型

HMM用于推断隐藏状态,MDP用于决策:

  • HMM:给定观测序列,推断隐藏状态
  • MDP:给定状态,决策动作

详见 隐马尔可夫模型

参考


后续主题