深度强化学习系列 第一讲 DQN

前言:深度强化学习系列是以强化学习入门为基础的,所以在学习本系列之前,请先学习强化学习入门第一讲到第五讲。另外,深度强化学习用到了深度学习(deep learning),本讲默认读者已经对深度学习有所了解。

强化学习逐渐引起公众的注意要归功于谷歌DeepMind公司。DeepMind公司最初是由Demis Hassabis, Shane Legg和Mustafa Suleyman于2010年创立的。创始人Hassabis有三重身份:游戏开发者,神经科学家以及人工智能创业者。Hassabis的游戏开发者的身份使人不难理解DeepMind在nature上发表的第一篇论文是以雅达利(atari)游戏为背景的。同时,Hassabis又是国际象棋高手,对棋类很擅长,挑战完简单地atari游戏后再挑战公认的极其难的围棋游戏也很自然,于是就有了AlphaGo和李世石的2016之战和nature上的第二篇论文。一战成名之后,深度强化学习技术再次博得人的眼球。当然,DeepMind的成功离不开近几年取得突破进展的深度学习技术。本讲主要讲解DQN,也就是DeepMind发表在《Nature》上的第一篇论文。题目是:《Human-level control through deep reinforcement learning》

平心而论,这篇论文只有两个创新点,算法的大体框架是传统强化学习中的Q-learning。该算法,我们已经在强化学习入门第四讲时间差分方法中讲了。为了讲解方便,在这里,我们重复讲一遍。

Q-learning 方法是异策略时间差分方法。其伪代码如图1.1所示

图1.1 Q-learning方法伪代码

掌握Q-learning方法一定要弄清楚两个概念,异策略,时间差分。以及这另个概念在Q-learning算法中如何体现的。下面我给大家一一道来。

所谓异策略,是指行动策略(产生数据的策略)和要评估的策略不是一个策略。在图1.1 Q-learning 伪代码中,行动策略(产生数据的策略)是第5行的\varepsilon -greedy策略,而要评估和改进的策略是第6行的贪婪策略(每个状态取值函数最大的那个动作)。

所谓时间差分方法,是指利用时间差分目标来更新当前行为值函数。在图1.1Q-learning伪代码中,时间差分目标为r_t+\gamma\max_aQ\left(s_{t+1},a\right)

Q-learning算法是1989年Watkins提出来的,2015年nature论文所提出的DQN就是在Q-learning的基础上修改得到的。

DQN对Q-learning的修改主要体现在以下三个方面:

DQN利用深度卷积神经网络逼近值函数

DQN利用了经验回放对强化学习的学习过程进行训练

DQN独立设置了目标网络来单独处理时间差分算法中的TD偏差。

下面,我们一一介绍:

(1)DQN利用卷积神经网络逼近行为值函数

图2 DQN行为值函数逼近网络

如图2为DQN的行为值函数逼近网络。值函数的逼近,我在强化学习入门第五讲已经介绍过了。只是,第五讲介绍的是线性逼近,即值函数由一组基函数和一组与之对应的参数相乘得到。值函数是参数的线性函数。这里值函数利用神经网络进行逼近,属于非线性逼近。虽然逼近方法不同,但都是参数逼近。请记住,这里的值函数对应着一组参数,在神经网络里参数是每层网络的权重,我们用\theta表示。用公式表示的话值函数为:Q\left(s,a;\theta\right),注意,我们这时候对值函数进行更新时其实更新的是参数\theta,当网络结构确定时,\theta就代表值函数。DQN所用的网络结构是3个卷积层+两个全连接层。

利用神经网络逼近值函数的做法在强化学习领域早就存在了,可以追溯到上个世界90年代。那时,学者们发现利用神经网络,尤其是深度神经网络去逼近值函数这件事不太靠谱,因为常常出现不稳定不收敛的情况,所以这个方向一直没有突破,直到DeepMind出现。

我们可能会问,DeepMind到底做了什么?

别忘了DeepMind的创始人Hassabis是神经科学的博士。2005年Hassabis就想如何利用人的学习过程提升游戏的智能水平,所以他去伦敦大学开始读认知神经科学的博士,很快他便做出了很突出的成就,在《science》,《nature》等顶级期刊狂发论文。他的研究方向是海马体。为什么选海马体?什么是海马体?

海马体是人大脑中主要负责记忆和学习的部分,Hassabis学认知神经科学的目的是为了提升机器的智能选海马体作为研究方向很自然。

现在我们就可以回答,DeepMind到底做了什么?

他们将认识神经科学的成果应用到了深度神经网络的训练之中!

(2)DQN利用经验回放对强化学习过程进行训练

人在睡觉的时候,海马体会把一天的记忆重放给大脑皮层。利用这个启发机制,DeepMind团队的研究人员构造了一种神经网络的训练方法:经验回放。

