从贝尔曼公式到Q-learning:强化学习核心算法实战解析(附Python代码)
如果你已经对概率论和编程有了初步了解,并且对智能体如何“学会”决策感到好奇,那么这篇文章正是为你准备的。强化学习常常给人一种“黑箱”或“玄学”的感觉,尤其是当各种算法名称——蒙特卡洛、时序差分、Q-learning——扑面而来时,很容易迷失在细节里。但究其根本,这些算法的核心思想都源于几个优雅的数学公式,它们像一条清晰的线索,将看似分散的知识点串联起来。
本文的目标,就是带你亲手握住这条线索。我们将从最基础的贝尔曼公式出发,理解它如何描述智能体对未来的“估值”;接着,我们会看到两种基于此公式的经典学习范式:蒙特卡洛方法和时序差分方法。最后,我们将聚焦于Q-learning,这个将时序差分思想与最优价值函数结合起来的强大算法。整个过程,我们将结合一个经典的“网格世界”案例,用Python代码一步步实现,并重点剖析TD误差这个核心概念——它不仅是数学上的精巧设计,更是代码中驱动学习过程的关键变量。无论你是希望夯实理论基础,还是想避开实现中的常见陷阱,这篇文章都将提供一条从原理到实践的完整路径。
1. 基石:理解贝尔曼公式与价值函数
在强化学习中,智能体(Agent)的目标是在与环境(Environment)的交互中,学会一个能最大化长期累积奖励的策略。为了评估策略的好坏,我们需要一个衡量标准,这就是价值函数。价值函数回答了这样一个问题:“从当前状态出发,遵循某个策略,我未来平均能获得多少回报?”
1.1 状态价值与贝尔曼期望方程
我们首先定义状态价值函数 $v_{\pi}(s)$,它表示在策略 $\pi$ 下,从状态 $s$ 出发所能获得的期望回报(Return)。回报 $G_t$ 是从时刻 $t$ 开始的未来奖励的折扣和: $$ G_t = R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} + ... $$ 其中 $\gamma$ 是折扣因子,介于0和1之间,它决定了未来奖励的现值。$\gamma$ 越接近0,智能体越“短视”;越接近1,则越“远视”。
那么,$v_{\pi}(s)$ 就是 $G_t$ 在策略 $\pi$ 下的期望值: $$ v_{\pi}(s) = \mathbb{E}_{\pi}[G_t | S_t = s] $$
贝尔曼期望方程 揭示了当前状态价值与其后续状态价值之间的递归关系。它的核心思想是:当前状态的价值,等于即时奖励,加上所有可能的下一个状态的折扣价值的期望。
用公式表达如下: $$ v_{\pi}(s) = \sum_{a} \pi(a|s) \sum_{s', r} p(s', r|s, a) \big[ r + \gamma v_{\pi}(s') \big] $$
这个方程是理解几乎所有强化学习算法的起点。它告诉我们,要计算一个状态的价值,不需要真的模拟完整个未来,只需要知道“一步之后”会发生什么(由模型 $p(s', r|s, a)$ 描述)以及后续状态的价值。这为迭代求解价值函数提供了可能。
提示:贝尔曼方程是一个不动点方程。求解策略 $\pi$ 下的价值函数 $v_{\pi}$,本质上就是寻找一个函数,使得将其代入方程两边后等式成立。这启发了像策略评估这样的迭代算法。
1.2 动作价值与最优性原理
很多时候,我们更关心在某个状态下采取特定动作的价值,这引出了动作价值函数 $q_{\pi}(s, a)$: $$ q_{\pi}(s, a) = \mathbb{E}_{\pi}[G_t | S_t = s, A_t = a] $$ 它表示在状态 $s$ 下执行动作 $a$,然后 thereafter 遵循策略 $\pi$ 所能获得的期望回报。
强化学习的终极目标是找到最优策略 $\pi_$,使得在所有状态下的价值都最大。对应的最优状态价值函数 $v_(s)$ 和最优动作价值函数 $q_*(s, a)$ 满足 贝尔曼最优方程:
$$ \begin{aligned} v_(s) &= \max_{a} \sum_{s', r} p(s', r|s, a) \big[ r + \gamma v_(s') \big] \ q_(s, a) &= \sum_{s', r} p(s', r|s, a) \big[ r + \gamma \max_{a'} q_(s', a') \big] \end{aligned} $$
贝尔曼最优方程是许多模型无关强化学习算法(如Q-learning)的理论基石。它指出,最优策略下的状态价值等于所有可选动作中,能带来最大“即时奖励加后续最优状态折扣价值”的那个动作的价值。这是一个贪婪(greedy)原则在数学上的体现。
为了更直观地对比贝尔曼期望方程与最优方程,我们可以看下面的表格:
| 特性 | 贝尔曼期望方程 | 贝尔曼最优方程 |
|---|---|---|
| 描述对象 | 给定策略 $\pi$ 下的价值函数 | 最优策略 $\pi_*$ 下的价值函数 |
| 核心操作 | 对策略 $\pi$ 下的动作分布求期望 | 对所有可能动作取最大值 |
| 用途 | 策略评估:计算某个策略的好坏 | 策略优化:直接寻找最优策略 |
| 关联算法 | 策略迭代、蒙特卡洛预测 | 值迭代、Q-learning |
理解这两个方程的区别至关重要。前者用于“评价”一个固定策略,后者用于“寻找”最佳策略。Q-learning的巧妙之处在于,它绕开了对策略的显式评估,直接通过采样数据来逼近最优动作价值函数 $q_*(s, a)$。
2. 从理论到采样:蒙特卡洛与时序差分方法
当我们拥有环境的完整模型 $p(s', r|s, a)$ 时,可以直接通过求解贝尔曼方程来计算价值函数(动态规划方法)。但在绝大多数有趣的问题中,模型是未知或过于复杂的。这时,我们需要让智能体通过与环境的实际交互来学习,这类方法统称为模型无关方法。其中,蒙特卡洛和时序差分是两种最基本且重要的范式。
2.1 蒙特卡洛方法:等待完整的回报
蒙特卡洛方法的思路非常直接:既然价值是期望回报,那我就通过运行大量完整的“回合”,记录下从某个状态(或状态-动作对)开始实际获得的回报,然后用这些回报的样本均值来估计价值。
- 蒙特卡洛预测:给定策略 $\pi$,为

2843

被折叠的 条评论
为什么被折叠?



