Q-Learning 算法:时序差分与表格求解

FreeGuideOnline 最新 2026-06-17

Q-Learning 算法:时序差分与表格求解

欢迎来到这篇为初学者精心准备的 Q-Learning 算法教程。在这里,你将从零开始,理解强化学习中最重要的无模型算法之一——Q-Learning,并掌握它如何通过时序差分思想在表格中求解最优策略。无需深厚的数学背景,让我们用直觉和清晰的例子一起探索。


1. 强化学习基础概念快速回顾

在深入 Q-Learning 之前,我们需要对齐几个核心术语。假设你已经了解智能体与环境交互的基本循环,但这里仍做一个快速梳理,确保后续内容完全清晰。

1.1 智能体与环境

  • 智能体:学习和做决策的主体,比如一只在迷宫中寻找出口的小老鼠。
  • 环境:智能体所处的外部世界,迷宫、棋盘或任何交互场景。
  • 在每一个时间步 t,智能体观察环境状态 S_t,选择一个动作 A_t,环境返回一个奖励 R_{t+1} 并进入新状态 S_{t+1}

1.2 回报与折扣因子

  • 回报(Return) 定义为从当前时刻开始,未来所有奖励的累积和:
    G_t = R_{t+1} + γR_{t+2} + γ^2R_{t+3} + ...
  • 其中 γ(折扣因子,介于 0 到 1 之间)让近期奖励比远期奖励更重要。这保证了回报在数学上收敛,也符合实际中对即时收益的自然偏好。

1.3 策略与价值函数

  • 策略 π:状态到动作的概率映射。即给定状态 s,采取动作 a 的概率 π(a|s)
  • 状态价值函数 V^π(s):从状态 s 出发,遵循策略 π 所能获得的期望回报。
  • 动作价值函数 Q^π(s, a):从状态 s 出发,执行动作 a,之后遵循策略 π 所能获得的期望回报。

Q-Learning 的目标就是直接寻找最优动作价值函数 Q*(s, a),而无需知道环境模型。


2. 什么是 Q-Learning?核心思想

Q-Learning 是一种无模型(model-free)离线策略(off-policy) 的强化学习算法。

  • 无模型:它不要求知道环境的状态转移概率和奖励函数,只需通过与环境交互产生的经验来学习。
  • 离线策略:它学习最优 Q 函数时,可以独立于智能体当前实际执行的策略。即,收集数据的行为策略可以是一个探索性策略,而目标策略是直接选最大 Q 值的贪心策略。

算法的灵魂在于使用时序差分(Temporal Difference, TD) 方法来更新 Q 值。它结合了动态规划与蒙特卡罗方法的优点:既能像蒙特卡罗那样从真实的经验中学习,又能像动态规划那样基于已学到的估计值进行引导(bootstrapping),无需等待一个完整的回合结束。


3. 时序差分更新规则

Q-Learning 的更新公式简洁而强大:

Q(S_t, A_t) ← Q(S_t, A_t) + α [ R_{t+1} + γ · max_a Q(S_{t+1}, a) - Q(S_t, A_t) ]

让我们逐项拆解这个公式:

  • Q(S_t, A_t):当前状态下执行动作 A_t 的旧估计值。
  • α(学习率):控制在多大程度上用新信息覆盖旧估计。α=0 表示不学习,α=1 完全相信新目标。
  • R_{t+1}:执行动作后立刻得到的奖励。
  • γ · max_a Q(S_{t+1}, a):对下一个状态 S_{t+1} 中所有可能动作的 Q 值取最大值,折扣后作为未来回报的估计。
  • TD目标R_{t+1} + γ · max_a Q(S_{t+1}, a),这是我们希望当前 Q(S_t, A_t) 趋近的值。
  • TD误差R_{t+1} + γ · max_a Q(S_{t+1}, a) - Q(S_t, A_t),即目标与当前估计的差值。算法通过最小化这个误差来逐步逼近最优 Q 函数。

