强化学习DDQN与DQN深度解析
强化学习DDQN与DQN深度解析
强化学习是人工智能领域的重要分支,其中深度Q网络(DQN)和双深度Q网络(DDQN)是两种经典的算法。本文将从Q-learning的基础概念开始,逐步深入到DQN的具体组成、工作流程以及DDQN的改进之处。通过问答形式解答DQN中的关键概念疑问,并配以流程图帮助理解。
一、引言
本文将并以DQN为主,依次介绍三大经典强化学习算法——Q-learning、DQN与DDQN,按网络实际运行流程,剖析其实现细节。
二、Q-learning
强化学习在于环境交互中需要存储状态、动作到Q表中,
缺点:在现实世界中,状态的数量可能是巨大的,因此使得构建一个表在计算上很难。
因此,用函数代替q表,即得到Q-learning算法
三、DQN
Q-learning的缺点:函数单一,难以描述复杂的真实场景
神经网络是最佳函数逼近器,其对复杂函数的建模能力很强,所以我们可以使用一个神经网络,即深度Q网络来估计这个Q函数。
3.1 DQN具体组成
如果状态可以通过一组数字变量表示,则可以使用两个隐藏层组成网络。如果状态数据以图像或文本形式表示,则可以使用常规的CNN或RNN体系结构。
3.2 DQN工作流程
下图表示了DQN网络的数据存放与取出、样本放入两个Q网络、损失函数、训练、参数复制、存储经验的流程
3.3 概念疑问
1、什么是Experience replay(经验回放)?为什么需要?里面放的是什么?
2、已经有了Q网络,为什么还有个目标网络?这两个网络的区别是什么?
3、两个网络输出的结果分别是什么?怎么计算loss?怎么优化Q网络?
4、为什么Q网络训练的时候,目标网络要固定,不训练?
对这些概念问梳理清楚,才能更好理解DQN,下面给出回答:
1、什么是Experience replay(经验回放)?为什么需要?里面放的是什么?
经验回放我理解为一个池子,这个池子中存放着大量与环境交互后的数据,当网络开始训练时,从池子中取一批数据,训练后更新了数据又放回池子,过段时间又取出、放回...这些数据也即与环境交互并网络训练后的经验,所以称经验回放
与环境交互时,经验回放取出当前状态,选择一个动作,得到奖励,以及执行动作后的下一个状态
需要注意的是,Q网络并不直接与环境交互,而是由经验回放这个池子与环境交互,得到一池子的交互数据,然后Q网络及目标网络从池子中取一批数据间接与环境交互。
因此,假设没有经验回放这个池子,网络直接与环境交互,那么输入网络的只有一条数据,则后续的训练将都以第一条数据为第一步往后进行,一条路走到黑,不具有泛化性。
比如,从院楼去往东门,如果出门第一步是向南,则后续所有动作都是在第一步向南这个基础上走的。如果变成第一步向东,网络就不适应了。
而经验回放池中存储着大量的各个状态、各个动作,并且Q网络和目标网络是取一批数据训练,而不是一条,从一开始代理所采取的所有行动和观察都是存储的,然后随机从这个经验回放池中选择大量的样本,这包含足够的多样性,从旧的和更新的样本,让网络学习的权重,概括到所有的场景。
2、已经有了Q网络,为什么还有个目标网络?这两个网络的区别是什么?
Q网络用于每次迭代的更新,而目标网络用于计算目标值,保持目标值的稳定性,从而提高训练的稳定性和收敛速度。
Q网络选取的当前状态,预测出的Q值结果称为预测Q值
目标网络选取的下一个状态,预测出的Q值结果称为目标Q值
3、两个网络输出的结果分别是什么?怎么计算loss?怎么优化Q网络?
预测Q值和目标Q值经过计算可得到loss,由loss即误差反向传播到Q网络,便可以优化Q网络中的各个参数。
4、为什么Q网络训练的时候,目标网络要固定,不训练?
Q网络的权值在每一时间步都会被更新,从而改进了对预测Q值的预测,但是由于网络和它的权重是相同的,它也改变了我们预测的目标Q值的方向。它们不会保持稳定,但在每次更新后都会发生波动。这就像追逐一个移动的目标。
通过使用没有经过训练的第二个网络,我们可以确保目标Q值保持稳定,至少在短时间内是这样,但这些目标Q值毕竟也是预测的,我们确实需要改进它们,因此我们做出了妥协。在预先设定的时间步骤数之后,Q网络的学习参数被复制到目标网络。
实验表明,使用“目标网络”可以获得更稳定的训练。
3.4 网络运行示例
将与环境交互得到的数据放入经验回放单元
随机取一部分数据放入网络训练
计算loss
MSE(Mean Square Error)均方误差计算公式:
将loss传到Q网络,优化Q网络
经过T步后,将Q网络的参数完整复制到目标网络
至此,DQN运行流程结束
四、DDQN
由于DQN在计算现实的动作价值函数Q时,是通过选取可以取得最大Q的行为a来更新目标函数,同时他是off-policy策略,因此下一个状态下并不一定会选择行为a。因此就会出现过度估计,也就是估计值比现实值要大,导致算法会将次优当成最优。
DDQN与DQN大部分都相同,只有一步不同,那就是在选择 Q ( s t + 1 , a t + 1 ) 的过程中,DQN总是选择Target Q网络的Q值。而DDQN不同,DDQN首先从Q网络中找到Q值的那个动作,然后再找到这个动作对应的Target Q网络的目标Q值。
参考文章:
Reinforcement Learning Explained Visually - Deep Q Networks, step-by-step
链接:Reinforcement Learning Explained Visually - Deep Q Networks, step-by-step | Ketan Doshi Blog