Target Network缓解DQN的动作价值的高估问题

第五章 强化学习进阶-DQN的高级技巧 本小节主要介绍DQN的高级技巧,可以大幅提升DQN的表现,主要内容是对TD算法的改进和对DQN结构的改进。 阅读详情

1、高估问题产生的原因

原因1:由于噪声的存在,影响 m a x ( Q ) max(Q) max(Q)的估计最大值比真实的最大值更大,最小值比真实最小值更小;

原因2:Bootstrapping,DQN近似动作价值 Q Q Q,使用TD算法更新DQN,因为TD算法存在高估,更新DQN时造成高估,下一次TD更新时也会不断高估;


2、Target Network解决动作价值高估问题思路

使用Target Network计算: max ⁡ a Q ( s t + 1 , a ; w − ) \max_aQ(s_{t+1},a;\mathbf{w}^-) maxa​Q(st+1​,a;w−)

TD learning with naïve update:
TD Target:  y t = r t + γ ⋅ max ⁡ a Q ( s t + 1 , a ; w ) . \begin{gathered} \text{TD Target: }\\ y_t=r_t+\gamma\cdot\max_aQ(s_{t+1},a;\mathbf{w}). \\ \end{gathered} TD Target: yt​=rt​+γ⋅amax​Q(st+1​,a;w).​
TD learning with target network:
TD Target: y t = r t + γ ⋅ max ⁡ a Q ( s t + 1 , a ; w − ) \text{TD Target:}\\ y_t=r_t+\gamma\cdot\max_aQ(s_{t+1},a;\mathbf{w}^-) TD Target:yt​=rt​+γ⋅amax​Q(st+1​,a;w−)


3、代码实现

实现带有target network的DQN

class DQNWithTargetNetwork:
    def __init__(self, dim_state=None, num_action=None, discount=0.9):
        self.discount = discount
        self.Q = QNet(dim_state, num_action)
        # 添加target network
        self.target_Q = QNet(dim_state, num_action)
        self.target_Q.load_state_dict(self.Q.state_dict())

    def get_action(self, state):
        # 使用最大价值的动作
        qvals = self.Q(state)
        return qvals.argmax()

    def compute_loss(self, s_batch, a_batch, r_batch, d_batch, next_s_batch):
        # 计算s_batch,a_batch对应的值。
        qvals = self.target_Q(s_batch).gather(1, a_batch.unsqueeze(1)).squeeze()
        # 使用target Q网络计算next_s_batch对应的值。
        next_qvals, _ = self.target_Q(next_s_batch).detach().max(dim=1)
        # 使用MSE计算loss。
        loss = F.mse_loss(r_batch + self.discount * next_qvals * (1 - d_batch), qvals)
        return loss

隔一段时间在再更新target network

# 加权更新target network
def soft_update(target, source, tau=0.01):
    """
    update target by target = tau * source + (1 - tau) * target.
    """
    for target_param, param in zip(target.parameters(), source.parameters()):
        target_param.data.copy_(target_param.data * (1.0 - tau) + param.data * tau)

4、对gather的理解
例如三维的input,从广播机制很容易理解。当dim==0,意味着

out[i][j][k]中的[i]指的是用[index[i][j][k]]取数据放到i的,out[j][k]指的是这两个维度与out同时变化

广播机制是计算循环的一种更快的机制,因此用循环来理解是一样的:

out[i][j][k] = input[index[i][j][k]][j][k]  # if dim == 0

等价于:

out = torch.zeros(index.shape)#定义zero空tensor

# 循环赋值
for j in range(input.shape[1]):
    for k in range(input.shape[2]):
        out[:, j, k] = input[index[i][j][k], j, k]

如果是其他维度可参考:

out[i][j][k] = input[index[i][j][k]][j][k]  # if dim == 0
out[i][j][k] = input[i][index[i][j][k]][k]  # if dim == 1
out[i][j][k] = input[i][j][index[i][j][k]]  # if dim == 2

