第2期技术: Double Q-learning算法原理
深度强化学习实验室(DeepRLhub) 访问官网: http://deeprlhub.com
特别声明:本文是作者在充分知晓著作权细则的情况下,经过个人付出或者翻译他人著作内容,并已注明翻译原文来源的情况下授权给《深度强化学习实验室》CSDN博客发布,内容仅供深度强化学习领域的爱好者分享与交流使用,无任何商业行为,出处解释权归深度强化学习实验室,内容版权和解释权归作者所有,如有任何侵犯他人利益,请联系我们立即删除。
论文地址: https://papers.nips.cc/paper/3964-double-q-learning.pdf
本论文由DeepMind发表于2015年NIPS的一篇论文,作者Hasselt。
前言: Q-Learning算法由于受到大规模的动作值过估计(overestimation)而出现不稳定和效果不佳等现象的存在,而导致overestimation的主要原因来自于最大化值函数(max)逼近,该过程目标是为了最大的累计期望奖励,而在这个过程中产生了正向偏差。而本文章作者巧妙的是使用了两个估计器(double estimator)去计算Q-learning的值函数,作者将这种方法定义了一个名字叫“Double Q-learning”(本质上一个off-policy算法),并对其收敛过程进行了证明(缺点:当然double Q-learning算法有时会低估动作值,但不会像Q学习那样遭受过高估计)
1. 问题及原因
“过估计” (overestimate)
过估计是指对一系列数先求最大值再求平均,通常比先求平均再求最大值要大(或相等,数学表达为:E(max(X1,X2,...))≥max(E(X1),E(X2),...)E(\max (X1, X2, ...)) \geq \max (E(X1), E(X2), ...)E(max(X1,X2,...))≥max(E(X1),E(X2),...)
一般来说Q-learning方法导致overestimation的原因归结于其更新过程,其表达为:
Qt+1(st,at)=Qt(st,at)+αt(st,at)(rt+γmaxaQt(st+1,a)−Qt(st,at))Q_{t+1}\left(s_{t}, a_{t}\right)=Q_{t}\left(s_{t}, a_{t}\right)+\alpha_{t}\left(s_{t}, a_{t}\right)\left(r_{t}+\gamma \max _{a} Q_{t}\left(s_{t+1}, a\right)-Q_{t}\left(s_{t}, a_{t}\right)\right) Qt+1(st,at)=Qt(st,at)+αt(st,at)(rt+γamaxQt(st+1,a)−Qt(st,at))
其中的 maxa\max\limits_{a}amax 表示为最大化action-value, 而更新最优化过程如下:
∀s,a:Q∗(s,a)=∑s′Psas′(Rsas′+γmaxaQ∗(s′,a))\forall s, a: Q^{*}(s, a)=\sum_{s^{\prime}} P_{s a}^{s^{\prime}}\left(R_{s a}^{s^{\prime}}+\gamma \max _{a} Q^{*}\left(s^{\prime}, a\right)\right) ∀s,a:Q∗(s,a)=s′∑Psas′(Rsas′+γamaxQ∗(s′,a))
对于任意的s,as, as,a 来说,最优值函数 Q∗Q^{*}Q∗ 的更新依赖于 maxaQ∗(s,...)\max \limits_{a} Q^{*}(s,...)amaxQ∗(s,...), 从公式中可以看出,我们把N个Q值先通过取max操作之后,然后求平均(期望),会比我们先算出N个Q值取了期望之后再max要大。这就是overestimate的原因。
注: 一般用于加速Q-learning算法的方法有:Delayed Q-learning, Phased Q-learning, Fitted Q-iteration等
2. Estimator原理与思想
通常情况下对于一个集合中的变量 X={X1,X2,...,XM}X= \left\{ X_{1},X_{2},...,X_{M} \right\}X={X1,X2,...,XM}来说,奖励的最大化累计期望表示为:
maxaE{Xi}\max \limits_{a} E \left\{ X_{i} \right\} amaxE{Xi}
那么在实际的过程中,对于每个 XiX_{i}Xi,我们定义 $ S=\bigcup_{i=1}^{M} S_{i}$为采样,其中的 SiS_{i}Si 表示为对于所有XiX_{i}Xi采样的一个子集,假设 SiS_{i}Si 满足独立同分布情况, 那么期望值的“无偏估计”可以通过计算每个变量的样本平均值来获得,其计算方法如下:
E{Xi}=E{μi}≈μi(S)=def 1∣Si∣∑S∈SisE\left\{X_{i}\right\}=E\left\{\mu_{i}\right\} \approx \mu_{i}(S) \stackrel{\text { def }}{=} \frac{1}{\left|S_{i}\right|} \sum_{S \in S_{i}} s E{Xi}=E{μi}≈μi(S)= def ∣Si∣1S∈Si∑s
注: μi\mu_{i}μi 是 XiX_{i}Xi 的估计器
这个过程是一个无偏估计,因为每一个采样 s∈Sis\in S_{i}s∈Si是一个对 XiX_{i}Xi 的无偏估计,因此,近似中的误差仅由估计中的 “方差“ 组成,当我们获得更多样本时会减小。
为了后面方便理解,这里我们定义两个函数:“概率密度函数”(Probability Density Function, PDF)和“累积分布函数”(Cumulative Distribution Function, CDF),概率密度函数fif_{i}fi表示ithi^{th}ith个 XiX_{i}Xi,则累积分布函数表示为: Fi(x)=∫−∞xfi(x)dxF_{i}(x)= \int_{-\infty}^{x} f_{i}(x)dxFi(x)=∫−∞xfi(x)dx,同样的道理,对于PDF和CDF来说估计器分别表示为fiμf_{i}^{\mu}fiμ和FiμF_{i}^{\mu}Fiμ。
补充
1. 概率密度函数,
其实就是给定一个值, 判断这个值在该正态分布中所在的位置后, 获得其他数据高于该值或低于该值的比例,其中的曲线就是概率密度函数(PDF),通常情况下pdf的曲线下面积(AUC)总和为1,且曲线末端不会接触到x轴(换句话说, 我们不可能100%的确定某件事)。
2. 累积分布函数
累积分布函数 (CDF) 计算给定 x 值的累积概率。可使用 CDF 确定取自总体的随机观测值将小于或等于特定值的概率。还可以使用此信息来确定观测值将大于特定值或介于两个值之间的概率。
例如,罐装苏打水的填充重量服从正态分布,且均值为 12 盎司,标准差为 0.25 盎司。概率密度函数 (PDF) 描述了填充重量的可能值的可能性。CDF 提供每个 x 值的累积概率。
此处参考PDF-CDF指导
(1)单估计器方法(Single Estimator)
所谓的单估计就是使用一组估计量的最大值作为近似值,
即近似maxaE{Xi}\max \limits_{a} E \left\{ X_{i} \right\}amaxE{Xi}的最好的方式就是最大化估计器,表示为:
maxiE{Xi}=maxiE{μi}≈maxiμi(S)\max _{i} E\left\{X_{i}\right\}=\max _{i} E\left\{\mu_{i}\right\} \approx \max _{i} \mu_{i}(S) imaxE{Xi}=imaxE{μi}≈imaxμi(S)
μ\muμ表示为估计器,而此处对于最大的估计器fmaxμf_{max}^{\mu}fmaxμ来说,它是依赖于 fiμf_{i}^{\mu}fiμ 的,若要求取PDF,首先需要考虑CDF,但它的概率分布中最大的估计器小于等于xxx,这等同于所有的估计均小于等于xxx,数学表示为:
x:Fmaxμ(x)=def P(maxiμi≤x)=∏i=1MP(μi≤x)=def ∏i=1MFiμ(x)x: F_{\max }^{\mu}(x) \stackrel{\text { def }}{=} P\left(\max _{i} \mu_{i} \leq x\right)=\prod_{i=1}^{M} P\left(\mu_{i} \leq x\right) \stackrel{\text { def }}{=} \prod_{i=1}^{M} F_{i}^{\mu}(x) x:Fmaxμ(x)= def P(imaxμi≤x)=i=1∏MP(μi≤x)= def i=1∏MFiμ(x)
那么maxiμi(S)\max_{i}\mu_{i}(S)maxiμi(S)是对E{maxjμj}=∫−∞∞xfmaxμ(x)dxE\left\{\max _{j} \mu_{j}\right\}=\int_{-\infty}^{\infty} x f_{\max }^{\mu}(x)dxE{maxjμj}=∫−∞∞xfmaxμ(x)dx的无偏估计,详细表示为:
E{maxjμj}=∫−∞∞xddx∏i=1MFiμ(x)dx=∑jM∫−∞∞xfjμ(s)∏i≠jMFiμ(x)dxE\left\{\max _{j} \mu_{j}\right\}=\int_{-\infty}^{\infty} x \frac{d}{d x} \prod_{i=1}^{M} F_{i}^{\mu}(x) d x=\sum_{j}^{M} \int_{-\infty}^{\infty} x f_{j}^{\mu}(s) \prod_{i \neq j}^{M} F_{i}^{\mu}(x) d x E{jmaxμj}=∫−∞∞xdxdi=1∏MFiμ(x)dx=j∑M∫−∞∞xfjμ(s)i=j∏MFiμ(x)dx
(2)双估计器方法(Double Estimator)
对每个变量使用两个估计器,并将估计器的选择与其值解耦。
问题:单一估计器方法导致过高估计可能会对使用此方法的算法(例如Q学习)产生很大的负面影响。为了解决这个问题,double estimator方法用来解决过高估计。
那么对于原来的 maxiE{Xi}\max_{i} E \left\{ X_{i} \right\}maxiE{Xi}来说,此处我们需要定义两个估计器:μA\mu^{A}μA和μB\mu^{B}μB,他们分别表示为:μA={μ1A,…,μMA}\mu^{A}=\left\{\mu_{1}^{A}, \ldots, \mu_{M}^{A}\right\}μA={μ1A,…,μMA},μB={μ1B,…,μMB}\mu^{B}=\left\{\mu_{1}^{B}, \ldots, \mu_{M}^{B}\right\}μB={μ1B,…,μMB},然后两个估计器都使用采样的样本子集来更新,其规则表示为:
{S=SA∪SBSA∩SB=∅μiA(S)=1∣SiA∣∑s∈SiAsμiB(S)=1∣SiB∣∑s∈SiBs\left\{ \begin{aligned} S=S^{A} \cup S^{B} \\ S^{A} \cap S^{B}=\emptyset \\ \mu_{i}^{A}(S)=\frac{1}{\left|S_{i}^{A}\right|} \sum_{s \in S_{i}^{A}} s \\ \mu_{i}^{B}(S)=\frac{1}{\left|S_{i}^{B}\right|} \sum_{s \in S_{i}^{B}} s \end{aligned} \right. ⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧S=SA∪SBSA∩SB=∅μiA(S)=∣∣SiA∣∣1s∈SiA∑sμiB(S)=∣∣SiB∣∣1s∈SiB∑s
那么像单估计器μi\mu_{i}μi一样,如果我们假设样本以适当的方式(例如随机地)分布在两组估计器上,则μiA\mu_{i}^{A}μiA和μiB\mu_{i}^{B}μiB也都是无偏的。设 MaxA(S)=def {j∣μjA(S)=maxiμiA(S)}\operatorname{Max}^{A}(S) \stackrel{\text { def }}{=}\left\{j | \mu_{j}^{A}(S)=\max _{i} \mu_{i}^{A}(S)\right\}MaxA(S)= def {j∣μjA(S)=maxiμiA(S)} 为μA(S)\mu^{A}(S)μA(S) 中最大估计值集合,由于μB\mu^{B}μB是一个独立的无偏估计值,那么 E{μjB}=E{Xj}E\left\{\mu_{j}^{B}\right\}=E\left\{X_{j}\right\}E{μjB}=E{Xj}对于任何jjj都成立,包括 j∈MaxAj \in Max^{A}j∈MaxA
此处有疑问,为什么包括j∈MaxAj \in Max^{A}j∈MaxA??
设a∗a^{*}a∗ 是最大化 μA\mu^{A}μA 的估计器,表示为:μA:μa∗A(S)=def maxiμiA(S)\mu^{A}: \mu_{a^{*}}^{A}(S) \stackrel{\text { def }}{=} \max _{i} \mu_{i}^{A}(S)μA:μa∗A(S)= def maxiμiA(S),如果存在多个最大化的μA\mu^{A}μA 是最大化估计量,我们可以例如随机选择一个,然后我们可以将μa∗A\mu_{a^{*}}^{A}μa∗A用作maxiE{μiB}\max _{i} E\left\{\mu_{i}^{B}\right\}maxiE{μiB}的估计值,那么对于maxiE{Xi}\max_{i}E\left\{X_{i}\right\}maxiE{Xi}可以近似为:
maxiE{Xi}=maxiE{μiB}≈μa∗B\max _{i} E\left\{X_{i}\right\}=\max _{i} E\left\{\mu_{i}^{B}\right\} \approx \mu_{a^{*}}^{B} imaxE{Xi}=imaxE{μiB}≈μa∗B
随着我们获得更多的样本,估计量的方差减小,在极限情况下,μiA(S)=μiB(S)=E{Xi}\mu_{i}^{A}(S)=\mu_{i}^{B}(S)=E\left\{X_{i}\right\}μiA(S)=μiB(S)=E{Xi}
具体证明过程部分如下:
3. Double Q-learning算法
我们可以解释为 Q-learning学习其实使用单估计器(single estimate)去估计下一个状态:那么maxaQt(st+1,a)\max _{a} Q_{t}\left(s_{t+1}, a\right)maxaQt(st+1,a)是 E{maxaQt(st+1,a)}E\left\{\max _{a} Q_{t}\left(s_{t+1}, a\right)\right\}E{maxaQt(st+1,a)}的一个估计,一般的,将期望理解为对同一实验的所有可能运行的平均,而不是(通常在强化学习环境中使用)对下一个状态的期望,根据原理部分,Double Q-learning将使用两个函数 QAQ^{A}QA和QBQ^{B}QB(对应两个估计器),并且每个QQQ函数都会使用另一个QQQ函数的值更新下一个状态。两个QQQ函数都必须从不同的经验集中学习,这一点很重要,但是要选择要执行的动作可以同时使用两个值函数。 因此,该算法的数据效率不低于Q学习。 在实验中作者为每个动作计算了两个Q值的平均值,然后对所得的平均Q值进行了贪婪探索。算法伪代码如下:
为了区分Double Q-learning算法和Q-learning的区别,本文同样Q-learning算法伪代码贴出来了。
对比:此处对于Q-learning算法和double Q-learning 算法来说,double使用了B网络来更新A网络,同样的道理对于B网络则使用A网络的值来更新。
4. 实验过程于结果
5. 附录:收敛性证明过程
对于Double Q-learning收敛性的证明过程如下:
第2期技术: Double Q-learning算法原理相关推荐
- 强化学习(二):Q learning 算法
强化学习(一):基础知识 强化学习(二):Q learning算法 Q learning 算法是一种value-based的强化学习算法,Q是quality的缩写,Q函数 Q(state,action ...
- 【强化学习笔记】从 “酒鬼回家” 认识Q Learning算法
1.背景 现在笔者来讲一个利用Q-learning 方法帮助酒鬼回家的一个小例子, 例子的环境是一个一维世界, 在世界的右边是酒鬼的家.这个酒鬼因为喝多了,根本不记得回家的路,只是根据自己的直觉一会向 ...
- 交换机链路聚合技术的负载均衡算法原理(含C语言实现)
[注:本文[原理]部分来自转载,转载来源为https://blog.csdn.net/wuheshi/article/details/79128044,此部分原创作者暂未找到,但感谢原作者的知识贡献] ...
- 第1期技术: DQN算法原理及实现过程
深度强化学习实验室(DeepRLhub) 访问官网: http://deeprlhub.com 特别声明:本文是作者在充分知晓著作权细则的情况下,经过个人付出或者翻译他人著作内容,并已注明翻译原文来源 ...
- Deep Q Network 算法
Deep Q Network 算法前置基础知识: Reinforcement Learning 基本概念 Q Leaning算法原理 深度学习神经网络知识 Tensorflow.Pytorch.Py ...
- 强化学习入门 : 一文入门强化学习 (Sarsa、Q learning、Monte-carlo learning、Deep-Q-Network等)
最近博主在看强化学习的资料,找到这两个觉得特别适合入门,一个是"一文入门深度学习",一个是"莫烦PYTHON". 建议:看资料的时候可以多种资料一起参考,一边调 ...
- q learning matlab,用Matlab实现简单的Q-learning算法(学习走出房间)
看到一个简单有趣的Q learning例子,写了段matlab代码实现一下.有兴趣的请先阅读原文 链接 dbstop if error%stop at the error if it happens ...
- Deep Q learning: DQN及其改进
Deep Q Learning Generalization Deep Reinforcement Learning 使用深度神经网络来表示 价值函数 策略 模型 使用随机梯度下降(SGD)优化los ...
- CNNs and Deep Q Learning
前面的一篇博文介绍了函数价值近似,是以简单的线性函数来做的,这篇博文介绍使用深度神经网络来做函数近似,也就是Deep RL.这篇博文前半部分介绍DNN.CNN,熟悉这些的读者可以跳过,直接看后半部分的 ...
最新文章
- RAID-5 恢复技术
- Java:数值-字符串转换(String转Double)
- AndroidStudio_AndroidStudio debug的时候断点打不上_No executable code found at line---Android原生开发工作笔记236
- 一款脑洞大开的表格可视化神器
- LLVM之clang
- 安装SQLyog教程
- 锐文网络安全网闸卡各种应用场景
- 火星坐标 C语言,iOS7上地球坐标系到火星坐标系转换算法
- P2P平台公司的9种职位
- 深度学习之图像分类(二十一)-- MLP-Mixer网络详解
- 贝叶斯自举法(BayesianBootstrap)简介
- 录游戏用什么软件,录制游戏视频哪个软件好
- VC++实现会议中阻止屏保、阻止系统自动关闭屏幕、阻止系统待机(附源码)
- js对日期加减指定天、时、分、秒
- 数据可视化-echarts入门、常见图表案例、超详细配置解析及项目案例
- 大文件的切割与归并(数据分析案例三)
- 29种Bokeh基础可视化图形
- linux--线程(2续)
- 基于OpenCV简单的车牌识别
- 国产化服务器挂载硬盘,国产化笔记 - 国产数据库达梦在国产银河麒麟系统上的安装与使用...