深度强化学习DRL现存问题和训练指南(D3QN(Dueling Double DQN))

news2025/7/22 22:14:06

目录

强化学习

问题

好用的算法标准

表现好

减小学习曲线的波动

 On-Policy和off-Policy区别

学习方式

采样数据利用

学习本质

优缺点

DQN

创新点

优点

缺点

MDP和POMDP

结果图

DQN

DDQN

Dueling DQN

参数

iteration

episode

epoch

Batch_Size

Experimence Replay Buffer经验回放缓存

Reward

discount factor或gamma折扣因子

Agent神经网络

batch normalization批归一化

dropout随机失活

离散动作探索策略(以epslion-Greedy为例)

衰减和退火

Sample complexity样本复杂性

参考链接


Deep RL之所以受欢迎,是因为它是机器学习ML中唯一可以用测试集训练的领域。

强化学习

问题

  • 样本利用率非常低。换言之为了让模型的表现达到一定高度需要极为大量的训练样本。
  • 最终表现很多时候不够好。在很多任务上用非强化学习甚至非学习的其它方法,如基于模型的控制(model based control),线性二次型调节器(Linear Quadratic Regulator)等等可以获得好得多的表现。最气人的是这些模型很多时候样本利用率还高。
  • DRL成功的关键离不开一个好的奖励函数(reward function),然而这种奖励函数往往很难设计。在Deep Reinforcement Learning That Matters作者提到有时候把奖励乘以一个常数模型表现就会有天和地的区别。
  • 对环境的过拟合。DRL少有在多个环境上玩得转的。
  • 不稳定性

好用的算法标准

  • 没有很多需要调整的超参数。D3QN、SAC超参数较少,且SAC可自行调整超参数 α
  • 超参数很容易调整或确定。SAC的 reward scaling 可以在训练前直接推算出来。PPO超参数的细微改变不会极大地影响训练
  • 训练快,收敛稳、得分高。
  • 图片截取自 Ape-X 与 SAC 论文

表现好

  • 训练快,曲线越快达到某个目标分数 target reward (需要多测几次的结果才有说服力)
  • 收敛稳,曲线后期不抖动(曲线在前期剧烈抖动是可以接受的)
  • 得分高,曲线的最高点可以达到很高(即便曲线后期下降地很厉害也没关系,因为我们可以保存整个训练期间“平均得分”最高的模型)

 大部分情况下,算法越训练越差能避免,但也可以不理会。因为DRL只需要根据学习曲线保存性能最好的策略即可(前提是对每个策略的实际性能评估足够准确)

减小学习曲线的波动

如下图,波动过大的曲线,不利于我们评估DRL算法。

先弄清楚造成波动的原因,然后采用对应的解决方案:

  • 如果在策略网络没有更新的情况下,Agent在环境中得到的分数差异过大。那么这是环境发生改变造成的:1. 每一轮训练都需要 env.reset(),然而,有时候重置环境会改变难度,这种情况下造成的波动无法消除。2. 有时候是因为DRL算法的泛化性不够好。此时我们需要调大相关参数增加探索,以训练出泛化性更好的策略。
  • 如果在策略网络没有更新的情况下,Agent在环境中得到的分数差异较小。等到更新后,相邻两次的分数差异很大。那么这是环境发生改变造成的: 1. 把 learning rate 调小一点。2. 有时候是因为算法过度鼓励探索而导致的,调小相关参数即可。

 On-Policy和off-Policy区别

学习方式

若agent与环境互动,则为On-policy(此时因为agent亲身参与,所以互动时的policy和目标的policy一致);若agent看别的agent与环境互动,自己不参与互动,则为Off-policy(此时因为互动的和目标优化的是两个agent,所以他们的policy不一致)。


采样数据利用


On-policy:采样所用的policy和目标policy一致,采样后进行学习,学习后目标policy更新,此时需要把采样的policy同步更新以保持和目标policy一致,这也就导致了需要重新采样。
Off-policy:采样的policy和目标的policy不一样,所以你目标的policy随便更新,采样后的数据可以用很多次也可以参考。

学习本质

