Rainbow:整合DQN六种改进的深度强化学习方法!

在2013年DQN首次被提出后,学者们对其进行了多方面的改进,其中最主要的有六个,分别是:
Double-DQN:将动作选择和价值估计分开,避免价值过高估计
Dueling-DQN:将Q值分解为状态价值和优势函数,得到更多有用信息
Prioritized Replay Buffer:将经验池中的经验按照优先级进行采样
Multi-Step Learning:使得目标价值估计更为准确
Distributional DQN(Categorical DQN):得到价值分布
NoisyNet:增强模型的探索能力

而在最近,DeepMind在论文《Rainbow: Combining Improvements in Deep Reinforcement Learning》中,将这六种方法进行了一个整合,提出了Rainbow模型。本文,我们一起来回顾一下DQN及其各种改进模型。

本文将不再介绍模型的实现,不过在我的github中已经有rainbow的代码,具体可参考:https://github.com/princewen/tensorflow_practice/tree/master/RL/Basic-Rainbow-Net

1、原始DQN

Q-learning是强化学习中一种十分重要的off-policy的学习方法,它使用Q-Table储存每个状态动作对的价值,而当状态和动作空间是高维或者连续时,使用Q-Table不现实。

因此,将Q-Table的更新问题变成一个函数拟合问题,使用神经网络来得到状态动作的Q值,并通过更新参数 θ 使Q函数逼近最优Q值 ,这就是DQN的基本思想。

但是,将深度神经网络和强化学习思想进行结合,难免会出现一定的问题,比如:
1、DL需要大量带标签的样本进行监督学习;RL只有reward返回值;
2、DL的样本独立;RL前后state状态相关;
3、DL目标分布固定;RL的分布一直变化,比如你玩一个游戏,一个关卡和下一个关卡的状态分布是不同的,所以训练好了前一个关卡,下一个关卡又要重新训练;
4、过往的研究表明,使用非线性网络表示值函数时出现不稳定等问题。

为了解决问题1,我们就要用到贝尔曼方程:

上面的两个式子,第一个是贝尔曼期望方程,第二个是贝尔曼最优方程,在我们实际的问题中,对于一个状态,采取特定的动作,下一个状态基本上是确定的,因此我们可以把最优方程中的求和去掉。这样我们就可以通过神经网络得到一个Q值的预估值,并通过贝尔曼最优方程得到一个Q值的目标值,并通过预估值和目标值的差距来进行有监督的学习。

为了解决问题2和3,我们用到了经验回放(Experience Replay)的方法,具体做法是把每个时间步agent与环境交互得到的转移样本 (st,at,rt,st+1,is_terminal) 储存到经验池中,要训练时就随机拿出一些(minibatch)来训练。这样就避免了相关性问题。

这里我们重新解释一下问题4,根据上面的思路,我们需要网络来得到当前状态动作的Q预估值,还需要通过网络得到下一个时刻状态-最优动作的Q预估值,进而通过贝尔曼方程得到当前状态动作的Q目标值,并根据Q目标值和Q预估值对网络参数进行更新。这就像一场自导自演的电影,或者说一场既当运动员又当裁判的比赛,使得网络变的非常不稳定。为了解决这个问题,我们提出了双网络结构。这样,Q预估值由eval-net得到,而Q目标值根据当前的即时奖励r和target-net得到。

因此,在DQN中,最终的损失函数如下:

其中,θ表示eval-net的参数,而θ横表示target-net的参数。在实际应用中,target-net的参数是每隔一段时间从eval-net复制过来的。

2、Double-DQN

在原始的DQN中,会出现Q值估计偏高的情形,因为这是一种off-policy的策略,我们每次在学习时,不是使用下一次交互使用的真实动作,而是使用当前策略认为的价值最大的动作,所以会出现对Q值的过高估计。而在DQN中,我们也会面临同样的问题,因为我们选择下一时刻的动作以及计算下一时刻状态-动作Q值时,使用的都是target-net。

