在整理自己的学习笔记的时候突然看到了这个问题,这个问题是我多年前刚接触强化学习时候想到的问题,之后由于忙其他的事情就没有把这个问题终结,这里也就正好把这个问题重新的规整一下。

其实,这个DQN算法作为off-policy的强化学习算法为啥不需要重要性采样这个问题,真的是个神奇的问题,对于新入手强化学习的人来说这个问题就是个死活也搞不清、弄不懂的问题,但是对于强化学习的老手来说这个问题又显得十分的弱智、可笑,那我就用我当年从一个老家伙那得到的回到来作为这个post的答案:

DQN的收敛性不需要重要性采样来保证。

惊不惊喜,意不意外,这个好像奇难无比的问题,答案却是如此的简单。

----------------------------------

对于这个问题,网上也是充斥着不少的错误答案,这个也没什么,毕竟这种问题却是好像蛮不好回答的,而且这种问题也和发paper、搞项目没有多大关系的,能提出这个问题并且还能研究出一个所谓“答案”的人也是挺不容易的了,为此也找了些网上给出的常见错误答案:

https://blog.csdn.net/weixin_37895339/article/details/84881169

https://blog.csdn.net/qq_40081208/article/details/127268489

https://www.zhihu.com/question/394866647/answer/1264965104

总结一下这些错误答案,大致可以分为下面几类错误:

1. 对target Q-value进行估计时使用1-step的方法,此时的动作选择为greedy策略,因此无法使用重要性采样;

2. 对target Q-value进行估计时使用n-step的方法,此时的动作选择除最后一步为greedy策略其他步均为epsilon-greedy策略,因此无法使用重要性采样;

3. Q-leaning和DQN的公式中没有使用期望公式,因此不能使用重要性采样;

4. 因为DQN中使用了replay buffer因此无法使用重要性采样;

5. DQN的公式从数学上就使它没有必要使用重要性采样;

可以看出,这个问题对于新手来说还是蛮有难度的,而我当年刚接触这个领域的时候也是同样的晕头转向,在给出正确解释之前针对网上的大量错误分析给出一些说明:

基础知识:

Q-learning的相关论文中指出在q-value可以使用tabular表示的情况下Q-learning可以收敛到全局最优解;

在使用线性函数近似表示q-value的情况下(使用函数近似了,就说明不少tabular的形式了)q-learning可以收敛到局部最优解(注意,这里也是在理论上保证了收敛);

在使用非线性函数近似表示q-value的情况下(使用函数近似了,就说明不少tabular的形式了)q-learning无法在理论上保证收敛;

根据Q-learning的相关理论可以知道,DQN是无法在理论上保证收敛的,而且现在从大量实验中也可以清楚的empirical表明DQN是存在不收敛的情况的(大量实验中会遇到,该问题往往和特定游戏环境和神经网络的随机种子有关,尤其深度神经网络的性能有时和随机种子还是有很大关系的,一次没有收敛往往换个随机种子再跑一次就收敛了)

Q-learning论文中数学证明了其不同情况下的收敛性,但是要注意这里的收敛只是理论上证明的收敛,而理论上收敛就说明只能保证在时间足够长的情况下可以收敛,而由于问题的不同往往这里需要的足够长的时间在现实中也是难以接受的,而超出现实中可以接受的收敛时长往往和不收敛也是差不大多的,这里需要理解的就是理论收敛指的是无限长时间内的收敛性。

从Q-learning的公式可以看到,当Q-learning达到理论上的收敛时target policy和behavior policy为同一策略,此时的epsilon也由逐渐减小变为了0值,而此时的target policy和behavior policy也就自然成了greedy策略。但是在Q-learning没有达到理论上的收敛时,训练过程中的epsilon减小到0值,也就是说epsilon在Q-learning未达到理论上的收敛时时不为0的,此时的behavior policy自然是epsilon-greedy策略;而target policy虽然在评估时的最后一步用greedy策略选择max值,由于target policy的训练数据都是从behavior policy中获得的(即使不适用replay buffer也是如此,使用其他策略的数据来训练),可以说target policy是介于behavior policy基础之上的epsilon-greedy策略和greedy策略之间的一种策略看,其本质依旧为epsilon-greedy策略。

