上一篇总结了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 |