强化学习六、DQN

到目前为止已经介绍了强化学习的基本方法:基于动态规划的方法、基于蒙特卡罗的方法、基于时间差分的方法。这些方法都有一个基本的前提条件:状态空间和动作空间是离散的,而且都不能太大。原因是这些方法的值函数其实是一张表,对于状态值函数,其索引是状态;对于动作值函数,其索引是状态-动作对,所以如果状态空间很大的话,或者状态空间是连续的话,值函数很难用一张表来表示或者存储。

此时我们就可以利用函数逼近的方法来表示值函数,然后就可以利用策略迭代和值迭代方法构建算法。

下面我们首先回顾一下蒙特卡罗方法、TD方法值函数的更新公式:

图片

图片

从上述值函数公式可以看出,值函数更新是向着目标函数逼近的。

我们本次分享的DQN是采用非线性-神经网络逼近的,采用的最小二乘法来构建损失函数,如下所示:

图片

很显然,表格型的强化学习在更新值函数时,只有当前状态图片处的值函数被更新,其他状态值函数保存不变,而基于值函数逼近的方法,更新的是神经网络参数θ,所以任意状态的值函数都会发生变化。

下面我们介绍DQN原始论文《Human-levelcontrol through deep reinforcement learning》对上述的修改,论文地址https://www.nature.com/articles/nature14236?wm=book_wap_0005,论文主要是解决高维度输入情况下如何进行强化学习,以Atari游戏为例,如何让机器学会控制目标使得游戏得分最多。Deep Q Network = CNN + Q-Learning,具体是将卷积神经网络和QLearning结合在一起。卷积神经网络的输入是原始图像数据(作为状态)输出则为每个动作对应的价值Value Function来估计未来的反馈Reward。即使用CNN来拟合最优的动作估值函数(optimal action-value function)

DQN是在Qlearning的基础上做了一些修改和扩展,想了解Qlearning的朋友,可以参考强化学习(五):时间差分(二),修改的内容如下:

      1、  DQN使用深度卷积神经网络逼近值函数使用神经网络的非线性逼近值函数,模型的鲁棒性更好。

      2、  DQN使用经验回放训练强化学习

训练神经网络的假设是训练数据独立同分布,但是通过强化学习采样的数据之间存在着关联性,导致神经网络训练不稳定。经验回放是把数据先存储到一个数据库中,再均匀随机采样,然后训练神经网络,从而打破数据的关联性,提升模型的性能。

       3、  DQN设置了目标网络来处理时间差分算法中的TD误差

主要是把TD的目标网络和值函数逼近网络分开异步更新,但是使用的还是同一个网络,只不过用于计算TD的目标网络是每个固定步数更新一次。

DQN的网络结构如下图所示:

 

图片

DQN的伪代码如下:

图片

下面详细解释一下每行伪代码:

1、  初始化回放记忆D,最多可容纳的数据条数N;

2、  随机初始化状态动作值函数Q的权值θ;

3、  通过初始化目标网络,计算TD目标的状态动作值Q;

4、  循环每个episode;

5、  初始化事件的第一个状态图片={},通过预处理函数转换得到状态对应的输入特征图片

6、  循环每个episode的每一步;

7、  随机生成一个数,如果这个数小于ε,那么就随机选择一个动作图片

8、  如果这个数大于ε,那么就采用贪婪策略选择当前值函数最大的那个动作图片

9、  在仿真器中执行第7或者8步选择的动作图片,并观察回报图片以及下一个图像图片

 

 

10、设置图片,图片,图片,预处理图片图片

11、将(图片图片图片图片)存储在回放记忆D中;

 

 

 

 

 

12、从回放记忆D中均匀随机采样一个minibatch样本数据(图片图片图片图片

13、 判断是否是一个事件的终止状态,如果是,那么TD的目标为图片;否则,根据TD目标网络计算TD的目标图片

14、在以神经网络参数为θ的目标函数图片下求梯度图片

,并且更新动作值函数逼近的网络参数θ=θ+图片

15、每C步更新一次TD的目标函数的神经网络权值

16、结束一个episode

17、结束所有的episode

       上述介绍了基本的DQN算法,该算法使用经验回放和单独设立目标网络两个技巧解决了Qtable太大的问题,但是仍然有诸多待改进的地方:

1) DQN仍然存在Qlearning算法的缺点-过估计。

2) 随机采样的方法好吗?不同样本的重要性是不一样的吗?

