使用《太空侵略者》的深度 Q 学习
深度 Q 学习(DQN)通过用神经网络取代传统的 Q 表,使强化学习代理能够在具有庞大状态空间的环境中运行。该方法使代理能够学习复杂任务,例如玩 Atari 游戏《太空侵略者》,其可能的状态数量庞大到表格方法无法处理。
从 Q 学习到深度 Q 学习
传统的 Q 学习是一种表格方法,使用 Q 表来存储每个可能的状态-动作对的价值。虽然在小型环境(例如具有 14 个状态的 FrozenLake 或具有 500 个状态的 Taxi-v3)中有效,但它无法扩展到复杂环境。
在 Atari 环境中,观测空间为 (210, 160, 3),像素值范围为 0 到 255,导致状态空间为 $256^{100800}$。由于为如此多的状态创建表格是不可能的,深度 Q 学习使用参数化的 Q 函数 $Q_{\theta}(s, a)$——一个神经网络,用于在给定状态时近似每个可能动作的 Q 值。
深度 Q 网络(DQN)架构
DQN 架构以四帧预处理后的堆叠作为输入,并输出每个可能动作的 Q 值向量。随后,代理使用 ε-贪婪策略选择估计价值最高的动作。
输入预处理与时间信息
为了降低计算复杂度和训练时间,输入帧会进行以下预处理:
- 下采样与灰度化:图像被缩小至 84×84 像素并转换为灰度图,将三个 RGB 通道合并为一个。
- 裁剪:去除屏幕中不必要的部分。
- 帧堆叠:将连续的四帧堆叠在一起,以解决时间信息的限制问题。单帧无法传达运动(例如 Pong 中球的方向);堆叠四帧使网络能够捕捉速度和方向。
处理后的输入通过三个卷积层,以利用帧之间的空间关系,随后通过全连接层输出最终的 Q 值。
深度 Q 学习算法
与直接更新状态-动作对的标准 Q 学习不同,深度 Q 学习使用损失函数计算预测 Q 值与 Q 目标之间的差异。随后通过梯度下降更新网络权重,以最小化该损失。
训练包括两个交替的阶段:
- 采样:代理执行动作并将产生的经验元组(状态、动作、奖励、下一个状态)存入回放记忆。
- 训练:从回放记忆中随机抽取一小批元组,进行梯度下降更新。
稳定训练
将非线性函数逼近器(神经网络)与自举相结合可能导致不稳定。DQN 实现了三种主要方案来缓解此问题:
1. 经验回放
经验回放使用回放缓冲区来存储经验样本以供重复使用。这带来了两个主要好处:
- 效率:代理可以多次从相同经验中学习。
- 去相关性:从缓冲区随机抽样可防止网络仅学习最近的连续经验,从而避免灾难性遗忘并防止动作值出现振荡或发散。
2. 固定 Q 目标
在基本的 Q 学习中,目标值会在每次权重更新时变化,产生“移动目标”问题,导致训练振荡。DQN 通过使用具有固定参数的独立目标网络来估计 TD 目标,从而解决此问题。目标网络的参数仅每 $C$ 步与深度 Q 网络同步一次。
3. 双重 DQN
双重 DQN 解决了 Q 值的高估问题。在标准 DQN 中,使用下一个状态的最大 Q 值来计算目标,这可能导致噪声估计使非最优动作获得更高值,从而出现误判。双重 DQN 将动作选择与目标生成解耦:
- DQN 网络 为下一个状态选择最佳动作。
- 目标网络 计算该特定动作的 Q 值。
这种分离降低了高估,并实现更快、更稳定的学习。