一个例子:

t = torch.tensor([[1, 2], [3, 4]])
torch.gather(t, 1, torch.tensor([[0, 0], [1, 0]]))

>>tensor([[ 1,  1],
         [ 4,  3]])

torch.gather — PyTorch 2.0 documentation


5、对detech的理解:
将tensor从计算图中分离,不进行梯度更新

torch.Tensor.detach — PyTorch 2.0 documentation

强化学习-学习笔记11 | 解决高估问题 在实际应用中DQN会引起高估,进而影响动作的正确选择。本文介绍的高估问题解决办法为:Target Network & Double DQN.自举通俗来说就是自己把自己举起来,这在现实物理学中是很荒唐的,但在统计学和强化学习中是可以做到自举的。在强化学习中,自举 的意思是用一个估算去更新同类的估算,即自己把自己举起来。之前我们提到:我们注意一下TD target,ytyty_t 中含有部分真实 也含有 部分DQN 在 t+1 时刻的估计。而梯度下降中的 δtδt\delta_t 中含有 ytyty_t 。这说 阅读详情

相关推荐

(6-3)Deep Q Network (DQN)算法:DQN的网络结构与训练过程

上述代码展示了一个简单的DQN代理和经验回放缓冲区的结合使用,在与环境交互中,代理使用remember方法将经验添加到缓冲区,然后在训练循环中使用train方法进行DQN的训练,经验回放缓冲区有助于提高训练的稳定性和效率。上述代码中的神经网络结构是一个简化的DQN模型,您可以根据实际问题的需求调整输入层、隐藏层和输出层的神经元数量,以及添加更复杂的结构。经验回放(Experience Replay)是强化学习中一种重要的技术,通常用于训练深度强化学习代理,如DQN,它的主要目的是改善训练的稳定性和效率。

码农三叔 4401

深度增强学习(DQN)的各种改进(一)

DeepMind在2013年提出DQN模型称为NIPS DQN,主要是增加了经验回放(experience replay)的功能,上篇文章已经介绍。此后,相继有各种改进模型发表。 Nature DQN 由DeepMind在2015年提出,论文:Human-level control through deep reinforcement learning。主要的改进是

wjyhumor的博客 1935

Dify-前端本地运行-单点登录

本文介绍了如何在已部署Dify的系统中实现AI应用跳转及页面定制化改造。通过iframe跳转无法满足甲方需求后,作者对Dify前端源码进行了本地化二次开发,主要步骤包括:1) 按照官方文档搭建本地开发环境;2) 修改.env配置文件连接部署好的后端服务;3) 隐藏侧边栏和头部导航栏;4) 实现单点登录功能,通过URL参数获取用户邮箱自动登录。过程中解决了请求拦截导致的登录校验问题,最终达成仅保留对话框界面并同步用户信息的需求。该方案涉及Next.js框架和React技术的应用,为类似定制化需求提供了参

weixin_43163457的博客 3226

深度强化学习——DQN算法原理

深度Q网络与Q学习的目标价值以及价值的更新方式都非常相似。主要的不同在于:深度Q网络将Q学习与深度学习结合,用深度网络来近似动作价值函数,而Q学习则是采用表格存储;深度Q网络采用经验回放的训练方式,从历史数据中随机采样,而Q学习直接采用下一个状态的数据进行学习。

weixin_44732379的博客 6万+

Ansys-结构动力学分析-圆柱斜齿轮模态分析学习心得

模态分析的步骤基本一直,不同点在于选择什么单元类型,模型,节点约束等 圆柱斜齿轮模态分析的难点在于圆柱斜齿轮的模型建立,和所要约束的节点的选择。 用命令流方法建立齿轮模型效率较高,当然,在ansys里建立复杂的模型实在不敢恭维,对于自下而上建模,需要知道每个关键点的坐标位置。下图是创建圆柱斜齿轮模型的命令流方式。 模型不同使用的数据也就不同了。 对于施加约束的问题这就必须要熟悉select e...

