强化学习(八)-- 深度强化学习

之前我们的章节中介绍的是值函数可以表示为奇函数和参数线性组合的方式逼近,但是这类函数的拟合能力是有限的,对于值函数为非线性的情况下拟合能力就不足了。本章要讲解的就是在非线性环境下如何做到值函数逼近。当时我们拟合非线性的值函数,肯定是考虑深度学习的方法,这也就是为什么会有深度强化学习一说啦。

DQN

DQN它是一种深度强化学习方法,利用深度卷积神经网络直接学习值函数,从输入中高效提取描述,来近似最有动作-状态函数,从而习得成功策略。
DQN算法是建立在传统强化学习Q-learning的基础上,Q-learning是离线策略时序差分法,使用σ\sigma贪心策略产生数据,利用数据对贪心策略进行评估和改进。它利用查表法进行值函数(Q值)进行预测,迭代更新目标时序差分目标r+γmaxQ(s,a)r+\gamma max Q(s',a').DQN算法在此基础上进行了如下的修改。

1.DQN使用深度神经网络从原始数据中做特征提取,近似值函数。
因为状态空间很大而且连续,无法用查表法求解每个状态的值函数,因此可以考虑使用深度神经网络来表示值函数(这里值的是行为值函数),参数为每层网络权重以及偏置。用θ\theta表示。对值函数进行更新等价于对参数θ\theta的更新。参数确定啦,就对应转态值函数便可以求解。

2.DQN利用经历回放对强化学习进行训练

使用非线性逼近器近似行为值函数,学习结果并不是特别稳定甚至出现较大的偏移,不稳定的原因是

(1)利用数据训练神经网络前提假设是数据之间独立分布,而强化学习过程,数据是智能体通过和环境的交互获得,相邻的数据之间是高度相关。当使用深度网络优化的时候,存在严重的误差。
(2) 由于神经网络对于值函数的估计极为敏感。如果价值函数出现波动,就会导致策略发生很大的偏差。
(3)由于值函数的范围事先很难准确的估计。如果在学习中突然获得远大于历史的值的时候就会存在比较大的损失。

经历回放

经历回放在强化学习的计算中是这样实现的,智能体更环境不断交互,将在环境中学习积累经验存储到记忆中。存储的时候,按照时间步进行存储 <s1,a1,r1,s2><s_1,a_1,r_1,s_2>,每次对神经网络的参数进行更新,利用均匀随机的方法从数据库中抽取数据,利用通过抽取的数据对神经网络进行训练。
因为经历回放的样本是随机抽取的,每次用于训练的样本不再是连续相关的数据,所以经历回放打破数据之间的关联,可以领神经网络训练收敛且稳定。

DQN设置单独的目标网络来处理TD误差
与Q-learning方法类似,利用神经网络对值函数进行更新,更新的神经网络参数θ\theta,采用的梯度下降更新公式如下

θt+1=θt+α(r+γmaxQ(s,a;θt)Q(s,a;θt))Q(s,a;θt)\theta_{t+1}=\theta_{t}+\alpha(r+\gamma max Q(s',a';\theta_t)-Q(s,a;\theta_t)) \nabla Q(s,a;\theta_{t})

在DQN之前,利用神经网络逼近值函数,需要行为值函数与目标值r+γmaxQ(s,a)r+\gamma max Q(s',a')用的是同一张网络,这样导致数据之间存在关联性,使训练网络不稳定。

为了解决上述问题,DQN算法在运行过程中引入了两个神经网络,一个是网络固定参数专门产生TD目标,称为TD网络。另一个网络专门评估策略更新参数,逼近值函数,称为动作值函数逼近网络。两个网络参数不一致,专门用于动作值函数逼近的网络参数,每一步都更新。用于TD目标的网络参数每隔固定步数更新一次,期间保持不变。

因此值函数更新变为

θt+1=θt+α(r+γmaxQ(s,a;θt)Q(s,a;θt))Q(s,a;θt)\theta_{t+1}=\theta_{t}+\alpha(r+\gamma max Q(s',a';\theta_{t}^{-}))-Q(s,a;\theta_t)) \nabla Q(s,a;\theta_{t})

DOUBLE DQN方法

Q-learning和DQN方法都会普遍过高的估计行为值函数,存在过优化的问题。值函数逼近过程中都有最大化的操作.
Q-learning基于基函数更新公式

θt+1=θt+α(Rt+1+γmaxQ(st+1,a;θt)Q(st,at;θt))θtQ(st,at,θt)\theta_{t+1}=\theta_{t}+\alpha(R_{t+1}+\gamma max Q(s_{t+1},a;\theta_t)-Q(s_t,a_t;\theta_t)) \nabla_{\theta_t}Q(s_t,a_t,\theta_t)

DQN更新公式

θt+1=θt+α(Rt+1+γmaxQ(st+1,a;θt)Q(st,at;θt))θtQ(st,at,θt)\theta_{t+1}=\theta_{t}+\alpha(R_{t+1}+\gamma max Q(s_{t+1},a;\theta_{t}^{-})-Q(s_t,a_t;\theta_t)) \nabla_{\theta_t}Q(s_t,a_t,\theta_t)

从更新公式中我们就能知道,值函数的更新公式中都有最大化操作,通过同一个最大化操作,选择一个行为以及对此行为进行评估。整体上使的估计比真实的值要大。并且误差随着行为个数增加而增加。
为了解决这个问题,我们来讲一下DOUBLE DQN方法。将行为选择和行为评估采用不同的值函数实现。
以DQN为例,行为选择指的是,在求TD目标的时候,首先选择一个动作aa^{*},满足

a=argmaxQ(st+1,a;θt)a^{*}=arg max Q(s_{t+1},a;\theta_{t}^{-})

行为评估指的是利用aa^{*}的行为值函数构建TD目标。

YtDQN=Rt+1+γmaxQ(st+1,a;θt))Y^{DQN}_{t}=R_{t+1}+\gamma max Q(s_{t+1},a;\theta_{t}^{-}))

可见传统的DQN中,选择行为和评估行为都是统一一个网络参数θt\theta_{t}^{-},以及同一个值函数maxQ(st+1,a;θt))max Q(s_{t+1},a;\theta_{t}^{-}))

DOUBLE DQN分别采用不同的值函数进行实现动作选择和评估,传统的DQN架构自身提供两个网络,主网络和目标网络,因此只用主网络选择动作,再用目标网络进行评估。不用引入额外的网络。

首先使用主网络选择动作。

a=argmaxQ(st+1,a;θt)a^{*}=arg max Q(s_{t+1},a;\theta_{t})

然后使用目标网络找到这个动作对应的Q值,构成TD目标

YtDQN=Rt+1+γmaxQ(st+1,a;θt);θt)Y^{DQN}_{t}=R_{t+1}+\gamma max Q(s_{t+1},a;\theta_{t});\theta_{t}^{-})

这个Q值在目标网络不一定是最大的,因此避免了过大估计。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×