目录

  1. 机器学习中的强化学习位置
  2. 强化学习问题建模
  3. 多臂老虎机问题与探索-利用
  4. Bellman 方程与广义策略迭代
  5. Monte Carlo 方法
  6. Temporal-Difference Learning
  7. SARSA 与 Q-Learning
  8. Model-based Methods
  9. Policy Gradient Methods
  10. n-step Bootstrapping 与 Eligibility Traces
  11. 深度强化学习与多智能体自课程
  12. 强化学习的挑战与核心内容

1 机器学习中的强化学习位置

1.1 三类机器学习任务

在机器学习的大背景下,常见任务可以粗略分为三类:监督学习(Supervised Learning)无监督学习(Unsupervised Learning)强化学习(Reinforcement Learning, RL)

监督学习的特点是训练数据中已经有“标准答案”。例如图像分类中,每张图片都带有“猫”“狗”“车”等标签,模型学习的是从输入图片到输出标签的映射。学习过程中,如果模型预测错了,我们马上知道错在哪里,因为标签就是答案。

无监督学习没有人工给出的标签。模型面对的是一堆未标注数据,需要自己发现数据内部结构。例如把用户按购买习惯聚成几类,或者把高维数据压缩到低维空间中进行可视化。它的重点不是“预测正确标签”,而是“发现隐藏模式”。

强化学习则不同。强化学习研究的是一个智能体(agent) 如何在环境中不断行动,并根据环境返回的奖励(reward) 来学习更好的决策方式。它没有每一步的标准答案,只有行动之后得到的反馈,而且这个反馈可能很晚才出现。

学习方式 输入数据特点 学习目标 典型例子
监督学习 有标签样本 学会输入到标签的映射 图片分类、垃圾邮件识别
无监督学习 无标签样本 发现数据结构 聚类、降维
强化学习 智能体与环境交互得到经验 学会最大化长期奖励的策略 走迷宫、下棋、机器人控制

1.2 为什么强化学习更像“学会做事”

强化学习不是一次性判断一个样本属于什么类别,而是要在连续时间中做一串决策。一个动作的好坏不一定能立刻看出来,因为它可能影响很多步之后的结果。

例如玩迷宫游戏时,某一步向左走可能暂时没有奖励,但它可能让智能体绕开死路,最终更快到达终点;某一步向右走可能马上获得一个小奖励,但之后进入陷阱。强化学习关心的不是单步奖励最大,而是从当前开始到未来的累计收益最大。

因此,强化学习天然包含几个难点:

难点 含义 例子
延迟奖励 当前动作的后果可能以后才体现 现在做的选择,可能几步之后才知道好坏
连续决策 每一步动作会改变后续可选状态 下棋时一步棋会影响之后整局棋
探索与利用 要在尝试新动作和使用已知好动作之间平衡 既要试新餐厅,也不能总错过已知好餐厅
不确定性 同样动作不一定每次产生同样结果 市场、游戏对手、物理环境都可能变化

主线可以概括为:强化学习要解决“怎样评价状态和动作的好坏”,以及“怎样根据这些评价改进策略”。

2 强化学习问题建模

2.1 迷宫问题中的交互闭环

迷宫问题可以展示强化学习最基本的交互结构。迷宫中有一个智能体,例如老鼠或机器人。它能观察到当前处境,选择向上、向下、向左、向右等动作。环境根据动作改变状态,并返回一个奖励。例如到达奶酪位置给正奖励,撞墙给负奖励,普通移动给零奖励或小负奖励。

这个闭环可以写成:

  1. 智能体观察当前状态 \(S_t\)
  2. 智能体根据策略选择动作 \(A_t\)
  3. 环境接收动作,转移到新状态 \(S_{t+1}\)
  4. 环境给出奖励 \(R_{t+1}\)
  5. 智能体根据新经验更新对环境和动作的认识。

注意奖励下标常写成 \(R_{t+1}\),意思是“在时刻 \(t\) 做动作之后,于下一时刻收到的奖励”。这看起来有点绕,但它强调奖励是动作的结果。

一个 episode 可以理解为一次完整尝试。例如老鼠从起点出发,到找到奶酪或失败结束,这条完整轨迹就是一个 episode。强化学习算法会从很多 episode 中逐渐学习。

2.2 基本符号

符号 英文 含义 迷宫例子
\(S\) state set 所有可能状态的集合 迷宫中所有格子位置,或者位置加方向、能量等信息
\(A\) action set 所有可能动作的集合 上、下、左、右、停留
\(R\) reward set 所有可能奖励的集合 到达终点 \(+10\),撞墙 \(-1\),普通移动 \(0\)
\(\pi(a\mid s)\) policy 在状态 \(s\) 选择动作 \(a\) 的概率 在某格子向右走的概率是 \(0.7\)
\(v_\pi(s)\) state value 按策略 \(\pi\) 行动时,状态 \(s\) 的长期价值 从这个格子出发,平均最终能得到多少奖励
\(q_\pi(s,a)\) action value 按策略 \(\pi\) 行动时,在 \(s\)\(a\) 的长期价值 在这个格子先向右走,后面继续按策略行动,平均能得到多少奖励

策略(policy) 是强化学习中最核心的对象之一。它回答的问题是:在某个状态下应该选择哪个动作。如果策略是确定性的,那么每个状态只对应一个动作;如果策略是随机的,那么每个状态对应一个动作概率分布。

例如在某个迷宫格子中:

\[ \pi(\text{右}\mid s)=0.6,\quad \pi(\text{上}\mid s)=0.2,\quad \pi(\text{左}\mid s)=0.1,\quad \pi(\text{下}\mid s)=0.1. \]

这表示智能体大多数时候向右走,但偶尔也会尝试别的方向。

2.3 状态价值与动作价值的区别

状态价值 \(v_\pi(s)\) 和动作价值 \(q_\pi(s,a)\) 很容易混淆。可以用一句话区分:

\(v_\pi(s)\) 评价“我站在这里有多好”;\(q_\pi(s,a)\) 评价“我站在这里并且先做这个动作有多好”。

假设在迷宫某个交叉路口,向右是终点方向,向左是死路。如果只看状态价值 \(v_\pi(s)\),它告诉我们这个路口整体上好不好;如果看动作价值 \(q_\pi(s,\text{右})\)\(q_\pi(s,\text{左})\),它会告诉我们在这个路口右转和左转分别有多好。

为什么动作价值很重要?因为要改进策略时,智能体最终要选择动作。如果知道每个动作的 \(q_\pi(s,a)\),就可以直接选价值最大的动作:

\[ \pi'(s)=\arg\max_a q_\pi(s,a). \]

2.4 回报与折扣因子

强化学习优化的是从当前时刻开始的累计奖励,称为回报(return)

\[ G_t = R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} + \cdots = \sum_{k=0}^{\infty}\gamma^k R_{t+k+1}. \]

这个公式可以逐项理解:

含义
\(R_{t+1}\) 当前动作之后马上得到的奖励
\(\gamma R_{t+2}\) 下一步奖励,乘一次折扣
\(\gamma^2 R_{t+3}\) 再下一步奖励,乘两次折扣
\(\gamma^k\) 距离现在越远,折扣次数越多

\(\gamma \in [0,1]\) 称为折扣因子(discount factor)。它控制智能体有多重视未来。

如果 \(\gamma=0\),则 \(G_t=R_{t+1}\),智能体只关心眼前奖励。如果 \(\gamma\) 接近 \(1\),未来奖励几乎和当前奖励同样重要。迷宫中如果只关心眼前奖励,智能体可能会原地拿小奖励;如果重视长期奖励,它更可能为了终点大奖励暂时绕路。

一个简单数值例子:假设未来三步奖励是 \(1,1,10\)

\(\gamma=0.5\) 时:

\[ G_t=1+0.5\times 1+0.5^2\times 10=4. \]

\(\gamma=0.9\) 时:

\[ G_t=1+0.9\times 1+0.9^2\times 10=10. \]

同样的奖励序列,在更大的 \(\gamma\) 下价值更高,因为智能体更重视远期的大奖励。

3 多臂老虎机问题与探索-利用

3.1 Bandit 是最简单的强化学习问题

多臂老虎机问题(Multi-armed Bandit Problem)是强化学习的入门模型。它的名字来自赌场里的老虎机:一台机器上有一个拉杆,玩家拉一下拉杆,机器可能吐出奖励,也可能什么都没有。“多臂”指的是现在有很多个拉杆,或者很多台可选机器,每次只能选择其中一个去拉。

如果你没玩过老虎机,可以把它想成下面这个普通选择问题:桌上有四个按钮,每次你只能按一个按钮。按下按钮后,系统可能给你 \(1\) 分,也可能给你 \(0\) 分。每个按钮背后都有一个固定但你不知道的“中奖概率”。例如:

按钮 真实中奖概率 你一开始是否知道
A \(70\%\) 不知道
B \(30\%\) 不知道
C \(55\%\) 不知道
D \(40\%\) 不知道

如果你事先知道这些概率,问题就很简单:永远按 A,因为 A 的期望收益最高。但在强化学习里,智能体一开始不知道这些概率,只能通过一次次尝试来估计哪个按钮更好。

