强化学习 Q-Learning 入门

FreeGuideOnline 15阅读 2026-07-09

强化学习 Q-Learning 入门

强化学习是机器学习的一个重要分支,它让智能体在环境中通过试错来学习最优行为策略。Q-Learning 是其中最经典、最易理解的算法之一。本教程将从零开始,带你理解 Q-Learning 的核心思想、数学原理,并通过一个手动计算的例子,让你彻底掌握它。

强化学习基本概念

在深入 Q-Learning 之前,我们先了解强化学习的四要素:

  • 智能体(Agent):做出决策的实体,比如游戏角色、机器人。
  • 环境(Environment):智能体所处的外部系统,提供状态和反馈。
  • 状态(State, S):环境在某一时刻的描述,比如棋盘的布局。
  • 动作(Action, A):智能体在当前状态下可以采取的行为。

智能体在环境中执行动作,环境会返回:

  • 奖励(Reward, R):一个标量数值,表示动作的好坏,目标是最大化长期累积奖励。
  • 新状态(Next State, S’):执行动作后环境转移到的新状态。

这个交互过程可以用一个循环表示:
观察状态 → 选择动作 → 获得奖励并跳转新状态 → 重复

马尔可夫决策过程(MDP)

Q-Learning 建立在马尔可夫决策过程(Markov Decision Process)之上。MDP 的“马尔可夫”性质是指:下一个状态只依赖于当前状态和动作,与历史状态无关。一个 MDP 由五元组 (S, A, P, R, γ) 定义:

  • S:有限的状态集合
  • A:有限的动作集合
  • P:状态转移概率 P(s' | s, a),即执行动作后进入某个新状态的概率
  • R:奖励函数,当前状态 s 下执行动作 a 可能得到的奖励,通常记作 R(s,a)
  • γ(gamma):折扣因子,0 ≤ γ ≤ 1,用于平衡即时奖励和未来奖励的重要性

Q 值:状态-动作价值

Q-Learning 的核心是一个称为 Q 表(Q-table) 的查询表,它存储了每一个“状态-动作对”的质量评价,即 Q 值
Q(s, a) 表示在状态 s 下采取动作 a,并从此之后都按照最优策略行动,能获得的期望累积折扣奖励

如果我们知道了所有状态-动作对的最佳 Q 值,就可以在任意状态下直接选择 Q 值最高的动作,这就是最优策略。

贝尔曼方程与 Q-Learning 更新规则

最优 Q 值满足贝尔曼最优方程:

Q*(s, a) = E[ R(s,a) + γ * max_a' Q*(s', a') ]

Q-Learning 使用这个方程进行时间差分(Temporal Difference)学习。每当我们从经验中获得一个转换 (s, a, r, s') 时,就按以下规则更新 Q 值(学习率 α):

Q(s, a) ← Q(s, a) + α [ r + γ * max_{a'} Q(s', a') - Q(s, a) ]

让我们拆解这个公式:

  • r + γ * max_a' Q(s', a') 是“TD 目标”——对 Q(s,a) 的一个更好的估计,它结合了立即奖励和对下一状态最优 Q 值的折扣估计。
  • r + γ * max_a' Q(s', a') - Q(s, a) 是“TD 误差”——当前估计与目标之间的差距。
  • α 控制这次更新多大程度上接受这个新信息(α=1 表示完全用新目标替换旧值,α=0 表示不学习)。

关键点:更新时我们使用了 max 操作,这意味着 Q-Learning 直接逼近最优 Q 值,而不管当前智能体实际执行什么策略(off-policy 学习)。这使得探索策略可以独立于学习策略。

探索与利用的平衡

Q-Learning 需要智能体收集足够多样的环境交互数据。如果总是选择当前 Q 表中最高的动作(贪婪策略),可能永远发现不了更好的状态。这就产生了**探索(Exploration)与利用(Exploitation)**的困境。

最常见的解决方案是 ε-贪婪策略(ε-greedy)

  • 以概率 ε 随机选择动作(探索)
  • 以概率 1-ε 选择 Q 值最大的动作(利用)

通常在训练开始时设置较大的 ε(例如 0.9),随着训练进行逐渐减小,让智能体后期更偏向于利用已学知识。

Q-Learning 算法流程

假设环境是离散的,状态和动作数量有限,可以维护一个 Q 表。算法步骤如下:

  1. 初始化 Q 表:对所有 s∈S, a∈A,设置 Q(s, a) 为 0(或随机小值)。
  2. 对于每一轮(episode):
    • 初始化状态 s(环境的起始状态)。
    • 重复直到本轮结束:
      • 根据当前状态 s,使用 ε-贪婪策略选择动作 a。
      • 执行动作 a,观察奖励 r 和新状态 s'。
      • 更新 Q 表:Q(s,a) ← Q(s,a) + α [ r + γ * max_a' Q(s', a') - Q(s,a) ]。
      • 将状态转移至 s'。
  3. 重复多轮,直到 Q 表收敛或达到预设轮次。

一个手工计算的例子:网格世界

假设一个简单的 1×3 网格,状态编号为 0, 1, 2。

  • 状态 2 是目标,到达后获得奖励 +1 并结束。
  • 每个状态可执行动作:左(0)或右(1)。
  • 如果移动会导致出界(如在状态 0 向左),则停留在原地,并得到奖励 -1。
  • 其他正常移动奖励为 0。
  • 折扣因子 γ = 0.9,学习率 α = 1(完全替换)。

初始化 Q 表全为 0。状态 2 是终止态,无动作,不再更新。

第一次更新(假设起始在状态 1,随机选择动作右)

  • 当前 s = 1,a = 右 → 执行后 s' = 2,r = +1(到达目标)。
  • 目标公式:r + γ * max_a' Q(2, a') = 1 + 0.9 * 0 = 1。
  • Q(1, “右”) 更新为 0 + 1 * (1 - 0) = 1。
  • Q 表:Q(1,右)=1,其余 0。

第二次更新(起始在状态 0,选择动作右)

  • s = 0,a = 右 → s' = 1,r = 0。
  • max_a' Q(1, a') = max(0(左), 1(右)) = 1。
  • TD 目标 = 0 + 0.9 * 1 = 0.9。
  • 更新 Q(0,右) = 0 + 1*(0.9 - 0) = 0.9。
  • Q 表现在:Q(0,右)=0.9,Q(1,右)=1。

第三次更新(起始在状态 0,选择动作左)

  • a = 左,出界,s' = 0(留在原地),r = -1。
  • max_a' Q(0, a') = max(0(左),0.9(右)) = 0.9。
  • TD 目标 = -1 + 0.9*0.9 = -0.19。
  • Q(0,左) 更新为 0 + 1 * (-0.19 - 0) = -0.19。

继续迭代,Q 表最终会传递奖励,形成正确的值分布:从状态 0 向右走 Q 值高,向左则低。最终智能体将学会在状态 0 和 1 都选择右移,从而以最短路径到达目标。

参数选择指南

  • 学习率 α:通常设为 0.1 至 0.5。环境随机性强时建议较小值,确定性环境可用较大值(甚至 1)。
  • 折扣因子 γ:越接近 1,智能体越看重未来奖励;越接近 0,越短视。典型值 0.9~0.99。
  • ε 衰减:可以先大后小,例如从 1.0 线性衰减到 0.01。

从简单 Q 表到深度 Q 网络

当状态空间巨大(如围棋、视频游戏画面)时,无法再维护 Q 表。深度 Q 网络(DQN) 使用神经网络代替 Q 表,输入状态,输出所有动作的 Q 值。Q-Learning 的更新规则就成了神经网络的损失函数。理解 Q-Learning 是掌握 DQN 等现代强化学习算法的基石。

小结

Q-Learning 是一种无模型、离线策略的强化学习算法,通过反复更新状态-动作价值表,逐步逼近最优策略。关键要点回顾:

  • 核心公式:Q(s,a) ← Q(s,a) + α [ r + γ max Q(s',a') - Q(s,a) ]
  • 使用 ε-贪婪策略解决探索-利用权衡
  • 适合离散状态和动作空间,简单有效
  • 是众多高级方法的理论基础

现在你已经有了 Q-Learning 的完整知识框架,接下来可以在 Gym 的 FrozenLake 或 Taxi 环境中动手实现,巩固理解。