====== Experience Replay ====== Experience Replay(经验回放)是 [[强化学习]] 中的一种训练方法,最早由 Lin 在 1992 年的论文《Self-Improving Reactive Agents Based on Reinforcement Learning, Planning and Teaching》中系统提出。其核心思想是:**将 Agent 与环境交互产生的历史经验保存到一个 Replay Buffer 中,然后在训练时反复随机采样这些历史经验,而不是只使用当前时刻刚产生的数据。** Experience Replay 后来成为 [[DQN]] 等 [[深度强化学习]] 算法的重要组成部分。 ===== 基本思想 ===== 强化学习中的一次交互通常可以表示为: (s, a, r, s') 其中: * s:当前状态(State)。 * a:Agent 采取的动作(Action)。 * r:环境给予的奖励(Reward)。 * s':执行动作后的下一状态(Next State)。 Agent 不会直接丢弃这些经验,而是将它们存入 Replay Buffer: 环境交互 → 获得经验 → 存入 Replay Buffer → 随机采样 → 训练网络 → 重复。 ===== 为什么需要 Replay ===== 如果每次只使用 Agent 刚刚获得的经验进行训练,会产生严重的问题。 例如 Agent 连续经历: s₁ → s₂ → s₃ → s₄ → s₅ 那么训练数据之间具有很强的时间相关性。 神经网络通常假设训练样本之间具有一定程度的独立性,而连续的强化学习经验往往高度相关。 Experience Replay 通过随机采样历史经验: s₁、s₄、s₂、s₅、s₃ 降低了训练数据之间的相关性,使神经网络训练更加稳定。 ===== Replay Buffer ===== 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 的关系 ===== [[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]]。 ===== Replay 与 Off-Policy ===== Experience Replay 与 [[Off-Policy]] 强化学习具有天然的联系。 例如 DQN 可以使用过去策略产生的经验训练当前策略。 Buffer 中的经验可能是在较旧的策略下产生的,但当前 Q Network 仍然可以利用这些经验进行学习。 因此: 过去策略产生的数据 → Replay Buffer → 当前策略学习。 这也是为什么 Experience Replay 特别适合 DQN 这类 Off-Policy 算法。 ===== Experience Replay 的问题 ===== Experience Replay 并不是没有缺点。 **样本分布变化** 随着 Agent 策略不断变化,Replay Buffer 中可能同时存在由不同策略产生的经验。 **旧经验** 过于 오래的经验可能与当前策略已经不匹配。 **采样效率** 随机采样意味着重要经验和普通经验被选择的概率相同。 **存储成本** 大型状态,例如图像,需要占用大量存储空间。 ===== Prioritized Experience Replay ===== 为了解决随机采样的问题,Schaul 等人在 2015 年提出 [[Prioritized Experience Replay]](PER)。 其核心思想是: **重要的经验应该被更频繁地采样。** 一个常见指标是 TD Error: δ = r + γ max Q(s', a') - Q(s, a) 如果某条经验的 TD Error 很大,说明当前模型对这条经验的预测存在较大误差,因此可以提高它被采样的概率。 随机 Replay: 所有经验 → 近似相同概率采样。 Prioritized Replay: 高 TD Error 经验 → 更高采样概率。 这样可以让训练更加集中于当前模型还没有学好的经验。 ===== Replay 与现代强化学习 ===== Experience Replay 最初主要用于值函数方法,例如 [[DQN]]。 后来它也被广泛应用于其他 [[Off-Policy]] 强化学习算法,例如: * [[DDPG]] * [[TD3]] * [[SAC]] 不过,[[On-Policy]] 算法通常不能直接使用任意旧经验进行训练,因为它们要求训练数据与当前策略之间具有特定关系。 ===== Experience Replay 的核心意义 ===== Experience Replay 解决了深度强化学习中的两个重要问题: **降低样本相关性** 随机抽取历史经验,使训练数据更加接近独立同分布。 **提高样本利用率** 同一条环境经验可以被模型重复学习。 因此,Experience Replay 可以概括为: **存储经验 → 随机/按优先级采样 → 重复训练。** 它是连接 [[强化学习]] 与 [[DNN]] 训练方法的重要技术,也是 [[DQN]] 能够稳定训练的重要基础之一。 ===== 相关条目 ===== * [[强化学习]] * [[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》