引申解释:

1. 我们常见的使用重要性采样的off-policy算法往往都是behavior policy是epsilon-greedy策略或其他形式的随机策略,而target policy是greedy策略,但是这里需要注意的是,不论DQN还是Q-learning,它的target policy是epsilon greedy策略,而它的behavior policy也是epsilon greedy策略。这里比较难以理解的是target policy为什么也是epsilon greedy策略,这就需要看Q-learning的原始论文以及关于Q-learning收敛性证明的论文了,而且实验表明对DQN进行性能评估时实验epsilon-greedy可以得到更好的result。

2. 相关论文在数学理论上证明了线性函数近似q-value时的收敛性,因此我们可以从非理论的角度预估到DQN也可以到达比较好的收敛情况,但是实际上不使用replay buffer和target network的DQN往往得不到很好的收敛表现,不过也正是DQN引进了这两项技术使DQN在实验中empirical证明了很好的收敛性,于是才有了DQN算法。

最终答案:

之前的那些网上错误答案虽然错的蛮远的,不过也说对了一个事情,那就是DQN是无法使用类似off-policy n-step SARSA算法的方式来加入重要性采样的(dqn和q-learning硬要加重要性采样确实没有简单的现成方法来实现),不过这个问题的真正答案是在线性函数近似的DQN是已经证明收敛性的,而即使使用神经网络的DQN无法在理论上保证其收敛,但是使用了replay buffer和target network后在实验上empirical证明其较好的收敛性(存在一定情况下不收敛),于是就用了最终的答案:

DQN的收敛性不需要重要性采样来保证。

补充:

off-policy的强化学习算法使用重要性采样还是蛮常见的,比如IMPALA算法,而且即使DQN中无法使用也没有必要使用重要性采样,但是也有一些形式上比较像的DQN变种,如:experience priority DQN,不过这里需要注意experience priority并不是重要性采样,从理论上来说就不是一个事情,不过就是计算形式上比较像罢了。

强化学习算法的公式都比较简单,但是理论却是十分的复杂、难懂,往往没有多少人会深挖这种算法理论,大家现在还是比较喜欢搞模型构建和模型理论,毕竟这样会显得更加务实,不过这样的话最好直接把强化学习的一些理论无视掉,就不要碰了,不然半懂不懂的去分析强化学习的理论只会走到岔路上去。

---------------------------------------------------

相关资料:

压缩映射原理————学习笔记

DQN(深度神经网络拟合的情况下)对于一些特定游戏在特定随机种子下难以收敛,也就是说会有一定概率出现类似下面这样的训练表现:

强化学习中Q-learning,DQN等off-policy算法不需要重要性采样的原因的更多相关文章

  1. 强化学习_Deep Q Learning(DQN)_代码解析

    Deep Q Learning 使用gym的CartPole作为环境,使用QDN解决离散动作空间的问题. 一.导入需要的包和定义超参数 import tensorflow as tf import n ...

  2. 强化学习9-Deep Q Learning

    之前讲到Sarsa和Q Learning都不太适合解决大规模问题,为什么呢? 因为传统的强化学习都有一张Q表,这张Q表记录了每个状态下,每个动作的q值,但是现实问题往往极其复杂,其状态非常多,甚至是连 ...

  3. 强化学习中REIINFORCE算法和AC算法在算法理论和实际代码设计中的区别

    背景就不介绍了,REINFORCE算法和AC算法是强化学习中基于策略这类的基础算法,这两个算法的算法描述(伪代码)参见Sutton的reinforcement introduction(2nd). A ...

  4. 强化学习(十二) Dueling DQN

    在强化学习(十一) Prioritized Replay DQN中,我们讨论了对DQN的经验回放池按权重采样来优化DQN算法的方法,本文讨论另一种优化方法,Dueling DQN.本章内容主要参考了I ...

  5. 【转载】 强化学习(十一) Prioritized Replay DQN

    原文地址: https://www.cnblogs.com/pinard/p/9797695.html ------------------------------------------------ ...

  6. 强化学习中的无模型 基于值函数的 Q-Learning 和 Sarsa 学习

    强化学习基础: 注: 在强化学习中  奖励函数和状态转移函数都是未知的,之所以有已知模型的强化学习解法是指使用采样估计的方式估计出奖励函数和状态转移函数,然后将强化学习问题转换为可以使用动态规划求解的 ...

  7. 深度强化学习中稀疏奖励问题Sparse Reward

    Sparse Reward 推荐资料 <深度强化学习中稀疏奖励问题研究综述>1 李宏毅深度强化学习Sparse Reward4 ​ 强化学习算法在被引入深度神经网络后,对大量样本的需求更加 ...

  8. 强化学习(五)—— 策略梯度及reinforce算法

    1 概述 在该系列上一篇中介绍的基于价值的深度强化学习方法有它自身的缺点,主要有以下三点: 1)基于价值的强化学习无法很好的处理连续空间的动作问题,或者时高维度的离散动作空间,因为通过价值更新策略时是 ...

  9. 强化学习读书笔记 - 13 - 策略梯度方法(Policy Gradient Methods)

    强化学习读书笔记 - 13 - 策略梯度方法(Policy Gradient Methods) 学习笔记: Reinforcement Learning: An Introduction, Richa ...

  10. 强化学习中的经验回放(The Experience Replay in Reinforcement Learning)

    一.Play it again: reactivation of waking experience and memory(Trends in Neurosciences 2010) SWR发放模式不 ...

