Experience Replay(经验回放)是 强化学习 中的一种训练方法,最早由 Lin 在 1992 年的论文《Self-Improving Reactive Agents Based on Reinforcement Learning, Planning and Teaching》中系统提出。其核心思想是:将 Agent 与环境交互产生的历史经验保存到一个 Replay Buffer 中,然后在训练时反复随机采样这些历史经验,而不是只使用当前时刻刚产生的数据。
强化学习中的一次交互通常可以表示为:
(s, a, r, s')
其中:
* s:当前状态(State)。 * a:Agent 采取的动作(Action)。 * r:环境给予的奖励(Reward)。 * s':执行动作后的下一状态(Next State)。
Agent 不会直接丢弃这些经验,而是将它们存入 Replay Buffer:
环境交互 → 获得经验 → 存入 Replay Buffer → 随机采样 → 训练网络 → 重复。
如果每次只使用 Agent 刚刚获得的经验进行训练,会产生严重的问题。
例如 Agent 连续经历:
s₁ → s₂ → s₃ → s₄ → s₅
那么训练数据之间具有很强的时间相关性。
神经网络通常假设训练样本之间具有一定程度的独立性,而连续的强化学习经验往往高度相关。
Experience Replay 通过随机采样历史经验:
s₁、s₄、s₂、s₅、s₃
降低了训练数据之间的相关性,使神经网络训练更加稳定。
Replay Buffer(经验回放缓冲区)是保存历史经验的数据结构。
例如:
Replay Buffer = { (s₁, a₁, r₁, s₂), (s₂, a₂, r₂, s₃), (s₃, a₃, r₃, s₄), …… }
训练时从 Buffer 中随机抽取一个 Mini-Batch:
Batch → 神经网络 → 计算 Loss → 反向传播 → 更新参数。
当 Buffer 达到容量上限后,通常会删除较旧的经验,为新经验腾出空间。
Experience Replay 最重要的机制是随机采样。
假设 Buffer 中有 100,000 条经验,每次训练随机抽取 64 条:
Replay Buffer → Random Sampling → 64 experiences → Training
这样可以让一个经验被多次使用,同时降低连续经验之间的相关性。
DQN 是 Experience Replay 最经典的应用之一。
2013 年 DeepMind 的论文《Playing Atari with Deep Reinforcement Learning》将 Experience Replay 与深度神经网络结合,用于训练能够玩 Atari 游戏的 Agent。
2015 年发表的《Human-level control through deep reinforcement learning》进一步系统展示了 DQN 的成果。
DQN 的基本训练过程可以表示为:
环境 → 获得 (s, a, r, s') → Replay Buffer → 随机采样 Batch → 计算 TD Target → 更新 Q Network。
因此,Experience Replay 是经典 DQN 训练稳定性的重要来源之一。
传统在线强化学习可以近似表示为:
当前经验 → 立即训练 → 下一条经验 → 立即训练。
Experience Replay 则是:
当前经验 → 保存 → 继续收集经验 → 随机抽取历史经验 → 训练。
因此,一条历史经验可能被训练多次。
Experience Replay 的另一个重要优势是提高数据利用率。
在强化学习中,Agent 与环境交互可能非常昂贵。
例如机器人执行一次动作可能需要真实时间,而游戏 Agent 也可能需要大量环境交互。
如果一条经验只训练一次:
1 次交互 → 1 次训练。
使用 Replay 后:
1 次交互 → 保存经验 → 多次采样 → 多次训练。
因此,Experience Replay 能够提高 Sample Efficiency。
Experience Replay 与 Off-Policy 强化学习具有天然的联系。
例如 DQN 可以使用过去策略产生的经验训练当前策略。
Buffer 中的经验可能是在较旧的策略下产生的,但当前 Q Network 仍然可以利用这些经验进行学习。
因此:
过去策略产生的数据 → Replay Buffer → 当前策略学习。
这也是为什么 Experience Replay 特别适合 DQN 这类 Off-Policy 算法。
Experience Replay 并不是没有缺点。
样本分布变化
随着 Agent 策略不断变化,Replay Buffer 中可能同时存在由不同策略产生的经验。
旧经验
过于 오래的经验可能与当前策略已经不匹配。
采样效率
随机采样意味着重要经验和普通经验被选择的概率相同。
存储成本
大型状态,例如图像,需要占用大量存储空间。
为了解决随机采样的问题,Schaul 等人在 2015 年提出 Prioritized Experience Replay(PER)。
其核心思想是:
重要的经验应该被更频繁地采样。
一个常见指标是 TD Error:
δ = r + γ max Q(s', a') - Q(s, a)
如果某条经验的 TD Error 很大,说明当前模型对这条经验的预测存在较大误差,因此可以提高它被采样的概率。
随机 Replay:
所有经验 → 近似相同概率采样。
Prioritized Replay:
高 TD Error 经验 → 更高采样概率。
这样可以让训练更加集中于当前模型还没有学好的经验。
Experience Replay 最初主要用于值函数方法,例如 DQN。
后来它也被广泛应用于其他 Off-Policy 强化学习算法,例如:
不过,On-Policy 算法通常不能直接使用任意旧经验进行训练,因为它们要求训练数据与当前策略之间具有特定关系。
Experience Replay 解决了深度强化学习中的两个重要问题:
降低样本相关性
随机抽取历史经验,使训练数据更加接近独立同分布。
提高样本利用率
同一条环境经验可以被模型重复学习。
因此,Experience Replay 可以概括为:
存储经验 → 随机/按优先级采样 → 重复训练。
* 强化学习 * DQN * Off-Policy * Prioritized Experience Replay * Sample Efficiency * DDPG * SAC
* Lin, L.-J., 1992, 《Self-Improving Reactive Agents Based on Reinforcement Learning, Planning and Teaching》 * Mnih et al., 2013, 《Playing Atari with Deep Reinforcement Learning》 * Mnih et al., 2015, 《Human-level control through deep reinforcement learning》 * Schaul et al., 2015, 《Prioritized Experience Replay》