在这个问题里:

强化学习概念 多臂老虎机里的含义
智能体 做选择的人或程序
动作 选择哪个按钮或哪台机器
奖励 按下后得到的分数,例如成功为 \(1\)、失败为 \(0\)
动作价值 某个按钮平均能带来多少奖励
策略 当前决定怎么选按钮的方法

多臂老虎机和完整强化学习问题相比,最大的简化是:它没有复杂的状态变化。在迷宫问题中,向上走会改变当前位置;但在 Bandit 问题中,每次选择后通常又回到同样的选择场景。因此可以把它看作“只有一个状态、多个动作”的强化学习问题。

Bandit 问题的目标不是每台机器都试一样多,而是尽快发现哪台机器收益高,并尽量多选择它。但是如果太早认定某台机器最好,就可能错过真正更好的机器。

例如你前两次按 A 都失败,前两次按 C 都成功,并不代表 C 一定比 A 好,因为这可能只是随机波动。智能体必须一边利用当前看起来好的动作,一边继续探索其他动作。这就是后面要讲的探索与利用的权衡

3.2 动作价值估计:用平均奖励估计好坏

设某个动作已经被选过 \(n-1\) 次,得到的奖励分别是:

\[ R_1,R_2,\ldots,R_{n-1}. \]

那么第 \(n\) 次选择前,我们对这个动作价值的估计是:

\[ Q_n = \frac{R_1 + R_2 + \cdots + R_{n-1}}{n-1}. \]

这个公式就是样本平均。它背后的想法很朴素:如果一个动作过去平均奖励高,就认为它未来也可能奖励高。

例如某台老虎机被拉了 \(4\) 次,奖励是 \(1,0,1,1\),则估计价值为:

\[ Q_5=\frac{1+0+1+1}{4}=0.75. \]

这表示在已有经验下,我们估计这台机器成功率约为 \(75\%\)

3.3 为什么要用增量更新

如果每次都从头计算平均值,需要保存所有历史奖励。更方便的做法是使用增量形式:

\[ Q_{n+1} = Q_n + \frac{1}{n}[R_n - Q_n]. \]

如果新奖励 \(R_n\) 比旧估计 \(Q_n\) 大,那么 \(R_n-Q_n>0\),估计值上调;如果新奖励更小,估计值下调。

例如,某动作当前估计 \(Q_4=0.6\),这是前 \(3\) 次的平均值。第 \(4\) 次得到奖励 \(R_4=1\),则:

\[ Q_5=0.6+\frac{1}{4}(1-0.6)=0.6+0.1=0.7. \]

新奖励比旧估计高,所以价值估计上升。

3.4 平稳与非平稳环境

如果每个动作的奖励分布不随时间变化,称为平稳环境(stationary environment)。在这种情况下,普通样本平均很好,因为越多历史样本通常越可靠。

但如果环境会变化,称为非平稳环境(nonstationary environment)。例如一个广告推荐系统中,用户兴趣会随时间变化;股票交易环境中,市场状态也会变。此时很久以前的数据不一定有参考价值。

常数步长更新为:

\[ Q_{n+1}=Q_n+\alpha[R_n-Q_n]. \]

\(\frac{1}{n}\) 不同,\(\alpha\) 是固定学习率。这样新数据永远有固定影响力,旧数据会逐渐被遗忘。

展开后:

\[ Q_{n+1} = (1-\alpha)^n Q_1 + \sum_{i=1}^{n}\alpha(1-\alpha)^{n-i}R_i. \]

这个公式说明:越新的奖励 \(R_i\),权重越大;越旧的奖励,乘上的 \((1-\alpha)\) 次数越多,影响越小。可以把它理解为“带遗忘机制的平均”。

3.5 \(\epsilon\)-greedy:探索与利用的平衡

这里的简单 Bandit 算法使用 \(\epsilon\)-greedy 策略。它的规则很直接:

  1. 以概率 \(1-\epsilon\) 选择当前估计价值最高的动作。
  2. 以概率 \(\epsilon\) 随机选择一个动作。

例如 \(\epsilon=0.1\),表示 \(90\%\) 的时候选择当前看起来最好的动作,\(10\%\) 的时候随机探索。

为什么不能永远选当前最好的动作?因为一开始的估计可能不准。假设有四台老虎机,真实成功率分别是 \(70\%\)\(30\%\)\(55\%\)\(40\%\)。如果你第一次试 \(55\%\) 的机器刚好成功,而 \(70\%\) 的机器第一次刚好失败,短期数据会误导你。如果完全贪心,可能长期选择次优动作。

为什么不能一直随机探索?因为那样会浪费大量机会在低收益动作上。强化学习需要的是在学习过程中逐渐把更多选择分配给高价值动作。

3.6 Bandit 算法完整理解

Bandit 算法要做的核心事情,是通过反复尝试和观察奖励,估计每个动作 \(a\) 的价值 \(Q(a)\),也就是“选择这个动作平均能得到多少奖励”。估计出 \(Q(a)\) 后,智能体就可以更多选择价值高的动作,同时保留少量探索机会。

简单 Bandit 算法可以解释为:

  1. 对每个动作 \(a=1,\ldots,k\),初始化:

\[ Q(a)=0,\quad N(a)=0. \]

\(N(a)\) 表示动作 \(a\) 被选过的次数。

  1. 不断重复:

以概率 \(1-\epsilon\) 选择:

\[ a^*=\arg\max_a Q(a). \]

以概率 \(\epsilon\) 随机选择一个动作,并把本轮实际选中的动作也记为 \(a^*\)

  1. 执行动作 \(a^*\),观察奖励 \(R\)

  2. 更新选择次数:

\[ N(a^*)\leftarrow N(a^*)+1. \]

  1. 更新动作价值:

\[ Q(a^*)\leftarrow Q(a^*)+\frac{1}{N(a^*)}[R-Q(a^*)]. \]

这个算法体现了强化学习的一个基本范式:先根据当前估计做动作,再用反馈修正估计,之后再用新的估计做更好的动作。

4 Bellman 方程与广义策略迭代

4.1 从回报到价值函数

在这一节中,\(G_t\) 表示从时刻 \(t\) 开始往未来看的总回报(return)。它不是某一步的即时奖励,而是从当前状态出发,之后所有奖励按折扣因子 \(\gamma\) 加权求和的结果:

\[ G_t = R_{t+1}+\gamma R_{t+2}+\gamma^2R_{t+3}+\cdots =\sum_{k=0}^{\infty}\gamma^kR_{t+k+1}. \]

这里 \(R_{t+1}\) 是当前动作之后马上得到的奖励,\(R_{t+2}\) 是再下一步奖励,依此类推。\(\gamma\) 用来降低远期奖励的权重。例如 \(\gamma=0.9\) 时,两步后的奖励会乘上 \(0.9^2\)。所以 \(G_t\) 可以理解为:“如果我现在在时刻 \(t\),从现在开始一路走下去,最终累计能得到多少收益。”

有了 \(G_t\),价值函数才有定义基础。价值函数本质上就是在问:从某个状态或状态-动作对开始,未来的 \(G_t\) 平均会是多少?

状态价值函数定义为:

\[ v_\pi(s)=\mathbb{E}_\pi[G_t\mid S_t=s]. \]

这句话的意思是:如果当前处在状态 \(s\),之后一直按照策略 \(\pi\) 行动,那么从现在开始能获得多少回报。因为环境可能随机、策略也可能随机,所以要取期望。

动作价值函数定义为:

\[ q_\pi(s,a)=\mathbb{E}_\pi[G_t\mid S_t=s,A_t=a]. \]

它比状态价值多指定了第一步动作 \(a\)。第一步做完以后,后续仍然按策略 \(\pi\) 行动。

4.2 Bellman 方程的直观含义

Bellman 方程(Bellman Equation)是强化学习最重要的公式之一。它说的是:

一个状态的价值 = 当前一步能得到的奖励 + 下一状态的折扣后价值。

从回报定义出发:

\[ G_t = R_{t+1}+\gamma G_{t+1}. \]

这一步只是把“从 \(t\) 开始的总回报”拆成两部分:第一部分是下一步马上拿到的奖励 \(R_{t+1}\),第二部分是从 \(t+1\) 开始继续往后的总回报 \(G_{t+1}\),但未来回报要乘折扣因子 \(\gamma\)

接下来从状态价值函数定义开始推导。状态价值是:

\[ v_\pi(s) = \mathbb{E}_\pi[G_t\mid S_t=s]. \]

\(G_t=R_{t+1}+\gamma G_{t+1}\) 代入:

\[ v_\pi(s) = \mathbb{E}_\pi[R_{t+1}+\gamma G_{t+1}\mid S_t=s]. \]

现在问题变成:当已知当前状态是 \(s\) 时,下一步会发生什么?下一步的不确定性主要来自两层:

  1. 智能体会按照策略 \(\pi\) 选择动作 \(a\),概率是 \(\pi(a\mid s)\)
  2. 环境在收到动作 \(a\) 后,会随机给出奖励 \(r\) 并转移到下一状态 \(s'\),概率是 \(p(s',r\mid s,a)\)

