强化学习组队学习task04—— DQN 算法及 Actor-Critic 算法

一、DQN

在 Q-learning 中,我们使用表格来存储每个状态 s 下采取动作 a 获得的奖励,即状态-动作值函数 。然而,这种方法在状态量巨大甚至是连续的任务中,会遇到维度灾难问题,往往是不可行的。因此,DQN 是指基于深度学习的 Q-learning 算法,主要结合了价值函数近似(Value Function Approximation) 与神经网络技术,并采用了目标网络和经历回放的方法进行网络的训练。

1.状态价值函数的估计方法

  1. 基于马尔科夫的方法
    让 actor 去跟环境做互动给 critic 看。然后,critic 就统计actor 看到不同的 state累积的奖励会有多大。但是实际上不可能把所有的state 通通都扫过,所以状态价值函数实际上是一个网络。对一个网路来说,即使遇到没见过的state,也可以想办法估测一个 value 的值。

    训练这个网络的时候, 它就是一个回归问题。网络的输出就是一个值,你希望在输入给定状态的时候,输出值跟状态价值函数的值越近越好,之后不断进行训练即可。

  2. 时序差分的方法
    在蒙特卡洛方法中,我们计算的是累积的奖励,而在时序查分中,在采取某一个状态得到的奖励时,就可以进行计算,公式如下:
    在这里插入图片描述
    在训练时,我们希望在t和r+1时状态得到的奖励的差和rt越接近越好,不断更新V的参数即可。

两种方法的区别:

马尔科夫的方法方差很大,因为计算的是累积奖励,所以过程中的奖励波动很大;时序差分的方法计算出的V可能不正确;时序差分的方法较常见

2.Q函数

Q函数即 state-action value function,Q函数的输入为状态和行为。Q函数有个需要注意的问题是当给定状态s时不一定会采取行为a,Q函数假设在状态s时强制采取某行为a。

Q函数有两种写法:

  1. 输入为状态和行为,输出为一个值
  2. 输入为状态,输出为多个值
    在这里插入图片描述

Q函数的训练过程如下:

  1. 初始化一个决策π,用这个决策和环境互动,学习Q函数

  2. 学习到Q函数后,用如下方法找到一个比之前决策要好的新决策
    在这里插入图片描述

  3. 不断重复上述过程直到达到最佳

3.DQN网络中的tips

(1)目标网络

在这里插入图片描述
在学习Q函数的过程中,等式两边的值其中一个是输出,一个是目标值。其中存在的一个问题是每一轮训练,等式两边的值都会跟着变化,这样的话在进行反向传播更新参数的过程中会把两个更新的值加在一起导致训练不稳定。解决办法是在训练时将其中一个值通常是等式右边的值固定住,只更新左边Q函数的值。

在实际实现时,会把左边的Q网络更新几次后,再用更新后的Q网络代替右边的Q网络,继续重新训练,直到训练结束。

(2)Exploration

在这里插入图片描述
第二个问题是探索-利用窘境(Exploration-Exploitation dilemma)。由于我们的决策都是基于Q函数的,这样做产生的一个问题时当我们仅仅采样到了一个行为而且这个行为是正的时候,在之后的过程中就会永远采取这个行为。解决这个问题有两个方法:

  1. Epsilon Greedy:设定一个概率使我们有很小的概率ε进行随机选择行为,ε会随着时间递减。
  2. Boltzmann Exploration:即根据Q函数做一个概率分布,某一个行为的Q函数越大代表采取这个行为的概率越高,但也会选取概率低的行为。由于Q函数的值有正有负,所以先做类似softmax的变换。

(3)Experience Replay(经验回放)

在这里插入图片描述
经验回放会构建一个回放缓存,里边收集采取某一个决策和环境做互动的数据,有了这个缓存后,训练Q函数时会从这个缓存中抽取一个批次的数据进行训练。

值得注意的是,当我们这么做时,这其实是一个off-policy过程,这样做有两个好处:

  1. 可以减少和环境互动的次数,节约时间
  2. 一个batch的数据分布比较稀疏,得到的效果会很好

4.DQN算法总结

