强化学习 - DQN及进化过程(Double DQN,Dueling DQN)

2023-11-11 01:04

本文主要是介绍强化学习 - DQN及进化过程(Double DQN,Dueling DQN),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.DQN

1.1概念

      DQN相对于Q-Learning进行了三处改进:

1.引入神经网络:如下图所示希望能从状态S中提取Q(s,a)

2.经验回放机制:连续动作空间采样时,前后数据具有强关联性,而神经网络训练时要求数据之间具有独立同分布特性,简单理解,就是前后输入的数据之间要有独立性,所以对于连续空间数据,采用随机采样法,

3.设置单独目标网络:下式中θ为权重参数,为目标网络,为目标网络和当前网络的差值,利用该误差不断更新θ。

1.2迭代过程

Q-Learning:只能解决有限维度和离散空间的任务,对于机器人控制这些高维连续空间的任务,力所不能及,之后用神经网络逼近Q(s,a;θ),也就是DQN。

DQN:值函数逼近,是逼近Q(s,a),最终目的也是得到最优Π(a|s),但又存在过优问题,所以出现了Double DQN。

Double DQN:用两个网络,如下公式所示,第一个先选择不同状态下,选择令Q(s,a)最大的动作a,然后再众多最大动作中,再由Q^{'}给该动作a,取一个合适的Q值,如果说Q^{'}给的值也过高,那么令Q放弃该动作a,以此解决了过优问题。公式如下:

Q^{'}(s_{t+1},\frac{argmax}{a}Q(s_{t+1},a))

      进一步人们开始思考,无论是DQN还是Double DQN,都没有考虑如何多关注贡献更大的a对应的Q,这更加符合人类学习的过程,所以引入了优势函数。

Dueling DQN:此处引入了优势函数的概念,举个例子,当我们在高速开车时,前后无车时,我们只关注状态价值V(s)即可,但遇到车时,就必须关注相应动作的价值函数值,而不同的动作对结果影响会有优劣之分,这就是动作优势。

      我们都知道,状态价值函数V(s)是动作价值函数Q(s,a)的加权结果,如下图所示,在s状态下有Q_{\pi }(s,a_{1})Q_{\pi }(s,a_{2})两个动作值函数,加权成V_{\pi }(s),分别能得到优势函数,A(s,a_{1})=Q_{\pi }(s,a_{1})-V_{\pi }(s)A(s,a_{2})=Q_{\pi }(s,a_{2})-V_{\pi }(s)

      如下图所示,在进行网络训练时,DQN和Double DQN得到的是Q(s,a),而Dueling DQN得到两个网络V(s)和A(s,a),最终叠加得到Q(s,a)。

     

      进一步看下图,V(s)按照Q(s,a)的平均值计算得到,然后不同的Q(s,a)-V(s)是得到不同的优势函数A(s,a)。


 

这篇关于强化学习 - DQN及进化过程(Double DQN,Dueling DQN)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/386504

相关文章

Linux系统调试之ltrace工具使用与调试过程

《Linux系统调试之ltrace工具使用与调试过程》:本文主要介绍Linux系统调试之ltrace工具使用与调试过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、ltrace 定义与作用二、ltrace 工作原理1. 劫持进程的 PLT/GOT 表2. 重定

Maven 依赖发布与仓库治理的过程解析

《Maven依赖发布与仓库治理的过程解析》:本文主要介绍Maven依赖发布与仓库治理的过程解析,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下... 目录Maven 依赖发布与仓库治理引言第一章:distributionManagement配置的工程化实践1

Spring三级缓存解决循环依赖的解析过程

《Spring三级缓存解决循环依赖的解析过程》:本文主要介绍Spring三级缓存解决循环依赖的解析过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、循环依赖场景二、三级缓存定义三、解决流程(以ServiceA和ServiceB为例)四、关键机制详解五、设计约

spring IOC的理解之原理和实现过程

《springIOC的理解之原理和实现过程》:本文主要介绍springIOC的理解之原理和实现过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、IoC 核心概念二、核心原理1. 容器架构2. 核心组件3. 工作流程三、关键实现机制1. Bean生命周期2.

Redis实现分布式锁全解析之从原理到实践过程

《Redis实现分布式锁全解析之从原理到实践过程》:本文主要介绍Redis实现分布式锁全解析之从原理到实践过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、背景介绍二、解决方案(一)使用 SETNX 命令(二)设置锁的过期时间(三)解决锁的误删问题(四)Re

SQLyog中DELIMITER执行存储过程时出现前置缩进问题的解决方法

《SQLyog中DELIMITER执行存储过程时出现前置缩进问题的解决方法》在SQLyog中执行存储过程时出现的前置缩进问题,实际上反映了SQLyog对SQL语句解析的一个特殊行为,本文给大家介绍了详... 目录问题根源正确写法示例永久解决方案为什么命令行不受影响?最佳实践建议问题根源SQLyog的语句分

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

PyInstaller打包selenium-wire过程中常见问题和解决指南

《PyInstaller打包selenium-wire过程中常见问题和解决指南》常用的打包工具PyInstaller能将Python项目打包成单个可执行文件,但也会因为兼容性问题和路径管理而出现各种运... 目录前言1. 背景2. 可能遇到的问题概述3. PyInstaller 打包步骤及参数配置4. 依赖

将Mybatis升级为Mybatis-Plus的详细过程

《将Mybatis升级为Mybatis-Plus的详细过程》本文详细介绍了在若依管理系统(v3.8.8)中将MyBatis升级为MyBatis-Plus的过程,旨在提升开发效率,通过本文,开发者可实现... 目录说明流程增加依赖修改配置文件注释掉MyBATisConfig里面的Bean代码生成使用IDEA生

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处