监督学习中通常利用已知(已标记)的数据进行学习,其本质是从数据中总结规律,这和人从学1+1=2基本原理一致,强化学习的过程也是如此,仍然是从数据中学习,只不过强化学习中学习的数据是一系列的轨迹{< s 0 , a 0 , r 0 , s 1 > < s 1 , a 1 , r 1 , s 2 > , . . . , < s n − 1 , a n − 1 , r n − 1 , s n > 
 

优缺点


on-policy直接了当,速度快,但不一定找到最优策略。
off-policy曲折,收敛慢,但采样效率高,是更为强大和通用。

DQN

DQN时序差分离线控制算法off-line 训练的话不会考虑终止状态这种东西。每轮学习都是从memory里抽取记录来学的。

是第一个将深度学习模型与强化学习结合在一起从而成功地直接从高维的输入学习控制策略。

创新点

  • 基于Q-Learning构造Loss Function(不算很新,过往使用线性和非线性函数拟合Q-Table时就是这样做)。
  • 通过experience replay(经验池)解决相关性及非静态分布问题;
  • 使用TargetNet解决稳定性问题。

优点

  • 算法通用性,可玩不同游戏;
  • End-to-End 训练方式;
  • 可生产大量样本供监督学习。

缺点

  • 无法应用于连续动作控制;
  • Loss函数比较复杂
  • CNN不一定收敛,需精良调参。(用ImageNet训练过的模型作为作为前置网络初始化参数,收敛不太难)
  • 只能处理只需短时记忆问题,无法处理需长时记忆问题(DQN+LSTM改进方法(DRQN)论文见参考链接);

在实践中,DQN将最近的四帧画面当作输入进行训练,因此DQN无法记住四帧之前的内容。换言之,任何需要超过四帧记忆的游戏都将表现为非MDP问题,因为游戏未来的状态(和奖励)不仅仅取决于DQN当前的输入。游戏不再是MDP问题,而是部分可观察的MDP。现实世界中,任务往往不具有完整的信息,且有噪声,因此是部分可观察的。

MDP和POMDP

MDP:Markov decision process

Fully Observable Environments全部可观

又被称之为“无后效性”,即系统的下个状态只与当前状态信息有关,而与更早之前的状态无关

POMDP:partially observable Markov decision process

Partially Observable Environments部分可观

比如在扑克游戏中,只能看到公开的牌面,看不到其他人隐藏的牌。

结果图

DQN

DDQN

Dueling DQN

参数

iteration

Batch_Size*iteration=一个epoch的数据总量

episode

常用于强化学习,指一个epoch中跑完一个样本

epoch

一个epoch就是跑一遍完整的训练数据。

epoch的次数过多,容易造成过拟合,次数过少,容易使训练的参数达不到最优

根据Replay中数据数量,成比例地修改更新次数。Don't Decay the Learning Rate, Increase the Batch Size. ICLR. 2018 。,经过验证,DRL也适用。

replay_max = 'the maximum capacity of replay buffer'
replay_len = len(ReplayBuffer)

k = 1 + replay_len / replay_max

batch_size   = int(k * basic_batch_size)
epoch = int(k * basic_epoch)

Batch_Size

batch_size为2^{n}

相对于正常数据集,

如果Batch_Size过小,训练数据就会非常难收敛,从而导致欠拟合。

增大Batch_Size,相对处理速度会变快,同时所需内存容量增加。

一般在Batchsize增加的同时,需要对所有样本的训练次数(epoch)增加,以达到最好的结果。

因此需要寻找一个合适的Batchsize值,在模型总体效率和内存容量之间做到最好的平衡。

Experimence Replay Buffer经验回放缓存

对训练影响较大,通常10^{5}~10^{6},具体多大需要调参

在简单的任务中(训练步数小于1e6),对于探索能力强的DRL算法,通常在缓存被放满前就训练到收敛了,不需要删除任何记忆

过大的记忆也会拖慢训练速度,我一般会先从默认值 2 ** 17 ~ 2 ** 20 开始尝试,如果环境的随机因素大,我会同步增加记忆容量 与 batch size、网络更新次数,直到逼近服务器的内存、显存上限(放在显存训练更快)

每轮训练结束后需要通过梯度下降更新参数,更新次数为本轮训练的步数。若希望每轮训练结束后,将记忆中的所有数据都被拿出来训练,则:

记忆容量 memories_size = 本轮训练的步数 * batch_size ~= S * batch_size 
max_step = S * 10

Reward

  • 使用惩罚项可能导致智能体一动不动,因为不动就不会有惩罚。所以有惩罚项的训练过程可能存在搜索不足的问题
  • 模型很多时候会找到作弊的手段。Alex举的一个例子是有一个任务需要把红色的乐高积木放到蓝色的乐高积木上面,奖励函数的值基于红色乐高积木底部的高度而定。结果一个模型直接把红色乐高积木翻了一个底朝天。
  • 奖励函数的值太过稀疏。换言之大部分情况下奖励函数在一个状态返回的值都是0。这就和我们人学习也需要鼓励,学太久都没什么回报就容易气馁。
  • 奖励函数过于复杂,会引入bias
  • 结算reward的0.1倍一定要大于日常reward才能避免被稀释

【dropout、batch normalization在DL中得到广泛地使用,可惜不适合DRL。

discount factor或gamma折扣因子

希望你的智能体每做出一步,至少需要考虑接下来多少步的reward?

如果我希望考虑接下来的t 步,那么我让第t步的reward占现在这一步的Q值的 0.1

 相当于往后考虑100时间步

gamma绝对不能选择1.0。尽管有时候在入门DRl任务选择gamma=1.0 甚至能训练得更快,但是gamma等于或过于接近1会有“Q值过大”的风险。一般选择0.99,在某些任务上需要调整。详见《Reinforcement Learning An Introduction - Richard S. Sutton》的 Chapter 12 Eligibility Traces。

Agent神经网络

过大、过深的神经网络不适合DRL:

深度学习可以在整个训练结束后再使用训练好的模型。而强化学习需要在几秒钟的训练后马上使用刚训好的模型。这导致DRL只能用比较浅的网络来保证快速拟合(10层以下)

并且强化学习的训练数据不如有监督学习那么稳定,无法划分出训练集测试集去避免过拟合,因此DRL也不能用太宽的网络(超过1024),避免参数过度冗余导致过拟合

batch normalization批归一化

经过大量实验,DRL绝对不能直接使用批归一化,如果非要用,那么就要修改Batch Normalization的动量项超参数。详见 曾伊言:强化学习需要批归一化(Batch Norm)吗?

dropout随机失活

如果非要用,那么也要选择非常小的 dropout rate(0~0.2),而且要注意在使用的时候关掉dropout。

  • 好处:在数据不足的情况下缓解过拟合;像Noisy DQN那样去促进策略网络探索
  • 坏处:影响DRL快速拟合的能力;略微增加训练时间

离散动作探索策略(以epslion-Greedy为例)

如何选择Q值最大以外的动作:

每次都从 已经被强化学习算法加强过的Q值中,选择Q值最大的那个动作去执行。为了探索,有很小的概率 epslion 随机地执行某个动作。

epslion-Greedy保证了Replay可以收集到足够丰富的训练数据。超参数 执行随机动作的概率 epslion我一般选择 0.1,然后根据任务需要什么程度的探索强度再修改。

如果离散动作很多,我会尽可能选择大一点的 epslion

衰减和退火

在离散动作中,探索衰减表现为逐步减小执行随机动作的概率 在连续动作中,探索衰减表现为逐步减小探索噪声的方差,退火同理。

  • 衰减就是单调地减小(固定、不固定,比例、定值 ),直至某个限度后停止。在比较简单的环境里,算法可以在前期加强探索,后期减少探索强度,例如在训练前期使用一个比较大的 epslion,多执行随机动作,收集训练数据;训练中期让epslion逐步减小,可以线性减小 或者 乘以衰减系数,完成平缓过渡;训练后期干脆让epslion变为一个极小的数,以方便收敛。我建议适度地使用探索衰减,能不用尽量不用。(我不建议0,这会降低RelapyBuffer中数据的多样性,加大过拟合风险)
  • 退火就是减小后,(缓慢、突然)增大,周期循环。比衰减拥有更多的超参数。我不推荐使用,除非万不得已。

探索衰减一定会有很好的效果,但这种“效果好”建立在人肉搜索出衰减超参数的基础之上。成熟的DRL算法会自己去调整自己的探索强度。比较两者的调参总时间,依然是使用成熟的DRL算法耗时更短。

Sample complexity样本复杂性

对于轨迹(trajectory)来说,采集多少样本合适呢?以Q-learning为例子我们分析,每个epoch收集 m mm 个sample, 通过构造经验结构以及强阿虎学习的值函数,得到值函数为:

通过先抽样后计算的方式,样本的个数大约为: 

也就是说: 

 大多数算法还是随着样本增大normalization score也增大

参考链接

深度强化学习——DQN_草帽B-O-Y的博客-CSDN博客_dqn

DRQN论文解读_greenmoss的博客-CSDN博客_drqn

[伏羲讲堂]奖励设计相关论文介绍 - 知乎

强化学习目前存在的问题-知乎

深度强化学习调参技巧- 知乎

离线强化学习(Offline RL)系列1:离线强化学习原理入门_旺财搬砖记的博客-CSDN博客_离线强化学习

离线强化学习(Offline RL)系列4:(数据集) 经验样本复杂度(Sample Complexity)对模型收敛的影响分析_旺财搬砖记的博客-CSDN博客_distribution shift

DQN及其变种(DDQN,Dueling DQN,优先回放)代码实现及结果_bujbujbiu的博客-CSDN博客_ddqn代码

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

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

相关文章

全新电商版本答案——全民拼购,越拼越得,白嫖产品不是梦

根据国家市场监督管理总局自2020年12月1日起发布的《规范促销暂行规定》第十二条的规定&#xff0c;为了推广自己的平台商城或商品&#xff0c;获取流量&#xff0c;采用新购买模式运营的平台通过附带给未被选中的参与者一定的奖金或者其他利益&#xff0c;属于有奖销售。 在此…

RS编码译码误码率性能matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法描述 纠错编码技术在卫星通信、移动通信及数字存储等领域已获得了广泛的应用。RS码作为其中最重要的码类之一,具有优良的纠随机错误和突发错误的能力,被空间数据系统咨询委员会(CCSDS)作为一种…

记录安装Cytoscape的过程

一、安装前的准备工作 1、先java 看了大佬们的安装教程&#xff1a; 看到说先要安装对应的Java才能下载相应的cytoscape&#xff0c;因cytoscape是基于java的软件。 cytoscape安装教程1 cytoscape安装教程2 然后&#xff0c;自查了自己电脑上的Java版本,应该为jdk 11&#x…

【js】【爬虫】fetch + json-server 快速搭建爬虫服务器环境及数据后续处理(突破session缓存大小限制)

文章目录导读需求开发环境json-server使用安装json-server创建数据文件db.json运行服务器修改默认端口json-server提供的线上服务&#xff08;不推荐&#xff09;fetch上传数据到json-server服务器通过fetch新增数据报错Error: Insert failed, duplicate id数据后续处理打开导入…

ShellBrowser Delphi,Delphi组件功能和工具

ShellBrowser Delphi,Delphi组件功能和工具 ShellBrowser基本上被描述为集合的一部分&#xff0c;它能够为用户和开发人员提供Delphi的程序员&#xff0c;以便轻松灵活地访问windows shell性能。ShellBrowserComponents Delphi的使用基本上是能够模拟windows资源管理器的变体。…

阅读源码时:idea中如何使用todo标记、活动模板 (史上最全)

接下来&#xff0c; 尼恩要带大家 完成一个 超级牛逼的 大厂offer 收割机项目—— 100Wqps 三级组件 实操&#xff0c; 实操中&#xff0c;用到 caffeine 并且&#xff0c;尼恩要带大家 穿透式 、起底式的 学习 caffeine 的源码和架构&#xff0c; caffeine 的源码 特别复杂…

Linux之service服务-实现程序脚本开机自启

一、什么是.service文件&#xff1f; Linux中.service文件是某项服务对应的配置文件&#xff0c;可用于systemd管理和控制的服务的设置。 .service 文件通常包含3个模块&#xff1a; [Unit] 控制单元&#xff0c;表示启动顺序和依赖关系。[Service] 服务&#xff0c;表示…

LeetCode HOT 100 —— 23.合并K个升序链表

题目 给你一个链表数组&#xff0c;每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中&#xff0c;返回合并后的链表。 思路 在做本题之前&#xff0c;先考虑一下&#xff0c;如何合并两个有序链表&#xff0c;见 21.合并两个有序链表 最直接的思路就是&am…

聊跨境:一年增长60%!人人都说跨境电商难做,但红利仍在(Starday)

随着经济全球化的发展&#xff0c;互联网的普及和跨境运输网络的日益发达&#xff0c;世界各国之间的贸易往来越来越频繁&#xff0c;跨境电商已然成为时代的主题。 近年来国家出口跨境电商利好政策的连续出台&#xff0c;加上《电商法》的保驾护航以及跨境电商从业者的积极推…

逻辑回归(logistic regression)

逻辑回归 一、假设函数 hθ(x)g(θTX)11e−θTX(Sigmoid函数)h_\theta(x) g(\theta^TX)\frac{1}{1e^{-\theta^TX}} \qquad \qquad \qquad (Sigmoid函数) hθ​(x)g(θTX)1e−θTX1​(Sigmoid函数) X取值范围是(−∞,∞)(-\infty, \infty)(−∞,∞) Y的取值范围是(0, 1) {θT…

基于FPGA的高速数据采集系统实现

欢迎订阅《FPGA学习入门100例教程》、《MATLAB学习入门100例教程》 目录 一、理论基础 二、核心程序 2.1锁存器模块 2.2双口地址计数器模块 2.3双口RAM模块 2.4时钟分频模块 三、测试结果 一、理论基础 高速数据采集在军用民用领域都有着广泛的应用。高速数据采集系统在…

了解计算机里非门组成的部分

计算机中有一块硬件不是完全由NAND门构成的。这并不是把电脑变成电脑的必要条件&#xff0c;但大多数电脑都有一些。它们被用来从模拟的东西变成数字的东西&#xff0c;或者从数字变成模拟的东西。 人类的眼睛和耳朵会对类似的事物做出反应。我们听到的东西可以是响亮的&#x…

LeetCode 513找树左下角的值 112路径总和113路径总和ii 106从中序与后序遍历序列构造二叉树

文章目录513找树左下角的值c 代码实现python 代码实现112路径总和c 代码实现python 代码实现113路径总和iic代码实现python 代码实现106从中序与后序遍历序列构造二叉树c代码实现python 代码实现513找树左下角的值 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 …

Java 基础(继承、接口、抽象)

面试题继承继承的特点super关键字继承中变量访问特点继承中构造访问特点为什么子类中所有构造方法默认都会访问父类无参构造方法。如果父类中没有无参构造继承中成员方法访问特点重写概述应用注意事项方法重写和重载有什么区别&#xff1f;静态代码块、构造代码块&#xff0c;构…

安泰测试-安捷伦N5182A射频矢量信号发生器

产品简介&#xff1a; 安捷伦N5182A信号源技术支持Agilent N5182A MXG 射频矢量信号发生器 N5182A主要特性与技术指标 信号表征 100 kHz &#xff5e; 3 或 6 GH 使用高度可靠、快速切换的电子衰减器&#xff0c;在 3 GHz 时 >23 dBm W-CDMA 动态范围&#xff1a;≤-73…

指纹浏览器功能对比:AdsPower VS Multilogin

近期&#xff0c;Conversion Club 发起了“最佳指纹浏览器”提名评选活动&#xff0c;AdsPower、Dolphin 和Multilogin 并列入选&#xff0c;成为国际认可的专业指纹浏览器。上期&#xff0c;龙哥出了一篇有关AdsPower与Dolphin 的对比文章&#xff0c;后台收到私信问能不能也出…

7位世界著名的制图师及其相关的地图介绍

制图是地图制作的艺术和科学&#xff0c;而作为制图师需要注意很多的细节&#xff0c;包括可视化数据以及地理的全面知识等。地图在每个人的生活中都发挥着一定的影响力&#xff0c;尤其是对于一些著名的制图师。本文将介绍7位世界著名的制图师及其相关的地图&#xff0c;让我们…

鸽群优化算法(Pigeon-inspired Optimization algorithm, PIO)附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

【优雅至极】利用VSCode进行远程Linux服务器、容器开发,达到ide开发项目的效果

本文将介绍“局域网下远程ide式开发”、“公网下远程ide式开发”、“局域网下远程容器的ide式开发”、“公网下远程容器的ide式开发”这四种开发流程&#xff0c;让你无论在工位上还是在家中&#xff0c;都可以像打开本地ide那样进行远程的项目开发。 0 本地ide式开发 最方便…

自然排序与比较器排序的使用

1、自然排序&#xff1a;java.lang.Comparable Comparable 接口中只提供了一个方法&#xff1a; compareTo(Object obj) &#xff0c;该方法的返回值是 int 。如果返回值为正数&#xff0c;则表示当前对象(调用该方法的对象)比 obj 对象“大”&#xff1b;反之“小”&#xff…