强化学习-4 DQN算法、DQN算法进阶

文章目录

  • 1 深度网络
  • 2 经验回放
  • 3 目标网格
  • 4 实战
    • 4.1 伪代码
      • 4.1.1 伪代码解释
    • 4.2 定义模型
  • 5 Double DQN算法
  • 6 Dueling DQN 算法
  • 7 Noisy DQN
  • 8 PER DQN
  • 9 C51算法
    • 9.1 公式解析
      • 9.1.1 含义
      • 9.1.2 状态分布
    • 9.2 直观理解
    • 9.3 应用


深度强化学习

DQN 算法,英文全称 Deep Q-Network , 顾名思义,它的主要贡献就是在 Q-learning 算法的基础上引入了深度神经网络来近似动作价值函数 𝑄(𝑠,𝑎),从而能够处理高维的状态空间。
除了用深度网络代替 𝑄 表之外,DQN 算法还引入了一些技巧,如经验回放和目标网络。

1 深度网络

神经网络就是一个函数,只不过不同于一般的数值函数,它的输入输出都是向量,并且拥有可以学习的参数 θ \theta θ,这些参数可以通过梯度下降的方式来优化,从而使得神经网络能够逼近任意函数。
在 𝑄 表中我们描述状态空间的时候一般用的是状态个数,而在神经网络中我们用的是状态维度。。另外注意,无论是 𝑄 表还是 DQN 中的神经网络,它们输出的都是每个动作对应的 𝑄 值,即预测,而不是直接输出动作。要想输出动作,就需要额外做一些处理,例如结合贪心算法选择 𝑄 值最大对应的动作等,这就是我们一直强调的控制过程。

2 经验回放

引入一些技巧来提高训练的稳定性。

3 目标网格

每隔若干步才更新的目标网格。

4 实战

养成先写出伪代码再编程的习惯,这样更有助于提高对算法的理解。

4.1 伪代码


DQN 算法

  1. 初始化当前网络参数 θ \theta θ
  2. 复制参数到目标网络 θ ^ ← θ \hat{\theta} \leftarrow \theta θ^θ
  3. 初始化经验回放库 D D D
  4. for 回合数 m = 1 , 2 , … , M m = 1, 2, \ldots, M m=1,2,,M do
    1. 重置环境,获得初始状态 s 0 s_0 s0
    2. for 时步 t = 1 , 2 , … , T t = 1, 2, \ldots, T t=1,2,,T do
      1. 动作选择:
        • 根据 ϵ \epsilon ϵ-greedy 策略选择动作 a t a_t at
      2. 执行动作,反馈奖励 r t r_t rt 和下一个状态 s t + 1 s_{t+1} st+1
      3. 将样本 ( s t , a t , r t , s t + 1 ) (s_t, a_t, r_t, s_{t+1}) (st,at,rt,st+1) 存到经验回放库 D D D
      4. 更新状态 s t + 1 ← s t s_{t+1} \leftarrow s_t st+1st
      5. 模型更新:
        1. D D D 中随机采样一个批量的样本
        2. 计算 Q Q Q 的期望值,即 y i = r t + γ max ⁡ a ′ Q ( s t + 1 , a ′ ; θ ^ ) y_i = r_t + \gamma \max_{a'} Q(s_{t+1}, a'; \hat{\theta}) yi=rt+γmaxaQ(st+1,a;θ^)
        3. 计算损失 L ( θ ) = E [ ( y i − Q ( s i , a i ; θ ) ) 2 ] L(\theta) = \mathbb{E}[(y_i - Q(s_i, a_i; \theta))^2] L(θ)=E[(yiQ(si,ai;θ))2],并关于参数 θ \theta θ 做随机梯度下降
      6. C C C 步复制参数到目标网络 θ ^ ← θ \hat{\theta} \leftarrow \theta θ^θ
    3. end for
  5. end for