weixin_45385183的博客 1831

cJSON库用完后内存泄漏?手把手教你正确使用cJSON_Delete和free释放资源

本文深入解析cJSON库的内存管理机制,重点解决使用后的内存泄漏问题。通过详细讲解cJSON_Delete和free的正确使用方法,帮助开发者在处理JSON数据时有效释放资源,避免内存泄漏。特别适用于嵌入式系统和资源受限环境,提升开发效率和系统稳定性。

weixin_30808693的博客 419

DQN笔记:高估问题 & target network & Double DQN

Q 学习算法有一个缺陷:用 Q 学习训练出的 DQN 会高估真实的价值,而且高估通常是非均匀的。 这个缺陷导致 DQN 的表现很差。 高估问题并不是 DQN 本身的缺陷,而是训练 DQN 用的 Q 学习算法的缺陷。 1 自举(bootstrapping)导致的偏差传播 1.1 DQN参数更新(回顾) Q-learning 算法每次从经验回放数组 (Replay Buffffer) 中抽取一个四元组。然后执行以下步骤,对 DQN 的参数做一轮更新: 1,计算TD目标 ——&...

qq_40206371的博客 5662

手把手教你学simulink(13.2)--构建一个单相并网逆变器Simulink仿真模型

基于Simulink的单相并网逆变器项目的详细仿真实例。这个项目将重点放在逆变器的详细建模、最大功率点跟踪(MPPT)控制策略、并网控制和仿真分析上。我们将使用MATLAB/Simulink来构建整个系统,并通过具体的代码和模块来实现各个功能。

MHD0815的博客 545

DQN(Deep Q-Learning)中的高估问题以及DQN的解决策略

