第 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):假设转移和奖励都未知。又细分为两族:
    1. 值估计:先估最优动作值函数,再在每个状态选值最大的动作当策略。
    2. 策略估计:用梯度下降直接估最优策略,跳过估模型、估值这些中间步骤(见 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 总存在确定性最优策略,但用随机策略有三大好处:

  1. 天然有利于探索——不必每步都死磕当前最优动作。
  2. 损失随策略参数平滑变化,于是即便奖励是离散的也能用梯度下降(类似分类里用最大似然让正确类概率平滑增大)。
  3. 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 章 深度学习为什么有效