【深度强化学习】DQN, Double DQN, Dueling DQN

news2024/9/20 19:36:44

在这里插入图片描述


DQN

更新方程

Q θ ( s t , a t ) ← Q θ ( s t , a t ) + α ( r t + γ max ⁡ a ′ Q θ ( s t + 1 , a ′ ) − Q θ ( s t , a t ) ) Q_\theta(s_t,a_t) \leftarrow Q_\theta(s_t,a_t) + \alpha \left( r_t + \gamma \red{\max_{a'} Q_\theta(s_{t+1},a')} - Q_{\theta}(s_t,a_t)\right) Qθ(st,at)Qθ(st,at)+α(rt+γmaxaQθ(st+1,a)Qθ(st,at))

缺点:

  1. 频繁更新,算法不稳定
  2. 数据并不满足 i.i.d.

解决方法

  • 经验回放
  • 双网络结构(评估网络、目标网络)

经验回放

直觉:利用记忆,降低方差,增加稳定性。
做法:训练过程中存储 ( s , a , r , s ′ ) (s,a,r,s') (s,a,r,s) 到 buffer,训练的时候均匀/非均匀采样

优先经验回放(PER)

直觉:样本的TD 误差也不同,并且样本数量也不同。
如:打游戏,一般的关卡打小怪,比较容易,TD loss 很小,训练样本也多;最后一关打boss,难度大, TD loss 大,训练样本也少。
因此我们需要调整样本的采样概率,TD loss 大的样本给更大的采样概率,并给较小的学习率。
我们存储数据到 Buffer 的时候,还额外存储一个采样概率 p t + ϵ p_t +\epsilon pt+ϵ

p t = ∣ δ t ∣ p_t = |\delta_{t}| pt=δt
δ t \delta_{t} δt代表这个样本的TD loss

选中概率
P ( t ) = p t α ∑ k p k α P(t)=\frac{p_t^\alpha}{\sum_k p_k^\alpha} P(t)=kpkαptα

重要性采样调整学习率
ω t = ( N × P ( t ) ) − β max ⁡ i ω i \omega_t = \frac{(N\times P(t))^{-\beta}}{\max_i \omega_i} ωt=maxiωi(N×P(t))β

双网络结构

直觉:避免使用自举法,自己评价自己。这样 label 背后的机制在一段时间内总是稳定的,部分解决了DQN的偏差大的问题
用慢 Q 网络计算 TD target
目标 = r t + γ max ⁡ a ′ Q θ − ( s t + 1 , a ′ ) 目标 = r_t + \gamma \red{\max_{a'} Q_{\theta-}(s_{t+1},a')} 目标=rt+γamaxQθ(st+1,a)


Double DQN

但是使用了双网络(慢Q用来计算 TD target)之后,由于仍然使用 max 操作,会有**过估计的问题,导致算法容易过于自信,**高估 q ∗ ( s , a ) q_*(s,a) q(s,a) 的值。因此使用 Double DQN,对 TD target 的 max 重写为 argmax 的形式

DQN(快慢双Q、慢Q计算TD)
y t = r r + γ Q θ − ( s t + 1 , arg ⁡ max ⁡ a ′ Q θ − ( s t + 1 , a ′ ) ) y_t = r_r + \gamma \red{Q_{\theta -}(s_{t+1},\arg \max_{a'}\blue{ Q_{\theta -}}(s_{t+1},a'))} yt=rr+γQθ(st+1,argamaxQθ(st+1,a))

Double DQN(快慢双Q、慢Q只评估TD值、快Q计算max动作)
y t = r r + γ Q θ − ( s t + 1 , arg ⁡ max ⁡ a ′ Q θ ( s t + 1 , a ′ ) ) y_t = r_r + \gamma \red{Q_{\theta -}(s_{t+1},\arg \max_{a'}\green{Q_{\theta}}(s_{t+1},a'))} yt=rr+γQθ(st+1,argamaxQθ(st+1,a))


Dueling DQN

我们继续往 Double DQN 里面引入另外的模型假设,就有可能继续提升模型的性能:

这里的假设/直觉是:
部分环境反馈 Q 可能仅与状态 s 有关,和 a 无关。换句话说: Q ( s , a 1 ) Q(s,a_1) Q(s,a1) Q ( s , a 2 ) Q(s,a_2) Q(s,a2) 之间并不是完全无关的,对于部分反馈,他们之间是正相关的。
例子:

s = 小明考试得 0 分
a1 = 小明不做任何事
a2 = 小明和妈妈说“妈妈我爱你”

Q(s,a1) < 0 这是显然的
Q(s,a2) < 0 也同样有很大可能发生

在上面的例子中,如果我们独立地估计两个值,那么在估计第二个 Q 值的时候,TD loss 会比没有使用 Dueling 大(因为 Dueling 已经可以用 V ( s ) V(s) V(s)作为一个 baseline 估计),因为在这个场景下,Q 很大程度由 s 决定,如果能整体地学习 Q 关于 a 的加权函数,比如说 ∑ a π ( a ∣ s ) Q ( s , a ) \sum_a \pi(a|s) Q(s,a) aπ(as)Q(s,a) ,也就是 V ( s ) V(s) V(s),那么可以预期模型的收敛速度会加快。

在这里插入图片描述
因此,Dueling DQN 使用两个网络,Q被表示为两个网络的输出的和
Q ( s , a ) = A ( s , a ) + V ( s ) Q(s,a) = A(s,a) + V(s) Q(s,a)=A(s,a)+V(s)
这里 A A A 被称作优势函数, A A A 相对于单纯的 Q Q Q 更强调动作 a a a的好坏,而 V V V只关注状态的好坏。

不同的优势函数聚合形式

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1316795.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Cmake基础(4)

这篇文章在上一篇的基础之上应用多文件&#xff0c;即一个项目中添加多个文件 文章目录 GLOBsource_group排除文件 上一篇文章的cmake基本不变&#xff0c;这篇文章的重点在于add_executable(${EXECUTABLE_NAME} main.cpp) GLOB file(GLOB cpp_list ${CMAKE_CURRENT_SOURCE_…

继电器模块的使用(超详细)

继电器模块的工作原理 继电器&#xff08;Relay&#xff09;是一种电控开关&#xff0c;其工作原理基于电磁感应。继电器通常包括一个电磁线圈和一组触点。 以下是继电器模块的基本工作原理&#xff1a; 电磁线圈&#xff1a; 继电器内部包含一个电磁线圈&#xff0c;通常由绕制…

深度学习:混合精度训练

深度学习&#xff1a;混合精度训练 前言混合精度训练核心技术权重备份损失缩放梯度裁剪动态调整学习率 优势与弊端代码示例 参考文献 前言 浮点数据类型主要分为双精度Double&#xff08;FP64&#xff09;、单精度Float&#xff08;FP32&#xff09;和半精度Half&#xff08;F…

如何在页面中加入百度地图

官方文档&#xff1a;jspopularGL | 百度地图API SDK (baidu.com) 添加一下代码就可以实现 <!DOCTYPE html> <html> <head><meta name"viewport" content"initial-scale1.0, user-scalableno"/><meta http-equiv"Conten…

基于Springboot的高校教学评价系统的设计与实现(源码+调试)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。今天给大家介绍一篇基于Springboot的高校教…

idea2023解决右键没有Servlet的问题

复制Servlet Class.java中的文件。 回到文件&#xff0c;然后点击小加号 然后输入刚刚复制的东西&#xff1a; 3. 此时右键有servlet。 4. 然后他让你输入下面两个框&#xff1a; JAVAEE TYPE中输入Servlet Class Name 表示你要创建的Servlet类的名称是什么。自己起名字。然后…

EIS(防抖):meshflow算法

视频防抖的应用 对视频防抖的需求在许多领域都有。 这在消费者和专业摄像中是极其重要的。因此&#xff0c;存在许多不同的机械、光学和算法解决方案。即使在静态图像拍摄中&#xff0c;防抖技术也可以帮助拍摄长时间曝光的手持照片。 在内窥镜和结肠镜等医疗诊断应用中&…

用代码写uml并在线生成uml图

可以用PlantUml写uml,并在线生成uml图。 startuml start:登录系统; if (用户名和密码正确?) then (yes):进入系统首页;:展示主菜单; else (no):显示登录错误;stop endif:选择模块; partition "课程信息" {:查看课程列表;:查看课程详情; } partition "课程签到…

uniapp的uni-im 即时通信使用教程【用户与商家对话、聊天 / 最新 / 最全 / 带源码 / 教程】

目录 使用场景用户图片商家图片 官方文档官方文档地址插件地址 项目创建uniCloud开发环境申请开发环境申请完后 概括开始使用步骤1App.vue 步骤2找到软件登录图片找到软件登录接口登录源码如下 步骤3找到软件注册图片注册源码如下 步骤4找到index.vue首页图片 index.vue源码如下…

[robot_state_publisher-3] Error: Error document empty.

出现这个问题&#xff0c;我这里遇到的是&#xff1a;指定的urdf文件路径无效&#xff0c;而产生这个的根本原因是没有在CMakelists.txt中添加如下代码&#xff1a; install( DIRECTORY urdf DESTINATION share/${PROJECT_NAME} )把urdf文件夹添加到指定的share/${PROJEC…

第15章 《乐趣》Page305~311, 代码精简以后,讨论一下引用含义的问题

将Page305~311的代码精简了一下&#xff0c;讨论一下引用含义的问题&#xff0c;精简之后的代码如下&#xff1a; #include <iostream> #include <SDL2/SDL.h>using namespace std;namespace sdl2 {char const* last_error() {return SDL_GetError(); }struct Ini…

贪心算法:买卖股票的最佳时机II 跳跃游戏 跳跃游戏II

122.买卖股票的最佳时机II 思路&#xff1a; 想要获得利润&#xff0c;至少要以两天为一个交易单元&#xff0c;因为两天才会有股价差。因此可以将最终利润进行分解&#xff0c;如prices[3] - prices[0] (prices[3] - prices[2]) (prices[2] - prices[1]) (prices[1] - pr…

07-抽象工厂

意图 提供一个创建一系列相关或相互依赖对象的接口&#xff0c;而无需指定它们具体的类。 适用性 在以下的情况可以选择使用抽象工厂模式&#xff1a; 一个系统要独立于它的产品的创建、组合和表示。一个系统要由多个产品系列中的一个来配置。要强调一系列相关的产品对象的…

Elasticsearch优化-04

Elasticsearch优化 1、优化-硬件选择 Elasticsearch 的基础是 Lucene&#xff0c;所有的索引和文档数据是存储在本地的磁盘中&#xff0c;具体的路径可在 ES 的配置文件…/config/elasticsearch.yml中配置&#xff0c;如下&#xff1a; # #Path to directory where to store …

Pytorch:Tensorboard简要学习

目录 一、TensorBoard简介二、TensorBoard的安装与启动Tensorboard的安装Tensorboard的启动 三、TensorBoard的简单使用3.1 SummaryWriter()3.2 add_scalar()和add_scalars()3.3 add_histogram()3.4 模型指标监控 四、总结参考博客 一、TensorBoard简介 TensorBoard 是Google开…

C#中的封装、继承和多态

1.引言 在面向对象的编程中&#xff0c;封装、继承和多态是三个重要的概念。它们是C#语言中的基本特性&#xff0c;用于设计和实现具有高内聚和低耦合的代码。本文将详细介绍C#中的封装、继承和多态的相关知识。 目录 1.引言2. 封装2.1 类2.2 访问修饰符 3. 继承4. 多态4.1 虚方…

36个校招网络原理面试题

1.如何理解 URI&#xff1f; URI, 全称为(Uniform Resource Identifier), 也就是统一资源标识符&#xff0c;它的作用很简单&#xff0c;就是区分互联网上不同的资源。但是&#xff0c;它并不是我们常说的网址, 网址指的是URL, 实际上URI包含了URN和URL两个部分&#xff0c;由…

如何从众多知识付费平台中正确选择属于自己的平台(明理信息科技知识付费平台)

在当今的知识付费市场中&#xff0c;用户面临的选择越来越多&#xff0c;如何从众多知识付费平台中正确选择属于自己的平台呢&#xff1f;下面&#xff0c;我们将为您介绍明理信息科技知识付费平台相比同行的优势&#xff0c;帮助您做出明智的选择。 一、创新的技术架构&#…

全套SpringBoot讲义01

hello&#xff0c;我是小索奇&#xff0c;全套SpringBoot教程~一起来学习叭 文章目录 SpringBoot文档更新日志前言课程内容说明课程前置知识说明 SpringBoot基础篇JC-1.快速上手SpringBootJC-1-1.SpringBoot入门程序制作&#xff08;一&#xff09;JC-1-2.SpringBoot入门程序制…

Qt之QNetworkAccessManager 从本地和内存中上传数据到Http服务器

简述 接连做了好几个服务器的项目&#xff0c;例如文件传输用的Ftp和对象存储服务器(Object Storage Service)&#xff0c;简单的信息传输用的WebServer&#xff0c;之前也有用过HttpServer不过都和WebServer一样简单的调用接口提交数据并没有上传过文件&#xff0c;正好趁这次…