通过经验回放为什么可以令神经网络的训练收敛且稳定?

原因是:对神经网络进行训练时,存在的假设是独立同分布。而通过强化学习采集到的数据之间存在着关联性,利用这些数据进行顺序训练,神经网络当然不稳定。经验回放可以打破数据间的关联。具体是这么做的:


图3 经验回放

如图3,在强化学习过程中,智能体将数据存储到一个数据库中,然后利用均匀随机采样的方法从数据库中抽取数据,然后利用抽取的数据对神经网络进行训练。

这种经验回放的技巧可以打破数据之间的关联性,该技巧在2013年的NIPS已经发布了。2015年的nature论文进一步提出了目标网络的概念进一步地减小数据间的关联性。

(3)DQN设置了目标网络来单独处理时间差分算法中的TD偏差。

与表格型的Q-learning算法,如图1.1所不同的是,利用神经网络对值函数进行逼近时,值函数的更新步更新的是参数\theta,更新方法是梯度下降法。因此图1.1中第6行值函数更新实际上变成了监督学习的一次更新过程,其梯度下降法为:

\[\theta_{t+1}=\theta_t+\alpha\left[r+\gamma\max_{a'}Q\left(s',a';\theta\right)-Q\left(s,a;\theta\right)\right]\nabla Q\left(s,a;\theta\right)\]

r+\gamma\max_{a'}Q\left(s',a';\theta\right)为TD目标,在计算\[\max_{a'}Q\left(s',a';\theta\right)\]值时用到的网络参数为\theta

图4 动作值函数逼近网络

我们称计算TD目标时所用的网络为TD网络。以往的神经网络逼近值函数时,计算TD目标的动作值函数所用的网络参数\theta,与梯度计算中要逼近的值函数所用的网络参数相同,这样就容易使得数据间存在关联性,训练不稳定。为了解决这个问题,DeepMind提出计算TD目标的网络表示为\theta^-;计算值函数逼近的网络表示为\theta;用于动作值函数逼近的网络每一步都更新,而用于计算TD目标的网络每个固定的步数更新一次。

因此值函数的更新变为:

\[\theta_{t+1}=\theta_t+\alpha\left[r+\gamma\max_{a'}Q\left(s',a';\theta^-\right)-Q\left(s,a;\theta\right)\right]\nabla Q\left(s,a;\theta\right)\]

最后我们给出DQN的伪代码:

图5 DQN伪代码

第[1]行,初始化回放记忆D,可容纳的数据条数为N

第[2]行,利用随机权值\theta来初始化动作-行为值函数Q

第[3]行,令\theta^-=\theta初始化用来计算TD目标的动作行为值Q

第[4]行,循环每次事件

第[5]行,初始化事件的第一个状态s1 ,预处理得到状态对应的特征输入

第[6]行,循环每个事件的每一步

第[7]行,利用概率\varepsilon选一个随机动作a_t

第[8]行,若果小概率事件没发生,则用贪婪策略选择当前值函数最大的那个动作\[a_t=arg\max_aQ\left(\phi\left(s_t\right),a;\theta\right)\]。注意,这里选最大动作时用到的值函数网络与逼近值函数所用的网络是一个网络,都对应着\theta

注意:第[7]行和第[8]行是行动策略,即\varepsilon -greedy策略。

第[9]行,在仿真器中执行动作a_t,观测回报r_t以及图像x_{t+1}.

第[10]行,设置s_{t+1}=s_t,a_t,x_{t+1},预处理\phi_{t+1}=\phi\left(s_{t+1}\right)

第[11]行,将转换\left(\phi_t,a_t,r_t,\phi_{t+1}\right)储存在回放记忆D中

第[12]行,从回放记忆D中均匀随机采样一个转换样本数据,用\left(\phi_j,a_j,r_j,\phi_{j+1}\right)来表示。

第[13]行,判断是否是一个事件的终止状态,若是终止状态则TD目标为r_j,否则利用TD目标网络\theta^-计算TD目标r+\gamma\max_{a'}Q\left(s',a';\theta^-\right)

第[14]行,执行一次梯度下降算法\[\varDelta\theta =\alpha\left[r+\gamma\max_{a'}Q\left(s',a';\theta^-\right)-Q\left(s,a;\theta\right)\right]\nabla Q\left(s,a;\theta\right)\].第[15]行,更新动作值函数逼近的网络参数\theta =\theta +\varDelta\theta

第[16]行,每隔C步更新一次TD目标网络权值即令\theta^-=\theta

第[17]行,结束每次事件内循环

第[18]行,结束事件间的循环

我们可以看到,在第[12]行,利用了经验回放;在[13]行利用了独立的目标网络\theta^-;第[15]行,更新动作值函数逼近网络参数;第[17]行更新目标网络参数.

猜你喜欢

转载自blog.csdn.net/qq_41352018/article/details/80274241