引起高估问题的原因主要有两个,分别为TD Target中的最大化 和 仅用一个神经网络所带来的BootStrapping。引入Target Network,在一定程度上避免了bootstrapping(但没有完全避免,因为wT依赖于ww_T依赖于wwT​依赖于w提出Double DQN,在一定程度上避免了最大化引起的高估问题。

weixin_51602120的博客 1861

SAP 成本分摊逻辑与案例(含具体数据)

摘要: SAP成本分摊通过**分配(Allocation)与分摊(Assessment)**两种方式,将间接成本中心费用按预设规则(如人数、工时、比例等)结转至直接成本对象。分配保留原始成本要素(如电费、工资),适用于需明细追踪的场景;分摊则打包为次级成本要素(如管理费用),简化核算。实操案例涵盖行政费用分配(按人数)、水电车间分摊(按工时)、机修作业分摊(作业成本法)及内部订单结算,系统通过KSV1/KSU1配置循环规则,KSV5/KSU5执行结转。关键点在于选择匹配业务的分摊基础,合理配置次级成本要素,

金牌架构师 552

【从零到一】Jetson Nano上YOLOv5部署完全攻略:零基础小白也能玩转边缘AI推理

文章摘要: 本文详细介绍了在Jetson Nano边缘设备上部署YOLOv5目标检测模型的完整流程。从硬件准备、系统镜像烧录、基础环境配置,到CUDA/cuDNN验证、Python虚拟环境搭建及PyTorch安装,逐步指导开发者完成部署准备。教程兼顾理论原理与实践操作,提供Python和C++两种实现方案,并涵盖TensorRT优化、实时检测等生产级应用场景,帮助零基础开发者快速掌握边缘AI推理技术,实现高性能目标检测应用。

LXY_LOVE36的博客 370

初探强化学习(14)DQN类算法的值高估问题的笔记

关于DQN算法的一些细节,可以查看这个博客,讲的很细节。 主要参考博客 https://zhuanlan.zhihu.com/p/443807831 https://itpcb.com/a/162740#:~:text=%E5%87%BA%E7%8E%B0%E4%BB%B7%E5%80%BC%E9%AB%98%E4%BC%B0%E7%9A%84%E6%A0%B9,%E7%9A%84%E5%8D%B7%E7%A7%AF%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C%E3%80%82

qq_33328642的博客 1154

FortiWeb 相对路径遍历漏洞复现(CVE-2025-64446)

FortiWeb是Fortinet公司推出的企业级Web应用防火墙(WAF),专为保护Web应用和API抵御高级威胁设计。它集成人工智能与机器学习技术,通过双层检测引擎(HMM模型与SVM向量机)精准识别异常流量,可防御OWASP Top 10攻击、SQL 注入、XSS、DDoS及恶意机器人。其核心功能包括API自动化保护、虚拟补丁集成(兼容Acunetix等第三方扫描工具)及智能流量分析,支持HTTP/2、WebSocket等现代协议。(CVE-2025-64446)

iSee857的博客 467

高估问题以及解决方法

两个原因: 1.计算TD target时,用到了最大化,造成计算的结果比真实值要大。 2.用高估的结果再去更新自己,在网络中一次次循环过程,该最大化会越来越大,导致高估。 DQN的高估是非均匀的,而这种非均匀的高估是有害的,因为不能选出最优的动作。 DQN的高估是非均匀的,原因如下: DQN一般从队列中选取一个transition四元组去更新w,而TD target已经是对真实价值的高估,TD算法鼓励DQN的预测接近,但是已经是高估的,那么DQN这么做就会把DQN对的估计值给推高,s和a的..

qq_41903673的博客 1333

【Charge】仿真目录

Author: JiJi\textrm{Author: JiJi}Author: JiJi Created Time: 2026.01.20\textrm{Created Time: 2026.01.20}Created Time: 2026.01.20 Modified Time: 2026.01.20\textrm{Modified Time: 2026.01.20}Modified Time: 2026.01.20工作流程材料模型[Charge] 电荷分布与折射率变化理论 [Charge] FDTD

u011699626的博客 317

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

DQN及其改进

st​st1​yt​rt​γ⋅maxa​Qst1​a;w)xi​Qi​xi​Emeani​Qi​)]meani​xi​)Emaxi​Qi​)]≥maxi​xi​)Qst​a;w)Qst1​a;w)a∗aargmax​Qst1​a;w)yt​rt​γ⋅Qst1​a∗;w−)Qst1​a∗。

fjfdg666的博客 1113

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【强化学习】Double DQN(Double Deep Q-Network)算法

强化学习中的深度Q网络(DQN)是一种将深度学习与Q学习结合的算法,它通过神经网络逼近Q函数以解决复杂的高维状态问题。然而,DQN存在过估计问题(Overestimation Bias),即在更新Q值时,由于同时使用同一个网络选择动作和计算目标Q值,可能导致Q值的估计偏高。 Double DQN(DDQN)引入了“双网络”机制来缓解这个问题,从而提高了算法的稳定性和收敛性。

博主关注人工智能、强化学习、嵌入式等||985高校A+学科研究生、猿龄六年||优快云博客专家、2024年博客之星TOP33、华为云享专家、人工智能领域优质创作者。 1万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Optimization of DQN

Optimization of DQN

Harris-H的博客 625

告别查表!从线性逼近到Dueling DQN,一文搞懂强化学习如何应对海量状态

本文深入探讨了强化学习从查表法到Dueling DQN的技术演进,重点分析了值函数逼近在应对海量状态空间中的关键作用。通过对比线性逼近、DQN及其改进版本(如Double DQN和Dueling DQN)的优缺点,揭示了如何有效解决维度灾难问题,为复杂场景下的智能决策提供实用解决方案。

weixin_30598225的博客 363

PyTorch-RL中的DQN算法详解:从基础DQN到Double DQN与Dueling DQN