为了将动作选择和价值估计进行解耦,我们有了Double-DQN方法。在Double-DQN中,在计算Q实际值时,动作选择由eval-net得到,而价值估计由target-net得到。此时,损失函数变为:

3、Prioritized Replay Buffer

在传统DQN的经验池中,选择batch的数据进行训练是随机的,没有考虑样本的优先级关系。但其实不同的样本的价值是不同的,我们需要给每个样本一个优先级,并根据样本的优先级进行采样。

样本的优先级如何确定?我们可以用到 TD-error, 也就是 q-target - q-eval 来规定优先学习的程度. 如果 TD-error 越大, 就代表我们的预测精度还有很多上升空间, 那么这个样本就越需要被学习, 也就是优先级 p 越高。

有了 TD-error 就有了优先级 p, 那我们如何有效地根据 p 来抽样呢? 如果每次抽样都需要针对 p 对所有样本排序, 这将会是一件非常消耗计算能力的事. 文中提出了一种被称作SumTree的方法。

SumTree 是一种树形结构, 叶子结点存储每个样本的优先级 p, 每个树枝节点只有两个分叉, 节点的值是两个分叉的和, 所以 SumTree 的顶端就是所有 p 的和. 如下图所示。最下面一层树叶存储样本的 p, 叶子上一层最左边的 13 = 3 + 10, 按这个规律相加, 顶层的 root 就是全部 p 的和了.

抽样时, 我们会将 p 的总和 除以 batch size, 分成 batch size 那么多区间, (n=sum(p)/batch_size). 如果将所有 node 的 priority 加起来是42的话, 我们如果抽6个样本, 这时的区间拥有的 priority 可能是这样.

[0-7], [7-14], [14-21], [21-28], [28-35], [35-42]

然后在每个区间里随机选取一个数. 比如在第区间 [21-28] 里选到了24, 就按照这个 24 从最顶上的42开始向下搜索.。首先看到最顶上 42 下面有两个子节点,拿着手中的24对比左子节点, 因为29>24, 那我们就走左边这条路;接着再对比29的左子节点13,因为24>13, 那我们就走右边的路, 并且将手中的值根据 13 修改一下, 变成 24-13 = 11。 接着拿着 11 和 13的左子节点12 比, 结果 12 比 11 大, 那我们就选择 12 对应的数据作为该区间采样的结果。

4、Dueling-DQN

什么是Dueling DQN呢?看下面的图片

上面是我们传统的DQN,下面是我们的Dueling DQN。在原始的DQN中,神经网络直接输出的是每种动作的 Q值, 而 Dueling DQN 每个动作的Q值,是由状态价值V优势函数A确定的,即Q = V + A。

什么是优势函数?我们可以简单理解为,对于一个特定的状态,采取一个动作所能得到的价值与这个状态能得到的平均价值的区别。如果采取的动作得到的价值比平均价值大,那么优势函数为正,反之为负。

简单的使用Q = V + A可以么?当然不行,因为对于一个确定的Q,有无数种V和A的组合可以得到Q。因此我们需要对A进行一定的限定,通常将同一状态下的优势函数A的均值限制为0。所以,我们的Q值计算公式如下:

5、Multi-Step Learning

原始的DQN使用的是当前的即时奖励r和下一时刻的价值估计作为目标价值,这种方法在前期策略差即网络参数偏差较大的情况下,得到的目标价值偏差也较大,因此学习速度可能相对较慢。因此我们可以通过Multi-Step Learning来解决这个问题,这样在训练前期目标价值可以得到更准确的估计(因为即时奖励是我们可以通过与环境的交互准确得到的),从而加快训练速度。

在Multi-Step Learning中,我们的损失函数变为:

6、Distributional DQN

