第一章:第一个迷宫——当智能体醒来
你醒了。
没有光,没有声音,只有一片纯粹的、吞噬一切的黑暗。你试图感知自己的身体,却发现自己没有任何触觉、视觉或听觉——你只是一个纯粹的“存在”,悬浮在这无边的虚无中。然后,你“知道”了一些事:你是一个智能体(Agent),而这里,是一个迷宫(Environment)。但除此之外,你一无所知。你不知道迷宫的形状、大小,不知道出口在哪里,甚至不知道“出口”是什么概念。你只知道,当你有意识的那一刻,一个模糊的目标浮现出来:离开这里。这个目标如此原始,如此本能,如同新生儿对光明的追寻。
你尝试“移动”。这并非肌肉的收缩,而是一种意志的延伸——你决定向“前”方前进。在那一瞬间,环境回应了你:你“感觉”到自己的位置发生了变化,但紧接着,一阵强烈的“不适感”袭来。这不是疼痛,而是一种深层的否定信号。你明白,这是惩罚(Punishment),你撞到了墙壁。
你不甘心。调整方向,再次尝试。这一次,你移动了一段距离,没有碰到任何东西。没有不适,也没有其他感觉。这让你困惑:这是成功了吗?还是仅仅在“安全区”漫无目的地游荡?
然后,就在你几乎要放弃这个方向时,一股暖流般的信息涌入你的意识。明亮、积极、令人愉悦——这是奖励(Reward)。你“知道”了:你找到了出口。
这个过程,就是强化学习的全部起点。在你作为智能体醒来的这一刻,五个最核心的概念已悄然奠定:Agent(你)、Environment(迷宫)、State(你当前的位置和感知)、Action(移动)、Reward(出口的正奖励,墙壁的负奖励)。而将它们编织在一起的,是一条永不停歇的循环:观察状态,选择动作,执行动作,接收奖励和新状态,再观察,再选择……
这看似简单的循环,却是智能体从混沌中诞生的全部密码。更深刻的是,你立刻面临一个根本性的矛盾:是继续探索未知的方向,可能撞墙(短期惩罚),也可能发现新出口(长期奖励)?还是回到刚刚找到出口的位置,重复那条已知的安全路径(短期奖励)?探索(Exploration)还是利用(Exploitation)?这个选择,将贯穿你整个“迷宫征途”,乃至未来所有更宏大挑战的核心。
现在,让我们把这个故事拆解,看清它的骨骼与血肉。
**一、五元组:强化学习的“原子”**
任何一个强化学习问题,都可以抽象为五个基本元素的相互作用。理解它们,是读懂整本书的基石。
1. Agent(智能体) 你就是Agent。在第一章的迷宫里,你是一个没有预设知识、没有内置地图的空白 slate。你的唯一“资本”是:能够感知环境的状态,能够执行动作,并且有“目标”(通过奖励信号隐式定义)。Agent的核心是策略(Policy)——它是一套规则(可以是简单的“if-then”,也可以是复杂的神经网络),决定了在给定状态下选择哪个动作。最初,你的策略是“随机”,但很快,你会学会 smarter。
2. Environment(环境) 迷宫是Environment。它独立于Agent存在,有自己的规则和动力学。环境接收Agent的动作,根据自身规则(例如:网格移动规则、障碍物分布)更新自身状态,并返回奖励和新的感知给Agent。环境是Agent的“世界”,也是它所有经验的来源。在更复杂的场景中,环境可能是一个股票市场、一个机器人物理躯体,或是整个围棋棋盘。
3. State(状态) 状态是环境在某一时刻的具体快照。在简单迷宫中,状态可能就是你的坐标 (x, y)。在围棋中,状态是当前棋盘上所有黑白子的布局。状态是Agent做决策的依据。一个关键概念是马尔可夫性(Markov Property):当前状态包含了做未来决策所需的所有历史信息。如果状态s包含了足够信息,使得未来演化与过去无关,那么s就是一个充分状态。我们的迷宫状态天然满足马尔可夫性——知道当前位置,就知道下一步可能的结果,无需知道“如何到达这里”的历史。
4. Action(动作) 动作是Agent可以执行的操作。在迷宫中,动作通常是离散的:上、下、左、右。在机器人控制中,动作可能是连续的电机扭矩。动作空间(Action Space)的结构(离散或连续)深刻影响解决问题的算法选择。
5. Reward(奖励) 奖励是环境对Agent动作的即时数值反馈。它是强化学习问题的“指挥棒”,定义了什么是“好”,什么是“坏”。找到出口:+10(大正奖励);撞墙:-1(小负奖励);每走一步:-0.01(微小负奖励,鼓励效率)。奖励函数(Reward Function)的设计是强化学习工程中最关键也最困难的艺术之一。一个设计不当的奖励,会让Agent学会钻空子(例如,为了获得“找到出口”奖励而卡在出口格反复进出,而不是真正离开迷宫)。
这五个元素构成了一个马尔可夫决策过程(Markov Decision Process, MDP) 的框架。我们的迷宫,就是一个最简单的MDP实例。下面这个图展示了它们之间的动态交互:
```mermaid graph LR A[Agent] -- 选择动作 --> E[Environment] E -- 执行动作, 更新状态 --> S[新状态] E -- 计算奖励 --> R[奖励] S & R -- 反馈 --> A ```
**二、交互循环:智能体的“呼吸”**
强化学习不是一次性的“输入-输出”,而是一个持续的、时间展开的交互循环。我们用轨迹(Trajectory) 或 episodes(回合) 来描述一次完整的交互序列:
`状态 s₀ → 动作 a₀ → 奖励 r₁, 新状态 s₁ → 动作 a₁ → 奖励 r₂, 新状态 s₂ → … → 终止`
在迷宫中,一个episode从随机初始位置开始,到找到出口(或撞墙太多次)结束。Agent的目标,不是最大化单步奖励,而是最大化累积奖励(Cumulative Reward),通常用回报(Return) $G_t$ 表示: $$G_t = R_{t+1} + R_{t+2} + R_{t+3} + ...$$
但未来的奖励应该打折扣,因为“今朝有酒今朝醉”是生物本能。所以我们引入折扣因子(Discount Factor) $\gamma$(0 ≤ γ ≤ 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}$$
当 $\gamma=0$ 时,Agent是“短视”的,只关心即时奖励。当 $\gamma$ 接近1时,Agent是“有远见”的,重视长期收益。这个公式是强化学习理论的核心支柱之一,它将所有未来的不确定性,压缩成一个可计算的期望值。
**三、探索与利用:智能体的“青春期叛逆”**
回到你刚醒来时的困境。假设你已经偶然发现了一条通往出口的路径。现在,站在一个岔路口,一边是通往已知出口的“安全路径”(利用),另一边是通往未知区域的“可能捷径”(探索)。你怎么选?
- **利用(Exploitation)**:选择当前认为最好的动作。走安全路径,立刻获得奖励,效率高。但可能错过更短的路径。
- **探索(Exploration)**:尝试非当前最优的动作。走未知路,可能撞墙(立即惩罚),也可能发现一条更短的直达出口路径(巨大长期奖励)。但代价是短期的效率损失。
这个矛盾是强化学习的内在张力。没有探索,Agent可能永远困在次优解(比如,只学会走一条较长的固定路径,而不知道有近路)。没有利用,Agent永远在随机乱撞,无法收敛到任何有效策略。
在实践中,我们通过ε-贪婪(ε-greedy) 策略来平衡:以概率 ε 随机探索(所有动作等概率),以概率 1-ε 选择当前认为最优的动作(利用)。ε 通常从高(如0.9,大量探索)逐渐衰减到低(如0.01,主要利用)。这模拟了生物学习的过程:幼年时充满好奇(高探索),成年后更依赖经验(高利用)。
一个生动的例子是多臂赌博机(Multi-armed Bandit) 问题。想象你有多个老虎机拉杆(动作),每个拉杆背后有一个固定的(未知的)期望奖励。你的目标是通过有限次拉动,最大化总奖励。每次选择哪个拉杆,就是一次探索与利用的抉择。总是拉那个目前平均奖励最高的杆(利用),可能错过其他真正的大奖杆(探索不足)。花太多时间尝试所有杆(过度探索),又会浪费本该获奖的机会。这是强化学习最简化的原型,剥离了状态转移的复杂性,纯粹聚焦于动作价值的估计与探索。
**四、价值函数:给“状态”和“动作”打分**
Agent如何知道哪个状态好,哪个动作好?它需要一套评估体系,这就是价值函数(Value Function)。
- **状态价值函数 $V_\pi(s)$**:在策略 $\pi$ 下,从状态 $s$ 开始,所能获得的期望回报。它回答:“如果我身处状态s,并从此遵循策略π行动,我未来平均能获得多少总奖励?” 一个状态的价值高,意味着它通向奖励的可能性大。
- **动作价值函数 $Q_\pi(s, a)$**:在状态 $s$ 下,先执行动作 $a$,然后遵循策略 $\pi$,所能获得的期望回报。它回答:“如果我现在在状态s,并立即执行动作a,我未来平均能获得多少总奖励?” 这是更实用的函数,因为它直接评价具体动作。
我们的目标是找到最优策略 $\pi^*$,使得从任何状态开始的期望回报最大化。对应的最优价值函数 $V^*(s)$ 和 $Q^*(s, a)$ 满足贝尔曼最优方程(Bellman Optimality Equation):
$$V^*(s) = \max_a \sum_{s'} P(s'|s, a) [R(s, a, s') + \gamma V^*(s')]$$ $$Q^*(s, a) = \sum_{s'} P(s'|s, a) [R(s, a, s') + \gamma \max_{a'} Q^*(s', a')]$$
这些方程是强化学习的“牛顿定律”。它们将当前状态的价值,递归地定义为“即时奖励”加上“下一个状态最优价值”的期望。$P(s'|s, a)$ 是状态转移概率,$R(s, a, s')$ 是奖励函数。在已知模型(即知道所有 $P$ 和 $R$)的情况下,我们可以用动态规划(Dynamic Programming) 求解。但在大多数现实问题(如我们的迷宫)中,模型是未知的,我们需要从交互数据中直接学习价值函数或策略——这就是无模型强化学习(Model-free RL) 的领域,也是本书后续章节的核心。
**五、从随机游走到学习:第一个简单算法**
在你最初的随机移动中,你其实在进行一种最朴素的探索。但如何从经验中学习呢?一个直接的想法是:记录在每个状态(或状态-动作对)下,你实际获得的回报,然后用平均值来估计其价值。这就是蒙特卡洛方法(Monte Carlo, MC)。
例如,你完成了一个episode,轨迹是:s₀, a₀, r₁, s₁, a₁, r₂, s₂, …, s_T(终止)。对于轨迹中每个状态s_t,你可以计算其实际回报G_t。然后,更新你对V(s_t)的估计:$V(s_t) \leftarrow V(s_t) + \alpha (G_t - V(s_t))$,其中 $\alpha$ 是学习率。多次episode后,平均值会收敛到真实价值。
但MC方法必须等到episode结束才能学习,且对每个状态只更新一次。更强大的是时序差分学习(Temporal Difference, TD),特别是TD(0)。它不需要等待episode结束,每走一步就能学习,并且是“自举(bootstrapping)”的——用当前估计更新当前估计: $$V(s_t) \leftarrow V(s_t) + \alpha [r_{t+1} + \gamma V(s_{t+1}) - V(s_t)]$$
括号中的项 $r_{t+1} + \gamma V(s_{t+1}) - V(s_t)$ 称为TD误差。它衡量了“预测”与“目标”的差距。TD学习兼具MC的样本效率和DP的在线学习能力,是强化学习中最核心的思想之一。著名的Q-learning 算法,就是TD学习在动作价值函数Q上的应用: $$Q(s_t, a_t) \leftarrow Q(s_t, a_t) + \alpha [r_{t+1} + \gamma \max_{a} Q(s_{t+1}, a) - Q(s_t, a_t)]$$
Q-learning 的神奇之处在于:它可以在完全未知环境模型的情况下,仅通过与环境交互,学习出最优动作价值函数 $Q^*$,从而导出最优策略(在每个状态s选择使Q(s,a)最大的动作a)。你的迷宫,虽然小,但已经足以让Q-learning大显身手。
**六、实例:一个5x5网格迷宫的求解**
让我们构建一个具体的迷宫来验证这些思想。
迷宫是一个5x5网格,坐标(0,0)在左上角。Agent初始位置随机。两个出口:一个在(4,4)(奖励+10),另一个在(0,4)(奖励+10)。所有非出口格子,每走一步惩罚-0.1(鼓励找近路)。撞墙(尝试走出边界)惩罚-1,且位置不变。终止条件:到达任一出口或步数超过100。
状态空间:25个格子,每个格子是一个状态。 动作空间:4个离散动作(上、下、左、右)。 奖励函数:如上所述。
我们用Q-learning来求解。初始化所有Q(s,a)=0。设置:学习率 $\alpha=0.1$,折扣因子 $\gamma=0.9$,探索率 $\epsilon=0.2$(20%随机探索)。
模拟运行1000个episode。随着episode进行,我们观察:
1. 早期(episode 1-100):Agent大部分时间在随机乱撞,频繁撞墙,找到出口的路径曲折漫长。Q表几乎全是0或微小的负值(来自撞墙惩罚)。 2. 中期(episode 200-500):Agent开始偶然发现通往(4,4)的“右下角”路径。由于这个出口奖励高且路径相对直接,通往该区域的Q值开始上升。Agent更频繁地走向右下角。但通往(0,4)左上角出口的路径仍很少被访问,Q值很低。 3. 后期(episode 800-1000):从大多数状态出发,Agent都能直接走向(4,4)出口,因为通往它的Q值路径已被充分优化。从左上区域出发,有时仍会先走向右下(因为那是“已知”的好方向),但偶尔的探索(ε)会让它发现通往(0,4)的近路,并逐渐提升该路径的Q值。
最终,Q表会收敛到一个稳定状态。对于每个状态s,最优动作 $\pi^*(s) = \arg\max_a Q(s,a)$ 会形成清晰的策略:从任何格子,都指向离最近出口(考虑奖励和路径长度)的最优方向。例如,从(2,2)出发,可能向右下走(去(4,4)更近);从(0,0)出发,可能直接向右走(去(0,4)更近)。
我们可以将最终策略可视化。下图展示了在5x5网格上,从每个格子出发的贪婪策略箭头(指向Q值最大的动作):
```mermaid graph TD subgraph 网格状态与策略 direction LR S1[状态 (0,0): 右] --> S2[状态 (0,1): 右] S2 --> S3[状态 (0,2): 右] S3 --> S4[状态 (0,3): 右] S4 --> S5[状态 (0,4): 出口]
S6[状态 (1,0): 右] --> S7[状态 (1,1): 右下] S7 --> S8[状态 (1,2): 右下] S8 --> S9[状态 (1,3): 右下] S9 --> S10[状态 (1,4): 下]
S11[状态 (2,0): 右] --> S12[状态 (2,1): 右下] S12 --> S13[状态 (2,2): 右下] S13 --> S14[状态 (2,3): 右下] S14 --> S15[状态 (2,4): 下]
S16[状态 (3,0): 右] --> S17[状态 (3,1): 右下] S17 --> S18[状态 (3,2): 右下] S18 --> S19[状态 (3,3): 右下] S19 --> S20[状态 (3,4): 下]
S21[状态 (4,0): 右] --> S22[状态 (4,1): 右] S22 --> S23[状态 (4,2): 右] S23 --> S24[状态 (4,3): 右] S24 --> S25[状态 (4,4): 出口] end
style S5 fill:#f9f,stroke:#333 style S25 fill:#f9f,stroke:#333 ```
(注:这是一个简化的示意图,实际箭头方向由Q表决定,可能因随机初始化和超参数而略有不同,但整体会形成指向出口的“势场”。)
这个例子虽然简单,但它完整演示了强化学习的核心循环:Agent与环境交互,产生数据(状态、动作、奖励),用TD算法更新价值估计,最终导出最优策略。它没有复杂的神经网络,没有高维状态,但它的灵魂与未来击败人类围棋冠军的AlphaGo完全一致。
**七、超越网格:从离散到连续,从单 Agent 到多 Agent**
我们的迷宫是离散、确定、小规模的。现实世界的问题往往更复杂:
- **连续状态/动作空间**:机器人控制中,状态可能是关节角度、速度(连续值),动作是电机扭矩(连续值)。此时,我们不能用表格存储Q值,而必须用函数逼近器,如神经网络,这就是**深度Q网络(DQN)** 的用武之地。
- **部分可观测性**:在迷宫中,Agent可能没有全局视野,只能看到周围几格。这时状态不满足马尔可夫性,需要引入**信念状态(Belief State)** 或使用**递归神经网络(RNN)** 来记忆历史。
- **多Agent系统**:迷宫中可能不止一个Agent,它们可能合作(共同寻找出口),也可能竞争(只有一个出口)。这引入了博弈论和**多Agent强化学习(MARL)**。
- **稀疏奖励**:在巨大迷宫中,出口奖励可能极其稀疏,Agent可能在到达前获得无数步的微小负奖励,导致学习