深度强化学习——DQN算法原理

这篇具有很好参考价值的文章主要介绍了深度强化学习——DQN算法原理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、DQN算法是什么

DQN,即深度Q网络(Deep Q-network),是指基于深度学习的Q-Learing算法。

回顾一下Q-Learing:强化学习——Q-Learning算法原理
Q-Learing算法维护一个Q-table,使用表格存储每个状态s下采取动作a获得的奖励,即状态-价值函数Q(s,a),这种算法存在很大的局限性。在现实中很多情况下,强化学习任务所面临的状态空间是连续的,存在无穷多个状态,这种情况就不能再使用表格的方式存储价值函数。

为了解决这个问题,我们可以用一个函数Q(s,a;w)来近似动作-价值Q(s,a),称为价值函数近似Value Function Approximation,我们用神经网络来生成这个函数Q(s,a;w),称为Q网络(Deep Q-network),w是神经网络训练的参数。

二、DQN训练过程

神经网络的的输入是状态s,输出是对所有动作a的打分
dqn,笔记,AI,算法,深度学习
图源于:Shusen Wang深度强化学习课程

神经网络的训练是一个最优化问题,我们需要表示网络输出和标签值之间的差值,作为损失函数,目标是让损失函数最小化,手段是通过反向传播使用梯度下降的方法来更新神经网络的参数。

那么Q网络的标签值/目标值是什么呢?
就是TD target : y t = r t + γ ⋅ max ⁡ a Q ( s t + 1 , a ; w ) {\color{Red}y_t = r_t + \gamma \cdot \max_aQ(s_{t+1},a;w)} yt=rt+γmaxaQ(st+1,a;w)

我们先介绍最原始的DQN算法,后面会加入经验回放、目标函数等技巧。
具体过程:

1、初始化网络,输入状态 s t s_t st,输出 s t s_t st下所有动作的Q值;

2、利用策略(例如 ε − g r e d d y \varepsilon-greddy εgreddy),选择一个动作 a t a_t at,把 a t a_t at输入到环境中,获得新状态 s t + 1 s_{t+1} st+1 和 r;

3、计算TD target: y t = r t + γ ⋅ max ⁡ a Q ( s t + 1 , a ; w ) y_t = r_t + \gamma \cdot \max_aQ(s_{t+1},a;w) yt=rt+γmaxaQ(st+1,a;w)

4、计算损失函数: L = 1 / 2 [ y t − Q ( s , a ; w ) ] 2 L = 1/2[y_t - Q(s,a;w)]^2 L=1/2[ytQ(s,a;w)]2

5、更新Q参数,使得Q( s t s_t st, a t a_t at) 尽可能接近 y t y_t yt,可以把它当做回归问题,利用梯度下降做更新工作;

6、从以上步骤我们得到一个四元组transition: ( s t , a t , r t , s t + 1 ) (s_t,a_t,r_t,s_{t+1}) (st,at,rt,st+1),用完之后丢弃掉;

7、输入新的状态,重复更新工作

dqn,笔记,AI,算法,深度学习
图源于:[知乎.张斯俊] https://zhuanlan.zhihu.com/p/110620815

三、经验回放 (Experience Replay)

在理解经验回放之前,先看看原始DQN算法的缺点:
1、用完一个transition: ( s t , a t , r t , s t + 1 ) (s_t,a_t,r_t,s_{t+1}) (st,at,rt,st+1)就丢弃,会造成对经验的浪费;
2、之前,我们按顺序使用transition,前一个transition和后一个transition相关性很强,这种相关性对学习Q网络是有害的。

经验回放可以克服上面两个缺点:
1.把序列打散,消除相关性,使得数据满足独立同分布,从而减小参数更新的方差,提高收敛速度。
2.能够重复使用经验,数据利用率高,对于数据获取困难的情况尤其有用。
在进行强化学习的时候,往往最花时间的步骤是与环境交互,训练网络反而是比较快的,因为我们用GPU训练很快。用回放缓冲区可以减少与环境交互的次数,经验不需要统统来自某一个策略,一些由过去的策略所得到的经验可以再回放缓冲区被使用多次,反复地再利用。