3) Q值代表状态-动作的价值,那么单独动作价值的评估会不会更准确?

       第一个问题对应的改进是Double DQN, 第二个问题的改进是Prioritised Replay DQN,第三个问题的改进是Dueling DQN,这三个DQN的改进版我们在下一篇来讨论,敬请期待。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: DQN(Deep Q-Network)是一种由深度神经网络(DNNs)支持的Q-learning算法,用于强化学习问题。它的目标是使函数逼近最优策略函数,以便在状态空间中涉及的每个状态下选择正确的动作。这使得DQN成为一种广泛用于游戏AI和机器人技术的强化学习方法。 在matlab中,可以通过编写DQN的代码来实现强化学习。首先,需要定义DNN的体系结构,其中包括输入层、隐层和输出层。在定义DNN的结构后,需要确定状态、行动和奖励,以便在每个状态下进行正向或反向传播。 在DQN中,还需要使用经验回放机制来提高学习效率。这意味着网络将保存先前成功学习到的状态和行动序列。然后,选择一个经验池来训练模型,并在随后的迭代中更新经验以进一步改进模型的精度。 在编写DQN代码时,还需要调整各种参数,例如学习率、随机探索率和折扣率等。这些值可以根据问题的要求和具体的应用场景进行优化。 总的来说,实现DQN的代码需要一定的编程经验和深入的数学知识,包括机器学习、优化算法和深度神经网络。但如果成功实现,该算法可以成为解决各种强化学习问题的有力工具。 ### 回答2: DQN是深度强化学习中非常流行的一种技术,它的主要优势是能够处理离散状态与动作空间。在MATLAB中,有很多可以使用的DQN代码包。下面让我们来讨论一下MATLAB中的DQN算法以及它的实现。 DQN算法 DQN是一种基于Q学习的强化学习策略,它主要是通过神经网络来逼近现实生活中的复杂环境,并通过使用经验回放的机制来优化神经网络。DQN算法将Q学习与深度学习相结合,以实现更高效的搜索。在这种算法中,一个深度神经网络被用来逼近每个状态的价值函数,并使用经验回放技术来减少样本相关性。 DQN实现 在MATLAB中,一个DQN实现遵循一下几个步骤: 1. 状态表达 在DQN中,状态向量用来表示代理器所处的状态。这个向量可以包含任意的重要信息,比如位置、速度、方向等。在MATLAB中,可以使用预处理的数据或者深度神经网络来构建状态向量。 2. 神经网络构建 神经网络在DQN中用来估计每个状态的价值函数。在MATLAB中,可以使用深度学习工具箱来构建神经网络,该工具箱提供了不同的神经网络模型。 3. 经验回放 由于DQN需要大量的样本数据才能训练神经网络,因此需要使用经验回放技术来减少样本相关性。在MATLAB中,可以使用ReplayBuffer类来实现经验回放。 4. 算法训练 在MATLAB中,可以使用TrainDQN方法来训练DQN算法,该方法会使用神经网络代替具体的深度神经网络。 总结 DQN是一种非常流行的强化学习方法,在MATLAB中也有非常好的支持。使用MATLAB可以轻松地构建DQN模型、训练深度神经网络和实现经验回放技术。使用MATLAB的DQN代码,可以更方便地研究、实现和优化DQN算法。 ### 回答3: DQN是深度强化学习中的一种算法,结合了深度学习和强化学习的优点,能够处理高维复杂的状态和动作空间。Matlab是一种流行的数学软件,也可以用来编写DQN算法的代码。下面将介绍一些常用的Matlab强化学习代码DQN。 首先,需要导入一些必要的Matlab函数和工具箱。常用的包括Deep Learning Toolbox、Reinforcement Learning Toolbox等。 接着,需要定义神经网络的结构并将其编译。在DQN算法中,有两个神经网络:一个被称为“目标网络”,用于计算未来的奖励;另一个被称为“评估网络”,用于选择下一个动作。这两个网络的参数会逐渐改变,在每个epoch末尾更新“目标网络”的参数。 然后,需要定义强化学习环境。我们可以选择使用预先定义的环境,比如CartPole或MountainCar。也可以自定义环境,包括状态和动作空间、奖励函数等。 接下来,需要定义一些训练参数,比如学习率、回放缓冲区大小、mini-batch大小等。这些参数也需要根据实际情况进行调整。 在训练过程中,每个epoch开始时,需要执行一些预处理步骤,比如获取当前状态、执行动作并观察奖励、将状态转换成神经网络的输入格式等。然后,需要使用“评估网络”选择下一个动作,以及计算TD误差和损失函数。接着,需要更新“评估网络”的参数。每个epoch末尾,需要使用“目标网络”更新所有TD目标。 最后,需要定义一些测试参数,比如测试次数、测试最长时间等。使用学习后的“评估网络”对测试环境进行测试并计算平均测试分。 综上所述,Matlab强化学习代码DQN的实现方法是相对比较简单的,主要是需要借助一些基础的Matlab函数和工具箱,并根据实际情况进行参数的选择和调整。但是,具体实现过程中也需要注意一些细节和技巧,比如数据预处理、神经网络结构的选择、参数的调整等。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wshzd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值