4.1.1 伪代码解释

  1. 初始化阶段

    • 初始化当前网络的参数 θ \theta θ
    • 复制参数到目标网络 θ ^ \hat{\theta} θ^,即 θ ^ ← θ \hat{\theta} \leftarrow \theta θ^θ
    • 初始化经验回放库 D D D
  2. 训练回合循环

    • 重置环境,获得初始状态 s 0 s_0 s0
    • 在每个时间步 t t t,根据 ϵ \epsilon ϵ-greedy 策略选择动作 a t a_t at,然后执行动作,获得奖励 r t r_t rt 和下一个状态 s t + 1 s_{t+1} 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 D D 中。
    • 更新状态 s t + 1 ← s t s_{t+1} \leftarrow s_t st+1st
  3. 模型更新

    • 从经验回放库 D D D 中随机采样一个批量的样本。
    • 计算 Q Q Q 的期望值 y i = r t + γ max ⁡ a ′ Q ( s t + 1 , a ′ ; θ ^ ) y_i = r_t + \gamma \max_{a'} Q(s_{t+1}, a'; \hat{\theta}) yi=rt+γmaxaQ(st+1,a;θ^)
    • 计算损失 L ( θ ) = E [ ( y i − Q ( s i , a i ; θ ) ) 2 ] L(\theta) = \mathbb{E}[(y_i - Q(s_i, a_i; \theta))^2] L(θ)=E[(yiQ(si,ai;θ))2],并使用随机梯度下降法更新参数 θ \theta θ
  4. 参数更新

    • C C C 步将当前网络的参数复制到目标网络 θ ^ ← θ \hat{\theta} \leftarrow \theta θ^θ

通过以上步骤,DQN 算法能够在环境中学习并优化其策略。

4.2 定义模型

定义模型,就是定义两个神经网路,即当前网络和目标网络。

uses
uses
MLP
+fc1: torch.nn.Linear
+fc2: torch.nn.Linear
+fc3: torch.nn.Linear
+forward(x: torch.Tensor)
ReplayBuffer
+capacity: int
+buffer: list
+position: int
+push(experience: tuple)
+sample(batch_size: int)
+__len__()
Agent
+policy_net:MLP
+target_net:MLP
+optimizer:optim.Adam
+memory:ReplayBuffer
+sample_count:int
+epsilon:float
+epsilon_start:float
+epsilon_end:float
+epsilon_decay:int
+gamma:float
+lr:float
+batch_size:int
+target_update:int
+sample_action(state)
+predict_action(state)
+update()

DQN算法为什么要进行改进?

模型改进点目标
Double DQN改进目标 𝑄 值的计算型层面提高预测的精度介于DQN 和Nature DQN之间
Dueling DQN优化神经网络的结构提高 𝑄 值的估计精度
Noisy DQN优化网络结构增强网络的探索能力
PER DQN经验回放的角度提高控制过程中的探索度
C51算法
Rainbow DQN算法

5 Double DQN算法

Double DQN 算法中我们是通过改进目标 𝑄 值的计算来优化算法。
把动作选择和动作评估这两个过程分离开来,从而减轻了过估计问题。

6 Dueling DQN 算法

Dueling DQN 算法中则是通过优化神经网络的结构来优化算法。

在输出层之前分流(dueling)出了两个层,价值层和优势层。
优势层用于估计每个动作带来的优势,输出维度为动作数。
价值层用于估计每个状态的价值,输出维度为1。

7 Noisy DQN

探索-利用平衡的问题。

𝜀−greedy 策略是从智能体与环境的交互过程改善探索能力,以避免陷入局部最优解。
深度强化学习既要考虑与环境交互过程中的探索能力,也要考虑深度模型本身的探索能力,从而尽量避免陷入局部最优解的困境之中。
Noisy DQN 算法其实是在 DQN 算法基础上在神经网络中引入了噪声层来提高网络性能的,即将随机性应用到神经网络中的参数或者说权重,增加了 𝑄 网络对于状态和动作空间的探索能力,从而提高收敛速度和稳定性。