经验回放会构建一个回放缓冲区(replay buffer),存储n条transition,称为经验
某一个策略 π \pi π与环境交互,收集很多条transition,放入回放缓冲区,回放缓冲区中的经验transition可能来自不同的策略。
回放缓冲区只有在它装满的时候才会吧旧的数据丢掉
dqn,笔记,AI,算法,深度学习图源于:Shusen Wang深度强化学习课程

每次随机抽出一个batch大小的transition数据训练网络,算出多个随机梯度,用梯度的平均更新Q网络参数w

对经验回放的改进:
优先经验回放 (Prioritized Experience Replay):区别在于用非均匀抽样代替均匀抽样。详细的这里就不赘述了。

四、目标网络(Target Network)

为什么要用目标网络?
我引用https://blog.csdn.net/weixin_46133643/article/details/121845874这篇博客的描述:

我们在训练网络的时候,动作价值估计和权重w有关。当权重变化时,动作价值的估计也会发生变化。在学习的过程中,动作价值试图追逐一个变化的回报,容易出现不稳定的情况。

这部分我在有些书上也看到有类似的描述,虽然直觉上认为这样训练的确是不稳定的,但是这种不稳定的具体表现或者说严谨的内部逻辑是怎样的不太理解。

Shusen Wang课程视频中对目标网络这部分讲的比较清楚,这里面存在一个高估(Overestimation) 问题

1、自举(Bootstrapping)

这里引入自举(Bootstrapping) 概念:
Bootstrapping本意是“解鞋带”,来自《吹牛大王历险记》中拔靴自助的典故,是指通过拔鞋带把自己举起来。dqn,笔记,AI,算法,深度学习
在强化学习中,自举是指用后继的估算值,来更新现在状态的估算值。
我们计算的 TD target : y t = r t + γ ⋅ max ⁡ a Q ( s t + 1 , a ; w ) {\color{Red}y_t = r_t + \gamma \cdot \max_aQ(s_{t+1},a;w)} yt=rt+γmaxaQ(st+1,a;w)
r t {\color{Red} r_t } rt 是根据实际观测得到的值
max ⁡ a Q ( s t + 1 , a ; w ) {\color{Red}\max_aQ(s_{t+1},a;w)} maxaQ(st+1,a;w) 是根据Q网络在 s t + 1 s_{t+1} st+1时做出的估计值
因此 y t y_t yt有部分是来自Q网络的估算,而我们用 y t y_t yt来更新Q网络本身,所以这属于自举。

我们计算TD target的时候,是最大化Q值的: max ⁡ a Q ( s t + 1 , a ; w ) \max_aQ(s_{t+1},a;w) maxaQ(st+1,a;w)
这里的最大化和上面的Bootstrapping过程都会引起高估的问题,利用目标网络可以一定程度避免自举,减缓高估问题。具体分析过程这里就不展开叙述了。

2、目标网络:

Target Network是在2015年论文 Mnih et al.Human-level control through deep reinforcement learning. Nature, 2015 中提出的,地址:https://www.nature.com/articles/nature14236/

我们使用第二个网络,称为目标网络, Q ( s , a ; w − ) Q(s,a;{\color{Red} w^-}) Q(s,a;w),网络结构和原来的网络 Q ( s , a ; w ) Q(s,a; w) Q(s,a;w)一样,只是参数不同 w − ≠ w w^- \neq w w=w,原来的网络称为评估网络

两个网络的作用不一样:评估网络 Q ( s , a ; w ) Q(s,a; w) Q(s,a;w)负责控制智能体,收集经验;目标网络 Q ( s , a ; w − ) Q(s,a;{\color{Red} w^-}) Q(s,a;w)用于计算TD target: y t = r t + γ ⋅ max ⁡ a Q ( s t + 1 , a ; w − ) {\color{Red}y_t = r_t + \gamma \cdot \max_aQ(s_{t+1},a;w^-)} yt=rt+γmaxaQ(st+1,a;w)

