基于价值的深度强化学习(DQN)


1 DQN介绍

要理解DQN,我们首先需要理解Q值。Q值是一个函数,Q(s, a)表示在状态s下执行动作a可以得到的预期奖励。直观上讲,Q值告诉智能体哪些动作在长期来看更有利

Q学习的目标是找到最优的Q值函数,从而智能体可以通过查看Q值来选择最佳动作。如何找到Q函数?深度学习的魅力就是遇到解决不了的问题直接扔给神经网络进行学习即可。在DQN中,我们使用一个深度神经网络来预测Q值,网络的输入是状态,输出是每个动作的Q值。

想象一下,有一个机器人(智能体)在玩一个游戏。它的目标是获取尽可能多的分数(奖励)。游戏中的每个场景可以视为一个“状态”,机器人可以采取各种动作(比如向左走、向右走)。在传统的游戏学习方法中,我们可能会告诉机器人每一步具体该做什么。但在DQN中,我们不这么做,我们让机器人自己学习。机器人会尝试不同的动作,并观察哪些动作带来更高的分数。在传统机器学习方法中,机器人有一个记分板(Q表),上面记录了在每个场景(状态)中采取不同动作可能获得的分数。在游戏变得非常复杂时,记分板(Q表)变得非常大,机器人不可能记住所有的信息。这时,我们用一个神经网络来帮助机器人估计这个记分板上的分数,即Q值。神经网络试图预测在特定状态下采取特定动作能得到的分数(Q值)。

图片[1]-基于价值的深度强化学习(DQN)-点头深度学习网站
DQN算法结构

问题来了,如何使得神经网络使其预测的Q值尽可能接近真实的Q值?注意,因为环境的复杂性和不确定性。这些Q值通常不能直接计算,而是需要通过与环境的交互来逐渐估计和逼近。贝尔曼方程和时序差分学习是解决这问题的关键。

2 贝尔曼方程与时序差分学习(TD-Learning)

贝尔曼方程是强化学习中的一个核心概念。贝尔曼方程基于马尔可夫决策过程(MDP),它提供了一种计算当前状态价值或动作价值(考虑未来奖励)的递归方法。递归的思想是将一个大问题分解为相似的小问题。在这里,贝尔曼方程将一个长期的序列决策问题分解为一步决策问题和剩余的序列决策问题。对于动作价值函数 \(Q(s, a)\) ,贝尔曼方程可以表示为:

$$Q(s, a)=\mathbb{E} \left[R_{t+1}+\gamma \max_{a^{\prime}} Q\left(S_{t+1}, a^{\prime}\right) \mid S_t=s, A_t=a\right]$$

这里,\(\mathbb{E}[\cdot]\) 表示期望值, \(R_{t+1}\) 是奖励, \(\gamma\) 是折扣因子,用来衡量未来奖励的当前价值。这里有几个要点:

1. 即时奖励 \(R_{t+1}\) :表示在状态 \(s\) 下执行动作 \(a\) 之后智能体立即获得的奖励。

2. 折扣未来奖励 \(\gamma \max _{a^{\prime}} Q\left(S_{t+1}, a^{\prime}\right)\) : 代表智能体预期在下一个状态 \(S_{t+1}\) 采取最佳动作 \(a^{\prime}\) 能够获得的折扣后的未来回报。这里, \(\gamma\) (折扣因子) 确保了未来的奖励相比于即时奖励的重要性降低。这是一个符合常理的设定,就像现实生活中,十年后给你一百块带来的期望肯定远远小于即可给你一百块钱带来的期望。

3. 期望值 \(\mathbb{E}[\cdot]\) : 因为环境的不确定性或策略的随机性,贝尔曼方程使用期望值来综合所有可能的下一状态和奖励,确保智能体的决策考虑了所有可能的未来情景。

在强化学习中,直接评估或学习一个策略在长期(整个状态空间和时间范围)上的总体效果是非常困难的。使用递归方式,贝尔曼方程使我们能够通过评估从当前状态出发的一步行动,然后将其余的问题归结为已经定义好的子问题(评估后续状态),这样可以简化学习过程,并使得学习在每个步骤上都是可行的。而且在实际环境中,尤其是非静态环境中,状态和奖励的动态可能会随时间变化。递归分解使策略能够更灵活地适应这种变化,因为它侧重于当前的最佳行动和预期的即时后果,而非一个长期固定的计划。