在DQN中,网络输出的都是状态-动作价值Q的期望预估值。这个期望值其实忽略很多信息。比如同一状态下的两个动作,能够获得的价值期望是相同的,比如都是20,第一个动作在90%的情况下价值是10,在10%的情况下是110,另一个动作在50%的情况下是15,在50%的情况下是25。那么虽然期望一样,但如果我们想要减小风险,我们应该选择后一种动作。而只有期望值的话,我们是无法看到动作背后所蕴含的风险的。

所以从理论上来说,从分布视角(distributional perspective)来建模我们的深度强化学习模型,可以获得更多有用的信息,从而得到更好、更稳定的结果。

我们选择直方图来表示对于价值分布的估计,并将价值限定在[Vmin,Vmax]之间。在[Vmin,Vmax]选择N个等距的价值采样点。网络的输出便是这N个价值采样点的概率。

还是延续DQN中的双网络结构,我们会得到估计的价值分布和目标的价值分布(目标价值分布需要进行裁剪和投影),并使用交叉熵损失函数来计算两个分布之间的差距,并通过梯度下降法进行参数的更新。

7、NoisyNet

增加Agent的探索能力是强化学习中经常遇到的问题,一种常用的方法是采用e-greedy的策略,即以e的概率采取随机的动作,以1-e的概率采取当前获得价值最大的动作。而另一种常用的方法是NoisyNet,该方法通过对参数增加噪声来增加模型的探索能力。

我们的噪声通常添加在全连接层,考虑我们全连接层的前向计算公式:

假设两层的神经元个数分别为p个和q个,那么w是q*p的,x是p维的,y和b都是q维的。

此时我们在参数上增加噪声,文章中假设每一个参数b和w分别服从于均值为μ,方差为σ的正态分布,同时存在一定的随机噪声ε,我们可以假设噪声是服从标准正态分布N(0,1)的。那么前向计算公式变为:

这样,我们模型的变量从原来的p*q + q个,变为了2 * p * q + q个,你可能会问,变量不是3 * p * q + q个么?因为这里,我们的噪声ε在每一轮中,都是随机产生的常量,试想如果噪声ε也是变量的话,就跟原有的wx+b没有什么区别了。

接下来就是这个噪声如何产生的问题了。文中提到了两种方法:

Independent Gaussian noise:这也是我们最容易想到的方法,就是直接从标准正态分布中,随机产生p*q+q个常量。这也就是说,对于每一个全连接层来说,为每一个w和b都产生独立的噪声,这无疑对于模型的计算带来了不小的负担。

Factorised Gaussian noise:该方法有效地减少了噪声的个数,我们只需要p + q个噪声即可,w和b的噪声计算方式如下:

而上式中的f所代表的函数如下:

了解了如何给参数增加噪声,我们就可以把这种方法应用于DQN等方法中。

8、模型试验

文章对比了使用Rainbow和其他的DQN的在57种Atari游戏上的实验效果:

参考文献

1、2013DQN:https://pdfs.semanticscholar.org/667f/b84bfca10bec165f9e2cca3e21f5e4829ca7.pdf
2、2015DQN:http://www.nature.com/nature/journal/v518/n7540/abs/nature14236.html
3、Double-DQNhttps://arxiv.org/pdf/1509.06461v3.pdf
4、Deuling-DQN:https://arxiv.org/pdf/1511.06581.pdf
5、Prioritized Replay Buffer:https://arxiv.org/pdf/1511.05952.pdf
6、NoisyNet:https://arxiv.org/abs/1706.10295v1
7、distributional DQN:https://arxiv.org/abs/1707.06887
8、Rainbow:https://arxiv.org/abs/1710.02298

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,999评论 4 368
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,102评论 1 302
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,709评论 0 250
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,439评论 0 217
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,846评论 3 294
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,881评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,062评论 2 317
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,783评论 0 205
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,517评论 1 248
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,762评论 2 253
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,241评论 1 264
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,568评论 3 260
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,236评论 3 241
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,145评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,941评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,965评论 2 283
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,802评论 2 275

推荐阅读更多精彩内容