标准DQN在测试算法性能时为什么要将探索概率epsilon设置为0.05呢,而不是使用其他探索概率的epsilon-greedy策略或者直接使用greedy探索策略呢?
标准dqn的策略网络参数更新所采用的规则为Q-learning中的更新规则,总所周知的是Q-learning是异策略算法,异策略算法就是行为策略和评估策略(更新所得策略)是不同的。
更新规则:

q-learning 如果使用不使用函数近似来表示Q值,那么存在:

也就是说,只要运行迭代的次数足够多,趋近于无穷的情况那么我们得到最优策略下的Q值,而最优策略又必是确定性策略,那么我们就可以获得最优策略了。
但是如果不使用函数近似来表示Q值,那么算法就没有泛化性,由于实际问题中状态空间十分巨大,所以这样做是不现实的。面对实际问题唯一可行的就是使用函数近似来表示Q值,如果使用函数近似后的Q-learning能够收敛并获得最优解,那么就有:

那么,我们就可以获得最优Q值。
但是现实是使用函数近似后的Q-learning往往难以收敛,就连获得局部最优解都难以保证,尤其是使用非线性的函数表示Q值,也就是说实际使用函数近似后的Q-learning得到的最终策略并不是确定性策略,因为只有得到最优解我们才会获得最优策略,也就是说只有最终获得最优策略才是确定性策略,而算法在中间的迭代过程(计算过程)所进行评估得到的策略(中间策略)都不是确定性策略,都是随机策略。
这里面就有一个误区,那就是Q-learning学习到的策略就一定是确定性策略,其实不然,Q-learning只是在迭代计算的时候更新规则使用的是确定性的更新规则( 使用后一状态的最大Q值来代替V值而不是计算各Q值的期望, 即 max Q'(s,a) ),也只用Q-learning算法最终得到最优策略的时候我们才会获得确定性策略,其中的迭代过程中所评估的策略都不是确定性的策略。而使用函数近似的Q-learning算法是难以获得最优解的,或者说使用函数近似后的Q-learning最终能得到的策略都是随机策略,这也是为什么我们在评估函数近似的Q-learning的时候是使用随机策略(epilon-greedy策略)而不是确定性策略(greedy策略)。
那么为什么在标准dqn中要将epilon设置为0.05呢???
在Q-learning的更新规则可以看到,在迭代计算中所进行评估的策略是当前epilon下的epilon-greedy策略,但是需要注意的一点是虽然中间迭代计算过程中的评估策略是epilon-greedy策略,但是它的Q值并不是该策略下的真实值。那么又该如何评价计算过程中的策略性能呢,这时当然是使用epilon-greedy策略,也就是当前所得Q值确定的epilon-greedy策略,又由于当前评估策略的Q值并不是当前epilon下的最优解或者说并不是当前epilon下的真实Q值,这也就导致此时进行测评时epilon并没有一个很好的依据,但是有一点就是训练策略的epilon和测试策略的epilon相近那么此时测试所得性能表现就会越好。但由于我们实际测试算法性能时需要对比的是不同算法的性能,那么只要保证每个算法在相同训练时间下测试策略使用的epilon保持一致就可(各算法在相同训练时间下对应的测试epilon相同即可),至于单独一个算法在不同训练时间下测试策略的epilon的设置和训练epilon设置是否相近并不能太多影响各算法间性能的对比,因此我们可以在整个测试期间都将epilon设置为一个固定值。由于在标准dqn中在运行一段时间后训练epilon固定为0.1,那么我们最终评估策略时epilon都是等于0.1的,而此时的Q值所对应的真实策略应该是epilon小于0.1的epilon-greedy策略(由于Q-learning的更新规则导致),同时由于最终设定统一的测试epilon应该更多的考虑运算后期的真实性能测评,因此测试epilon设置最好为小于最终训练epilon=0.1的一个值,因此这里设置为0.05(当然这也是小于0.1大于0的一个中间值,由于最终策略不是epilon=0的确定性策略也不是最后训练策略epsilon=0.1,因此取中间值0.05)。
------------------------------------------------------
标准DQN在测试算法性能时为什么要将探索概率epsilon设置为0.05呢,而不是使用其他探索概率的epsilon-greedy策略或者直接使用greedy探索策略呢?的更多相关文章
- (5) openssl speed(测试算法性能)和openssl rand(生成随机数)
		
1.1 openssl speed 测试加密算法的性能 支持的算法有: openssl speed [md2] [mdc2] [md5] [hmac] [sha1] [rmd160] [idea-cb ...
 - Apache JMeter--网站自动测试与性能测评
		
Apache JMeter--网站自动测试与性能测评 2013-02-28 15:48:05 标签:Jmeter From:http://bdql.iteye.com/blog/291987 出于学习 ...
 - 使用iozone测试磁盘性能
		
IOzone是一个文件系统测试基准工具.可以测试不同的操作系统中文件系统的读写性能.可以通过 write, re-write, read, re-read, random read, random w ...
 - 【转】利用 Apache JMeter 测试 WebSphere 性能
		
如果您预算紧张并且时间紧迫 —— 或者即使您不是这样 —— 那么,您可能希望考虑使用 JMeter 来对 Web 和其他应用程序进行压力测试.IBM 的 Greg Herringer 详细描述他使用这 ...
 - 背景建模技术(二):BgsLibrary的框架、背景建模的37种算法性能分析、背景建模技术的挑战
		
背景建模技术(二):BgsLibrary的框架.背景建模的37种算法性能分析.背景建模技术的挑战 1.基于MFC的BgsLibrary软件下载 下载地址:http://download.csdn.ne ...
 - 使用iozone测试磁盘性能(测试文件读写)
		
IOzone是一个文件系统测试基准工具.可以测试不同的操作系统中文件系统的读写性能.可以通过 write, re-write, read, re-read, random read, random w ...
 - 【机器学习】机器学习入门02 - 数据拆分与测试&算法评价与调整
		
0. 前情回顾 上一周的文章中,我们通过kNN算法了解了机器学习的一些基本概念.我们自己实现了简单的kNN算法,体会了其过程.这一周,让我们继续机器学习的探索. 1. 数据集的拆分 上次的kNN算法介 ...
 - Android IOS WebRTC 音视频开发总结(五六)-- 如何测试网络性能?
		
本文主要介绍如何测试网络性能,文章来自博客园RTC.Blacker,欢迎关注微信公众号blacker,更多详见www.rtc.help 网络性能直接决定了视频通话效果,比如qq,很多时候我们我们觉得通 ...
 - iozone测试磁盘性能
		
什么是iozone? iozone是一个文件系统的benchmark工具,可以测试不同的操作系统中文件系统的读写性能. 可以测试 Read, write, re-read,re-write, read ...
 - iperf测试网络性能
		
分类: LINUX 2013-06-17 18:52:21 Iperf是一个网络性能测试工具.可以测试TCP和UDP带宽质量,可以测量最大TCP带宽,具有多种参数和UDP特性,可以报告带宽 ...
 
随机推荐
- C# .NET Framework EXCEL NPOI EOF in header
			
实例化时异常: EOF in header 错误代码: try { workBook = new HSSFWorkbook(file); } catch { try { workBook = new ...
 - 架构与思维:了解Http 和 Https的区别(图文详解)
			
1 介绍 随着 HTTPS 的不断普及和使用成本的下降,现阶段大部分的系统都已经开始用上 HTTPS 协议. HTTPS 与 HTTP 相比, 主打的就是安全概念,相关的知识如 SSL .非对称加密. ...
 - 浅拷贝、深拷贝与序列化【初级Java必需理解的概念】
			
浅拷贝 首先创建两个类,方便理解浅拷贝 @Data class Student implements Cloneable{ //年龄和名字是基本属性 private int age; private ...
 - Qt 之 emit、signals、slot的使用
			
背景 ref : https://www.ibm.com/developerworks/cn/linux/guitoolkit/qt/signal-slot/index.html 信号和槽机制是 QT ...
 - 记一次 .NET某网络边缘计算系统 卡死分析
			
一:背景 1. 讲故事 早就听说过有什么 网络边缘计算,这次还真给遇到了,有点意思,问了下 chatgpt 这是干嘛的 ? 网络边缘计算是一种计算模型,它将计算能力和数据存储位置从传统的集中式数据中心 ...
 - 3562-Qt工程编译说明、GPU核心使用说明
 - C#中重写(override)及覆盖(new)的区别详解
			
1. 重写和覆盖的定义 1.1 重写(override)的定义 在C#中,用override关键字来重写一个父类中的虚方法或抽象方法.override关键字用于指示编译器,我要用派生类中的一个方法 ...
 - 重复消费Java Stream的三种方法。你选择哪种?
			
Java中的Stream一旦被消费就会关闭,不能再次使用了.如果的确有需要该怎么办呢? 这里介绍三种重复消费Stream的方法. 1. 从集合再次创建 这里你都不用往下继续看就知道该怎么办,不过我还是 ...
 - 怎么判断一个变量arr的话是否为数组(此题用 typeof 不行)?
			
arr instanceof Array arr.constructor == Array Object.protype.toString.call(arr) == '[Object Array]'
 - VUE手稿1