在贝尔曼方程中,期望 \(\mathbb{E}[\cdot]\) 是关于环境动态(即从状态 \(s\) 通过动作 \(a\) 转移到下一个状态 \(s^{\prime}\) 并获得奖励 \(R_{t+1}\) ) 的统计平均。这个期望的准确计算通常需要环境的完整模型 (即状态转移概率和奖励函数),这在很多实际应用中是未知的或者难以精确获得的。这主要是因为几个原因,包括环境的不确定性、状态空间和动作空间的庞大以及模型的未知性,我们在1.3小节介绍过。这些因素使得直接计算贝尔曼方程中的期望值变得不切实际或计算上不可行,因此我们采用时序差分(TD)学习方法来估计这个值。

时序差分学习是一种用来估计价值函数的方法,它不需要环境的完整模型,而是通过从实际经验中学习来估计期望值。具体来说,TD学习简化了贝尔曼方程,不必计算期望,直接使用当前估计和下一个状态(或下一个几个状态)的奖励来更新价值估计,其更新规则可以表述为:

$$Q\left(S_t, A_t\right) \leftarrow Q\left(S_t, A_t\right)+\alpha\left[R_{t+1}+\gamma \max _{a^{\prime}} Q\left(S_{t+1}, a^{\prime}\right)-Q\left(S_t, A_t\right)\right]$$

这里:

– \(\alpha\) 是学习率。

– \(R_{t+1}+\gamma \max _{a^{\prime}} Q\left(S_{t+1}, a^{\prime}\right)\) 是TD目标,代表了对下一个状态的价值的估计。这个估计方法肯定比直接估计下一个状态的价值要准确,因为当前的价值\(R_{t+1}\) 是已经观测到的。这就像你从家出发上学的途中有一个商店,当你走到商店时再预估到达学校的时间,肯定比刚从家出发就预测到校时间要准确,因为从家到商店的时间已经被观察到了。那么这个值怎么得到呢?在深度强化学习(如DQN)中,神经网络被用来逼近Q函数。网络的输入是状态(以及可能的动作),输出是该状态(和动作)的Q值估计。因此,在任意时刻,下一状态的价值实际上是由神经网络基于其当前的参数估计得出的。实际上,这个TD目标就是我们在训练神经网络时的标签。

– \(R_{t+1}+\gamma \max _{a^{\prime}} Q\left(S_{t+1}, a^{\prime}\right)-Q\left(S_t, A_t\right)\) 是TD误差,表示当前奖励加上下一个状态的折现后的估计价值与当前状态的估计价值之间的差异。这里记作\(\delta_t\)

更新Q值的基本思想是,如果我们在某个状态-动作对\(\left(S_t, A_t\right)\) 得到的奖励比我们原本预期的要多,那么我们应该增加这个状态-动作对的Q值。反之,如果得到的奖励比预期的少,我们应该减少这个状态-动作对的 \(Q\) 值。

因此,TD学习中的 \(Q\) 值更新公式为:

$$Q\left(S_t, A_t\right) \leftarrow Q\left(S_t, A_t\right)+\alpha \times \delta_t$$

这里, \(\alpha\) 是学习率,它决定了我们在每次更新时要改变多少Q值。理解这个更新过程如果 \(\delta_t\) 为正 (实际获得的奖励加上对未来奖励的估计超过了当前 \(Q\) 值的估计),我们提高 \(Q\left(S_t, A_t\right)\) 。

如果 \(\delta_t\) 为负(实际获得的奖励加上对未来奖励的估计低于当前 \(\mathrm{Q}\) 值的估计),我们降低 \(Q\left(S_t, A_t\right)\) 。

通过这种方式,TD学习算法能够不断地调整其对每个状态-动作对价值的估计,以更好地适应和学习环境的动态特性。注意, \(Q\)值的更新并不直接等同于监督学习中的损失函数。 \(Q\)值的更新更像是一种迭代式的价值估计过程,通过不断基于TD误差的校正,使得预测的 \(Q\)值更接近于真实(或最优)的 \(Q\)值。可以说,在训练的每个步骤中,TD更新的目标 \(Q\)值充当了类似于监督学习中真实标签的角色,但这个“标签”本身也是在不断学习和调整中的,没有像监督学习中那样固定不变的“真实标签”。

3 训练神经网络