在更新过程中,只更新评估网络 Q ( s , a ; w ) Q(s,a; w) Q(s,a;w)的权重w,目标网络 Q ( s t + 1 , a ; w − ) Q(s_{t+1},a;w^-) Q(st+1,a;w)的权重 w − w^- w保持不变。在更新一定次数后,再将更新过的评估网络的权重复制给目标网络,进行下一批更新,这样目标网络也能得到更新。由于在目标网络没有变化的一段时间内回报的目标值是相对固定的,因此目标网络的引入增加了学习的稳定性。

dqn,笔记,AI,算法,深度学习
图源于:博客园.jsfantasy强化学习 7——Deep Q-Learning(DQN)公式推导

五、Double DQN

引入目标网络可以一定程度减缓高估问题,但是还是有最大化操作,高估问题还是很严重,而Double DQN可以更好地缓解高估问题(但也没有彻底根除高估问题)。

Double DQN做的改进其实很简单:

我们用原始网络 Q ( s , a ; w ) Q(s,a; w) Q(s,a;w),选出使Q值最大化的那个动作,记为 a ∗ {\color{Red}a^*} a,再用目标网络使用这个 a ∗ {\color{Red}a^*} a计算目标值:
y t = r t + γ ⋅ Q ( s t + 1 , a ∗ ; w − ) y_t = r_t + \gamma \cdot Q(s_{t+1},{\color{Red}a^*};w^-) yt=rt+γQ(st+1,a;w)
由于:
Q ( s t + 1 , a ∗ ; w − ) ≤ max ⁡ a Q ( s t + 1 , a ; w − ) Q(s_{t+1},{\color{Red}a^*};w^-) \leq \max_{\color{Red}a}Q(s_{t+1},{\color{Red}a};w^-) Q(st+1,a;w)maxaQ(st+1,a;w)

所以进一步减缓了最大化带来的高估问题。

dqn,笔记,AI,算法,深度学习图源于:Shusen Wang深度强化学习课程

六、总结

伪代码:

dqn,笔记,AI,算法,深度学习

整体来说,深度Q网络与Q学习的目标价值以及价值的更新方式都非常相似。主要的不同在于:深度Q网络将Q学习与深度学习结合,用深度网络来近似动作价值函数,而Q学习则是采用表格存储;深度Q网络采用经验回放的训练方式,从历史数据中随机采样,而Q学习直接采用下一个状态的数据进行学习。


参考:
[1] https://www.bilibili.com/video/BV1rv41167yx?p=10&vd_source=a433a250e74c87c3235dea6a203f8a29
[2] 王琦.强化学习教程[M]
[3] https://zhuanlan.zhihu.com/p/110620815
文章图源于:百度飞桨AlStudio、Shusen Wang深度强化学习课程等*文章来源地址https://www.toymoban.com/news/detail-785246.html

