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

2023-12-17 08:12

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

在这里插入图片描述


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只关注状态的好坏。

不同的优势函数聚合形式

在这里插入图片描述

这篇关于【深度强化学习】DQN, Double DQN, Dueling DQN的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Go中sync.Once源码的深度讲解

《Go中sync.Once源码的深度讲解》sync.Once是Go语言标准库中的一个同步原语,用于确保某个操作只执行一次,本文将从源码出发为大家详细介绍一下sync.Once的具体使用,x希望对大家有... 目录概念简单示例源码解读总结概念sync.Once是Go语言标准库中的一个同步原语,用于确保某个操

五大特性引领创新! 深度操作系统 deepin 25 Preview预览版发布

《五大特性引领创新!深度操作系统deepin25Preview预览版发布》今日,深度操作系统正式推出deepin25Preview版本,该版本集成了五大核心特性:磐石系统、全新DDE、Tr... 深度操作系统今日发布了 deepin 25 Preview,新版本囊括五大特性:磐石系统、全新 DDE、Tree

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学