在刚才的小节中,我们解释了如何通过TD-learning让神经网络的预测Q值更接近真实Q值,接下来我们解决另一个问题,如何训练这个神经网络来预测Q值?

训练神经网络的首要步骤是数据收集。强化学习中的数据通常由智能体在与环境交互过程中所获得的状态、动作、奖励和下一个状态组成。这些数据被存储在经验回放缓冲区内,以供后续训练使用。接下来进行抽样,神经网络的训练涉及从经验回放缓冲区中随机抽取一批样本。这样做有助于减少样本数据间的相关性,进而降低训练过程的方差。对于每个抽样出的样本,我们根据TD目标和网络的当前预测计算损失。TD目标是依据贝尔曼方程计算得到的,如在Q-learning中,目标可表示为 \(R_{t+1}+\) \(\gamma \max _{a^{\prime}} Q\left(S_{t+1}, a^{\prime} ; \theta^{-}\right)\),其中 \(\theta^{-}\)代表目标网络的参数。损失函数通常选用均方误差,其目的是最小化预测Q值和TD目标之间的差距,公式如下:

$$\mathrm{LossMSE}=\frac{1}{N} \sum_{i=1}^N\left(y_i-Q\left(s_i, a_i ; \theta\right)\right)^2$$

其中:

– \(N\) 是样本数量。

– \(y_i\) 是第 \(i\) 个样本的TD目标值,根据贝尔曼方程计算得出。这个TD目标不仅参与当前损失函数的计算,也参与TD误差的计算,进而更新得到更准确的Q值,详见上一小节。

– \(Q\left(s_i, a_i ; \theta\right)\) 是神经网络关于当前参数 \(\theta\) 下,状态 \(s_i\) 和动作 \(a_i\) 的预测 \(\mathrm{Q}\) 值。

在训练过程中,通过梯度下降方法最小化MSE,以此调整网络参数 \(\theta\) ,使得预测的Q值 \(Q(s, a ; \theta)\) 接近TD目标 \(y\) ,即减少神经网络输出与期望输出之间的误差。整个训练过程是一个持续的迭代过程,直至达到既定的性能标准或完成预设的训练周期。在此过程中,应注意保持探索与利用之间的平衡。智能体不仅要利用现有策略来最大化即时奖励,还应不断探索新的策略,以发现可能获得更高长期回报的行为模式。

4 评估网络与目标网络

在第1小节,我们描述过估计TD目标的方式,即 \(R_{t+1}+\gamma \max _{a^{\prime}} Q\left(S_{t+1}, a^{\prime}\right)\) 是TD目标,在DQN中,神经网络被用来逼近Q函数。网络的输入是状态(以及可能的动作),输出是该状态(和动作)的Q值估计。因此,在任意时刻,下一状态的价值\( Q\left(S_{t+1}, a^{\prime}\right)\)实际上是由神经网络基于其当前的参数估计得出的。这是一种自举的方式,单个网络同时进行Q值的估计和TD目标的计算,会导致一种“追逐自己尾巴”的情况,其中Q值的更新可能过于频繁和剧烈。这种情况下,网络试图在一个连续变化的目标上进行训练,很难收敛,容易造成训练过程的不稳定性和振荡。为了解决这个问题,在DQN(Deep Q-Networks)及其变体中,一般使用两种神经网络——评估网络和目标网络。

评估网络(也称为在线网络或主网络)用于实时估计值函数。换句话说,这个网络负责根据当前状态和动作,预测Q值。在学习过程中,此网络的参数不断更新以反映最新学习的结果。目标网络在结构上与评估网络相同,但其参数更新频率较低。目标网络的主要作用是在计算TD目标(Temporal-Difference Target)时提供一个相对稳定的Q值估计。这个TD目标通常用于计算损失函数和进行梯度下降。

由于目标网络的更新滞后于评估网络,它可以为学习过程提供一个较为稳定的学习目标。这有助于减少每次更新所带来的方差,从而使训练过程更加平滑。而且,分离的目标网络可以在一定程度上防止过拟合。因为目标网络不会立即反映出最新的学习成果,从而避免了评估网络可能因过度适应最近的经验而忽略了长期的策略。

注意,目标网络的参数不是每次迭代都更新。通常,它的参数会在固定的时间步或者固定的训练周期后从评估网络复制过来。这个更新间隔是一个超参数,需要根据具体的应用场景和任务来调整。

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容