强化学习总结(2)———DQN

上一篇总结了Q-Learning算法 https://blog.csdn.net/qq_37553152/article/details/88830319

Q-Learning算法对于一些小问题非常实用,但是遇到复杂的问题,状态数变多,就会遇到效率低、受数据关联性影响等问题。

于是DQN出现了,它在Q-Learning算法上做了修改,用神经网络代替了Q-learning中的Q表,其输入为状态,输出每个动作的Q值。

DQN算法之所以著名,其中起到重要作用的有两点,一是使用深度卷积神经网络逼近值函数,网络结构为3个卷积层2个全连接层。二是利用了经验回放训练强化学习模型,在训练神经网络时,假设训练数据是独立同分布的,但是强化学习数据采集过程中的数据是具有关联性的,利用这些时序关联的数据训练时,神经网络无法稳定,利用经验回放打破了数据间的关联性。在强化学习的过程中,智能体将数据保存到一个数据库中,再利用均匀随机采样的方法从数据库中抽取数据,然后利用抽取到的数据训练神经网络。

DQN设置了目标网络来单独处理时间差分算法中的TD误差,目标网络的作用与经验回放一致,都是为了打破训练数据之间的时序关联性,在计算TD目标计算时使用一个参数θ,计算并更新动作值函数逼近的网络使用另一个参数θ,在训练过程中,动作值函数逼近网络的参数θ每一步更新一次,TD目标计算网络的参数θ’每个固定步数更新一次,值函数更新变为如下形式:

 

DQN算法流程如下图。

总体来说,当前值网络关注于局部的学习,目标值网络在于全局的把控。

DQN算法步骤如下。

  1、初始化replay memory D 容量为N

  2、用一个深度神经网络作为Q值网络,初始化权重参数

  3、设定游戏片段总数M

  4、初始化网络输入,并且计算网络输出

  5、以概率ϵ随机选择动作at或者通过网络输出的Q(max)值选择动作at

  6、得到执行at后的奖励rt和下一个网络的输入

  7、根据当前的值计算下一时刻网络的输出

  8、将四个参数作为此刻的状态一起存入到D中(D中存放着N个时刻的状态)

  9、随机从D中取出minibatch个状态 (随即采样)

  10、计算每一个状态的目标值(通过执行at后的reward来更新Q值作为目标值)

  11、通过SGD更新weight

猜你喜欢

转载自blog.csdn.net/qq_37553152/article/details/90812273