因此,要对所有可能动作求加权平均:

\[ v_\pi(s) = \sum_a \pi(a\mid s) \mathbb{E}_\pi[R_{t+1}+\gamma G_{t+1}\mid S_t=s,A_t=a]. \]

这一步的意思是:当前在状态 \(s\) 时,可能选择不同动作;每个动作对最终价值的贡献,要按该动作被策略选中的概率加权。

接着,对给定动作 \(a\) 后可能出现的下一状态 \(s'\) 和奖励 \(r\) 再展开:

\[ v_\pi(s) = \sum_a \pi(a\mid s) \sum_{s',r}p(s',r\mid s,a) \mathbb{E}_\pi[R_{t+1}+\gamma G_{t+1} \mid S_t=s,A_t=a,S_{t+1}=s',R_{t+1}=r]. \]

在这个条件下,\(R_{t+1}\) 已经确定等于 \(r\),所以可以替换:

\[ v_\pi(s) = \sum_a \pi(a\mid s) \sum_{s',r}p(s',r\mid s,a) [r+\gamma \mathbb{E}_\pi[G_{t+1}\mid S_{t+1}=s']]. \]

而根据状态价值函数的定义,从下一状态 \(s'\) 开始、继续按策略 \(\pi\) 行动的期望回报就是:

\[ \mathbb{E}_\pi[G_{t+1}\mid S_{t+1}=s']=v_\pi(s'). \]

于是得到:

\[ v_\pi(s) = \sum_a \pi(a\mid s) \sum_{s',r}p(s',r\mid s,a) [r+\gamma v_\pi(s')]. \]

这就是状态价值函数的 Bellman 方程:

\[ v_\pi(s) = \sum_a \pi(a\mid s) \sum_{s',r}p(s',r\mid s,a) [r+\gamma v_\pi(s')], \quad \forall s\in S. \]

逐项解释如下:

符号 含义
\(\sum_a \pi(a\mid s)\) 按策略 \(\pi\) 对所有可能动作加权平均
\(p(s',r\mid s,a)\) 执行动作 \(a\) 后到达 \(s'\) 并得到奖励 \(r\) 的概率
\(r\) 这一步的即时奖励
\(\gamma v_\pi(s')\) 下一状态未来价值的折扣
\([r+\gamma v_\pi(s')]\) 选择动作并转移后得到的一步奖励加未来价值

初学者可以把 Bellman 方程想成“拆账”:今天的总价值可以拆成今天马上拿到的钱,加上明天开始还能赚的钱。

4.3 为什么 Bellman 方程有用

Bellman 方程有用,是因为它把一个长远问题变成了局部递推问题。我们不必一次性看完整个未来,只要知道下一步奖励和下一状态价值,就能更新当前状态价值。

这也是后面很多算法的基础:

算法思想 和 Bellman 方程的关系
动态规划 已知环境模型时,直接用 Bellman 方程迭代求价值
TD 学习 不知道模型时,用实际采样到的 \(R,S'\) 近似 Bellman 更新
Q-Learning 用最大下一动作价值构造最优 Bellman 目标
策略迭代 先用 Bellman 方程评估策略,再用价值改进策略

4.4 广义策略迭代

广义策略迭代(Generalized Policy Iteration, GPI)由两个交替过程组成:

过程 问的问题 做的事
策略评估(policy evaluation) 当前策略好不好? 估计 \(v_\pi\)\(q_\pi\)
策略改进(policy improvement) 能不能根据价值选更好的动作? 用价值函数产生更优策略

这两个过程会互相影响。策略评估让我们知道当前策略的价值;策略改进改变策略后,原来的价值估计又不完全准确,于是需要重新评估。不断交替后,希望策略和值函数一起接近最优。

可以用学习走迷宫理解:

  1. 先按照当前走法走很多次,估计每个位置好不好。
  2. 发现某些位置向右走比向左走更好,于是修改走法。
  3. 走法改了以后,再重新估计每个位置好不好。
  4. 重复直到走法稳定。

4.5 策略迭代算法

这里的策略迭代(Policy Iteration)是一种典型的动态规划方法,通常假设已知环境模型 \(p(s',r\mid s,a)\)

4.5.1 初始化

对所有状态 \(s\) 初始化价值和策略:

\[ V(s)\in \mathbb{R},\quad \pi(s)\in A(s). \]

一开始不要求准确,可以随机设定。后续迭代会不断修正。

4.5.2 策略评估

固定当前策略 \(\pi\),反复更新:

\[ V(s) \leftarrow \sum_{s',r}p(s',r\mid s,\pi(s))[r+\gamma V(s')]. \]

这一步的意思是:假设在状态 \(s\) 一定按照当前策略选择动作 \(\pi(s)\),那么状态 \(s\) 的价值就是该动作可能导致的所有下一状态和奖励的期望。

算法中用 \(\Delta\) 记录本轮价值变化的最大值:

\[ \Delta \leftarrow \max(\Delta, |v - V(s)|). \]

\(\Delta < \theta\) 时,说明价值函数已经变化很小,可以认为当前策略评估得差不多了。

4.5.3 策略改进

用当前价值函数选择更好的动作:

\[ \pi(s) \leftarrow \arg\max_a \sum_{s',r}p(s',r\mid s,a)[r+\gamma V(s')]. \]

这个公式的意思是:对每个可能动作 \(a\),计算“执行它后的一步奖励加下一状态价值”的期望,然后选择最大的动作。

如果所有状态的最优动作都没有改变,则策略稳定,算法停止。此时可以认为:

\[ V\approx v_*,\quad \pi\approx \pi_*. \]

其中 \(v_*\) 是最优价值函数,\(\pi_*\) 是最优策略。

4.6 高尔夫例子

这里的高尔夫例子展示了状态价值和动作价值的区别。图中等高线表示从不同位置把球打进洞大约还需要多少杆。

如果只看状态价值 \(v(s)\),我们知道“球在这里总体上有多好”。但真正做决策时,还要考虑动作,比如使用推杆(putt)还是开球杆(driver)。不同球杆的风险和效果不同,因此动作价值 \(q(s,a)\) 会不一样。

这个例子帮助理解:策略改进不是只看当前状态,而是比较当前状态下不同动作的后果。

4.7 RL for Optimized Execution

RL for Optimized Execution 可以理解为“用强化学习解决金融交易中的最优执行问题”。这里的 execution 指交易执行,例如一个机构想买入或卖出大量股票,但不能一次性全部成交,因为这样可能强烈影响市场价格。它需要把大订单拆成许多小订单,在一段时间内逐步执行,并尽量降低交易成本。

execution as state-based stochastic optimal control 的意思是:交易执行可以看作一个基于状态的随机最优控制问题。

这里几个词要分开理解:

含义 在交易执行中的例子
state-based 决策依赖当前状态 剩余时间、还剩多少股票没买/卖、当前市场价格、订单簿情况
stochastic 环境有随机性 同样的下单方式,在不同市场波动下可能得到不同成交结果
optimal control 目标是选择最优动作序列 每一步决定下多少单、挂什么价格、放在订单簿什么位置

这个强化学习建模可以写成:

强化学习元素 交易执行中的含义
状态(state) 时间和剩余股票数量,例如“还剩 10 分钟、还有 5000 股没执行”;也可能包括价格、成交量、订单簿深度等信息
动作(actions) 订单在订单簿中的位置,例如挂买一、买二,或者选择市价单/限价单、下单数量
奖励(rewards) 实际成交价格或由成交价格计算出的收益/成本,例如买得越便宜奖励越高,卖得越贵奖励越高
随机性(stochastic) 相同状态和相同动作不一定得到相同结果,因为市场中其他交易者也在变化

这个例子的重点不是金融细节,而是说明强化学习适合处理一种问题:当前每一步动作都会影响后续状态,而且目标不是单步最好,而是整个执行过程总体最好

例如你要在 30 分钟内买入 10000 股。如果一开始买太快,可能把价格推高,导致后面更贵;如果买太慢,最后时间不够,只能用更差价格强行成交。强化学习可以尝试学习一种策略:在不同市场状态下,动态决定当前应该积极成交还是耐心挂单。

这是 RL 在市场微观结构(microstructure)中的大规模应用。市场微观结构研究订单簿、成交机制、买卖价差、流动性等细节,而这些细节正好会影响交易执行策略。

4.8 Challenges of RL

强化学习落地时会遇到很多挑战。RL 的数学框架看起来很清楚,但真实问题往往比迷宫和老虎机复杂得多。

  1. 状态表示与特征学习。 真实任务中的状态空间可能非常高维、连续,动作空间也可能连续。比如自动驾驶看到的不是几个离散格子,而是摄像头图像、速度、路线、障碍物位置等大量信息。此时不能只用表格记录每个状态,需要用函数近似或神经网络学习有用特征。

  2. 奖励信号设计。 奖励函数可能不明确,也可能同时包含多个目标,还可能涉及风险。例如机器人走路任务中,如果只奖励“速度快”,智能体可能学出不稳定甚至危险的动作;如果金融交易只奖励成交价格,也可能忽略风险和市场冲击。奖励设计错了,智能体就可能学到“钻空子”的行为。

  3. 带延迟的策略评估。 在真实系统中,执行器、传感器或奖励反馈都可能有延迟。也就是说,智能体做了一个动作后,可能要过一段时间才知道这个动作到底好不好。比如下棋中的一步棋,真正影响胜负可能要很多步之后才体现出来。

  4. 利用与探索的权衡。 智能体既要利用当前已经知道的好策略,也要探索还不确定的新动作。只利用会陷入局部最优,只探索又会浪费大量样本。多臂老虎机中的 \(\epsilon\)-greedy 就是在解决这个问题的最简单版本。

  5. 有限样本下的快速学习。 很多真实系统不能无限试错。机器人反复摔倒会损坏硬件,医疗决策不能随意尝试,金融交易中的错误决策会带来真实损失。因此 RL 算法需要在有限样本下尽快学到可用策略。

  6. 基于学习模型的规划。 智能体可以学习一个世界模型,再在模型中模拟未来并进行规划。但如果模型不准,规划结果也会被误导。也就是说,在错误模拟器里学出来的策略,放到真实环境中可能失败。

  7. 自动选择子问题。 复杂任务往往不能一口气学会,智能体需要知道先学什么、后学什么。例如先学会走直线,再学会转弯,最后学会避障。这类似课程学习:从简单任务逐渐过渡到复杂任务。

  8. 多智能体强化学习。 当多个智能体同时学习时,环境会因为其他智能体的策略变化而不断变化。比如游戏对手会变强,市场中的其他交易者也会调整策略。这会让学习问题更不稳定,因为智能体面对的环境不再固定。

这部分和前面的最优执行例子是连在一起的:最优执行给出一个真实复杂应用,而这些挑战解释了为什么这类真实应用很难。以交易执行为例,状态表示很复杂,奖励不仅要考虑成交价格,还要考虑风险和市场冲击;市场反馈有延迟,样本又很宝贵,而且其他交易者也在不断改变行为。这些正好对应强化学习落地时的典型困难。

5 Monte Carlo 方法

5.1 Monte Carlo 的基本思想

Monte Carlo 方法的核心是随机采样。估计圆周率 \(\pi\) 是一个直观例子:在正方形中随机撒点,统计落入四分之一圆内的比例,就可以估计圆面积,从而估计 \(\pi\)。点越多,估计越稳定。

在强化学习中,Monte Carlo 方法不用环境模型,而是通过一次次完整试验得到回报。一个完整 episode 结束后,算法知道某个状态或状态-动作对后面实际获得了多少回报,于是用这些回报的平均值估计价值。

5.2 Monte Carlo 与动态规划的区别

动态规划需要知道环境模型,例如从 \(s\)\(a\) 到达每个 \(s'\) 的概率是多少、奖励是多少。Monte Carlo 不需要这些概率,只需要实际经验。

方法 是否需要模型 什么时候更新 更新依据
动态规划 需要 可以直接迭代 所有可能转移的期望
Monte Carlo 不需要 episode 结束后 实际采样得到的完整回报

比如你不知道迷宫地图和转移概率,但你可以让机器人实际走很多次。每次走完以后,记录从某个位置开始最终得了多少分,多次平均就能估计这个位置的价值。

5.3 First-visit Monte Carlo 的直观过程

假设一个 episode 是:

\[ S_0,A_0,R_1,S_1,A_1,R_2,\ldots,S_T. \]

如果我们要估计某个状态 \(s\) 的价值,就找到这个 episode 中第一次出现 \(s\) 的时刻 \(t\),计算从那以后所有奖励的折扣和:

\[ G_t=R_{t+1}+\gamma R_{t+2}+\cdots. \]

把这个 \(G_t\) 加入 \(Returns(s)\),然后取平均:

\[ V(s)=average(Returns(s)). \]

这里的 \(Returns(s)\) 是一个记录表,专门用来保存“每次从状态 \(s\) 第一次出现后计算出来的回报”。例如状态 \(s\) 在三次 episode 中第一次出现后,对应回报分别是 \(5,7,6\),那么: \[ Returns(s)=[5,7,6], \]

于是:

\[ V(s)=average(Returns(s))=\frac{5+7+6}{3}=6. \]

所以,Monte Carlo 方法估计价值的方式很朴素:每次实际跑完一条轨迹,就把观察到的回报存起来;样本越多,平均值越接近真实价值。

这就是 first-visit Monte Carlo 的基本想法。它只使用每个 episode 中第一次访问状态 \(s\) 后的回报,避免同一个 episode 对同一状态重复计数。

5.4 Monte Carlo ES

Monte Carlo ES(Exploring Starts)可用于估计最优策略。ES 指 exploring starts,即探索性起点。

算法流程是:

  1. 对所有状态-动作对初始化:

\[ Q(s,a)\leftarrow \text{任意值},\quad \pi(s)\leftarrow \text{任意动作}. \]

  1. 对每个 \((s,a)\) 准备一个回报列表 \(Returns(s,a)\)。这里的 \(Returns(s,a)\) 和前面的 \(Returns(s)\) 类似,只不过它记录的是“从状态 \(s\) 采取动作 \(a\) 之后得到的回报样本”。
  2. 每次 episode 随机选择一个初始状态 \(S_0\) 和初始动作 \(A_0\),并要求所有状态-动作对都有大于 \(0\) 的概率被选为起点。
  3. \(S_0,A_0\) 开始,之后按照当前策略 \(\pi\) 生成完整 episode。
  4. 对 episode 中每个首次出现的 \((s,a)\),计算其后的回报 \(G\)
  5. 更新:

\[ Q(s,a)\leftarrow average(Returns(s,a)). \]

  1. 对出现过的状态改进策略:

\[ \pi(s)\leftarrow \arg\max_a Q(s,a). \]

这个算法体现了 GPI,也就是广义策略迭代。在 Monte Carlo ES 中,“策略评估”对应用采样回报不断更新 \(Q(s,a)\),“策略改进”对应用 \(\pi(s)\leftarrow \arg\max_a Q(s,a)\) 把策略改成当前看起来最好的动作。

5.4.1 例子

假设有一个很小的任务,包含两个非终止状态 \(s_1,s_2\),每个状态下都有两个动作 \(a_1,a_2\)。我们想估计四个状态-动作对的价值:

\[ Q(s_1,a_1),\quad Q(s_1,a_2),\quad Q(s_2,a_1),\quad Q(s_2,a_2). \]

一开始还不知道哪个状态下哪个动作更好,所以为每个状态-动作对准备一个回报列表:

\[ Returns(s_1,a_1)=[],\quad Returns(s_1,a_2)=[], \]

\[ Returns(s_2,a_1)=[],\quad Returns(s_2,a_2)=[]. \]

假设折扣因子为:

\[ \gamma=0.9. \]

现在通过 Monte Carlo 采样得到几条完整 episode。因为是 first-visit 的思想,所以每条 episode 中某个 \((s,a)\) 第一次出现时,才把从那里开始的回报加入对应的 \(Returns(s,a)\)

第一条 episode 是:

\[ s_1,a_1,R_1=2,\ s_2,a_2,R_2=4,\ terminal. \]

对第一次出现的 \((s_1,a_1)\),从它开始的回报是:

\[ G=R_1+\gamma R_2=2+0.9\times 4=5.6. \]

所以:

\[ Returns(s_1,a_1)=[5.6],\quad Q(s_1,a_1)=5.6. \]

对第一次出现的 \((s_2,a_2)\),它后面只剩奖励 \(R_2=4\),所以:

\[ G=4. \]

因此:

\[ Returns(s_2,a_2)=[4],\quad Q(s_2,a_2)=4. \]

第二条 episode 是:

\[ s_1,a_2,R_1=1,\ s_2,a_1,R_2=6,\ terminal. \]

\((s_1,a_2)\)

\[ G=R_1+\gamma R_2=1+0.9\times 6=6.4. \]

所以:

\[ Returns(s_1,a_2)=[6.4],\quad Q(s_1,a_2)=6.4. \]

\((s_2,a_1)\)

\[ G=6. \]

所以:

\[ Returns(s_2,a_1)=[6],\quad Q(s_2,a_1)=6. \]

第三条 episode 是:

\[ s_1,a_1,R_1=3,\ s_2,a_2,R_2=2,\ terminal. \]

\((s_1,a_1)\)

\[ G=3+0.9\times 2=4.8. \]

把它加入原来的列表:

\[ Returns(s_1,a_1)=[5.6,4.8]. \]

于是:

\[ Q(s_1,a_1)=average([5.6,4.8])=\frac{5.6+4.8}{2}=5.2. \]

\((s_2,a_2)\)

\[ G=2. \]

更新:

\[ Returns(s_2,a_2)=[4,2], \]

\[ Q(s_2,a_2)=average([4,2])=3. \]

此时四个动作价值估计为:

\[ Q(s_1,a_1)=5.2,\quad Q(s_1,a_2)=6.4, \]

\[ Q(s_2,a_1)=6,\quad Q(s_2,a_2)=3. \]

策略改进时,在每个状态分别选择 \(Q\) 值最大的动作:

\[ \pi(s_1)=\arg\max_a Q(s_1,a)=a_2, \]

\[ \pi(s_2)=\arg\max_a Q(s_2,a)=a_1. \]

这个例子展示了 Monte Carlo ES 的两个核心动作:先用完整 episode 的折扣回报样本更新每个 \(Q(s,a)\),再在每个状态中选择当前动作价值最高的动作来改进策略。

5.5 Monte Carlo 的优缺点

Monte Carlo 方法的优点是简单、直观、不需要环境模型,而且估计目标是真实完整回报。缺点是必须等 episode 结束才能更新。如果任务很长,甚至没有自然终止状态,Monte Carlo 学习会很慢或不方便。

另一个问题是方差较大。因为完整回报受很多随机因素影响,同一个状态开始的回报可能波动很大,需要很多样本平均才稳定。

6 Temporal-Difference Learning

6.1 从一个小例子开始

假设智能体在一个很简单的走廊里移动,只有两个非终止状态 \(s_1,s_2\),然后到达终点:

\[ s_1 \rightarrow s_2 \rightarrow terminal. \]

智能体已经有一张当前的状态价值估计表:

状态 当前估计价值
\(V(s_1)\) \(2\)
\(V(s_2)\) \(5\)
\(V(terminal)\) \(0\)

现在智能体实际走了一步:它从 \(s_1\) 到了 \(s_2\),并且这一步拿到奖励:

\[ R_{t+1}=1. \]

假设折扣因子:

\[ \gamma=0.9. \]

问题是:看到这一步经验以后,我们要不要更新 \(V(s_1)\)

TD 的答案是:要更新,而且不用等到整个 episode 结束。因为虽然我们还不知道从 \(s_2\) 后面最终到底会得到多少完整回报,但我们已经有一个旧估计:

\[ V(s_2)=5. \]

所以可以先用“这一步奖励 + 下一状态的估计价值”来形成一个临时目标:

\[ R_{t+1}+\gamma V(s_2)=1+0.9\times 5=5.5. \]

这表示:从 \(s_1\) 走一步到 \(s_2\),马上拿到 \(1\) 分;而 \(s_2\) 之后的未来,暂时用旧估计 \(V(s_2)=5\) 来代表。于是 TD 认为,\(s_1\) 的价值应该更接近 \(5.5\),而不是原来的 \(2\)

如果学习率 \(\alpha=0.1\),更新就是:

\[ V(s_1)\leftarrow 2+0.1(5.5-2)=2.35. \]

这个例子就是 TD 学习的核心:走一步,看到一个奖励和下一个状态,就立刻把当前状态的价值往更合理的方向推一点。

6.2 TD 和 Monte Carlo 的区别

还是上面的走廊例子。假设完整 episode 是:

\[ s_1,R_1=1,\ s_2,R_2=10,\ terminal. \]

如果用 Monte Carlo 方法更新 \(V(s_1)\),必须等 episode 结束,然后计算从 \(s_1\) 开始的完整回报:

\[ G=R_1+\gamma R_2=1+0.9\times 10=10. \]

Monte Carlo 会用 \(10\) 作为目标来更新 \(V(s_1)\)

而 TD 不等终点。它在刚看到 \(s_1\rightarrow s_2\) 这一步时,就用:

\[ R_1+\gamma V(s_2) \]

作为目标。如果当时 \(V(s_2)=5\),TD 目标就是:

\[ 1+0.9\times 5=5.5. \]

所以两者的区别是:

方法 更新目标 是否等 episode 结束
Monte Carlo 真实完整回报 \(G\) 需要
TD 一步奖励 \(+\) 下一状态的估计价值 不需要

Monte Carlo 的目标更“真实”,因为它真的看到了后面发生什么;TD 的目标更“及时”,因为它可以边走边学。TD 用了一个旧估计 \(V(s_2)\) 来更新另一个估计 \(V(s_1)\),这就叫 bootstrap

6.3 TD(0) 更新公式

TD(0) 是最基础的一步时序差分方法。这里的 TD 是“时序差分”,表示用相邻时间步之间的估计差异来学习;括号里的 \(0\) 可以理解为“不额外等待更多真实奖励”,也就是只用当前一步交互得到的信息。

更具体地说,智能体在状态 \(S_t\) 执行动作 \(A_t\) 后,环境返回即时奖励 \(R_{t+1}\),并转移到下一状态 \(S_{t+1}\)。TD(0) 只用这一步观察到的 \(R_{t+1}\)\(V(S_{t+1})\) 来更新 \(V(S_t)\)

TD(0) 的目标是:

\[ R_{t+1}+\gamma V(S_{t+1}). \]

其中 \(R_{t+1}\) 是刚刚收到的即时奖励,\(V(S_{t+1})\) 是下一状态的当前估计价值。

TD(0) 的更新公式是:

\[ V(S_t)\leftarrow V(S_t)+\alpha[R_{t+1}+\gamma V(S_{t+1})-V(S_t)]. \]

这条公式可以读成:

\[ \text{新价值} = \text{旧价值} + \text{学习率}\times(\text{TD目标}-\text{旧价值}). \]

6.4 TD error 是什么

TD 更新中最重要的量是 TD error:

\[ \delta_t = R_{t+1}+\gamma V(S_{t+1})-V(S_t). \]

它就是“TD 目标”和“旧估计”之间的差距。用 TD error 可以把更新公式简写成:

\[ V(S_t)\leftarrow V(S_t)+\alpha\delta_t. \]

从直觉上看,\(\delta_t\) 有点像梯度下降里的误差信号:它的正负号告诉我们 \(V(S_t)\) 应该往上调还是往下调,它的大小表示这次修正应该有多强。

仍然用刚才的例子:

\[ V(s_1)=2,\quad R_{t+1}=1,\quad \gamma=0.9,\quad V(s_2)=5. \]

TD 目标是:

\[ 1+0.9\times 5=5.5. \]

TD error 是:

\[ \delta_t=5.5-2=3.5. \]

因为 \(\delta_t>0\),说明原来把 \(s_1\) 估低了,所以要提高 \(V(s_1)\)。如果 \(\delta_t<0\),就说明原来估高了,需要降低。

如果 \(\alpha=0.1\),更新为:

\[ V(s_1)\leftarrow 2+0.1\times 3.5=2.35. \]

注意,TD 不会一下子把 \(V(s_1)\) 改成 \(5.5\),而是只朝 \(5.5\) 移动一小步。这样做可以避免单次经验噪声太大导致估计剧烈震荡。

6.5 Tabular TD for \(v_\pi\)

这里的表格式 TD 策略评估,就是用 TD(0) 来估计某个固定策略 \(\pi\) 下的状态价值 \(v_\pi\)

这里的 tabular 指“表格式”。意思是:如果状态数量不大,我们可以真的建一张表,每一行对应一个状态,每一行里存一个当前价值估计 \(V(s)\)。算法每走一步,就找到当前状态对应的那一行,把这一行的数值更新一下。

例如可以有这样一张价值表:

状态 当前价值估计
\(s_1\) \(2.0\)
\(s_2\) \(5.0\)
\(terminal\) \(0\)

表格式 TD 的过程可以理解为:

  1. 给定一个要评估的策略 \(\pi\)
  2. 初始化所有状态价值 \(V(s)\),终止状态价值设为 \(0\)
  3. 从某个初始状态 \(S\) 开始一个 episode。
  4. 按策略 \(\pi\) 在状态 \(S\) 选择动作 \(A\)
  5. 执行动作,观察奖励 \(R\) 和新状态 \(S'\)
  6. 立刻更新当前状态:

\[ V(S)\leftarrow V(S)+\alpha[R+\gamma V(S')-V(S)]. \]

  1. \(S\leftarrow S'\),继续往前走,直到到达终止状态。

这个算法最重要的特点是:每走一步就能更新一步。它不需要知道环境模型,也不需要等整条轨迹结束。

6.5.1 一个表格式 TD 更新例子

假设当前价值表是:

状态 更新前的 \(V(s)\)
\(s_1\) \(2.0\)
\(s_2\) \(5.0\)
\(terminal\) \(0\)

现在智能体在状态 \(s_1\),按照策略 \(\pi\) 选择了某个动作,环境返回:

\[ R=1,\quad S'=s_2. \]

设:

\[ \gamma=0.9,\quad \alpha=0.1. \]

TD 目标是:

\[ R+\gamma V(S')=1+0.9\times V(s_2)=1+0.9\times 5=5.5. \]

当前旧估计是:

\[ V(s_1)=2.0. \]

所以:

\[ V(s_1)\leftarrow 2.0+0.1(5.5-2.0)=2.35. \]

更新后,价值表变成:

状态 更新后的 \(V(s)\)
\(s_1\) \(2.35\)
\(s_2\) \(5.0\)
\(terminal\) \(0\)

注意这一步只改了 \(s_1\) 这一行,因为当前被更新的是刚刚访问的状态 \(S=s_1\)\(s_2\) 的值这次没有直接改,它只是作为下一状态出现在 TD 目标里。

6.6 为什么 TD 学习重要

TD 学习结合了 Monte Carlo 和动态规划的优点:

来源 TD 继承的优点
Monte Carlo 不需要环境模型,可以直接从实际经验中学习
动态规划 可以用已有价值估计更新当前价值,不必等完整回报

TD learning 是强化学习中非常核心的思想。很多后续算法,例如 SARSA、Q-Learning、Expected SARSA,都可以看作把 TD 的更新思想从状态价值 \(V(s)\) 推广到动作价值 \(Q(s,a)\)

6.7 Monte Carlo、TD、动态规划对比

方法 是否需要模型 是否需要完整 episode 是否 bootstrap 典型特点
动态规划 需要 不需要 知道环境转移概率,可以直接算期望
Monte Carlo 不需要 需要 用真实完整回报,直观但更新慢
TD 不需要 不需要 走一步学一步,适合在线学习

初学者可以这样记:动态规划“知道地图和概率,所以可以算”;Monte Carlo“不知道地图,但走完整局后总结”;TD“不知道地图,也不等完整局,走一步学一步”。

7 SARSA 与 Q-Learning

7.1 从价值评估到控制

前面的 TD(0) 主要是在评估一个给定策略的状态价值 \(V(s)\)。但强化学习最终要解决控制问题:不仅要知道当前策略好不好,还要学出更好的策略。

为了直接选择动作,控制算法通常学习动作价值 \(Q(s,a)\)。一旦知道 \(Q(s,a)\),就可以用 \(\epsilon\)-greedy 等方式从 \(Q\) 导出策略。

SARSA 和 Q-Learning 都是 TD 控制算法,区别在于它们使用不同的更新目标。

7.2 SARSA:学习自己实际执行的策略

SARSA 是 on-policy TD control。On-policy 的意思是:用来生成行为的策略和被学习评估的策略是同一个策略

SARSA 的更新公式是:

\[ Q(S,A)\leftarrow Q(S,A)+\alpha[R+\gamma Q(S',A')-Q(S,A)]. \]

这次更新使用了五个量:

\[ S,A,R,S',A'. \]

这也是 SARSA 名字的来源。

算法步骤:

  1. 初始化 \(Q(s,a)\)
  2. 在当前状态 \(S\),按由 \(Q\) 导出的策略选择动作 \(A\),例如 \(\epsilon\)-greedy。
  3. 执行动作 \(A\),得到奖励 \(R\) 和下一状态 \(S'\)
  4. \(S'\) 再按同一个策略选择下一动作 \(A'\)
  5. \(R+\gamma Q(S',A')\) 更新 \(Q(S,A)\)
  6. \(S\leftarrow S'\)\(A\leftarrow A'\),继续。

关键点在于:SARSA 的目标中用的是实际选出来的 \(A'\)。如果策略包含探索,那么 SARSA 会把探索动作可能带来的后果也考虑进去。

7.3 Q-Learning:学习贪心最优目标

Q-Learning 是 off-policy TD control。Off-policy 的意思是:行为策略和学习目标策略可以不同

Q-Learning 的更新公式是:

\[ Q(S,A)\leftarrow Q(S,A)+\alpha[R+\gamma\max_a Q(S',a)-Q(S,A)]. \]

它与 SARSA 最大的区别在于下一状态部分。SARSA 用实际选择的 \(Q(S',A')\),Q-Learning 用所有动作中最大的 \(\max_a Q(S',a)\)

这表示 Q-Learning 即使当前用 \(\epsilon\)-greedy 探索,更新目标也是假设未来会选择当前估计最优动作。因此它学习的是贪心目标策略的动作价值。

7.4 SARSA 与 Q-Learning 的直观差异

维度 SARSA Q-Learning
策略类型 On-policy Off-policy
下一步目标 实际选择的 \(A'\) 价值最大的动作
更新目标 \(R+\gamma Q(S',A')\) \(R+\gamma\max_a Q(S',a)\)
是否考虑探索风险 考虑 较少考虑
行为风格 更保守 更接近贪心最优

一个经典理解方式是悬崖行走问题。智能体从起点走到终点,中间有悬崖。靠近悬崖的路径最短,但如果探索时随机走错一步就会掉下去。SARSA 因为考虑实际 \(\epsilon\)-greedy 探索的风险,可能学到远离悬崖的安全路径;Q-Learning 因为目标中总是假设下一步选最优动作,可能更倾向于贴近悬崖的短路径。

7.5 Expected SARSA

Expected SARSA 不使用实际采样的 \(A'\),也不像 Q-Learning 只取最大值,而是对下一状态所有动作按当前策略概率求期望:

\[ Q(S,A)\leftarrow Q(S,A)+\alpha \left[ R+\gamma\sum_a \pi(a\mid S')Q(S',a)-Q(S,A) \right]. \]

它介于 SARSA 和 Q-Learning 之间:比 SARSA 的单次采样方差小,因为它求期望;又比 Q-Learning 更忠实于当前策略,因为它使用 \(\pi(a\mid S')\)

8 Model-based Methods

8.1 Model-free 与 Model-based

强化学习方法可以粗略分为 model-free 和 model-based。

Model-free 方法不显式学习环境模型,只直接学习价值函数或策略。前面的 Monte Carlo、TD、SARSA、Q-Learning 都可以看作 model-free 的代表。

Model-based 方法会学习或使用环境模型。环境模型通常回答两个问题:

  1. 在状态 \(s\) 执行动作 \(a\) 后,会到达什么状态 \(s'\)
  2. 会得到什么奖励 \(r\)

如果模型能预测下一状态和奖励,智能体就可以在模型中“想象”未来,再利用模拟经验学习。

8.2 Model-based Methods 的流程

这里的 Model-based Methods 图包含几个部分:

部分 含义
real experience 智能体和真实环境交互得到的经验
model learning 用真实经验学习环境模型
Model 学到的环境模型
simulated experience 通过模型生成的模拟经验
policy/value functions 策略或价值函数
planning update 用模拟经验更新策略或价值

基本循环是:

  1. 智能体在真实环境中行动,获得真实经验。
  2. 用真实经验更新价值函数或策略。
  3. 同时用真实经验学习环境模型。
  4. 用模型生成模拟经验。
  5. 用模拟经验进一步更新价值函数或策略。

这类方法的优势是样本效率高,因为真实环境交互往往昂贵。比如机器人真实摔倒一次成本很高,如果能在模型中模拟很多次,就可以减少真实试错。

8.3 Model-based 的风险

Model-based 方法的核心风险是模型误差。如果模型预测不准确,智能体可能在错误模型里学到错误策略。

例如自动驾驶模型如果低估雨天刹车距离,规划算法可能在模拟中认为某个动作安全,但真实世界中却很危险。因此 model-based 方法需要关注模型质量、误差累积和不确定性估计。

9 Policy Gradient Methods

9.1 为什么要直接学习策略

前面的很多方法先学习价值函数,再通过价值函数选择动作。但在某些任务中,直接学习策略更自然。

例如机器人控制中,动作可能是连续值,如关节角速度。此时不方便枚举所有动作并计算 \(\max_a Q(s,a)\)。策略梯度方法直接用参数 \(\theta\) 表示策略:

\[ \pi(a\mid s,\theta). \]

学习目标是调整 \(\theta\),让策略产生更高回报。

9.2 Softmax 策略

这里先为每个状态-动作对定义数值偏好:

\[ h(s,a,\theta). \]

偏好不是概率,可以是任意实数。为了把偏好变成合法概率,使用 softmax:

\[ \pi(a\mid s,\theta) = \frac{\exp(h(s,a,\theta))} {\sum_b \exp(h(s,b,\theta))}. \]

这个公式的作用是:

  1. 指数函数保证每个动作权重为正。
  2. 分母对所有动作归一化,保证概率和为 \(1\)
  3. 偏好更大的动作会得到更大的概率。

例如两个动作偏好分别为 \(h_1=2\)\(h_2=1\),第一个动作概率会更高,但第二个动作仍然有非零概率。这有助于保持探索。

9.3 REINFORCE with Baseline

这一节的算法要解决的问题是:如果策略本身是带参数的概率分布,我们应该怎样直接调整这些参数,让好动作以后更容易被选中,坏动作以后更不容易被选中?

前面的 Q-Learning、SARSA 通常先学习 \(Q(s,a)\),再根据 \(Q\) 选择动作。策略梯度方法不一定先学完整的 \(Q\) 表,而是直接学习策略:

\[ \pi(a\mid s,\theta). \]

这里 \(\theta\) 是策略参数。算法的目标是让 \(\theta\) 变得更好,使策略在状态 \(s\) 下更倾向于选择能带来高回报的动作。

REINFORCE 的基本想法很直观:

  1. 先按照当前策略跑一条完整 episode。
  2. 看每一步选择的动作最后带来了多少回报 \(G_t\)
  3. 如果某个动作之后的回报比预期好,就提高这个动作以后被选中的概率。
  4. 如果某个动作之后的回报比预期差,就降低这个动作以后被选中的概率。

带 baseline 的 REINFORCE 多做了一件事:它不只看“回报 \(G_t\) 大不大”,而是看“回报 \(G_t\) 是否比这个状态本来预期的价值更好”。这个“本来预期”就是 baseline。

这里的算法使用两类参数:

参数 作用
\(\theta\) 策略参数,决定动作概率
\(\mathbf{w}\) 价值函数参数,用来估计 baseline

在深度强化学习里,可以把 \(\theta\) 理解成策略网络的参数:输入状态 \(s\),输出各个动作的概率 \(\pi(a\mid s,\theta)\)。可以把 \(\mathbf{w}\) 理解成价值网络的参数:输入状态 \(s\),输出这个状态的价值估计 \(\hat v(s,\mathbf{w})\)。不过从理论上说,它们不一定必须是神经网络参数,也可以是线性模型或其他可微函数的参数。

每轮先按当前策略生成完整 episode:

\[ S_0,A_0,R_1,\ldots,S_{T-1},A_{T-1},R_T. \]

对于每个时间步 \(t\),计算从该步开始的回报 \(G_t\)。然后计算优势或误差信号:

\[ \delta = G_t-\hat v(S_t,\mathbf{w}). \]

这里 \(\hat v(S_t,\mathbf{w})\) 是 baseline,表示在状态 \(S_t\) 本来预计能得到多少回报。\(\delta\) 表示实际回报比预期高多少。

这个 \(\delta\) 可以理解为“这次动作表现是否超出预期”:

情况 含义 策略应该怎么改
\(\delta>0\) 实际回报高于预期 增加动作 \(A_t\) 的概率
\(\delta<0\) 实际回报低于预期 降低动作 \(A_t\) 的概率
\(\delta=0\) 正好符合预期 基本不改变

如果 \(\delta>0\),说明动作 \(A_t\) 带来的结果比预期好,应增加它在状态 \(S_t\) 下的概率:

\[ \theta \leftarrow \theta+\alpha^{\theta}\gamma^t\delta\nabla_{\theta}\ln\pi(A_t\mid S_t,\theta). \]

如果 \(\delta<0\),则降低该动作概率。

同时更新价值函数参数:

\[ \mathbf{w}\leftarrow \mathbf{w}+\alpha^{\mathbf{w}}\gamma^t\delta\nabla_{\mathbf{w}}\hat v(S_t,\mathbf{w}). \]

Baseline 不改变策略梯度的期望方向,但能降低方差。直观地说,我们不只看“回报是不是大”,而是看“回报是否比这个状态的正常水平更大”。

9.3.1 例子

假设在某个状态 \(s\) 下,智能体有两个动作:\(a_1\)\(a_2\)。当前策略是:

\[ \pi(a_1\mid s,\theta)=0.6,\quad \pi(a_2\mid s,\theta)=0.4. \]

也就是说,当前策略更倾向于选 \(a_1\)

现在智能体按照当前策略跑了一次 episode。在状态 \(s\) 时,它选择了动作 \(a_2\),最后从这一步开始得到的回报是:

\[ G_t=8. \]

同时,价值函数给出的 baseline 是:

\[ \hat v(s,\mathbf{w})=5. \]

所以:

\[ \delta=G_t-\hat v(s,\mathbf{w})=8-5=3. \]

因为 \(\delta>0\),说明这次选择 \(a_2\) 的结果比原来预期更好。于是策略更新应该让 \(a_2\) 以后在状态 \(s\) 下更容易被选中。更新后的策略可能变成:

\[ \pi(a_1\mid s,\theta)=0.55,\quad \pi(a_2\mid s,\theta)=0.45. \]

具体概率改多少由学习率和梯度决定,但方向很清楚:表现超过预期的动作,概率上调。

如果另一次 episode 中,智能体在状态 \(s\) 选择 \(a_1\),但最后回报只有:

\[ G_t=2, \]

而 baseline 仍然是:

\[ \hat v(s,\mathbf{w})=5, \]

则:

\[ \delta=2-5=-3. \]

这说明动作 \(a_1\) 的结果比预期差,策略更新就会降低 \(a_1\) 以后被选中的概率。

这个例子说明了 REINFORCE with Baseline 的核心:不是简单奖励高就鼓励、奖励低就惩罚,而是看它相对于当前状态的正常水平是更好还是更差。

10 n-step Bootstrapping 与 Eligibility Traces

10.1 从 1-step TD 到 Monte Carlo

1-step TD 用一步奖励加下一状态估计作为目标:

\[ R_{t+1}+\gamma V(S_{t+1}). \]

Monte Carlo 用从当前开始直到 episode 结束的完整真实回报。n-step Bootstrapping 位于两者之间:先看未来 \(n\) 步真实奖励,再用第 \(n\) 步之后的价值估计补上剩余未来。

这里的 n-step return 为:

\[ G_{t:t+n} = R_{t+1}+\gamma R_{t+2}+\cdots+\gamma^{n-1}R_{t+n} +\gamma^n \hat v(S_{t+n},\mathbf{w}_{t+n-1}). \]

其中前 \(n\) 项是真实观察到的奖励,最后一项是 bootstrap。

白色圆圈:状态

黑色圆圈:动作

10.2 n 的影响

\(n=1\) 时:

\[ G_{t:t+1}=R_{t+1}+\gamma \hat v(S_{t+1}). \]

这就是 TD(0) 目标。

\(n\) 很大并一直到 episode 结束时,最后的 bootstrap 项消失,目标接近 Monte Carlo 回报。

方法 看真实奖励的步数 是否 bootstrap 倾向
1-step TD 1 步 更新快,方差小,但偏差可能较大
n-step TD n 步 在 TD 和 MC 之间折中
Monte Carlo 到 episode 结束 偏差小,但方差大、更新慢

10.3 \(\lambda\)-return

n-step return 定义为:

\[ G_{t:t+n} \doteq R_{t+1}+\gamma R_{t+2}+\cdots+\gamma^{n-1}R_{t+n} +\gamma^n\hat v(S_{t+n},\mathbf{w}_{t+n-1}), \quad 0\le t\le T-n. \]

这个公式的意思是:先使用未来 \(n\) 步真实奖励,再用第 \(n\) 步后的状态价值估计 \(\hat v(S_{t+n},\mathbf{w}_{t+n-1})\) 来补上更远的未来。这就是 n-step bootstrapping。

接着,\(\lambda\)-return 的求和形式为:

\[ G_t^\lambda \doteq (1-\lambda)\sum_{n=1}^{\infty}\lambda^{n-1}G_{t:t+n}. \]

这里的权重依次是:

\[ (1-\lambda),\quad (1-\lambda)\lambda,\quad (1-\lambda)\lambda^2,\ldots \]

因此,\(\lambda\)-return 可以理解为把 1-step、2-step、3-step 等不同长度的 return 按权重混合起来。\(\lambda\) 越小,短步数 return 权重越大;\(\lambda\) 越接近 \(1\),更长步数的 return 权重越大。

特殊情况:

\(\lambda\) 含义
\(\lambda=0\) 只使用 1-step TD
\(\lambda\approx 1\) 更接近 Monte Carlo
\(0<\lambda<1\) 混合不同长度的回报

10.4 Forward View

前向视角(forward view)从当前状态往未来看。它问的是:当前状态应该用未来哪些长度的回报来更新?答案是用 \(\lambda\)-return,即不同 n-step return 的加权平均。

前向视角适合解释算法原理,因为它直观地展示了 TD(\(\lambda\)) 如何在 TD 和 Monte Carlo 之间插值。但它的问题是需要知道未来很多步,甚至要等 episode 结束,因此不方便在线实时更新。

10.5 Backward View 与资格迹

后向视角(backward view)从当前 TD error 往过去分配信用。它引入资格迹(eligibility trace)\(z\),记录过去访问过的状态或特征还有多少“资格”被当前误差信号更新。

Semi-gradient TD(\(\lambda\)) 用于估计:

\[ \hat v \approx v_\pi. \]

也就是说,我们想用一个带参数的函数 \(\hat v(S,\mathbf{w})\) 来近似策略 \(\pi\) 下的真实状态价值 \(v_\pi(S)\)

算法的输入是:

  1. 要被评估的策略 \(\pi\)
  2. 一个可微的价值函数近似器 \(\hat v:S^+\times\mathbb{R}^d\rightarrow\mathbb{R}\),并且满足 \(\hat v(terminal,\cdot)=0\)

初始化价值函数参数:

\[ \mathbf{w}\leftarrow \text{任意值,例如 }\mathbf{w}=\mathbf{0}. \]

然后对每个 episode 重复以下过程:

  1. 初始化状态 \(S\)
  2. 初始化资格迹:

\[ \mathbf{z}\leftarrow \mathbf{0}. \]

这里 \(\mathbf{z}\) 是一个 \(d\) 维向量,维度和参数 \(\mathbf{w}\) 相同。

  1. 对 episode 中的每一步重复:

按照策略选择动作:

\[ A\sim \pi(\cdot\mid S). \]

执行动作 \(A\),观察奖励和下一状态:

\[ R,\ S'. \]

更新资格迹:

\[ \mathbf{z}\leftarrow \gamma\lambda\mathbf{z}+\nabla \hat v(S,\mathbf{w}). \]

这表示旧资格迹会按 \(\gamma\lambda\) 衰减,当前状态的特征梯度会加入资格迹。

计算 TD error:

\[ \delta \leftarrow R+\gamma \hat v(S',\mathbf{w})-\hat v(S,\mathbf{w}). \]

用 TD error 和资格迹更新参数:

\[ \mathbf{w}\leftarrow \mathbf{w}+\alpha\delta\mathbf{z}. \]

最后令:

\[ S\leftarrow S', \]

直到 \(S'\) 是终止状态。

直观理解:如果某个状态刚刚出现过,它的资格迹很大,当前 TD error 会强烈更新它;如果它很久以前出现过,资格迹已经衰减,更新影响就小。

10.6 Eligibility Traces 的意义

Eligibility Traces 的关键作用可以总结为:

  1. 它统一了 TD 和 Monte Carlo。
  2. \(\lambda=0\) 是 one-step TD,\(\lambda=1\) 接近 Monte Carlo。
  3. 中间值通常能取得更好的偏差-方差折中。
  4. 它允许在线实现类似 Monte Carlo 的多步信用分配。

这部分初学者最重要的是理解“信用分配”。如果最终得到奖励,不只最后一步有功,之前很多步也可能有贡献。Eligibility traces 就是一种把当前反馈分配给过去状态的方法。

11 深度强化学习与多智能体自课程

11.1 为什么需要深度强化学习

前面很多公式默认状态和动作可以用表格枚举。例如迷宫格子数量有限,可以为每个状态存一个 \(V(s)\),为每个状态-动作对存一个 \(Q(s,a)\)

但现实任务中状态可能非常高维。例如围棋棋盘有极多可能局面,自动驾驶输入可能是图像、速度、地图和传感器数据,机器人控制涉及连续状态和连续动作。表格方法无法直接处理这些情况。

深度强化学习(Deep Reinforcement Learning)用神经网络近似价值函数或策略:

\[ V(s)\approx V(s;\mathbf{w}),\quad Q(s,a)\approx Q(s,a;\mathbf{w}),\quad \pi(a\mid s)\approx \pi(a\mid s;\theta). \]

神经网络的作用是从高维输入中学习有用表示,并把经验推广到相似状态。

11.2 AlphaGo 例子

AlphaGo 可以说明深度网络和强化学习的结合。围棋困难在于:

  1. 状态空间巨大,棋盘局面数量远超暴力搜索能力。
  2. 动作选择复杂,每一步有许多可能落子点。
  3. 局面价值难以手工评估,因为一次落子的影响可能很久之后才显现。

AlphaGo 使用两类网络:

网络 作用
策略网络(policy network) 给出下一步可能动作,缩小搜索范围
价值网络(value network) 评估当前棋盘局面的胜率或价值

这些网络先从人类专家棋谱中学习,再通过自我对弈进行强化学习。这个例子体现了深度学习和强化学习的互补:深度学习负责表示和泛化,强化学习负责通过长期回报改进行为。

11.3 Multi-Agent Autocurricula

“Emergent tool use from multi-agent autocurricula” 体现了多智能体自课程的思想。多智能体自课程(multi-agent autocurricula)指多个智能体在互动中自动产生越来越复杂的训练任务。

在单智能体任务中,环境通常相对固定;在多智能体任务中,其他智能体也是会学习的,因此环境会随对手或队友策略变化而变化。这会产生一种自动课程:一方学会某种技巧后,另一方必须学会应对,从而推动任务难度升级。

例如一组智能体玩追逐和躲避游戏。追逐者变强后,躲避者需要学会利用障碍;躲避者学会防御后,追逐者又可能学会使用工具。复杂行为不是人工逐条写出来的,而是在竞争或协作中涌现。

12 强化学习的挑战与总结

12.1 强化学习的挑战

强化学习面临多个挑战。下面按初学者更容易理解的方式展开。

挑战 解释 例子
状态表示与特征学习 状态可能高维、连续,不能简单列成表 自动驾驶看到的是图像和传感器流
奖励设计 奖励如果设计不好,会诱导错误行为 只奖励速度可能导致机器人不顾安全
策略评估延迟 动作后果可能很久以后才出现 下棋一步棋可能几十步后才体现价值
探索-利用权衡 要尝试新动作,也要使用已知好动作 推荐系统既要推荐热门内容,也要试探用户新兴趣
样本效率 真实试错代价高,不能无限采样 机器人不能摔坏几万次来学习走路
世界模型学习 模型可以帮助规划,但模型误差会误导策略 模拟器不准会导致真实部署失败
子问题选择 智能体需要知道该练什么 从简单任务逐渐学到复杂任务
多智能体学习 多个学习者相互影响,环境变得非平稳 游戏、市场、交通系统中都有其他决策者

12.2 金融最优执行例子

这里的 “RL for Optimized Execution” 把交易执行看作随机最优控制问题。假设要在一段时间内买入或卖出一定数量股票,智能体需要决定每一时刻如何下单。

可以对应为:

强化学习元素 金融执行中的含义
状态 剩余时间、剩余股票数量、当前订单簿、市场波动
动作 下单价格、下单数量、订单在订单簿中的位置
奖励 成交价格、交易成本、滑点、风险调整收益
随机性 市场价格和其他交易者行为不可完全预测

这个例子说明强化学习不仅用于游戏,还可用于真实决策系统。但真实系统更强调风险、稳定性和可解释性。

12.3 核心关系

知识点很多,但可以用一条主线串起来:

  1. 强化学习目标是最大化长期回报 \(G_t\)
  2. 为了判断长期回报,需要定义价值函数 \(v_\pi(s)\)\(q_\pi(s,a)\)
  3. Bellman 方程把长期价值拆成即时奖励和下一状态价值。
  4. 策略评估估计价值,策略改进用价值优化策略。
  5. Monte Carlo 用完整回报学习价值。
  6. TD 用一步奖励加下一状态估计学习价值。
  7. SARSA 和 Q-Learning 把 TD 思想用于控制。
  8. Policy Gradient 直接优化策略参数。
  9. Eligibility Traces 用 \(\lambda\) 把 TD 和 Monte Carlo 联系起来。

12.4 必背公式与理解

回报:

\[ G_t = \sum_{k=0}^{\infty}\gamma^kR_{t+k+1}. \]

含义:从当前开始,未来奖励的折扣和。

状态价值:

\[ v_\pi(s)=\mathbb{E}_\pi[G_t\mid S_t=s]. \]

含义:在状态 \(s\) 开始,按策略 \(\pi\) 行动的期望回报。

Bellman 方程:

\[ v_\pi(s) = \sum_a \pi(a\mid s)\sum_{s',r}p(s',r\mid s,a)[r+\gamma v_\pi(s')]. \]

含义:当前状态价值等于所有可能动作、转移和奖励下的“即时奖励 + 折扣未来价值”的期望。

Bandit 增量更新:

\[ Q_{n+1}=Q_n+\frac{1}{n}[R_n-Q_n]. \]

含义:用新奖励和旧估计的误差修正平均值。

TD(0):

\[ V(S_t)\leftarrow V(S_t)+\alpha[R_{t+1}+\gamma V(S_{t+1})-V(S_t)]. \]

含义:走一步就更新,用下一状态价值估计未来。

SARSA:

\[ Q(S,A)\leftarrow Q(S,A)+\alpha[R+\gamma Q(S',A')-Q(S,A)]. \]

含义:用实际选择的下一动作更新,属于 on-policy。

Q-Learning:

\[ Q(S,A)\leftarrow Q(S,A)+\alpha[R+\gamma\max_a Q(S',a)-Q(S,A)]. \]

含义:用下一状态最优动作价值更新,属于 off-policy。

\(\lambda\)-return:

\[ G_t^\lambda = (1-\lambda)\sum_{n=1}^{\infty}\lambda^{n-1}G_{t:t+n}. \]

含义:把不同步数的 n-step return 加权平均,在 TD 和 Monte Carlo 之间折中。

12.5 概念辨析

容易混淆点 正确理解
reward 和 return reward 是一步奖励,return 是未来奖励的折扣总和
state value 和 action value \(v(s)\) 评价状态,\(q(s,a)\) 评价状态下某个动作
policy evaluation 和 policy improvement 前者估计当前策略价值,后者用价值改进策略
Monte Carlo 和 TD MC 等完整 episode,TD 走一步就更新
SARSA 和 Q-Learning SARSA 用实际下一动作,Q-Learning 用最大下一动作
on-policy 和 off-policy on-policy 学习正在执行的策略,off-policy 可以用一种策略探索、学习另一种目标策略
model-free 和 model-based model-free 不显式学环境模型,model-based 学或使用环境模型

12.6 总结

强化学习研究的是智能体如何在与环境的连续交互中,通过奖励信号学习最大化长期回报的策略。 从 Bandit 的动作价值估计开始,可以逐步引出 Bellman 方程、策略迭代、Monte Carlo、TD、SARSA、Q-Learning、模型方法、策略梯度和资格迹。所有这些方法都围绕同一件事展开:如何更准确地估计未来价值,并用这些估计做出更好的动作选择。