8 PER DQN

目标方法技术是一环套一环的,一个技术中又会有许多需要优化的地方。

目的:
方法:优化经验回放的设计提高模型的收敛能力和鲁棒性。
技术点:通过TD误差来为经验回放中的样本赋予不同优先级。
工具:SumTree二叉树结构。
优缺点:单纯根据 TD 误差进行优先采样有可能会错过对当前网络“信息量”更大的样本。其次,被选中样本的 TD 误差会在当前更新后下降,然后优先级会排到后面去,下次这些样本就不会被选中,这样来来回回都是那几个样本。
随机优先级采样 优化TD采样。

9 C51算法

核心思想:是将传统 DQN 算法中的值函数 𝑄(𝑠,𝑎) 换成了值分布 𝑍(𝑥,𝑎),即将值函数的输出从一个数值变成了一个分布,这样就能更好地处理值函数估计不准确以及离散动作空间的问题。

将值函数 𝑄 看成是一个随机变量,它的期望值就是 𝑄 函数,而它的方差就是 𝑄 函数的不确定性。

该公式是强化学习中的Q函数定义,它表示在给定状态和动作下的期望累计回报。以下是对公式的详细解释:

9.1 公式解析

Q π ( x , a ) : = E Z π ( x , a ) = E [ ∑ t = 0 ∞ γ t R ( x t , a t ) ] Q^\pi(x, a) := \mathbb{E}Z^\pi(x, a) = \mathbb{E} \left[ \sum_{t=0}^{\infty} \gamma^t R(x_t, a_t) \right] Qπ(x,a):=EZπ(x,a)=E[t=0γtR(xt,at)]

9.1.1 含义

  • Q π ( x , a ) Q^\pi(x, a) Qπ(x,a): 在策略 π \pi π 下,从状态 x x x 执行动作 a a a 开始的状态-动作值函数。它表示在状态 x x x 采取动作 a a a 时,按照策略 π \pi π 继续行动所能获得的期望累计回报。
  • E \mathbb{E} E: 期望值运算符,表示对未来的随机性取期望。
  • Z π ( x , a ) Z^\pi(x, a) Zπ(x,a): 从状态 x x x 采取动作 a a a 开始,按照策略 π \pi π 的行为得到的回报序列的期望值。
  • ∑ t = 0 ∞ γ t R ( x t , a t ) \sum_{t=0}^{\infty} \gamma^t R(x_t, a_t) t=0γtR(xt,at): 累计回报。表示从时间步 t = 0 t=0 t=0 开始,未来各个时间步的奖励 R ( x t , a t ) R(x_t, a_t) R(xt,at) 按照折扣因子 γ \gamma γ 加权求和。

9.1.2 状态分布

公式下面的解释是描述状态 x t x_t xt 和动作 a t a_t at 的分布及其关系:

  • x t ∼ P ( ⋅ ∣ x t − 1 , a t − 1 ) x_t \sim P(\cdot \mid x_{t-1}, a_{t-1}) xtP(xt1,at1): 状态 x t x_t xt 根据先前状态 x t − 1 x_{t-1} xt1 和动作 a t − 1 a_{t-1} at1 通过状态转移概率分布 P P P 得到。
  • a t ∼ π ( ⋅ ∣ x t ) a_t \sim \pi(\cdot \mid x_t) atπ(xt): 动作 a t a_t at 根据当前状态 x t x_t xt 和策略 π \pi π 得到。
  • x 0 = x x_0 = x x0=x: 初始状态为 x x x
  • a 0 = a a_0 = a a0=a: 初始动作为 a a a