关键点解释

  • 公式使用了 max_a Q(S_{t+1}, a) 而不是根据实际下一步动作的 Q 值来更新。这体现了离线策略特性:它假设在下一状态就会采取最优动作,即使智能体实际在探索时可能随机选择了其它动作。这样 Q 函数会直接学习最优策略,而不受探索动作的干扰。
  • 因为每次更新都基于一次实际交互(一个 (S_t, A_t, R_{t+1}, S_{t+1}) 经验元组),所以属于单步时序差分方法。

4. 表格型 Q-Learning 算法流程

当状态空间和动作空间都比较小且离散时,我们可以用一张表格来记录所有状态-动作对的 Q 值,即 Q[s, a]。这称作表格型 Q-Learning。每个单元格独立地存储一个数字,随着智能体的学习不断被更新。

算法伪代码:

初始化 Q(s, a) 表格,对所有 s ∈ S, a ∈ A,Q(s, a) 可为 0 或小随机值
对每一个回合进行循环:
    初始化初始状态 S (通常从环境获取)
    对回合中的每一步进行循环:
        采用某种策略从状态 S 选择动作 A (例如 ε-贪婪策略)
        执行动作 A,从环境得到奖励 R 和下一状态 S'
        更新 Q(S, A):
            Q(S, A) ← Q(S, A) + α [ R + γ * max_a Q(S', a) - Q(S, A) ]
        S ← S'
        如果 S 是终止状态,则结束该回合

5. 探索与利用的权衡:ε-贪婪策略

在学习过程中,智能体面临一个根本困境:

  • 利用(Exploitation):选择当前估计 Q 值最大的动作,以期获得高回报。
  • 探索(Exploration):尝试不同动作,以便发现可能更好的动作,防止陷入局部最优。

表格型 Q-Learning 通常采用 ε-贪婪策略 作为行为策略:

  • 以概率 1 - ε 选择 max_a Q(s, a)(利用)。
  • 以概率 ε 随机选择一个动作(探索)。
  • ε 通常在训练开始时设置较大(如 0.9),随着学习进行逐渐衰减至很小的值(如 0.01),让智能体从大量探索逐渐过渡到精准利用。

为什么 Q-Learning 用 ε-贪婪作为行为策略,却仍能学习到最优策略?
因为更新规则中的 max 操作直接对最优策略进行估计,而行为策略只需保证有足够的探索让每个状态-动作对被无限次访问。在表格环境下,只要满足探索条件(所有状态-动作对都被无限频繁地访问)和学习率衰减适当,Q-Learning 已被证明可以收敛到最优 Q 函数。


6. 从 0 构建一个表格型 Q-Learning 示例

下面通过一个经典的网格世界例子来直观演示算法的工作原理。环境是一个 4x4 的冰冻湖风格网格,智能体从起点出发,目标是到达终点拿到+1的奖励,途中某些格子会带来负奖励,掉入陷阱则回合结束。动作空间为上下左右四个方向,由于地面湿滑,动作可能向非预想方向滑动(但为了简化,我们可以先用确定性环境理解)。

6.1 环境定义

  • 状态:网格坐标 (row, col),共 16 个状态,外加终止状态。
  • 动作:0=上, 1=下, 2=左, 3=右。
  • 奖励:到达目标 +1,掉入陷阱 -1,其他步 -0.04(鼓励尽快到达终点)。
  • 在确定性版本中,动作直接指向对应相邻格子,碰到墙壁则原地不动。

6.2 Q 表初始化

建立一个 16x4 的全零二维数组。也可以初始化为很小的随机正数,以稍微鼓励乐观探索。

6.3 超参数设置

  • 学习率 α = 0.5
  • 折扣因子 γ = 0.99
  • 初始探索率 ε = 0.8,每回合衰减 0.9999,最低 0.01

6.4 训练循环(逐步解析)

  1. 开始一个新回合,智能体位置重置为起点 (0,0)
  2. 在状态 s,生成一个随机数,若小于 ε,则随机选择动作;否则选择当前 Q 表中该行最大值的列索引所代表的动作。
  3. 执行动作,得到新状态 s' 和奖励 r
  4. 找到 s' 行中最大 Q 值 maxQ_s'
  5. 计算 TD 目标:target = r + γ * maxQ_s'
  6. 计算 TD 误差:error = target - Q[s][a]
  7. 更新 Q 值:Q[s][a] = Q[s][a] + α * error
  8. 将状态迁移到 s'。若 s' 为终止状态(目标或陷阱),跳到步骤1开始新回合;否则回到步骤2。

随着成千上万次到达终点的经验积累,Q 表中的值会逐渐正确反映从每个格子执行各动作的未来期望回报,最终智能体可以单纯通过选取每行最大值来走出最优路径。


7. 收敛性与超参数调试建议

7.1 收敛条件

在有限马尔可夫决策过程(MDP)中,表格型 Q-Learning 被证明在以下条件下以概率 1 收敛到最优 Q*

  • 状态和动作空间有限。
  • 学习率序列 α_t 满足 ROBBINS-MONRO 条件:Σ α_t = ∞Σ α_t^2 < ∞(例如 α = 1/t ,实践中常使用常数 α 并配合长训练也能近似收敛)。
  • 所有状态-动作对都被无限频繁地访问(由 ε-贪婪策略保证)。

7.2 超参数影响

  • 学习率 α
    太大 → 震荡不收敛;太小 → 学习缓慢。典型初值 0.1~0.5,可逐步衰减。
  • 折扣因子 γ
    接近 0 时只关心即时奖励,策略短视;接近 1 时重视长期回报,需更多训练。通常 0.9~0.99。
  • 探索率 ε 及其衰减
    衰减过快导致探索不足,可能陷入次优;衰减过慢浪费计算。可配合指数衰减或线性衰减至一个小值。

7.3 常见问题及解决

  • Q 值无限膨胀:若环境没有终止状态或终止很难达到,Q 值可能变得非常大。确保折扣 γ < 1,或设置回合最大步数。
  • 表格过大:状态数量爆炸时,表格存储不现实,需过渡到函数近似方法(如 DQN),这已超出本入门范围。

8. Q-Learning 的变体与进阶方向

掌握基础表格 Q-Learning 后,你会发现它本身是一个框架,可以衍生出强大的变体:

  • SARSA(State-Action-Reward-State-Action):同属时序差分,但是在线策略,更新时使用下一步实际选择的动作的 Q 值,而不是最大值。学习曲线更平滑,但倾向于学习更保守的策略。
  • Double Q-Learning:解决 Q-Learning 对 Q 值过高估计的问题,使用两个 Q 表互相纠偏。
  • 期望 SARSA:使用期望值代替最大值,降低方差。

当状态空间连续或巨大时,深度 Q 网络(DQN)用神经网络替换表格,并以经验回放和固定目标网络增强稳定性,成为现代强化学习的基石。


9. 总结与思考

Q-Learning 的优雅在于仅通过与环境交互,并反复运用时序差分公式,就能在表格中雕琢出最优动作价值。它不需要任何先验动力学模型,是所有无模型强化学习的起点。

现在,你应当已经理解:

  • 时序差分如何让学习即时发生,无需等待回合结束。
  • 表格 Q-Learning 的完整更新规则与算法步骤。
  • 探索-利用问题与 ε-贪婪策略的实践。
  • 算法收敛的核心条件与调参思路。

建议立刻动手实现一个简单的表格 Q-Learning 解决小规模迷宫或 Cliff Walking 问题。当你亲眼看到 Q 表一步步从随机走向有序,强化学习的魅力将真正变得触手可及。如果这篇教程帮助你理解了 Q-Learning,请继续深入探索函数近似方法,将学习能力扩展到更复杂的世界。