IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 强化学习之DQN -> 正文阅读

[人工智能]强化学习之DQN

DQN算法

上一节课讲到的Q-learning 算法存在一定的缺点,那就是在大范围状态空间中的数据处理能力不足。造成这种缺点的原因是其采用了表格的方式来存储Q值造成的,可以试想一下围棋的状态,它是有数万个状态的,如果以此来建立一个表格,将会在表格的查询、修改、存储上就要占用计算机很多的资源,使得计算机的学习效率降低。
这时我们就想能不能找到一个函数,使得我给这个函数一个状态作为输入,他就能输出在这个状态下所做动作的Q值。而神经网络就是非常适合做这件事情的,采用神经网络来拟合值函数,把状态作为输入,输出为状态值函数,根据状态值函数选择动作。

DQN算法描述

利用神经网络逼近值函数的过程如图所示,整个学习过程也就是学习神经网络的参数 θ \theta θ,当神经网络训练完成后,参数 θ \theta θ也就确定下来,对应值函数Q(s,a; θ \theta θ)就不再发生变化,这时候训练过程就收敛了。
神经网络逼近值函数
这里就是DQN的第一个特点,引入了神经网络,利用神经网络去拟合Q表,避免了因状态过多而造成的资源浪费。
在训练过程中,因为这些数据具有很强的时序性,所以它们之间必然会存在相关性,利用这些数据去训练Agent很有可能会造成Agent按照固定策略去学习,因此我们要打破这种相关性。这里就有了DQN算法的第二个特点,引入了记忆库,利用经验回放机制,使得在进行网络更新时输入的数据符合独立同分布,打破了数据之间的相关性。
相比传统的Q-learning算法更新Q值,DQN算法是对网络参数的更新,我们依然采用梯度下降的方式去更新 θ \theta θ,公式如下:
θ t + 1 = θ t + α [ r + γ max ? a ′ Q ( s ′ , a ′ ; θ ) ? Q ( s , a ; θ ) ] ? Q ( s , a ; θ ) \begin{align} {\theta}_{t+1}=\theta_t+\alpha[r+\gamma{\max_{a'}Q(s',a';\theta)}-Q(s,a;\theta)]{\nabla}Q(s,a;\theta) \end{align} θt+1?=θt?+α[r+γamax?Q(s,a;θ)?Q(s,a;θ)]?Q(s,a;θ)??
但这个公式里面计算TD目标的动作值函数使用的参数 θ \theta θ与值函数计算梯度下降使用的参数 θ \theta θ相同,这样获得的数据也会具有相关性。这里就有了DQN的第三个特点,**引入目标网络,利用延后更新的目标网络计算 θ \theta θ,极大的提高了网络训练的稳定性和收敛性。**这样 θ \theta θ的更新公式就变成了:
θ t + 1 = θ t + α [ r + γ max ? a ′ Q ( s ′ , a ′ ; θ ′ ) t a r g e t Q ? N e t w o r k ? Q ( s , a ; θ ) e v a l ] ? Q ( s , a ; θ ) \begin{align} {\theta}_{t+1}=\theta_t+\alpha[\underset{targetQ-Network }{r+\gamma{\max_{a'}Q(s',a';\theta{'})}}-\underset{eval }{Q(s,a;\theta)}]{\nabla}Q(s,a;\theta) \end{align} θt+1?=θt?+α[targetQ?Networkr+γamax?Q(s,a;θ)??evalQ(s,a;θ)?]?Q(s,a;θ)??
TD目标网络使用的是参数 θ ′ \theta{'} θ,TD网络中的参数并不是在训练过程中每一步都更新的,而是固定一定的步数将价值网络保存下来的参数复制到TD网络中,他自身不会去通过训练更新参数,而是仅用来计算。通过设置独立的TD目标网络和暂时冻结的神经网络参数降低获得的数据的相关性,保证神经网络的稳定性。

DQN算法流程

初始化记忆库D,设置存储容量为N,使用随机数值初始化参数 θ \theta θ,令 θ ′ = θ \theta{'}=\theta θ=θ
重复执行每一个情节;
给定初始状态s;
??重复执行每一个情节中的每一步;
??在状态 s t s_t st?执行动作 a t a_t at?获得奖赏 r t r_t rt? ,使得Agent状态由 s t → s t + 1 s_t{\to}s_{t+1} st?st+1?
??将{ s t , a t , r t , s t + 1 s_t,a_t,r_t,s_{t+1} st?,at?,rt?,st+1?}存储进记忆库D中;
??从记忆库中均匀采样一个样本数据batch计算q_eval和q_target;
??执行一次梯度下降,更新价值网络参数 θ = θ + Δ θ \theta=\theta+\Delta\theta θ=θ+Δθ
??每隔C步更新一次TD目标网络参数 θ ′ \theta{'} θ
??判断 s t s_t st?是否处于终止状态,若是,结束当前情节;否则 s t ← s t + 1 s_t{\leftarrow}s_{t+1} st?st+1?(这里的意思是赋值,不是状态跳转)继续循环
??判断是否达到提前设置好的最大训练次数,若是,结束当前情节;否则继续训练;
DQN流程图

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-09-30 00:52:59  更:2022-09-30 00:57:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 21:13:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码