深度Q网络(DQN)的训练需要明确定义如何调整其主Q网络的参数 (parameter)。这一训练过程基于DQN架构,该架构包含经验回放和目标网络等机制。核心任务是调整由θ表示的网络参数,使输出Q(s,a;θ)能够逼近真实的最优动作价值函数Q∗(s,a)。
回想一下,在标准Q学习中,我们基于贝尔曼方程迭代更新Q(s,a)的估计值。我们将当前的估计值朝向一个目标值移动,该目标值源自观察到的奖励和下一个状态的估计值。DQN借鉴了这一基本思想,并将其调整用于使用神经网络 (neural network)进行函数逼近。
我们需要一种方法来量化 (quantization)网络对给定状态-动作对(s,a)的当前预测与目标值之间的误差。这个误差衡量由损失函数 (loss function)定义。训练的目标是最小化这个损失。
对于从经验回放缓冲区采样得到的转移(s,a,r,s′),我们的Q网络预测值Q(s,a;θ)。目标值应该是什么?就像在Q学习中一样,目标旨在包含即时奖励r以及从下一个状态s′可能采取的最佳动作的折扣价值。然而,为了提升稳定性(如前一节关于目标网络所讨论的),我们使用带有参数θ−的目标网络来估计下一个状态的价值。
目标值,通常表示为y,计算方式如下:
y=r+γa′maxQ(s′,a′;θ−)
这里,γ是折扣因子,而maxa′Q(s′,a′;θ−)表示目标网络对下一个状态s′在所有可能的后续动作a′上预测的最大Q值。如果s′是终止状态,则目标简单地是y=r。
有了预测值Q(s,a;θ)和目标值y,我们现在可以定义损失。由于我们希望预测值尽可能接近目标值,一个自然的选择是**均方误差(MSE)**损失,这在回归问题中很常见。对于单个转移,平方误差是(y−Q(s,a;θ))2。
实际中,我们在从经验回放缓冲区D中采样得到的小批量转移上计算损失。我们旨在最小化的损失函数L(θ)是这个平方误差在采样转移上的期望:
L(θ)=E(s,a,r,s′)∼D[(y−Q(s,a;θ))2]
或者,更实际地,对于N个转移的迷你批量{(si,ai,ri,si′)}i=1N:
L(θ)≈N1i=1∑N((ri+γa′maxQ(si′,a′;θ−))−Q(si,ai;θ))2
这个损失函数衡量的是目标值(使用目标网络计算)与主网络预测的Q值之间的平均平方差。
训练网络
训练过程涉及迭代执行以下步骤:
- 从经验回放缓冲区D中采样一小批转移(s,a,r,s′)。
- 对于小批量中的每个转移:
a. 使用目标网络计算目标值y=r+γmaxa′Q(s′,a′;θ−)。处理终止状态,此时y=r。
b. 使用主网络计算预测值Q(s,a;θ)。
- 使用上述公式计算小批量中目标值与预测值之间的MSE损失。
- 对损失L(θ)相对于主网络参数 (parameter)θ执行一步梯度下降 (gradient descent)。这会更新主Q网络的权重 (weight)以减少误差。
θ←θ−α∇θL(θ)
其中α是学习率。
需要注意的是,在计算梯度∇θL(θ)时,目标值y被视为固定常量。梯度只流经主网络参数θ,而不流经目标网络参数θ−。这种通过使用独立的目标网络和经验回放实现的解耦,是稳定DQN训练过程的十分关键之处。如果没有这些方法,不断变化的目标和相关数据样本将使收敛变得困难。
定期地,在一定数量的训练步骤后,目标网络θ−的权重会更新以匹配主网络θ的权重。这保证了目标值能够逐渐适应主网络所代表的改进策略,同时在较短的时间尺度内保持稳定性。
明白这个损失函数 (loss function)和训练过程对于实现和调整DQN智能体十分重要。在下一节中,我们将介绍一个实际实现。