第 19 章 强化学习(Reinforcement learning)
本章一句话:强化学习让一个智能体在环境里不断试错,靠奖励信号学会“在每个状态下该做什么动作”,目标是让长期累积奖励最大;当状态空间太大时,就用深度网络来近似其中的关键函数。
读这章的收获:理解 MDP 五要素、折扣回报、状态值/动作值与贝尔曼方程这套语言;分清动态规划、蒙特卡洛、时序差分三类表格方法;看懂 Q-learning、DQN、策略梯度(REINFORCE)、actor-critic 各自在解决什么问题;最后了解离线强化学习和决策 Transformer 的新思路。
本章速览
- 强化学习是“序贯决策”框架:智能体在环境中反复“看状态 → 选动作 → 拿奖励 → 进入新状态”,要最大化累积奖励。它本身不一定要用深度学习,但现代最强系统几乎都用深度网络做编码与决策。
- 四大固有难点:奖励稀疏(下完整盘棋才知输赢)、奖励与动作时间错位(决定性优势可能领先胜利 30 步,这叫时间信用分配问题)、环境随机(对手不固定,好动作和走运难分)、探索 vs. 利用的权衡。
- 统一语言是 MDP:用“状态、动作、转移概率、奖励、折扣因子”五要素刻画世界;用折扣回报衡量一条轨迹的长期好处;用状态值 \(v\) 和动作值 \(q\) 给状态、动作打分;二者由贝尔曼方程自洽地联系起来。
- 表格方法三家:动态规划(已知环境模型,靠自洽迭代)、蒙特卡洛(不知模型,跑大量完整回合再更新)、时序差分(边走边更新,代表是 SARSA 与 Q-learning)。
- 深度登场:状态空间一大,表格存不下,就用网络近似动作值——拟合 Q 学习,其工程化版本就是攻克 Atari 的 DQN(经验回放 + 固定目标网络)。
- 两条技术路线:先估值再定策略(Q-learning 系),或直接优化策略(策略梯度 / REINFORCE);actor-critic 把两者结合,用“评论家”估值来给“行动者”降方差、支持边走边更新。
- 离线强化学习:不能与环境交互时,只从历史数据里学;决策 Transformer 干脆把它当成序列预测问题,用监督学习的稳定性替换掉大部分 RL 机器。
19.1 马尔可夫决策过程(MDP)、回报与策略
强化学习要把“对环境的观察”映射到“动作”,并最大化一个与所获奖励相关的数值量。最常见的设定是:在一个马尔可夫决策过程(MDP)里学一个能让期望回报最大的策略。本节把这些术语逐一讲清。
可以用一个直观画面贯穿全节:一只企鹅在 4×4 的冰面上(共 16 个格子/状态)走动,有的格子有鱼(奖励 +1),有的是冰窟窿(惩罚),冰面很滑,所以它不一定走到想去的地方。
19.1.1 马尔可夫过程(Markov process)
马尔可夫过程假设世界总处于一组可能状态中的某一个。“马尔可夫”意味着:下一刻在哪个状态,只取决于当前状态,与更早的历史无关(无记忆性)。状态之间的变化由转移概率 \(Pr(s_{t+1}\mid s_t)\) 描述,即给定当前状态 \(s_t\),转移到下一状态 \(s_{t+1}\) 的概率。于是它会生成一串状态序列 \(s_1, s_2, s_3,\dots\),这串序列叫一条轨迹(trajectory) \(\tau\)。
直觉图:冰很滑,企鹅在 6 号格时,有 25% 概率分别滑向相邻的 2、5、7、10 号格——这就是一组转移概率。
19.1.2 马尔可夫奖励过程(Markov reward process)
在马尔可夫过程上加一个奖励分布 \(Pr(r_{t+1}\mid s_t)\)(处于状态 \(s_t\) 时下一步能拿到的奖励),就成了马尔可夫奖励过程。它生成的是状态与奖励交替的序列 \(s_1, r_2, s_2, r_3, s_3, r_4,\dots\)。
这里还引入了一个折扣因子 \(\gamma\in(0,1]\),用来计算时刻 \(t\) 的回报(return) \(G_t\):
\[ G_t = \sum_{k=0}^{\infty} \gamma^{k}\, r_{t+k+1}. \]
回报就是未来奖励的累积折扣和,衡量“沿着这条轨迹往后走能得到多少好处”。折扣因子小于 1,意味着近处的奖励比远处的奖励更值钱(既符合直觉,也保证无穷和收敛)。
直觉图:企鹅离鱼越近,它的回报值就越大;走到鱼跟前那一步回报最高。
19.1.3 马尔可夫决策过程(Markov decision process, MDP)
再加上“每步可以选动作”,就成了 MDP。动作 \(a_t\) 会改变转移概率,于是写成 \(Pr(s_{t+1}\mid s_t, a_t)\);奖励也可能依赖动作,写成 \(Pr(r_{t+1}\mid s_t, a_t)\)。MDP 生成的是状态、动作、奖励交替的序列:
\[ (s_1, a_1, r_2),\ (s_2, a_2, r_3),\ (s_3, a_3, r_4),\dots \]
执行动作的实体就叫智能体(agent)。这样 MDP 的五要素齐了:状态集、动作集、转移概率 \(Pr(s_{t+1}\mid s_t,a_t)\)、奖励 \(Pr(r_{t+1}\mid s_t,a_t)\)、折扣因子 \(\gamma\)。
直觉图:企鹅选“向下”,但冰滑——它有 50% 概率真的向下,剩余概率滑向其他相邻格。所以想做的动作(灰箭头)和实际走出的轨迹(橙线)常常对不上。
19.1.4 部分可观测 MDP(POMDP)
很多真实问题里,智能体看不到完整状态,只能拿到一个观测 \(o_t \sim Pr(o_t\mid s_t)\),这就是部分可观测 MDP(POMDP)。同一个观测可能对应多个真实状态,无法唯一确定状态。
直觉图:企鹅只能看到附近几格。第 3 格和第 9 格在它眼里长得一模一样,但向右走,一个掉进冰窟窿(-2),另一个吃到鱼(+3)——单看局部根本分不出来。这正是后面“为什么需要随机策略”的伏笔。
19.1.5 策略(Policy)
决定“每个状态下采取什么动作”的规则就是策略,记作 \(\pi[a\mid s]\)。它可以是:
- 确定性策略:每个状态总是选同一个动作(\(\pi[a\mid s]\) 在选中的动作上取 1,其余为 0)。
- 随机策略:对每个状态给出一个动作上的概率分布,再从中采样。随机策略有利于探索,并且在 POMDP 下往往是达到最优表现的必要条件。
此外,只看当前状态的叫平稳(stationary)策略,还依赖时间步的叫非平稳策略。
智能体与环境构成一个循环(强化学习循环):智能体根据当前状态 \(s_t\) 按策略 \(\pi[a_t\mid s_t]\) 选动作 \(a_t\) → 环境据 \(Pr(s_{t+1}\mid s_t,a_t)\) 转到新状态、据 \(Pr(r_{t+1}\mid s_t,a_t)\) 发奖励 → 把新状态和奖励传回智能体 → 智能体再选下一个动作,如此往复。
19.2 期望回报
上一节有了 MDP 和“按策略行动”的智能体。我们想挑一个能让期望回报最大的策略。本节把这个目标变精确:给每个状态 \(s_t\) 和每个状态-动作对 \(\{s_t, a_t\}\) 赋一个“值”。
19.2.1 状态值与动作值
回报 \(G_t\) 取决于起始状态和策略。由于策略、转移、奖励通常都是随机的,从同一个地方出发,每次得到的序列都不一样。所以我们关心的是期望回报。
状态值(state value),记作 \(v[s_t\mid\pi]\),是从状态 \(s_t\) 出发、之后一直按策略 \(\pi\) 行动,所能得到的平均回报:
\[ v[s_t\mid\pi] = \mathbb{E}\big[\,G_t \mid s_t, \pi\,\big]. \]
通俗说,状态值告诉你“从这里出发、照这个策略走下去,长期平均能拿多少奖励”。越靠近大奖励的状态,值越高。
动作值(action value / Q 值),记作 \(q[s_t, a_t\mid\pi]\),是在状态 \(s_t\) 先执行动作 \(a_t\)、之后再按策略 \(\pi\) 行动的期望回报:
\[ q[s_t, a_t\mid\pi] = \mathbb{E}\big[\,G_t \mid s_t, a_t, \pi\,\big]. \]
动作值正是把未来奖励和当前动作挂起钩来的量——它直接回答了时间信用分配问题。
直觉图:每个格子写一个 \(v\) 值(越近鱼越大);每个格子的四个方向各写一个 \(q\) 值(朝鱼的方向更大)。若知道各动作的 \(q\) 值,把策略改成“总选 \(q\) 最大的那个动作”即可。
19.2.2 最优策略
我们要的是让期望回报最大的策略。对 MDP(注意不是 POMDP)来说,一定存在一个确定性、平稳的最优策略,它能同时让每个状态的值都最大。对应的最优状态值函数与最优动作值函数为:
\[ v^*[s_t] = \max_{\pi}\ \mathbb{E}\big[\,G_t \mid s_t, \pi\,\big],\qquad q^*[s_t, a_t] = \max_{\pi}\ \mathbb{E}\big[\,G_t \mid s_t, a_t, \pi\,\big]. \]
反过来,如果已知最优动作值 \(q^*[s_t,a_t]\),就能贪心地导出最优策略——每个状态都选 \(q^*\) 最大的动作:
\[ \pi[a_t\mid s_t] \leftarrow \operatorname*{argmax}_{a_t}\ q^*[s_t, a_t]. \]
很多算法正是基于这个思路:交替地“估动作值”和“更新策略”(见 19.3)。
19.2.3 贝尔曼方程(Bellman equations)
我们一般并不知道某策略下的 \(v\) 和 \(q\)。但有一点是确定的:它们必须彼此自洽。这种自洽关系就是贝尔曼方程。
第一条关系:状态值是该状态各动作值的加权和,权重就是策略下选该动作的概率:
\[ v[s_t] = \sum_{a_t} \pi[a_t\mid s_t]\, q[s_t, a_t]. \]
第二条关系:一个动作的值,等于它带来的即时奖励 \(r[s_t,a_t]\),加上折扣后的后继状态值 \(v[s_{t+1}]\),而后继状态不确定,所以按转移概率加权:
\[ q[s_t, a_t] = r[s_t, a_t] + \gamma \cdot \sum_{s_{t+1}} Pr(s_{t+1}\mid s_t, a_t)\, v[s_{t+1}]. \]
把两条互相代入,就得到只关于状态值(或只关于动作值)在相邻时刻之间的贝尔曼方程:
\[ v[s_t] = \sum_{a_t} \pi[a_t\mid s_t]\Big( r[s_t,a_t] + \gamma\cdot \sum_{s_{t+1}} Pr(s_{t+1}\mid s_t,a_t)\, v[s_{t+1}] \Big), \]
\[ q[s_t, a_t] = r[s_t,a_t] + \gamma\cdot \sum_{s_{t+1}} Pr(s_{t+1}\mid s_t,a_t)\sum_{a_{t+1}} \pi[a_{t+1}\mid s_{t+1}]\, q[s_{t+1}, a_{t+1}]. \]
贝尔曼方程是众多 RL 方法的骨架。一句话概括:状态值/动作值必须自洽;因此一旦更新某一个值,就会像涟漪一样波及其它所有值——这正是后面各种迭代算法能奏效的原因。
19.3 表格型强化学习(Q-learning / SARSA)
表格型方法指不依赖函数近似、把每个状态(或状态-动作对)的值老老实实存进一张表里的方法。它们分两大阵营:
- 基于模型(model-based):直接利用 MDP 结构。若转移矩阵 \(Pr(s_{t+1}\mid s_t,a_t)\) 和奖励 \(r[s,a]\) 已知,求最优策略就是一个可用动态规划解决的优化问题;若未知,原则上可从观测到的轨迹里估计出来。(这里的“模型”指 MDP,不是机器学习模型。)
- 无模型(model-free):假设转移和奖励都未知。又细分为两族:
- 值估计:先估最优动作值函数,再在每个状态选值最大的动作当策略。
- 策略估计:用梯度下降直接估最优策略,跳过估模型、估值这些中间步骤(见 19.5)。
在每一族里又有两种采集信息的方式:蒙特卡洛方法模拟许多条完整轨迹后再改进策略;时序差分(TD)方法则在智能体穿行 MDP 的过程中就更新。
术语小贴士:轨迹是观测到的“状态-奖励-动作”序列;rollout 是模拟出来的轨迹;回合(episode)是从初始状态走到终止状态的一条完整轨迹(比如一整盘棋)。
19.3.1 动态规划(Dynamic programming)
动态规划假设我们完全知道转移和奖励结构。它把状态值初始化(通常为 0)、策略也随便初始化,然后在两步之间反复交替:
策略评估(policy evaluation):扫一遍所有状态,按贝尔曼方程更新它们的值,使之与后继状态自洽——
\[ v[s_t] \leftarrow \sum_{a_t} \pi[a_t\mid s_t]\Big( r[s_t,a_t] + \gamma\cdot \sum_{s_{t+1}} Pr(s_{t+1}\mid s_t,a_t)\, v[s_{t+1}] \Big). \]
这种“用估计去更新估计”的做法叫自举(bootstrapping)。
策略改进(policy improvement):对每个状态贪心地改选值最大的动作——
\[ \pi[a_t\mid s_t] \leftarrow \operatorname*{argmax}_{a_t}\Big( r[s_t,a_t] + \gamma\cdot \sum_{s_{t+1}} Pr(s_{t+1}\mid s_t,a_t)\, v[s_{t+1}] \Big). \]
由策略改进定理保证,这一步只会让策略变好或不变。两步反复迭代直到策略收敛。常见变体:策略迭代(评估迭代到收敛再改进)、值迭代(评估只扫一遍就改进)、异步动态规划(不必每轮系统地扫全部状态)。
直觉图:状态值从全 0、策略随机开始;几轮后值逐渐与邻居自洽、策略箭头逐渐指向高值方向;最终收敛到“企鹅绕开冰窟窿、奔向鱼”的最优策略。
19.3.2 蒙特卡洛方法(Monte Carlo methods)
蒙特卡洛方法不假设已知转移和奖励,而是靠反复采样完整轨迹积累经验。它交替地:根据经验估动作值、再根据动作值更新策略。
具体地,跑很多个回合,把每个状态-动作对之后实际观测到的回报(折扣累积奖励)做平均,作为该对的动作值估计;然后在每个状态贪心选值最大的动作:
\[ \pi[a\mid s] \leftarrow \operatorname*{argmax}_{a}\ q[s, a]. \]
这是同策略(on-policy)方法:用当前最优策略去引导智能体探索。但问题来了——没被用过的动作估不出值,也没有动力去尝试它们。解决探索的几种办法:
- 探索性起始(exploring starts):让每个状态-动作对都至少被作为起点用一次。状态多或起点不可控时不现实。
- \(\epsilon\)-贪心策略:以概率 \(\epsilon\) 随机选动作,以 \(1-\epsilon\) 选当前最优动作。\(\epsilon\) 直接权衡探索与利用。同策略方法只能在这个 \(\epsilon\)-贪心家族里找最好的,通常不是全局最优。
与之相对的是异策略(off-policy)方法:用一个会探索的行为策略 \(\pi'\)(如 \(\epsilon\)-贪心)去采集数据,却学习另一个高效的目标策略 \(\pi\)(通常是确定性的)。有的异策略方法用重要性采样来校正,有的(如下面的 Q-learning)则直接按“贪心动作”估值,哪怕实际选的不是它。
19.3.3 时序差分方法(Temporal difference, TD)
TD 方法把动态规划的自举和蒙特卡洛的采样结合起来,而且和蒙特卡洛不同,它在智能体穿行状态的过程中就更新值和策略,不必等回合结束。
SARSA(State-Action-Reward-State-Action)是同策略算法:
\[ q[s_t, a_t] \leftarrow q[s_t, a_t] + \alpha\Big( r[s_t,a_t] + \gamma\cdot q[s_{t+1}, a_{t+1}] - q[s_t, a_t] \Big), \]
其中 \(\alpha\) 是学习率,方括号里那项叫 TD 误差——衡量“当前估计 \(q[s_t,a_t]\)”与“走一步后得到的新估计 \(r[s_t,a_t]+\gamma\, q[s_{t+1},a_{t+1}]\)”之间的差距。注意它用的是实际选出的下一动作 \(a_{t+1}\)。
Q-learning 是异策略算法,唯一的区别是把下一步的值换成“在下一状态能取到的最大动作值”:
\[ q[s_t, a_t] \leftarrow q[s_t, a_t] + \alpha\Big( r[s_t,a_t] + \gamma\cdot \max_{a} q[s_{t+1}, a] - q[s_t, a_t] \Big), \]
此时每步实际怎么走由另一个行为策略 \(\pi'\) 决定,但更新目标却按贪心(最优)动作算——这正是它“异策略”的体现。两者更新都可证明是收缩映射,只要每个状态-动作对被访问无穷多次,动作值最终都会收敛。
直觉图(Q-learning 一步):企鹅从 \(s_t\) 选动作向下,没打滑,拿到奖励 0;在新状态找到最大动作值(如 0.43);据此、加上 \(\gamma=0.9\)、\(\alpha=0.1\),把原状态“向下”这个动作的值更新(如更新成 1.12)。这一更新改变了原状态的最高动作值,于是策略也随之改变。
19.4 拟合 Q 学习(DQN)
上面的表格方法都要反复遍历整个 MDP 来更新动作值,只有在状态-动作空间很小的时候才可行。但现实极少如此——光是一个棋盘就有超过 \(10^{40}\) 种合法状态,根本没法建表。
拟合 Q 学习(fitted Q-learning) 的做法:把离散的表格 \(q[s_t,a_t]\) 换成一个机器学习模型 \(q[s_t, a_t, \phi]\),此时状态用向量 \(s_t\) 表示而不再是一个索引。仿照 Q-learning,定义一个基于“相邻动作值自洽”的最小二乘损失:
\[ L[\phi] = \Big( r[s_t,a_t] + \gamma\cdot \max_{a} q[s_{t+1}, a, \phi] - q[s_t, a_t, \phi] \Big)^2, \]
对应的参数更新为:
\[ \phi \leftarrow \phi + \alpha\Big( r[s_t,a_t] + \gamma\cdot \max_{a} q[s_{t+1}, a, \phi] - q[s_t, a_t, \phi] \Big)\frac{\partial q[s_t, a_t, \phi]}{\partial \phi}. \]
它与表格 Q-learning 的关键差别是:收敛不再有保证。因为改一次参数 \(\phi\),会同时改变“目标”(那个 \(\max\) 项可能变)和“预测”\(q[s_t,a_t,\phi]\)——相当于在追一个会动的靶子,理论与实验都表明这会破坏收敛。
19.4.1 玩 Atari 游戏的深度 Q 网络(DQN)
深度网络擅长从高维状态做预测,是拟合 Q 学习里模型的天然之选。原则上它可以同时吃进状态和动作输出一个值,但实践中只吃状态、一次性输出每个动作的值。
深度 Q 网络(Deep Q-Network, DQN) 是用深度网络学会玩 Atari 2600 游戏的突破性架构:
- 状态表示:原始画面是 \(220\times160\)、每像素 128 色,先缩放到 \(84\times84\) 并只保留亮度。但单帧无法观测完整状态(比如物体速度未知),所以把最近 4 帧叠起来当 \(s_t\)。网络用三层卷积加全连接,输出该状态下每个动作的值(共 18 个动作)。
- 奖励裁剪:把分数变化裁剪为 \(-1\)/\(+1\),抹平不同游戏间分数量级差异,使同一学习率通用。
- 经验回放(experience replay):把每步的四元组 \(\langle s_t, a_t, r_{t+1}, s_{t+1}\rangle\) 都存进一个缓冲区,训练时随机采样成批。好处是样本可反复利用,并打破相邻帧之间的强相关。
- 固定目标网络:把目标里的参数冻结为 \(\phi^-\),只周期性更新,让网络不再追逐移动靶,从而抑制震荡——
\[ \phi \leftarrow \phi + \alpha\Big( r[s_t,a_t] + \gamma\cdot \max_{a} q[s_{t+1}, a, \phi^-] - q[s_t, a_t, \phi] \Big)\frac{\partial q[s_t, a_t, \phi]}{\partial \phi}. \]
靠这些技巧加 \(\epsilon\)-贪心,DQN 用同一套架构(每个游戏分别训练)在 49 个游戏上达到了职业测试员的水平,部分游戏甚至超越人类。代价是极其费数据:每个游戏约需 38 天的游玩经验。在“蒙特祖玛的复仇”这类奖励稀疏、多屏画面差异大的游戏上则几乎没进展。
19.4.2 双 Q 学习与双深度 Q 网络
Q-learning 的一个隐患是更新里的 \(\max\) 操作会让动作值系统性偏高。设想两个平均奖励相同的动作,一个确定、一个随机:随机那个有大约一半时间高于均值,恰好被 \(\max\) 选中,导致其动作值被高估。网络输出的随机误差、随机初始化也会引发同样的偏差。
根源在于:同一个网络既负责选目标(靠 \(\max\)),又负责更新值。双 Q 学习(Double Q-learning) 同时训练两个模型 \(q_1, q_2\) 来解耦:
\[ q_1[s_t, a_t] \leftarrow q_1[s_t, a_t] + \alpha\Big( r[s_t,a_t] + \gamma\cdot q_2\big[s_{t+1}, \operatorname*{argmax}_{a} q_1[s_{t+1}, a]\big] - q_1[s_t, a_t] \Big), \]
\[ q_2[s_t, a_t] \leftarrow q_2[s_t, a_t] + \alpha\Big( r[s_t,a_t] + \gamma\cdot q_1\big[s_{t+1}, \operatorname*{argmax}_{a} q_2[s_{t+1}, a]\big] - q_2[s_t, a_t] \Big). \]
一个网络选出贪心动作,另一个网络评估该动作的值,从而把“选目标”和“目标本身”分开,缓解高估。实践中每个新四元组随机分给其中一个模型去更新。把它用到深度网络上,就是双深度 Q 网络(Double DQN)。
19.5 策略梯度方法(Policy gradient)
Q-learning 是“先估动作值,再据此定策略”。基于策略的方法反其道而行:直接学一个带可训练参数 \(\theta\) 的随机策略 \(\pi[a_t\mid s_t, \theta]\),它把状态映射到动作上的分布,可从中采样。虽然 MDP 总存在确定性最优策略,但用随机策略有三大好处:
- 天然有利于探索——不必每步都死磕当前最优动作。
- 损失随策略参数平滑变化,于是即便奖励是离散的也能用梯度下降(类似分类里用最大似然让正确类概率平滑增大)。
- MDP 假设常常不成立(现实多是部分可观测)。若两个位置看起来一样但附近奖励结构不同,随机策略能让智能体先尝试不同动作,直到歧义被消除。
19.5.1 梯度更新的推导
考虑一条轨迹 \(\tau=[s_1,a_1,s_2,a_2,\dots,s_T,a_T,s_{T+1}]\)。它出现的概率同时取决于状态转移和当前策略:
\[ Pr(\tau\mid\theta) = Pr(s_1)\prod_{t=1}^{T} \pi[a_t\mid s_t, \theta]\, Pr(s_{t+1}\mid s_t, a_t). \]
我们要让“轨迹回报 \(r[\tau]\)(整条轨迹奖励之和)的期望”最大,并用梯度上升来更新 \(\theta\)。关键技巧是:要把积分换成对实际采到的轨迹求和,于是给被积函数同乘同除 \(Pr(\tau\mid\theta)\),再用似然比恒等式 \(\frac{\partial\log f}{\partial z}=\frac{1}{f}\frac{\partial f}{\partial z}\),得到非常漂亮的更新式:
\[ \nabla_\theta J = \mathbb{E}_\tau\big[\nabla_\theta \log Pr(\tau\mid\theta)\, r[\tau]\big] \approx \frac{1}{I}\sum_{i=1}^{I} \frac{\partial \log Pr(\tau_i\mid\theta)}{\partial \theta}\, r[\tau_i]. \]
它的含义很直白(见“策略梯度”直觉图):朝着提高高回报轨迹出现概率的方向调参,并按出现概率做归一化以补偿“有些轨迹本就更常见”。最大的更新来自那些罕见但回报很高的轨迹;已经常见又回报高的轨迹则不需要怎么改。
再把 \(\log Pr(\tau\mid\theta)\) 展开,只有策略那一项依赖 \(\theta\),状态转移项全部消失:
\[ \theta \leftarrow \theta + \alpha\cdot \frac{1}{I}\sum_{i=1}^{I}\sum_{t=1}^{T} \frac{\partial \log \pi[a_{it}\mid s_{it}, \theta]}{\partial \theta}\, r[\tau_i]. \]
这有个重要副产品:更新式里不含转移概率,因此它并不假设马尔可夫时间演化。进一步还能证明,时刻 \(t\) 之前的奖励不影响 \(t\) 时刻的更新,于是回报里只需保留 \(t\) 之后的部分。
直观上,这与策略梯度定理常见的写法 \(\nabla J = \mathbb{E}[\nabla \log \pi(a\mid s)\, Q(s,a)]\) 一致——即“动作对数概率的梯度”乘以“该动作的回报/价值”的期望(本书正文一律以轨迹回报 \(r[\tau]\) 来表述)。
19.5.2 REINFORCE 算法
REINFORCE 是利用上述结论并加入折扣的早期策略梯度算法,是一种蒙特卡洛方法。对离散动作,策略可用一个神经网络 \(\pi[s,\theta]\) 实现:输入状态、每个动作一个输出,经 softmax 变成动作分布再采样。
对每个回合 \(i\) 的每个时刻 \(t\),先算从 \(t\) 起的经验折扣回报:
\[ r[\tau_{it}] = \sum_{k=t+1}^{T} \gamma^{\,k-t-1}\, r_{i,k}, \]
再据此更新参数:
\[ \theta \leftarrow \theta + \alpha\cdot \frac{\partial \log \pi_{a_{it}}[s_{it}, \theta]}{\partial \theta}\, r[\tau_{it}] \qquad \forall\, i,t. \]
19.5.3 基线(Baselines)
策略梯度的通病是方差大,需要很多回合才能得到稳定的梯度估计。一个降方差的办法是从回报里减去一个基线 \(b\):
\[ \theta \leftarrow \theta + \alpha\cdot \frac{1}{I}\sum_{i=1}^{I}\sum_{t=1}^{T} \frac{\partial \log \pi_{a_{it}}[s_{it}, \theta]}{\partial \theta}\, \big(r[\tau_{it}] - b\big). \]
只要 \(b\) 不依赖动作,它的引入就不改变期望(梯度的期望不变),却能消掉那些与“好坏无关的因素”带来的方差——这是控制变量法的一个特例。
直觉图:想估 \(\mathbb{E}[a]\),样本少时估计抖动大;若有另一个与 \(a\) 同向变动、均值为 0、方差相同的 \(b\),那么 \(a-b\) 的方差远小于 \(a\),但 \(\mathbb{E}[a-b]=\mathbb{E}[a]\) 不变——于是得到一个更稳的估计。
理论上存在使方差最小的最优 \(b\),但实践中常简单取所有轨迹回报的平均 \(b=\frac{1}{I}\sum_i r[\tau_i]\),用来抵消“这批轨迹恰好都经过高回报区域、无论做什么动作回报都偏高”所引入的方差。
19.5.4 与状态有关的基线
更好的选择是让基线依状态而变 \(b[s_{it}]\):
\[ \theta \leftarrow \theta + \alpha\cdot \frac{1}{I}\sum_{i=1}^{I}\sum_{t=1}^{T} \frac{\partial \log \pi_{a_{it}}[s_{it}, \theta]}{\partial \theta}\, \big(r[\tau_{it}] - b[s_{it}]\big). \]
这样补偿的是“有些状态整体回报本就比别的状态高”所带来的方差。一个合理的取法就是用状态值 \(b[s]=v[s]\)。此时“实际回报 − 基线”这个差就叫优势(advantage)估计。在蒙特卡洛设定下,可以再用一个神经网络 \(v[s,\phi]\) 去拟合状态值(最小二乘损失拟合观测回报)。这正好引出下一节的 actor-critic。
19.6 行动者-评论家方法(Actor-critic)
actor-critic 算法是时序差分版的策略梯度:它能在每一步就更新策略网络参数,而不像蒙特卡洛的 REINFORCE 那样必须等回合结束。
代价是:TD 设定下我们拿不到真正的未来奖励之和 \(r[\tau_t]\)。于是 actor-critic 用“当前奖励 + 折扣后的下一状态值”来近似它(即用一个值网络 \(v[\cdot,\phi]\) 自举):
\[ r[\tau_{it}] \approx r_{i,t+1} + \gamma\cdot v[s_{i,t+1}, \phi]. \]
代入策略梯度更新,得到行动者(actor)的更新:
\[ \theta \leftarrow \theta + \alpha\cdot \frac{1}{I}\sum_{i=1}^{I}\sum_{t=1}^{T} \frac{\partial \log Pr(a_{it}\mid s_{it}, \theta)}{\partial \theta}\, \big( r_{i,t+1} + \gamma\cdot v[s_{i,t+1}, \phi] - v[s_{i,t}, \phi] \big). \]
括号里那项正是 TD 误差 / 优势估计。同时,评论家(critic)的参数 \(\phi\) 通过自举用如下损失更新:
\[ L[\phi] = \sum_{i=1}^{I}\sum_{t=1}^{T} \big( r_{i,t+1} + \gamma\cdot v[s_{i,t+1}, \phi] - v[s_{i,t}, \phi] \big)^2. \]
预测策略 \(Pr(a\mid s_t)\) 的网络 \(\pi[s_t,\theta]\) 是行动者;预测状态值的网络 \(v[s_t,\phi]\) 是评论家——“评论家”给“行动者”的每个动作打分以降方差。常常用同一个网络带两套输出头同时充当两者。要补充的是:尽管 actor-critic 理论上能每步更新,实践中很少这么做,通常先攒一批经验再更新策略。
19.7 离线强化学习(Offline RL)
与环境交互是强化学习的核心,但有些场景不能把一个生手智能体放进环境乱试:要么乱动很危险(自动驾驶),要么数据采集昂贵耗时(真金白银做金融交易)。
不过这些场景往往有人类历史数据可用。离线强化学习(offline / batch RL) 的目标是:仅通过观察过去的序列 \(s_1,a_1,r_2,s_2,a_2,r_3,\dots\),学会在未来回合里采取高奖励的动作,而全程不与环境交互。它不同于模仿学习——模仿学习既看不到奖励、目标也只是复刻历史智能体而非超越它。
虽然也有基于 Q-learning 和策略梯度的离线方法,但这个范式开启了新可能:把它当成序列学习问题——给定状态、奖励、动作的历史,预测下一个动作。决策 Transformer(decision transformer) 就用 Transformer 解码器框架来做这件事。
但目标是“依据未来奖励来选动作”,而标准的 \(s,a,r\) 序列没有未来信息。于是决策 Transformer 把奖励 \(r_t\) 换成待获回报(returns-to-go) \(R_{t:T}=\sum_{t'=t}^{T} r_{t'}\)(从当前到结束实际观测到的奖励之和)。其余就和标准 Transformer 解码器很像:状态、动作、待获回报各自经学习到的映射变成定长嵌入(Atari 的状态可用类似 DQN 的卷积网编码,动作和待获回报像词嵌入那样学),用带掩码的自注意力和位置嵌入训练,每一步预测下一个动作。
推理时的难题:此时还不知道未来回报。做法是:第一步填入“期望的总回报”(如赢一局所需的总分),每收到一份奖励就从中递减。
决策 Transformer 还能用在线经验微调、随时间持续学习。它的最大魅力在于:甩掉了大部分 RL 机器及其不稳定性,换成稳定的标准监督学习;Transformer 还能从海量数据中学习、跨长时间上下文整合信息(让时间信用分配更可控)。这代表了强化学习一个引人入胜的新方向。
本章小结
强化学习是面向 MDP 等系统的序贯决策框架。本章先用 MDP 把世界形式化(状态、动作、转移、奖励、折扣因子),用折扣回报度量长期好处,用状态值/动作值打分,并用贝尔曼方程把它们自洽地联系起来。
表格方法分三类:动态规划(已知环境模型,靠自洽迭代求解)、蒙特卡洛(跑多个完整回合后再改值与策略)、时序差分(边走边更新,代表 SARSA 与 Q-learning)。当状态空间过大时,用深度网络近似动作值,就是拟合 Q 学习;其工程化版本 DQN 借助经验回放和固定目标网络,在 Atari 上达到人类水平,双 DQN 进一步缓解 \(\max\) 带来的高估。
策略梯度方法不去给动作估值,而是直接优化策略,天然产出随机策略(在部分可观测环境里尤为重要);其更新噪声大,于是引入基线/优势降方差。actor-critic 把策略梯度和值估计结合,用评论家的 TD 估计支持逐步更新。最后,离线强化学习在无法与环境交互时只从历史数据学习,决策 Transformer 用序列建模这一新思路,把强化学习的不稳定换成监督学习的稳健。
关键术语对照
| 中文 | English | 一句话含义 |
|---|---|---|
| 马尔可夫决策过程 | Markov decision process (MDP) | 状态/动作/转移/奖励/折扣五要素的决策框架 |
| 部分可观测 MDP | POMDP | 看不到完整状态,只能拿到观测 |
| 策略 | Policy \(\pi[a\mid s]\) | 从状态到动作(分布)的规则 |
| 折扣回报 | (Discounted) return \(G_t\) | 未来奖励的累积折扣和 |
| 折扣因子 | Discount factor \(\gamma\) | 近处奖励比远处更值钱的衰减系数 |
| 状态值 / 动作值 | State value \(v\) / Action value \(q\) | 从某状态(/某动作)出发的期望回报 |
| 贝尔曼方程 | Bellman equations | 值之间必须自洽的递推关系 |
| 时间信用分配 | Temporal credit assignment | 难以判断奖励该归功于哪个动作 |
| 探索 vs. 利用 | Exploration vs. exploitation | 尝试新动作 vs. 沿用已知好动作 |
| 动态规划 | Dynamic programming | 已知模型时靠自洽迭代求最优策略 |
| 蒙特卡洛方法 | Monte Carlo methods | 跑完整回合、用经验回报估值 |
| 时序差分 | Temporal difference (TD) | 自举+采样,边走边更新 |
| SARSA / Q-learning | SARSA / Q-learning | 同策略 / 异策略的 TD 控制 |
| \(\epsilon\)-贪心 | \(\epsilon\)-greedy | 以小概率随机探索的策略 |
| 同策略 / 异策略 | On-policy / Off-policy | 学的策略=/≠ 采数据的策略 |
| 拟合 Q 学习 | Fitted Q-learning | 用模型近似动作值函数 |
| 深度 Q 网络 | Deep Q-Network (DQN) | 用深网做拟合 Q 学习玩 Atari |
| 经验回放 | Experience replay | 缓冲历史四元组随机采样训练 |
| 目标网络 | Target network | 周期更新的冻结目标,稳住训练 |
| 双 Q 学习 | Double Q-learning | 两网解耦“选目标”与“评估”以防高估 |
| 策略梯度 | Policy gradient | 直接对策略参数做梯度上升 |
| REINFORCE | REINFORCE | 蒙特卡洛策略梯度算法 |
| 基线 / 优势 | Baseline / Advantage | 减去基线降方差;回报−基线=优势 |
| 行动者-评论家 | Actor-critic | 行动者出策略、评论家估值、TD 更新 |
| 离线强化学习 | Offline / Batch RL | 只用历史数据、不与环境交互地学习 |
| 决策 Transformer | Decision transformer | 把离线 RL 当序列预测,用待获回报 |
| 待获回报 | Returns-to-go | 当前到结束实际观测奖励之和 |
返回目录 | 上一章:第 18 章 扩散模型 | 下一章:第 20 章 深度学习为什么有效