9.2 直观理解

  • Q函数:表示在特定状态下采取某个动作,并且以后按照某个策略行动所能获得的总奖励。这个值越高,意味着从这个状态采取这个动作是有利的。
  • 期望:由于未来状态和奖励可能是随机的,所以计算期望值是为了得到一个平均的回报值。
  • 折扣因子 γ \gamma γ:用于衡量未来奖励的重要性, γ ∈ [ 0 , 1 ) \gamma \in [0, 1) γ[0,1) γ \gamma γ 越接近1,表示未来奖励的重要性越高;越接近0,表示更关注短期奖励。

9.3 应用

这个公式是强化学习中Q学习、深度Q网络(DQN)等算法的基础,通过估计这个函数,智能体可以找到最佳策略,从而在给定环境中获得最大的累计回报。

总结来说,公式定义了在特定状态和动作下的期望累计回报,通过期望和折扣因子考虑了未来的所有可能性和长期收益。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【redis】Redis AOF

1、AOF的基本概念 AOF持久化方式是通过保存Redis所执行的写命令来记录数据库状态的。AOF以日志的形式来记录每个写操作(增量保存),将Redis执行过的所有写指令记录下来(读操作不记录)。AOF文件是一个只追加的文件&…

Redis 高级数据结构业务实践

0、前言 本文所有代码可见 > 【gitee code demo】 本文会涉及 hyperloglog 、GEO、bitmap、布隆过滤器的介绍和业务实践 1、HyperLogLog 1.1、功能 基数统计(去重) 1.2、redis api 命令作用案例PFADD key element [element ...]添加元素到keyPF…

PortSip测试

安装PBX 下载 免费下载 PortSIP PBX 安装PBX,安装后,运行 ,默认用户是admin 密码是admin,然后配置IP 为192.168.0.189 设置域名为192.168.0.189 配置分机 添加分机,添加了10001、10002、9999 三个分机&#xff0c…

深度学习实验第T2周:彩色图片分类

