强化学习中Q-learning,DQN等off-policy算法不需要重要性采样的原因
在整理自己的学习笔记的时候突然看到了这个问题,这个问题是我多年前刚接触强化学习时候想到的问题,之后由于忙其他的事情就没有把这个问题终结,这里也就正好把这个问题重新的规整一下。
其实,这个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算法不需要重要性采样的原因的更多相关文章
- 强化学习_Deep Q Learning(DQN)_代码解析
Deep Q Learning 使用gym的CartPole作为环境,使用QDN解决离散动作空间的问题. 一.导入需要的包和定义超参数 import tensorflow as tf import n ...
- 强化学习9-Deep Q Learning
之前讲到Sarsa和Q Learning都不太适合解决大规模问题,为什么呢? 因为传统的强化学习都有一张Q表,这张Q表记录了每个状态下,每个动作的q值,但是现实问题往往极其复杂,其状态非常多,甚至是连 ...
- 强化学习中REIINFORCE算法和AC算法在算法理论和实际代码设计中的区别
背景就不介绍了,REINFORCE算法和AC算法是强化学习中基于策略这类的基础算法,这两个算法的算法描述(伪代码)参见Sutton的reinforcement introduction(2nd). A ...
- 强化学习(十二) Dueling DQN
在强化学习(十一) Prioritized Replay DQN中,我们讨论了对DQN的经验回放池按权重采样来优化DQN算法的方法,本文讨论另一种优化方法,Dueling DQN.本章内容主要参考了I ...
- 【转载】 强化学习(十一) Prioritized Replay DQN
原文地址: https://www.cnblogs.com/pinard/p/9797695.html ------------------------------------------------ ...
- 强化学习中的无模型 基于值函数的 Q-Learning 和 Sarsa 学习
强化学习基础: 注: 在强化学习中 奖励函数和状态转移函数都是未知的,之所以有已知模型的强化学习解法是指使用采样估计的方式估计出奖励函数和状态转移函数,然后将强化学习问题转换为可以使用动态规划求解的 ...
- 深度强化学习中稀疏奖励问题Sparse Reward
Sparse Reward 推荐资料 <深度强化学习中稀疏奖励问题研究综述>1 李宏毅深度强化学习Sparse Reward4 强化学习算法在被引入深度神经网络后,对大量样本的需求更加 ...
- 强化学习(五)—— 策略梯度及reinforce算法
1 概述 在该系列上一篇中介绍的基于价值的深度强化学习方法有它自身的缺点,主要有以下三点: 1)基于价值的强化学习无法很好的处理连续空间的动作问题,或者时高维度的离散动作空间,因为通过价值更新策略时是 ...
- 强化学习读书笔记 - 13 - 策略梯度方法(Policy Gradient Methods)
强化学习读书笔记 - 13 - 策略梯度方法(Policy Gradient Methods) 学习笔记: Reinforcement Learning: An Introduction, Richa ...
- 强化学习中的经验回放(The Experience Replay in Reinforcement Learning)
一.Play it again: reactivation of waking experience and memory(Trends in Neurosciences 2010) SWR发放模式不 ...
随机推荐
- 接口签名规则及Java代码demo实现
接口签名规则及Java代码demo实现 签名规则 签名生成的通用步骤如下: 第一步,设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用UR ...
- DHorse的配置文件
首先看一下DHorse的配置文件,如下: #============================================================================== ...
- mapperTemp
@Insert("INSERT INTO coxisolate.instanceinfo (instance_id, app_name, create_time, update_time, ...
- 聊一聊 Monitor.Wait 和 Pluse 的底层玩法
一:背景 1. 讲故事 在dump分析的过程中经常会看到很多线程卡在Monitor.Wait方法上,曾经也有不少人问我为什么用 !syncblk 看不到 Monitor.Wait 上的锁信息,刚好昨天 ...
- Pytest 失败重运行
需安装第三方插件:pytest-rerun.pytest-rerunfailures 失败重试和失败重运行的区别 失败重试:[--reruns=1],用例执行失败后,会立即开始重试一次此用例,再执行下 ...
- MYSQL8-快速生成表结构(用于生成文档)
各种工具都有,没有特别趁手的.不如自己用sql处理. SELECT column_name AS CODE, CASE WHEN column_comment IS NULL OR TRIM(colu ...
- Windows无法调节亮度
原因1:驱动问题 解决方式: 安装360驱动大师,一键安装. 也可以使用其他软件:如驱动精灵. 推荐使用电脑品牌本身的驱动软件:如联想:联想驱动管理 原因2:设备管理问题 解决方式: 计算机 -> ...
- Mysql 使用(一)
一.数据库的种类 关系型数据库 非关系型数据库 二.常见关系型数据库 oracle:在以前的大型项目中使用,银行,电信等项目 mysql:web时代使用最广泛的关系型数据库 ms sql server ...
- redis 乱码:\xac\xed\x00\x05t\x00\x02
前言 学习 spring-boot 的 redis 相关部分,测试时,发现 使用redisTemplate.opsForValue().set("name","tst&q ...
- spring-关于组件的注入及获取流程
一.组件注入的基本流程: 容器初始化: Spring应用启动时,会读取配置(如XML配置.注解配置等),并根据这些配置创建Bean定义(BeanDefinition). 根据Bean定义,Spring ...