前言
想开一个关于强化学习的专栏,慢慢来介绍关于强化学习、多智能体强化学习方向的基础算法,欢迎感兴趣的掘友们一起来学习探讨。
上一篇文章讲解了Q-learning和DQN算法的原理与代码实现,文章链接如下(大家也可以去我的主页看):
本篇文章继续介绍与DQN相关的算法,这些算法都是基于DQN的扩展算法,他们从不同的角度解决了DQN中存在的问题,也获得了更好的效果。
在这里推荐一篇综述,详细的对DQN算法的改进方法作出了分类与汇总,链接如下:
文章对其分类如下:
本文将对其中几个重点进行详细讲解
1. Double DQN
1.1 Double DQN原理
在DQN中,DQN只是利用了卷积神经网络表示动作值函数,并利用了经验回放和单独设立目标网络这两个技巧,但是DQN无法克服Q-learning本身所固有的缺点——过估计。
那什么是过估计? Q-learning为何具有过估计的缺点呢?
过估计是指估计的值函数比真实值函数要大,一般来说,Qlearning之所以存在过估计的问题,根源在于Qlearning中的最⼤化操作。Qlearning评估值函数的数学公式如下有两类:
- 对于表格型,值函数评估的更新公式为:
- 对于基于函数逼近的⽅法的值函数更新公式为
从以上两个式⼦我们可以看出,不管是表格型还是基于函数逼近的⽅法,值函数的更新公式中都有max操作。
max操作使得估计的值函数⽐值函数的真实值⼤。如果值函数每⼀点的值都被过估计了相同的幅度,即过估计量是均匀的,那么由于最优策略是贪婪策略,即找到最⼤的值函数所对应的动作,这时候最优策略是保持不变的。也就是说,在这种情况下,即使值函数被过估计了,也不影响最优的策略。强化学习的⽬标是找到最优的策略,⽽不是要得到值函数,所以这时候就算是值函数被过估计了,最终也不影响我们解决问题。然⽽,在实际情况中,过估计量并⾮是均匀的,因此值函数的过估计会影响最终的策略决策,从⽽导致最终的策略并⾮最优,⽽只是次优。
为了解决值函数过估计问题,Hasselt提出了Double Qlearning 的方法,论文链接如下:
[1509.06461] Deep Reinforcement Learning with Double Q-learning (arxiv.org)
所谓Double Qlearning 是将动作的选择和动作的评估分别⽤不同的值函数来实现。
那么,什么是动作的选择?什么是动作的评估?我们来做些简要的解释:
- 动作选择
在Q-learning的值函数更新中,TD目标为:
在求TD目标的时候,我们首先需要选择一个动作,即,该动作应该满足在状态处最大,这就是动作选择。
- 动作评估
动作评估是指选出后,利用处的动作值函数构造TD目标,一般Qlearning利用同一个参数来选择和评估动作。
Double Qlearning 分别用不同的行为值函数选择和评估动作。double Qlearningg的TD⽬标公式为:
从该公式我们看到,动作的选择所⽤的动作值函数为:
这时动作值函数网络的参数为。当选出最大的动作后,动作评估的公式为:
动作评估所⽤的动作值函数⽹络参数为
将Double Qlearning 的思想应用到DQN中,则得到Double DQN,即DDQN,其TD目标为:
通过这样的变化,算法在3个环节的模型安排如下:
- 采样:Behavior Network
- 选择最优动作:Behavior Network
- 计算目标价值:Target Network
经过这样的变换,模型在过高估计的问题上得到了缓解,稳定性也就得到了提高。
1.2 DDQN 代码实现
代码部分来源于莫凡老师,链接如下:
2. 优先回放(Prioritize Replay)
DQN的成功归因于经验回放和独⽴的⽬标⽹络。
Double DQN改进了Q-learning中的max操作,经验回放仍然采用均匀分布。经验回放时利⽤均匀分布采样并不是⾼效利⽤数据的⽅法。因为,智能体的经验,即经历过的数据,对于智能体的学习并⾮具有同等重要的意义。智能体在某些状态的学习效率⽐其他状态的学习效率⾼。
优先回放的基本思想就是打破均匀采样,赋予学习效率⾼的状态以更⼤的采样权重。
如何选择权重?
⼀个理想的标准是智能体学习的效率越⾼,权重越大。符合该标准的一个选择是TD偏差。TD偏差越大,说明该状态处的值函数与TD目标的差距越大,智能体的更新量越大,因此该处的学习效率越高。
我们设样本处的TD偏差为,则该样本处的采样概率为:
上式中由TD偏差决定,一般有两种方法,第一种方法是:; 第二种方法是:,其中根据的排序得到。
当我们采用优先回放的概率分布采样时,动作值函数的估计值是⼀个有偏估计。因为采样分布与动作值函数的分布是两个完全不同的分布,为了矫正这个偏差,我们需要乘以⼀个重要性采样系数:.
带有优先回放的Double DQN的伪代码如图所示:
3. Dueling DQN
论文链接:
[1511.06581] Dueling Network Architectures for Deep Reinforcement Learning (arxiv.org)
不管是最初的DQN,还是由DQN演化出的Double DQN、经验优先回放DQN在值函数逼近时所⽤的神经⽹络都是卷积神经⽹络。Dueling DQN则从⽹络结构上改进了 DQN。动作值函数可以分解为状态值函数和优势函数,即:
前⾯介绍的各类DQN⽅法,直接利⽤神经⽹络逼近,Dueling DQN则对和分别利⽤神经⽹络逼近,其⽹络结构如下图:
难道我们单纯地将他们分解就可以了吗?
当然不行,我们还需要对这两部分的输出做一定的限制。如果我们不对这两个输出做限制,那么当q值一定时,v和a有无穷种可行组合,而实际上只有很小一部分的组合是合乎情理、接近真实数值的。为了解决这个问题,我们可以对A函数做限定。我们知道A函数的期望值为0:
就可以对输出的A值进行约束,例如将公式变成:
让每一个A值减去当前状态下所有A值的平均数,就可以保证前面提到的期望值为0的约束,从而增加了v和A的输出稳定性。
进行这样的输出分解有什么好处呢?首先,通过这样的分解,我们不但可以得到给定状态和行动的q值,还可以同时得到v值和A值。这样如果在某些场景需要使用V值时,我们同样可以获得v值而不用再训练一个网络。同时,通过显式地给出v函数的输出值,每一次更新时,我们都会显式地更新v函数,这样v函数的更新频率就会得到确定性的增加,对于单一输出的q网络来说,它的更新就显得有些晦涩。
从论文中给出的实验效果图可以看出,将模型分为A函数和v函数后,两个函数会展示出不同的特点。通过反卷积操作得到两个函数值对原始图像输入的梯度后,可以发现v函数对游戏中的所有关键信息都十分敏感,而A函数只对和行动相关的信息敏感。如下图:
图中的上面两幅图中,玩家附近没有障碍物时,价值敏感区域比较单一,由于行动之间对结果的影响差距不大,所以优势函数中没有太敏感的区域,而下面两幅图,玩家附近有障碍物,因此优势函数的敏感区域变多了,两个输出敏感图的差异说明了价值和优势之间的差别。
4. Multi-step learning
前面介绍的Q-learning大多通过下一时刻的回报和价值估计得到目标价值,这种方法在前期具有学习速度较慢的弱点,为了克服这个弱点,Multi-step Learning使用了更多步的回报,这样在训练前期目标价值可以估计得更准确,从而加快训练速度,其中的核心公式为:
5. Distributional DQN
论文链接A Distributional Perspective on Reinforcement Learning. - AMiner
Distributional DQN同Dueling DQN 类似,都是对价值模型的结构进行改进。之前介绍的DQN,仅仅是通过神经网络完成值函数的拟合。状态行动值函数本质上计算了基于某个特定策略对未来的长期回报的期望,这个期望值的估计既不容易也不细致。Distributional DQN模型希望通过建立更复杂细致的值函数,让估计更细致可信。
5.1 输出价值分布
先回忆Bellman 公式的形式:
由此可见,目前模型的估计结果是基于策略和状态转移两个概率分布的价值期望,由于综合了太多的信息,这个数值就显得有些不够具体,如果想要得到更详细的信息,那么模型就不能仅输出一个期望值,而需要将价值的分布估计出来。这样模型的结果就会做出如下图的变化。
如果我们能将价值的分布估计出来,这个结果将变得更有意义。
为了确保分布不受太多的限制,同时又可以减少分布的计算量,我们选择一种简单直观的方法:直方图。假设绝大多数的价值最终值落在区间之内,同时限定区间内每一段的价值范围相等,那么我们只需让模型输出给定值函数区间的概率,就是,就可以表示出直方图分布的形式。这样我们的价值分布估计又经历了如下图的转变:
采用直方图的方法有一个好处,那就是它可以近似很多不太常规的分布形式,分布的表示范围比起前面提到的正态分布要大很多。
直方图中表示的数值采样集合为,这个集合共有N个元素。我们的模型要输出N个值的向量,每一个值表示这其中一个价值采样点出现的概率,于是模型可以用下面的映射表示:
不同于DQN输出实数,直方图模型会通过 Softmax 层 输出每一个价值采样点的概率,这样可以得到价值为时,对应的概率如下:
5.2 分布的更新
解决了输出的表示问题,还要解决另一个十分重要的问题,那就是更新。在前面的DQN模型中,我们可以使用Q-Learning 公式计算目标价值,得到的结果为目标期望价值;而在 Distributional DQN 模型中,我们的计算过程则变得有些复杂。
- 计算t+1时刻每一个行动的价值分布
- 将第一步的价值期望和t+1时刻的回报相加,并选出期望最大的行动
- 将期望最大的行动的价值分布表示出来
我们发现第 3 步计算后,得到的分布可能和原始的分布形式不同。不光是价值范围不同,价值采样点也会发生偏移,这样目标价值分布和估计分布将很难比较。如果允许这样的不同,我们就不能使用 Cross Entropy Loss 作为目标函数,选择其他的函数将会使模型变得更复杂,为了简化计算,我们可以选择一种近似计算的方法,那就是将价值范围和采样点对齐。只要对齐了直方图,就可以使用之前的目标函数进行计算。
在对齐前,我们要先计算出最优的行动。由于价值的范围和采样点已经确定,那么对于不同的行动,可以计算出每一个价值采样点的概率 ,这样也可以求出当前行动a的价值期望:
我们从所有的行动中选择使期望最高的行动,可以得到:
然后开始对齐计算,计算过程分三步,如下图:
第 1 步:计算出真实的目标价值分布。由于价值采样点是确定的,所以我们可以直接使用公式计算出目标价值的价值点,即进行下面的计算:
由于每个采样点是固定的,所以这一步对于每一步更新来说都是相同的。每一个新的价值点的概率和旧的价值点相同。
第 2 步:完成价值限定的操作。其中落入价值范围之外的值将被强制投影到范围之内。大于最大值的价值采样点会被投影到最大价值处,小于最小值的价值采样点会被投影到最小价值处。
第 3 步:完成价值采样点的投影。最终我们需要把价值采样点投影回原始的采样点。由于第 2 步我们已经将采样点限定在价值范围内,所以就可以找到离采样点最近的两个原始采样点,那么下一步就可以以采样点到原始采样点的距离为权重将采样点: 的概率分配到原始采样点上,这样就得到了基于原始采样点的目标概率。
完整的更新算法如下:
通过使用分布的形式表示值函数后,模型可以学习到更丰富的信息,这样可以使模型做出更细致的决策。
6. Noisy Network
增强探索能力是强化学习中经常遇到的问题,在前面我们曾接触过的方法,这个算法中以一定的概率随机执行行动,而在剩下的中执行最优行动,这相当于在执行策略的环节增加一定的噪声,使得模型具备一定的探索能力。本节介绍另一种增强探索能力的方法——Noisy Network,不同于的方法,它使用了一种更平滑的手段增加探索能力。
算法是如何实现想要的效果的呢?
举个简单的例子,以一个简单的函数为例:
其中,表示输入,表示输出,和是函数的参数。也就是说,如果输入是, 那么经过函数的变换,输出的结果就会变成。这样,我们就可以使用这个函数表示自然界中一组 和的关系。当然,自然界中存在着一定的噪声,我们无法直接使用这个函数进行表示,于是给函数加入一个噪声项,于是函数变为:
其中服从均值为0,方差为的高斯分布,是一个固定值,表示噪声带来的方差,这样我们也可以认为服从如下的高斯分布:
可以看出由于噪声的存在,我们可以从同一个映射到多个,这相当于增加了输出的不确定性。不确定性对于探索来说十分重要,由于不确定性的存在,我们可以选择确定行动之外的其他行动,因此我们发现噪声和探索存在某些类似的特性,我们可以利用噪声增加模型的探索能力。
下面就来介绍这个噪声的参数如何融入我们已经介绍的 DQN算法,我们知道基于 Target Network 的 DQN算法的目标函数公式为:
其中 表示 Behavior Network 的模型参数, 表示Target Network 的模型参数。我们可以在值函数中加入一定的噪声,由于噪声会影响最终的价值输出,也会影响最终的行动,于是噪声的大小影响了模型的探索特性,噪声越小表示探索能力越小,噪声越大表示探索能力越大。我们可以为两个模型参数分别加入噪声随机变量和,以及噪声参数和,此时新的目标函数变为:
在原本的目标函数中噪声项并不存在,因此此时噪声的加入使得目标函数产生了偏差。为了消除这个偏差,我们可以对噪声求期望,由于噪声的期望值为0,求解期望后目标函数不再有偏,但是模型依然拥有一定的探索能力。我们只需要将其以蒙特卡罗的形式计算即可,公式中的两个期望可以同时转化为求平均的操作,这样这个算法就变得可以计算了。
最后,由于噪声的引入,我们需要考虑噪声参数的初始化,根据论文中的介绍,噪声参数为个时,令,参数进行初始化。
Noisy Network 的思想相对简单,我们通过添加噪声为模型赋予探索的特性,与之前的的探索不同,Nisy Network 的探索方式更平滑,对探索的粒度控制更细腻,因此在实验中它也获得了不错的成绩。
7. Rainbow
论文链接:[1710.02298] Rainbow: Combining Improvements in Deep Reinforcement Learning (arxiv.org)
本节介绍Rainbow模型,Rainbow模型的名字让人一头雾水,它的名字并不代表它使用了某个技术,而是一种文艺的表示。由于它集成了很多模型的特色算法,如果把每一个特色算法想象成一种色彩,那么这些特点组合在一起就形成了五彩颜色的物体,而彩虹刚好是由多种颜色组成的,于是模型就有了彩虹这个名字
那么,Rainbow模型融合了哪些模型的技术呢?
(1)Double Q-learning
Double Q-Learning构建了两个结构相同但是参数数值不同的模型:Behavior Net-work和 Target Network。在模型更新时,首先由 Behavior Network 选出t+1时刻的最优行动,然后由 Target Network 得到估计t+1时刻最优行动的目标价值估计。通过将这两个步骤解耦,我们可以减少 Q-Learning 方法对价值过高估计带来的影响,其中的核心公式为:
(2)Prioritized Replay Buffer
Prioritized Replay Buffer 通过对 Replay Buffer 中不同的样本赋予不同的权重,使得模型有更高的概率训练对自己有更多提升的样本上,同时以较低的概率训练对自己提升有限的样本。样本出现的权重和样本采样时的TD-Error 有关,样本的学习率和更新权重还可以根据参数进行调整。
(3)Dueling Networks
Dueling Networks 将状态行动价值模型分解成状态价值 和价值优势两个部分,分解后的两部分具有明确的含义,而这样的分解也同时降低了训练的难度,其中的核心公式为:
(4)Multi-step Learning
前面介绍的Q-Learning 大多通过下一时刻的回报和价值估计得到目标价值,这种方法在前期具有学习速度较慢的弱点,为了克服这个弱点,Multi-step Learning 使用了更多步的回报,这样在训练前期目标价值可以估计得更准确,从而加快训练速度,其中的核心公式为:
(5)Distributional Network
DQN 网络只输出了期望形式的价值,而对价值缺少更细致的刻画。DistributionalNetwork 的模型结构可以输出价值的分布形式。我们可以设定价值模型可能的输出范围,并在范围内以直方图的形式表示价值对应的出现概率,这使模型的表现能力有了很大的提升,分布形式模型的表示形式如下所示:
(6)Noisy Network
模型的探索能力一直是一个需要提高的方面。为了更优雅、灵活地提高模型的探索能力,Noisy Network 为模型参数加入了一定的噪声,通过噪声的随机性改变参数的数值,进而改变模型输出的数值,对应的更新公式为:
可以看到,Rainbow 中使用了很多基于DQN算法的改进技术,这些技术在该文都已经介绍。如果说DQN模型是一个经典算法,那么 Rainbow就是站在 DQN肩膀上,集多个改进算法于一身的又一个经典算法。