在这里插入图片描述
总结了上述所有方法得到了最终的DQN网络,步骤如下:

  1. 初始化两个Q函数,其中一个为目标函数
  2. 给定状态s,基于贪心或玻尔兹曼机的方法选择行为a
  3. 得到奖励r并达到新的状态
  4. 将上述数据存入缓存
  5. 从缓存中取一个批次
  6. 根据目标函数和Q函数更新Q函数的参数
  7. 每隔几轮循环将目标函数重置为当前Q函数
  8. 重复2-7步直到训练结束

二、DQN进阶

1.Double DQN

在实际计算中,Q值往往是被高估了。

被高估的原因主要是在右边的函数时,我们选择了一个能使Q值达到最大的一个行为,再加上当前的奖励,所以很容易被高估

在这里插入图片描述
解决的方法是使用两个Q函数,第一个Q函数决定哪一个行为的 Q value 最大,对应了右边的函数,第二个Q函数在决定了选择的行为后计算得到。这样做的好处是即使其中一个Q函数高估了,但我们依然还有另一个函数来计算正常的值。

2.Dueling DQN

在这里插入图片描述

Dueling DQN相较于原来的 DQN。它唯一的差别是改了网络的架构。

  • DQN 就是直接输出 Q value 的值。
  • Dueling DQN,即上图。它不直接输出 Q value 的值,它分成两条路径,第一个路径算出一个常数,这个常数和输入有关系。第二个路径输出一个向量,它是每一个行为都有一个 value。然后再把这两个东西加起来,就得到你的 Q value。

这样的好处就是不需要采样所有的状态-行为数据,可以更高效的估计Q函数。具体是由于在更新参数的时候,我们更新的是向量A和常量V,假设只采样了一个数据,更新常量V的时候会将网络的其余部分也进行了更新,这样做会更高效。

为了避免学到的常量V永远是0,实际上会要给 A 一些限制,让 更新 A 其实比较麻烦,让网络倾向于会想要去用 V 来解问题。

3.Prioritized Experience Replay

在这里插入图片描述
Prioritized Experience Replay :在之前的采样过程中是均匀随机的进行采样,这样做不是最好的因为可能有一些数据比较重要。有一些数据之前采样的时候发现这些数据的 TD error 特别大(TD error 就是 network 的 output 跟 target 之间的差距),那么说明这些数据训练的不好,所以就应该让这些数据有更大的概率被采样到

实际上在做 prioritized experience replay 的时候,不仅会更改采样过程,还会因为更改了采样过程,更改了更新参数的方法

4.Balance between MC and TD

在这里插入图片描述
上文介绍了基于马尔科夫和时序差分方法的优劣,我们可以采用一些方法来对这两种方法进行平衡。具体方法是我们既不使用一个步骤的数据(时序差分),也不使用全部的数据(马尔科夫),而是选择采取N个步骤的数据进行计算。

这个方法是马尔科夫和时序差分的结合,它有着两种方法的好处,也有两种方法的坏处,所以要通过确定N的值来尽可能的让模型更好。

5.噪声网络(Noisy Net)

在这里插入图片描述
上文介绍过在行为上有添加噪声的方法,即贪心算法。

与之前不同,Noisy Net是在参数的上添加噪声。在每一个轮开始的时候,在Q函数的网络里的每一个参数上面加上一个高斯噪声得到了一个新的Q函数网络。在这一轮训练的过程中噪声不会变化。

在之前的贪心算法里,给定一个状态,采取的行为有一定概率是随机选定的(随机乱试),但在真实情况下应该采取能够获得最大Q函数的行为。所以,在Q函数上加噪声可以解决这个问题(有系统的试),即在某一个状态下采取的行为是固定的。

6.Distributional Q-function

在这里插入图片描述
我们计算的Q函数是累积奖励的期望值,对每一步骤的奖励进行统计会得到关于奖励的分布。由于不同的数据分布可能会获得相同的期望,所以我们得到的关于奖励的分布会丢失掉一些信息,导致不是很精确。

假设我们输入一个状态得到三种行为的Q值(左图),Distributional Q-function的做法是将每一个奖励的空间分成几个bin,,预测得到奖励处于哪个bin范围的概率。

