【DRL-7】Distributional DQN: Quantile Regression-DQN

你赞同过 TA 的内容

论文


这篇文章在上一篇的基础之上做了扩展,作者还是同一拨人。

提要:QR-DQN是对DQN的扩展,是model-freeoff-policyvalue-baseddiscrete的方法。

听说点赞的人逢投必中。


在这之前你需要了解一些分位数和分位数回归的知识,建议先读

同时还有一些Bellman算子的知识,建议先读

首先我们来介绍一个数学概念,Wasserstein距离

Wasserstein距离度量两个概率分布之间的距离,(狭义的)定义如下:

W(P,Q)=minγΠxp,xqγ(xp,xq)xpxq

直接看这个式子可能过于抽象了,因为它和我们熟悉的度量不一样,它好像不是确定性的,而是带有一个 min

这里的Wasserstein距离又叫推土机距离,看下面的图,你就能很形象的理解Wasserstein距离。


它的意思是,将一个分布转变为另一个分布,所需要移动的最少的“土”的量。

注意,因为是分布,概率的和为1,也就是说“土”的总量是相同的。同时,这个移动的量是指“土”的“距离*数量”。

可以看到,又很多种移动的方案,而Wasserstein距离指的是最少的那种,当然可能有多个方案都是最少,但是这不重要,重要的是移动的

我们把每一种移动方案叫做一个moving plan,用下面的矩阵表示:


上面的矩阵代表了将P移动到Q的moving plan,明暗程度代表大小。

γ 代表一个moving plan, Π 代表moving plans的全集。

minγΠ 的意思就是,从 Π 中挑选出那个能让“移动土的量”最少的方案。

然而上述的定义只算是一个特例,标准的Wasserstein Metric的定义更为复杂,如果我有两个分布 U,Y ,那么它们的p-Wasserstein Metric

Wp(U,Y)=(01|FY1(ω)FU1(ω)|pdω)1/p

其中

FY1(ω):=inf{yR:ωFY(y)}

FY(y)=Pr(Yy)

p=1 的时候,上面的公式就退化成为我们最开始看到的推土机距离

p=1 的时候这个式子还是容易理解的,这里的 FY(y) 就是 y 的CDF函数,而 FY1(ω) 可以理解为计算 PYw 分位数

Wp(U,Y) 的表达式,则是将这个代表分位数的 w 01 积分

下图形象的描述了 p=1 情况下的Wasserstein Metric,这不过这个定义是连续的,刚才的那个是离散的。

上图中红色和蓝色的线分别是 PXPY 的CDF函数,对于某一个分位数 τ ,我们可以计算得到两个值,分别是 FX1(τ)FY1(τ)

它们的差值的绝对值就是上图中黑线的长度,把这个长度积分就是青色部分的面积,这就代表了两个分布的差异。


接下来我们步入正题,在上一篇文章

中,我们说到,可以用 Z(x,a) 表示值分布,准确的说,它可以表示成下面的形式

Z:X×AP(R)

接下来我们定义 Z 这个函数所在的空间 Z

Z={Z:X×AP(R)|E[|Z(x,a)|p]<,(x,a),p1}

在Bellman算子的那篇文章中,我们说我们如果想要证明某个方法能否收敛,需要证明它对应的算子有唯一的不动点,也就是要证明这个算子是γ contraction的。

Q(s,a) 的例子中,我们证明bellman operator是γ contraction的,即证明

dist(TπQ1,TπQ2)γdist(Q1,Q2)

这里的 dist 表示直径,也就是这两个函数 Q1Q2 的最远距离。

值函数的例子中,这个 dist 的定义很简单,就是 Q1Q2 ,也就是它们差值的无穷范数。

注意,这里我们其实用到了两个度量,一个是“差值”,一个是“无穷范数”。第一个度量取决于你的实际用途,而第二个度量是不可避免的,因为它定义了“直径”。

在值分布的例子中,我们也要证明bellman operator是γ contraction的,那么我们需要找到合适的度量。

这里的度量就是Wasserstein Metric。

于是,在这个例子中, dist 就变成了

d¯p(Z1,Z2):=supx,aWp(Z1(x,a),Z2(x,a))

其中的 supx,a 发挥了无穷级数的作用,而 Wp 发挥了第一个度量,也就是差值的作用。

那么,要证明值分布的情况下算法依旧收敛,只需要证明对于任意的 Z1,Z2Z ,有

d¯p(TπZ1,TπZ2)γd¯p(Z1,Z2)

这里我们就不做证明了,具体证明在论文的附录中有。


上面的说明给值分布的算法提供了理论保证,但是一开始作者们并没有想到合适的方法模拟Wasserstein Metric这个过程,于是提出了使用KL散度做近似的想法。

实际上,基于这个想法提出的C51算法确实效果不错。

然而,紧接着作者们又提出了更“正统”的算法QR-DQN,它继承了最开始的理论想法。

首先,我们要做的是改变“分布”的表现形式。

Z(x,a)Z:X×AP(R) 的函数,它的输出是一个分布 P(R)

我们一开始是用 N 个atoms {z0,z1,,zN1} 作为基准,再用 N 个离散的分布 {p0,p1,,pN1} 来描述这个分布。

这种形式用来计算KL散度是极好的,但是不适合计算W度量,现在我们介绍另外一种,是用分位数描述的方法。

其实也很直觉,就是按照这个分布的CDF的 y 轴,把它均等的分成 N 分,例如下面的是分布的PDF的 y 轴,我们把它分成10等分

那么自然就会得到10个 τ^ ,这10个 τ^ 就定义了10个分位数