到了这里,关于深度强化学习——DQN算法原理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用Pytorch实现强化学习——DQN算法

    目录 一、强化学习的主要构成 二、基于python的强化学习框架 三、gym 四、DQN算法 1.DQN算法两个特点 (1)经验回放 (2)目标网络 2.DQN算法的流程 五、使用pytorch实现DQN算法 1.replay memory 2.神经网络部分 3.Agent 4.模型训练函数 5.训练模型 6.实验结果 六、补充说明 强化学习主要由

    2023年04月20日
    浏览(31)
  • 【深度强化学习】(2) Double DQN 模型解析,附Pytorch完整代码

    大家好,今天和大家分享一个深度强化学习算法 DQN 的改进版 Double DQN,并基于 OpenAI 的 gym 环境库完成一个小游戏,完整代码可以从我的 GitHub 中获得: https://github.com/LiSir-HIT/Reinforcement-Learning/tree/main/Model DQN 算法的原理是指导机器人不断与环境交互,理解最佳的行为方式,最

    2024年02月03日
    浏览(29)
  • 深度学习十大算法之深度Q网络(DQN)

    深度Q网络(DQN)是一种结合了深度学习和强化学习的算法,它在近年来成为了人工智能领域的一个热点。DQN首次被引入是在2013年,由DeepMind的研究人员开发。它标志着深度学习技术在解决高维度决策问题上的一大突破。 DQN是一种算法,它使用深度神经网络来逼近最优的Q函数

    2024年04月13日
    浏览(27)
  • DQN,DDPG,PPO 等强化学习算法在人工智能中的未来发展方向:从大规模到小规模部署

    作者:禅与计算机程序设计艺术 随着近年来人工智能领域的蓬勃发展,强化学习(Reinforcement Learning, RL)被越来越多的人认可并应用于人工智能领域。如今,RL已经可以处理许多复杂的问题,如自动驾驶、机器人控制等。在过去的一段时间里,我一直想和各位分享一下RL在人工

    2024年02月09日
    浏览(33)
  • DQN、Double DQN、Dueling DQN、Per DQN、NoisyDQN 学习笔记

    部分内容与图片摘自:JoyRL 、 EasyRL DQN (Deep Q-Network) 说明 DQN通过深度学习技术处理高维状态空间,它的核心是使用深度神经网络来近似Q值函数。传统Q-learning依赖于一个查找表(Q表)来存储每个状态-动作对的Q值,但这在高维空间中变得不可行。DQN通过训练一个神经网络来学

    2024年01月20日
    浏览(31)
  • 【机器学习】强化学习(六)-DQN(Deep Q-Learning)训练月球着陆器示例

    概述 Deep Q-Learning(深度 Q 学习)是一种强化学习算法,用于解决决策问题,其中代理(agent)通过学习在不同环境中采取行动来最大化累积奖励。Lunar Lander 是一个经典的强化学习问题,其中代理的任务是控制一个着陆舱在月球表面着陆,最小化着陆过程中的燃料消耗。 以下

    2024年01月25日
    浏览(48)
  • DQN算法概述及基于Pytorch的DQN迷宫实战代码

    Q-Learing 是在一个表格中存储动作对应的奖励值,即状态-价值函数 Q(s,a) ,这种算法存在很大的局限性。在现实中很多情况下,强化学习任务所面临的状态空间是连续的,存在无穷多个状态,这种情况就不能再使用表格的方式存储价值函数。 于是,诞生了 DQN 算法,即深度 Q

    2024年02月09日
    浏览(29)
  • DQN算法详解

    强化学习算法可以分为三大类:value based, policy based 和 actor critic。常见的是以DQN为代表的value based算法,这种算法中只有一个值函数网络,没有policy网络,以及以DDPG,TRPO为代表的actor-critic算法,这种算法中既有值函数网络,又有policy网络。 说到DQN中有值函数网络,这里简单介

    2024年02月12日
    浏览(29)
  • 深度Q网络:DQN项目实战CartPole-v0

    摘要: 相比于Q learning,DQN本质上是为了适应更为复杂的环境,并且经过不断的改良迭代,到了Nature DQN(即Volodymyr Mnih发表的Nature论文)这里才算是基本完善。 本文分享自华为云社区《强化学习从基础到进阶-案例与实践[4.1]:深度Q网络-DQN项目实战CartPole-v0》,作者: 汀丶 。

    2024年02月10日
    浏览(21)
  • 深度强化学习-DDPG算法原理与代码

    深度强化学习-DDPG算法原理与代码 引言 1 DDPG算法简介 2 DDPG算法原理 2.1 经验回放 2.2 目标网络 2.2.1 算法更新过程 2.2.2 目标网络的更新 2.2.3 引入目标网络的目的 2.3 噪声探索 3 DDPG算法伪代码  4 代码实现 5 实验结果 6 结论 Deep Deterministic Policy Gradient (DDPG)算法是DeepMind团队提出的

    2024年02月03日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包