Deep Q-Learning 核心思想介绍

Deep Q-Learning 核心思想介绍

27 天前

1. DQN主要思想

由于Q-Learning的在面对 Q(s_t,a_t) 值是连续的环境时,无法使用数组或表格来记录,由此引发三种问题的讨论:1)动作空间是离散的,状态空间是连续的;2)动作空间是连续的,状态空间是离散的;3)动作空间和状态空间都是连续的。如何解决子问题1即为DQN算法的核心思想。DQN是在Q-Learning基础上的一种改进,由Mnih等在2013年首次提出,因此DQN 本质也是一种TD算法。
DQN框架

首先回顾一下Q-Learning的更新规则:

Q(s,a) \leftarrow Q(s,a)+\alpha[r+\gamma \,\underset{a'}{\max}Q(s',a')-Q(s,a)] \tag 1

上述公式简单来说就是用单步时序差分学习,即TD(0),学习目标 r+\gamma \,\underset{a'}{\max}Q(s',a') 来增量式更新 Q(s,a) ,TD误差则是 r+\gamma \,\underset{a'}{\max}Q(s',a')-Q(s,a) 。DQN的第一个重要思想就是用一个神经网络来拟合 Q 值,记为 Q_\theta(s,a) 。由此,思考既然要使用神经网络来拟合 Q(s,a) ,则需要构造一个损失函数。对于一组经验 \{(s_i,a_i,r_i,s_i')\} ,我们很自然的可以用均方误差(MES)来构造 Q 网络的损失函数:

\theta^*=\arg\underset{\theta}\min\underbrace{\frac{1}{2N}\sum_{i=1}^{N}\begin{bmatrix}Q_\theta(s_i,a_i)-(r_i+\gamma \,\underset{a'}{\max}\,Q_\theta(s_i,a_i)) \end{bmatrix}^2}_{J(\theta)} \tag 2

其中 J(\theta) 为目标函数。其实我们可以看出通过神经网络拟合后, Q 值就变成了关于 \theta 的函数,因此得到最优的 \theta 也就是得到最优的 Q 。所以,整个的Q学习就转化为了求解上面的无约束最优化问题,最简单的方式就是梯度下降法(GD)。下面给出Vanilla DQN中更新 \theta 的动力学方程:

\theta_{t+1} \leftarrow \theta_{t}-\alpha \nabla_{\theta}J(\theta) \tag 3

其中, \alpha 是GD中的步长,在这里被称为学习率。

以上就是Vanilla DQN的基本思想 。由于DQN和Q-Learning相同,是异轨策略算法,即使用一个行动策略来进行探索,使用探索到的经验来更新(学习)目标策略, 由此引入第二个重要思想,经验回放(Experience Replay,ER)。

首先我们讨论下为什么要映入ER。对于同轨策略的算法,一个策略的更新只能使用自身采样后得到的经验,且每个经验只能使用一次,这在使用GD训练神经网络时主要存在两个问题:1)某些经验的最佳参数更新可能很大,但由于在更新中步长不能取太大,否则会陷入局部最优而找不到最优解,因此对于这类经验的参数需要多次更新,这在同轨策略中是不允许的;2)同轨策略算法的经验之间通常存在高度关联,这会引入较高的方差。

讨论清楚原因以后,我们来介绍究竟什么是ER技术。在编程中是这样来操作的,首先建立一个存放经验且内存大小固定的 回放缓冲区 ,也就是说当收集到的经验把内存填满后,需要清除一部分内存以放入新的经验。那丢弃的哪些经验呢?一般来说丢弃最旧的经验,因为随着智能体的不断学习,所经历的(s,a)二元组的分布会发生变化,较久的经验就不那么重要了。可以理解为智能体总是朝自身有利的方向在学习,回顾好的经验的概率更大,因此不太可能再去访问较旧的经验。 基于上述思想,ER较为简单的实现就是使用一个队列来进行经验回放 。有了带标签的数据以后,接下来要干的其实就是监督学习的事,即训练网络 Q_\theta 时,从回放缓冲区中采样(可以是随机的或规则的)若干条经验来进行训练。以上做法会带来两个优点:1)使样本满足独立假设,MDP过程本身是不满足独立假设的,非i.i.d.的样本对神经网络的训练影响很大;2)提高样本效率,一个样本可以使用多次。

至此,我们已经讨论了DQN要学习的目标以及经验回放技术,但对于用来采集训练数据的 行动策略(behavior policy) ,及用来改善智能体动作的目标策略还没有得到很好的定义。对于行动策略,我们有两种简单的手段来定义,一种是 ε-greedy 策略 ,另一种是 Boltzmann 策略 。ε-greedy通过采取随机动作的概率 ε 来取得探索和利用之间的trade-off,但这种简单的做法存在一定的弊端,即这样的探索没有使用任何以前学过的关于环境的知识。

而另一种探索方法,Boltzmann方法利用相对Q值来选择动作从而改进随机探索。简单来说就是对于某一状态 s ,其 Q 值大的动作被选择的概率更大, Q 值较小的动作几乎不会被考虑,这样做的效果就是使得算力沿着 Q 值最大化的路径聚焦在更有希望的动作上。从数学的形式化来说,Boltzmann策略首先通过softmax函数,构造了一个在状态 s 下所有动作 a Q 值的概率分布,通过温度参数 \tau 将softmax函数参数化,来调整所得概率分布的均匀性和集中性。

P_{boltzmann}(a|s)=\frac{e^{{Q_\theta}(s,a')/\tau}}{\displaystyle \sum_{a'\in A}e^{{Q_\theta}(s,a')/\tau}} \tag 4

较高的 \tau 使概率分布接近于均匀分布,较低的 \tau 会增加与最大Q值相对应的动作出现的概率, \tau=1 退化为softmax函数。因此,Boltzmann策略的优势在于降低了探索环境时的随机性。在实践中,我们可以在训练开始时给定一个较大的温度参数,这会使动作概率分布更均匀,即具有更好的探索动力。随着训练的进行,温度参数逐渐衰减,使智能体在训练时逐渐聚焦于优良的经验上。

在讨论完行动策略后,我们介绍DQN中 最后一个重要思想,即目标策略(target policy) 。根据定义,目标策略就是智能体通过强化学习得到的一个策略,智能体遵循该策略不断与环境交互获得奖励,最终能让回报最大化。由此思考,目标策略到底对应的是怎样的一种策略?或者说怎样把他形式化才能符合对它的定义?仔细思考其定义,其实不难想到它对应了Sutton和Barto在书里提到的最优策略。

最优策略有如下定义:对于 \forall s \in S ,有 v_{\pi'}(s) \ge v_{\pi}(s) ,则 \pi' \ge \pi 。至少存在一个策略优于或等于其他任何策略,即该策略为最优策略,记为 \pi^*

至此Vanilla DQN主要的核心思想及关键技术手段就介绍完毕,下面我们将从Vanilla DQN中存在的问题出发,讨论对DQN的几种改进。

2. 改进1-目标网络

在介绍完参数化Q网络、经验回放、行动策略和目标策略后, 我们介绍DQN中第一个改进思想,即目标网络 。详细介绍前,我们不妨再来回顾一下DQN中的TD误差:

r+\gamma \,\underset{a'}{\max}Q_\theta(s',a')-Q_\theta(s,a) \tag5

误差中的 Q_\theta(s',a') 实际是 Q 网络的一个输出,因此在更新网络参数时TD误差目标,即 Q 网络要逼近的目标 r+\gamma \,\underset{a'}{\max}Q_\theta(s',a') 也会在不断地变化,这就会造成神经网络训练时候的不稳定。举个例子,对于某一状态-动作二元组 (s,a) ,计算一次 Q_\theta(s,a) 后立马更新参数 \theta' ,造成的结果就是等下一次还遇到 (s,a) 时,更新的目标就不再是之前的了,而由新参数下的 Q_{\theta'}(s,a) 来决定,这种“移动目标”不利于训练的稳定性。既然如此,是否可以把TD误差目标中的 Q_\theta(s',a') 先固定,等一段时间步后再更新。为了实现这个思想,则需要映入一个新得到网络,即目标网络,其作用就是为了阻止目标的移动。因此,现在我们有了两个 Q 网络:

(1)原本的训练网络 Q_\theta(s,a) ,用于计算损失函数中 Q_\theta(s,a) 项。

(2)目标网络 Q_{\tilde\theta}(s,a) ,区别在于这里的参数是 \tilde{\theta} ,用于计算损失函数中的 r+\gamma \,\underset{a'}{\max}Q_{\tilde\theta}(s',a') 项。

目标网络要做的其实就是让自己的参数 \tilde{\theta} 保持为训练网络参数 \theta 的一个滞后版本。换句话说,目标网络的参数 \tilde{\theta} 不会每一步都更新,训练网络的参数 \theta 在每一步都会更新,而目标网络的参数每隔 C 步会与训练网络同步一次。对比Vanilla DQN的更新更新动力学方程,给出 基于目标网络改进后的DQN动力学方程 的形式化描述:

Q_\theta(s,a)=r+\gamma \,\underset{a'}{\max}Q_{\tilde{\theta}}(s',a')-Q_\theta(s,a) \tag 6

以上就是基于目标网络思想对于DQN的改进。这种改进也会引入一个新问题,即目标网络会减慢训练的速度,需要通过调整超参数来控制 \tilde{\theta} 的变化速度,以平衡训练稳定性和训练速度。

3. 改进2-Double DQN

接下来我们介绍DQN的另一种改进,Double DQN,它解决了Q值高估(overestimation)的问题 。首先来看看什么是Q值的过高估计。回顾在目标网络改进下的TD误差的目标: r+\gamma \,\underset{a'}{\max}Q_{\tilde\theta}(s',a') ,我们还可以换种形式来表达:

r+\gamma \,\underset{a'}{\max}Q_{\tilde\theta}(s',\arg\underset{a'}{\max}Q_{\tilde\theta}(s',a')) \tag 7

上面的式子换句话说做了如下操作:1)首先选取状态 s' 下的最优动作 a^*=\arg\underset{a'}{\max}Q_{\tilde\theta}(s',a') 2)接着计算该动作下对应的状态-动作价值 Q_{\tilde\theta}(s',a^*) 。以上可以看出在计算TD误差目标时,两个操作都是用的同一个网络。由于神经网络得到估计值 Q_{\tilde\theta}(s',a') 的过程本身会包含正向或者负向的误差,并且在max(·)算子的作用下,正向误差会不断累积。例如,考虑一种简单的情况:状态 s' 下的 Q(s',a_i)=0 \forall a_i \in A ,即所该状态下的所有 Q 真值都为0,此时正确的更新目标应该是 r+0=r 。但由于神经网络存在的正向误差,即 \exists a' \in A ,有 Q(s',a')>0 ,此时就出现了过高估计 r+\gamma \max Q > r+0 。同理,我们拿这个得到的过高估计值作为下一次更新的参数,这样的过估计误差就会逐步累积传播,这样的正误差累积在动作空间较大的任务中会造成严重的后果。

为了解决overestimation问题,我们可以尝试用两套不同参数的Q网络来独立训练 Q_{\tilde\theta}(s',a') ,具体做法可以有如下形式化表述:

Q_{\tilde\theta}(s',\arg\underset{a'}{\max}Q_{\theta}(s',a')) \tag 8

上面式子的完成了两个操作:1)用 Q_{\theta} 来输出价值最大的动作;2)用 Q_{\tilde\theta} 来计算该动作的价值。

回顾之前基于目标网络对DQN的改进,其中就存在了两个网络:训练网络和目标网络。 如果 \theta \tilde\theta 的同步间隔足够大,它们就可视为两个不同的网络,恰好可以用训练网络 Q_{\theta} 来输出价值最大的动作,用目标网络 Q_{\tilde\theta} 来计算动作价值,这便是Double DQN的主要思想 。最后我们把改进1和改进2的形式化表述做一个比较:

DQN:r+\gamma \,\underset{a'}{\max}Q_{\tilde\theta}(s',\arg\underset{a'}{\max}Q_{\tilde\theta}(s',a')) \tag 9

Double\ DQN:r+\gamma \,\underset{a'}{\max}Q_{\tilde\theta}(s',\arg\underset{a'}{\max}Q_{\theta}(s',a')) \tag {10}

4. 改进3-优先级经验回放PER

在介绍Vanilla DQN中的经验回放技术时,我们提到“从回放缓冲区中采样(可以是随机的或规则的)若干条经验来进行训练”。那么是否存在一些启发式的规则能够让采样经验的操作变得更加高效,使智能体学习效率更高?Schaul等人在2015年映入了 优先级经验回放内存 的概率,其 主要思想可以概括为:回放缓冲区中的一些经验比其他经验信息量更大。如果我们训练智能体时更加频繁地使用信息量更大的经验,那么这个智能体可能学习得更快

优先级经验回放其实就是一种直观的思想,相比于均匀的从回放缓冲区中采样经验,更好的方法是使智能体优先学习某些经验,但这带来了两个问题:

  • 如何自动地为每个经验分配优先级
  • 如何使用这些优先级有效地从回放内存中采样

对于第一个问题,一个直接且自然的方法就是计算 Q_\theta(s,a) 与TD误差目标 r+\gamma \,\underset{a'}{\max}Q_\theta(s',a') 之间的差距,数值差距越大说明智能体当前的估计与真实期望差距越大,智能体更应该修正 Q_\theta(s,a) 。DQN中的每个经验都有可能出现TD误差,无需太多的计算或实现。但还值得注意的是,还有一个小问题就是对于初始状态如何给不同经验分配优先级。一般我们的做法是采样 乐观估计 的思想,换句话说就是把优先级得分赋值一个较大的常数,以鼓励对每个经验至少进行一次采样,来解决这个问题。

现在来看第二个问题,Schaul等人采用得分来对优先级进行量化,主要有两种手段:基于排名和机按比例安排优先级。这里我们只对优先级采样方法的形式化表述进行介绍。用 w_i 表示经验 i 的TD误差, \epsilon 是一个小的正数(也就是每个经验的初值), \eta \in [0, \infty) ,每个样本的优先级可形式化为 |w_i|+\epsilon ,每个样本根据优先级采样的概率可形式化为:

P(i)=\frac{(|w_i|+\epsilon)^\eta}{\displaystyle \sum_j(|w_i|+\epsilon)^\eta} \tag{11}

\eta 决定了每个样本优先级采样概率的离散程度。 \eta 越大,优先级得分的差异会使得它们采样概率的离散程度增大。当 \eta=0 时,优先级采样退化为均匀采样。

至此,DQN的及改进的主要思想和关键技术手段就介绍完毕。

5. 局限性

下面说一说DQN的局限性。DQN仅适用于离散动作空间,在学习连续状态空间时存在问题,因为在学习Q函数的时候用到了max(·)算子。因此,在学习连续状态空间时,需要使用其他强化学习算法,例如Actor-Critic模型、DDPG、PPO等。

参考文献:

[1] 深度强化学习:基于Python的理论及实践,Laura Graesser, Wah Loon Keng著, 许静等译

[2] 动手学强化学习,张伟楠,沈健,俞勇 著

[3] 强化学习(第2版)俞勇译

编辑于 2023-05-24 16:03 ・IP 属地云南