随机推荐

  1. Jmeter进行HTTPS接口压测及SSL证书验证

    一.前言 使用JMeter压测HTTPS接口比较简单,只需要预先处理SSL证书认证,后面就是压测HTTP接口的通用步骤. HTTPS连接证书来验证浏览器和WEB服务器之间的连接.通过HTTP连接时,服 ...

  2. AWS Ubuntu22.04安装Mysql及配置远程连接、SCP上传文件

    一.升级apt资源包 sudo apt update 二.安装MySQL sudo apt install mysql-server 三.启动MySQL服务 sudo service mysql st ...

  3. mysql 联合表查询从表即使有索引依然ALL的一个原因-索引ALL解决,字符编码方式不一致导致全表搜索

    mysql 联合表查询从表即使有索引依然ALL的一个原因-索引ALL解决,字符编码方式不一致导致全表搜索那就是主表和从表的关联字段的编码方式不一样!!! 产生的现象: 解决之后,正确的使用了t2.or ...

  4. 制作Jdk镜像

    本文介绍用Dockerfile的方式构建Jdk镜像,请保证安装了Docker环境. 首先创建/opt/jdk目录,后续步骤都在该目录下进行操作. 准备好Jdk安装文件,放到/opt/jdk目录下. 编 ...

  5. 实验四:WinRAR漏洞

    [实验目的] 通过打开rar文件,获取到目标机shell. [知识点] winrar漏洞 [实验原理] 该漏洞是由于WinRAR所使用的一个陈旧的动态链接库UNACEV2.dll所造成的,该动态链接库 ...

  6. 获取ImageView的触摸点所对应的UIImage的坐标

    获取ImageView的触摸点所对应的UIImage的坐标 功能描述 实现前分析 注意事项 代码 求打赏 功能描述 在imageview上触摸图片,求对应UIImage的触摸点. 实现前分析 从ima ...

  7. Linux 内核:设备树(1)dtb格式

    Linux 内核:设备树(1)dtb格式 背景 dtb作为二进制文件被加载到内存中,然后由内核读取并进行解析,如果对dtb文件的格式不了解,那么在看设备树解析相关的内核代码时将会寸步难行,而阅读源代码 ...

  8. 设备树DTS 学习: 4-uboot 传递 dtb 给 内核

    背景 得到 dtb 文件以后,我们需要想办法下载到 板子中,并给 Linux 内核使用. (高级版本的 uboot也有了 自己使用设备树支持,我们这里不讨论 uboot 使用的设备树) Linux 内 ...

  9. C# 温故知新 第三篇 C# 编程概念 之程序集

    在微软C# 官方开发指南中,介绍到在C# 开发中设计到这些 编程概念 当然包括不限于这些: 程序集:程序集构成了 .NET 应用程序的部署.版本控制.重用.激活范围和安全权限的基本单元. 程序集是为协 ...

  10. aiohttp 子线程启动/中止服务

    import time, threading from aiohttp import web import asyncio async def handler(request): return web ...