深度 Q-网络 (DQN) 算法将深度神经网络与 Q-学习相结合。它采用经验回放和目标网络来提高训练稳定性。该标准算法提供了一个框架,用于训练智能体在复杂环境中学习最优动作值函数。
核心思想依然源于 Q-学习:我们希望学习一个动作值函数 Q(s,a),它近似表示在状态 s 执行动作 a 后并遵循最优策略的预期回报。然而,我们不使用表格,而是使用一个由权重 θ 参数化的深度神经网络来表示这个函数:Q(s,a;θ)。为了处理前面讨论的不稳定性问题,我们引入了两项主要改进:
- 经验回放: 我们将智能体的经验(状态、动作、奖励、下一状态元组)存储在一个经验回放缓冲区中。在训练期间,我们从缓冲区中随机抽取这些经验的小批量,用于更新网络。这打破了观测序列中的时间关联,并平滑了数据分布的变化。
- 目标网络: 我们使用一个独立的神经网络,称为目标网络,其权重为 θ−,用于计算更新规则中使用的目标 Q 值。权重 θ− 会定期从主 Q 网络权重 θ 复制而来,但在两次更新之间会保持固定若干步。这为 Q-学习更新提供了一个更稳定的目标,防止目标值追逐主网络持续变化的预测。
DQN 算法流程
下面是典型 DQN 训练循环的步骤分解:
-
初始化:
- 初始化具有固定容量的经验回放缓冲区 D。
- 使用随机权重 θ 初始化主 Q 网络 Q。
- 使用权重 θ−=θ 初始化目标 Q 网络 Q^。
-
幕循环: 对于每一幕:
- 重置环境并获取初始状态 s1。
- 如有必要,对初始状态进行预处理(例如,堆叠帧)以创建网络的输入表示。
-
步循环: 在本幕中的每一步 t=1,2,...T:
- 动作选择: 使用源自主 Q 网络的 ϵ-贪婪策略,根据当前状态 st 选择动作 at:
- 以 ϵ 的概率,选择一个随机动作。
- 以 1−ϵ 的概率,选择 at=argmaxaQ(st,a;θ)。
(通常,ϵ 会逐渐衰减,从高值开始并随时间降低,以从(行为)随机性转向(行为)利用性)。
- 执行动作: 在环境中执行动作 at。观察奖励 rt+1 和下一状态 st+1。预处理 st+1。
- 存储经验: 将转换元组 (st,at,rt+1,st+1) 存储在经验回放缓冲区 D 中。
- 采样小批量: 如果经验回放缓冲区包含足够的经验,从 D 中随机采样 N 个转换 (sj,aj,rj+1,sj+1) 的小批量。
- 计算目标值: 对于小批量中的每个转换 (sj,aj,rj+1,sj+1),计算目标值 yj:
- 如果 sj+1 是终止状态,目标值就是奖励:yj=rj+1。
- 否则,目标值使用目标网络 Q^ 计算:
yj=rj+1+γa′maxQ^(sj+1,a′;θ−)
γ 是折扣因子。请注意,最大化操作是对目标网络对下一状态 sj+1 的输出进行的。
- 梯度下降更新: 对主 Q 网络权重 θ 执行梯度下降步骤。损失函数通常是预测 Q 值(来自主网络,针对已采取的动作 aj)与计算出的目标值 yj 之间的均方误差 (MSE):
L(θ)=N1j=1∑N(yj−Q(sj,aj;θ))2
使用 Adam 或 RMSprop 等优化器更新 θ:θ←θ−α∇θL(θ)。
- 更新目标网络: 每隔 C 步(其中 C 是一个超参数),通过复制主网络权重来更新目标网络权重:θ−←θ。
- 状态推进: 设置 st←st+1。
- 检查终止: 如果 st 是终止状态,则结束当前幕。
DQN 算法中的高级交互流程。智能体使用其 Q 网络进行动作选择,将经验存储在经验回放缓冲区中,采样批次以使用目标网络计算目标值,并通过梯度下降更新 Q 网络。目标网络定期从 Q 网络更新。
这种结构化方法,集成了经验回放和固定 Q 目标,使得 DQN 能够成功训练深度神经网络进行 Q-学习,让智能体可以直接从像素等高维感官输入中学习复杂行为,这是强化学习中的一项重要进展。下一节将介绍 DQN 中使用的神经网络的一些架构选择。