PyTorch-RL是一个基于PyTorch的深度强化学习框架,提供了丰富的强化学习算法实现,包括DQN(深度Q网络)及其改进版本。本文将详细介绍PyTorch-RL中的DQN算法,从基础原理到Double DQN和Dueling DQN等高级变体,帮助新手快速掌握深度强化学习的核心技术。 ## DQN算法基础:解决强化学习的核心挑战 DQN(Deep Q-Network)是将深度神经网络与Q

gitblog_00906的博客 430

别再死记硬背DQN了!用游戏开发者的视角,图解Replay Buffer、LSTM等6大改进的实战意义

本文从游戏开发者视角出发,图解DQN六大改进的实战意义,包括Replay Buffer、Target Network、Double DQN等关键技术。通过直观比喻和简化代码,展示这些改进如何解决游戏AI开发中的数据关联性、训练稳定性、过度乐观等问题,提升智能体在复杂游戏环境中的表现。

weixin_33721344的博客 194

深度强化学习 ②(DRL)

深度强化学习原理

weixin_46531416的博客 661

强化学习之DQN算法族(基于gymnasium开发)

DQN(Deep Q-Network)是一种将深度学习和强化学习结合的算法,通过神经网络近似Q值函数,并利用Q-Learning更新策略。其核心改进包括经验回放和目标网络:经验回放通过存储历史经验并随机采样打破数据相关性;目标网络通过延迟更新参数稳定训练过程。DQN解决了传统Q-Learning在高维状态空间和样本相关性上的痛点,但存在过估计偏差等问题。DoubleDQN通过分离动作选择和评估缓解过估计,而PrioritizedDQN则通过优先级采样提升样本利用率。伪代码展示了DQN的训练流程,包括网络初始

benben044的专栏 242

深度强化学习

其实是一个概率密度函数,根据当前的状态,会有一个包含各个动作的概率密度函数,分为确定性策略和随机性策略。下图为随机性策略,包含不同的动作,最后通过随机抽样选择一个执行的动作。状态转移的随机性 :给出当前的state和action 环境根据状态转移函数(根据当前的s 和a 得到一个状态转移的概率,随机抽样决定下一个state。也跟当前的policyΠ有关,积分过程中会用到policyΠ,不同的Π得到的Q也不同。Q(s,a,w) 输入当前状态s,输出所有动作打分, w是神经网络参数,优化该参数使其打分更准。

jjhw_的博客 253

从像素到智慧:DQN如何让AI学会“看懂“游戏画面?

想象一下,你面对一个完全陌生的游戏,只能看到屏幕上的像素点,不知道规则,不知道目标,甚至不知道哪些像素代表可控制的角色。这就是2013年DeepMind团队面临的挑战——让AI仅通过原始像素输入学会玩Atari游戏。传统游戏AI需要开发者手动编写规则,但DQN(深度Q网络)却让AI像人类一样通过"观察"和"试错"自主学习。这不仅仅是技术突破,更是对"智能"本质的重新定义。 ## 核心挑战:当AI

gitblog_00157的博客 351

深度强化学习实战指南:从PPO、DQN算法原理到调参部署全解析

这类课程标题看着很吸引人,但真正想学的人,最该关心的不是“100集”这个数字,而是这套内容能不能帮你把强化学习从“知道概念”变成“能动手、能调参、能解决实际问题”。深度强化学习(DRL)这几年在游戏AI、机器人控制、推荐系统里应用很广,但它的学习曲线很陡,很多人卡在理论看不懂、代码跑不通、效果调不出来这几个环节。 一个能帮你“学完即可就业”的课程,核心价值不在于覆盖了多少算法名字,而在于它是否解决了这三个实际问题: 1. 把数学公式和代码实现真正对应起来 ; 2. 给出可复现、可修改的实战项目环境 ; 3.

weixin_33910137的博客 510
上一篇: 训练强化学习的经验回放策略:experience replay
下一篇: 对比TargetNetwork 和 Double DQN
KPer_Yang
博客等级 码龄5年 281粉丝 181原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KPer_Yang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值