7.rainbow

在这里插入图片描述
将以上所有方法应用起来叫做rainbow,上图为结果。

三、连续行为的Q-learning

以上的内容均是基于行为是一个离散变量讨论的,但很多情况下,行为的选取是一个连续值,那么应该采取以下方法:

  1. 方法一是采样法。采样出 N 个 可能的行为,一个一个带到 Q-function 里面,看谁最快。这个方法效率低,得到的结果也不精确。
  2. 方法二是把 a 当作是参数,然后要找一组 a 去最大化Q函数,用梯度下降的方式更新 a 的值直到找到一个 a 使Q函数最大。这样做运算量很大还有可能仅仅得到局部最大值。
  3. 方法三是重新设计网络使优化更加容易,一个优化后网络结构如下:
    在这里插入图片描述
  4. 方法四不使用Q-learning,使用Actor-critic方法(见下节)

在这里插入图片描述

四、Actor-critic

在Policy Gradient里,在计算G,即累积奖励时会发现G的值很不稳定,因为我们使用采样的方法在某一个状态采取某种行为,这样得到的累积奖励类似于随机变量,而且采样的次数也不是很多,这就造成了G不稳定的情况。
在这里插入图片描述

1.Actor-critic

在这里插入图片描述
根据Q函数和累积奖励G的定义可知,G函数的期望就是Q函数。在这里我们使用价值函数来代替基准值b,这样做就可以将actor和critic两种方法结合到一起,就是所说的最基本的Actor-critic方法。

2.Advantage Actor-critic(A2C)

采样最基本的Actor-critic方法存在一个问题是我们需要估计Q和V两个函数,得到的结果不准确的概率会变大。解决方法是我们用V的值来表示Q

在这里插入图片描述
这样做的好处是我们可以只估计一个V函数,当然这样会引入一个新的随机变量r,r是指采取某一个行为得到的奖励,相比之前的累积奖励G方差更小,所以得到的结果也可以接受,最终公式替换为:
在这里插入图片描述

3.实现A2C的技巧

在这里插入图片描述

  1. 共享参数:在实际计算中,我们需要估计两个网络,一个网络用来估计V函数,输出是一个常数,另一个网络用来估计决策,是一个行为的分布。这两个网络的输入都是状态 s,所以它们前面几层是可以共享的。例如处理一张图片可以共享前面的卷积层参数将图片抽象成一个向量。
  2. 对决策的输出分布进行一定的限制,确保这个分布的交叉熵不要太小,也就是希望不同的行为被采用的概率平均一点,这样才能在探索环境的过程中尝试更多的可能性。

4. Asynchronous(异步的) Advantage Actor-Critic

在这里插入图片描述
A3C 这个方法就是有一个主干网络和很多个 worker网络,主干网络包含决策的部分和V函数的部分,每一个 worker 运行之前都会先将主干网络的参数拷贝,之后并行进行训练,之后将得到的参数传递给主干网络进行参数更新。每个worker之间互不干扰。

5.Pathwise Derivative Policy Gradient

在这里插入图片描述

Pathwise Derivative Policy Gradient的思想是假设我们已经学习到了一个Q函数,接下来学习一个 actor,学习的目的是希望得到的 actor 能够让Q函数的值越大越好。思想和GAN的原理比较像,Q可以理解成判别器,a就是生成器。下图为该算法的计算流程:
在这里插入图片描述
上面的算法和Q-learning算法主要的区别在于:

  1. 之前通过Q函数来决定采取的行为,现在直接通过π来决定行为。
  2. 计算Target的时候之前需要采取让Q函数最大的a,现在将状态直接代入到目标决策π里即可。
  3. 之前只有需要学习Q函数,现在还需要额外学习决策π。学习π的目的是得到一个是Q函数越大越好的actor。
  4. 每个C步不仅仅替代Q函数,现在也要讲决策π进行替代。

6.Connection with GAN

从上面可以看出GAN 跟 Actor-Critic 的方法是非常类似的,所以在训练两种网络的方法可能互通,则需要未来进行探索了。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值