>- **🍨 本文为[🔗365天深度学习训练营](https://mp.weixin.qq.com/s/0dvHCaOoFnW8SCp3JpzKxg) 中的学习记录博客** >- **🍖 原作者:[K同学啊](https://mtyjkh.blog.csdn.net/)** 目录 一、前言 目标 二、我的环境&#…

【Linux进程通信】进程间通信介绍、匿名管道原理分析

目录 进程通信是什么? 进程通信的目的 进程通信的本质 匿名管道:基于文件级别的通信方式 站在文件描述符角度-深度理解管道原理 进程通信是什么? 进程通信就是两个或多个进程之间进行数据层面的交互。 进程通信的目的 1.数据传输&#x…

已解决java.security.acl.LastOwnerException:无法移除最后一个所有者的正确解决方法,亲测有效!!!

已解决java.security.acl.LastOwnerException:无法移除最后一个所有者的正确解决方法,亲测有效!!! 目录 问题分析 出现问题的场景 报错原因 解决思路 解决方法 1. 检查当前所有者数量 2. 添加新的所有者 3. 维…

mac Canon打印机连接教程

官网下载安装驱动: 选择打印机类型和mac系统型号下载即可 Mac PS 打印机驱动程序 双击安装 系统偏好设置 点击“”添加: OK可打印玩耍!! 备注: 若需扫描,下载扫描程序: 备注:…

设置小蓝熊的CPU亲和性、CPU优先级再设置法环的CPU亲和性

# 适用于Windows系统 # 时间 : 2024-06-28 # 作者 : 三巧(https://blog.csdn.net/qq_39124701) # 文件名 : 设置小蓝熊的CPU亲和性、CPU优先级再设置法环的CPU亲和性.ps1 # 使用方法: 打开记事本,将所有代码复制到记事本中,保存文件时候修改文件后…

Hugging Face Accelerate 两个后端的故事:FSDP 与 DeepSpeed

社区中有两个流行的零冗余优化器 (Zero Redundancy Optimizer,ZeRO)算法实现,一个来自DeepSpeed,另一个来自PyTorch。Hugging FaceAccelerate对这两者都进行了集成并通过接口暴露出来,以供最终用户在训练/微调模型时自主选择其中之…

zabbix-server的搭建

zabbix-server的搭建 部署 zabbix 服务端(192.168.99.180) rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm cd /etc/yum.repos.d sed -i s#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix# zabbix.r…

关于FPGA对 DDR4 (MT40A256M16)的读写控制 4

关于FPGA对 DDR4 (MT40A256M16)的读写控制 4 语言 :Verilg HDL 、VHDL EDA工具:ISE、Vivado、Quartus II 关于FPGA对 DDR4 (MT40A256M16)的读写控制 4一、引言二、DDR4 SDRAM设备中模式寄存器重要的模式寄存…

Arduino - LED 矩阵

Arduino - LED 矩阵 Arduino - LED Matrix LED matrix display, also known as LED display, or dot matrix display, are wide-used. In this tutorial, we are going to learn: LED矩阵显示器,也称为LED显示器,或点阵显示器,应用广泛。在…

“Hello, World!“ 历史由来

布莱恩W.克尼汉(Brian W. Kernighan)—— Unix 和 C 语言背后的巨人 布莱恩W.克尼汉在 1942 年出生在加拿大多伦多,他在普林斯顿大学取得了电气工程的博士学位,2000 年之后取得普林斯顿大学计算机科学的教授教职。 1973 年&#…

C++ | Leetcode C++题解之第203题移除链表元素

题目: 题解: class Solution { public:ListNode* removeElements(ListNode* head, int val) {struct ListNode* dummyHead new ListNode(0, head);struct ListNode* temp dummyHead;while (temp->next ! NULL) {if (temp->next->val val) {…

小柴冲刺软考中级嵌入式系统设计师系列一、计算机系统基础知识(1)嵌入式计算机系统概述

flechazohttps://www.zhihu.com/people/jiu_sheng 小柴冲刺嵌入式系统设计师系列总目录https://blog.csdn.net/qianshang52013/article/details/139975720?spm1001.2014.3001.5501 根据IEEE(国际电气电子工程师协会)的定义,嵌入式系统是&q…

Linux高并发服务器开发(六)线程

文章目录 1. 前言2 线程相关操作3 线程的创建4 进程数据段共享和回收5 线程分离6 线程退出和取消7 线程属性(了解)8 资源竞争9 互斥锁9.1 同步与互斥9.2 互斥锁 10 死锁11 读写锁12 条件变量13 生产者消费者模型14 信号量15 哲学家就餐 1. 前言 进程是C…

哪吒汽车,正在等待“太乙真人”的拯救

文丨刘俊宏 在360创始人、哪吒汽车股东周鸿祎近日连续且着急的“督战”中,哪吒汽车(下简称哪吒)终究还是顶不住了。 6月26日,哪吒通过母公司合众新能源在港交所提交了IPO文件,急迫地希望成为第五家登陆港股的造车新势力…

uniapp中实现瀑布流 短视频页面展示

直接上干货 第一部分为结构 <swiper class"list" :currentindex change"swiperchange" scrolltolower"onReachBottom"><swiper-item style"overflow: scroll;" v-for"(item,index) in 2" :key"index"&g…

DataV大屏组件库

DataV官方文档 DataV组件库基于Vue &#xff08;React版 (opens new window)&#xff09; &#xff0c;主要用于构建大屏&#xff08;全屏&#xff09;数据展示页面即数据可视化&#xff0c;具有多种类型组件可供使用&#xff1a; 源码下载

Golang | Leetcode Golang题解之第204题计数质数

题目&#xff1a; 题解&#xff1a; func countPrimes(n int) int {primes : []int{}isPrime : make([]bool, n)for i : range isPrime {isPrime[i] true}for i : 2; i < n; i {if isPrime[i] {primes append(primes, i)}for _, p : range primes {if i*p > n {break}…