τ^i=2(i1)+12N,i=1,,N

分位数是下图的小红点

于是,我们现在只需要记录 N 个分位数的位置,就可以描述整个分布了。

接下来,我们如何去学习出这 N 个分位数呢?

还记得在C中,我们设计了一个神经网络 Z ,它的输入是状态 s ,输出是一个矩阵,矩阵的每一行代表一个动作的 N 个概率,分别是 {p0,p1,,pN1}

而学习出分位数,就需要分位数回归的知识了。


我在这里再简单叙述一下。

在传统的回归中,我们想要的是,对于一个自变量 x ,条件概率 p(y|x) 的期望,因此我们的损失函数是

LMSE=minβin(yiμ(xi,β))2

其中 β 就代表了模型的参数。这是很显然的,因为让MSE最小的点正好是期望。

如果我们想求 p(y|x)中位数呢?那就不能再用MSE了,而是应该用MAE

LMAE=in|yiξ(xi,β)|

上面的式子也可以表示为

LMAE=i:yiξ(xi,β)(yiξ(xi,βτ))+i:yi<ξ(xi,β)(ξ(xi,β)yi)

这个式子的来历很简单,就是分类讨论了一下。

在训练的时候,也很容易求梯度

βLMSE=ini

其中 i={1i:yi<ξ(xi,β)1i:yiξ(xi,β)

可以把梯度理解为将 ξ(xi,β) 往中间推的力量。

实际上,我们说中位数就是 τ=0.5 的分位数,求其他任意的分位数也很容易扩展了

Lτ=i:yiξ(xi,βτ)τ(yiξ(xi,βτ))+i:yi<ξ(xi,βτ)(1τ)(ξ(xi,βτ)yi)

这可以看作推的力量有了一个“加权“,使之不再正好往中间推,而是推向了某一个位置,这个位置正是由 τ 决定的。

梯度表示为

βLτ=ini

其中 i={1τi:yi<ξ(xi,βτ)τi:yiξ(xi,βτ)

我们还可以换一种形式表示 Lτ ,令 δstatement  表示

δstatement ={1statement is ture0otherwise 

于是

|τδyi<ξ(xi,β)|={|τ1|=1τ if yi<ξ(xi,β)τ if yiξ(xi,β)θ

所以

Lτ=E[|yiξ(xi,βτ)||τδyi<ξ(xi,β)|]=E[ρτ(yiξ(xi,βτ))]

其中

ρτ(u)=|u||τδu<0|=u(τδu<0)

因为 |u|0 出不可导,我们可以把它换成其他函数,论文中使用的是

Lκ(u)={12u2 if |u|κκ(|u|12κ) otherwise 

这个 κ 可以看作另一个超参数,但是其实没有调节它的必要啦。

κ=1

那么现在我们有

ρτκ(u)=Lκ(u)|τδu<0|

对比一下 ρτκ(u)ρτ(u)

最终我们把损失函数定义为

Lτ=E[ρτ1(yiξ(xi,βτ))]


在QR-DQN中,神经网络是怎么定义的呢?

其实和C51的很像,也是输出一个矩阵,只不过每列不再是atoms对应的 pi 了,而是atoms的位置,也就是 zi ,因为在QR-DQN中atoms的概率是确定的,都是 1N

现在让我们看一下训练的过程。

首先我们从Buffer中采样出 (s,a,r,s) ,接下来我们需要计算出 a ,和C51的想法一样,我们依旧用 Q(s,a) 来计算。

先算 Q(s,a)

Q(s,a):=jqjθj(x,a)

挑出最大的作为 a

aargmaxaQ(x,a)

根据这个 a 计算出分布 Z(s,a) ,我们设这个分布的atoms的位置表示为 {θ0,θ1,,θN1}

那么目标分布表示为

Tθj=r+γθj,i=0,,N1

这里的好处是不用再对齐了,因为我们的atoms的位置是可以改变的,而正是用这个变量来描述整个分布,自然没有对齐之说。

最关键的是,我们要让分布 Z(s,a) 和目标分布 r+γZ(s,a) 尽可能相似。

我们假设用 {θ0,θ1,,θN1} 来描述分布 Z(s,a) ,这其实就是 N分位数

那么描述目标分布的 {r+γθ0,r+γθ1,,r+γθN1} 就可以当作ground truth,也就是把他们看作 Lτ=E[ρτ1(yiξ(xi,βτ))] 中不同的 yi

此外,我们并不是只有一个 τ ,我们有 Nτ ,我们需要计算它们的损失函数的和,也就是

Lβ=i=1NEY[ρτi1(Yξ(β)i)]=i=1NETZ[ρτ^i1(TZθi)]=1Ni=1Nj=1N[ρτ^i1(Tθjθi)]

其中

TZ=r+γZ(x,a)

τ^i 就是用来决定 N 个分位数的值

τ^i=2i+12N,i=0,,N1

最后算法如下


我们来直观的感受一下QR-DQN做了什么。

假设我们现在可以画出 r+γZ(s,a) ,它就是下图的红线

那么蓝色的线就是初始状态的 Z(s,a)

从Distributional DQN定义的角度,我们希望什么呢?我们希望青色的面积更小

那么QR-DQN希望什么呢?

它希望 θ0 可以可以作为 τ0 对应的分位数, θ1 可以可以作为 τ1 对应的分位数,以此类推。

如果做到了这一点,图像就会变成

Amazing啊,青色这不就变少了。

如果我们调节超参数 N ,让QR-DQN的分布描述的更细致,会变成

青色更少了。


本文参考自