强化学习(3):Deep Q Network(DQN)算法

最近自己会把自己个人博客中的文章陆陆续续的复制到CSDN上来,欢迎大家关注我的 个人博客,以及我的github。

本文主要讲解有关 Deep Q Network(DQN)算法的相关内容。

1. DQN 的基本思想

传统的 Q-Learning 算法当 Q 表过大时不仅难以存储而且难以搜索,并且当状态是连续的话,用 Q 表存储是不现实的,这时可以用一个函数来拟合 Q 表,所以提出了神经网络和 Q-Learning 相融合的 Deep Q-Learning(DQN)算法,其中神经网络用来代替 Q 表,以获得状态和动作对应的 Q 值。

在 DQN 中将状态和动作作为神经网络的输入值,并得到相应的输出——对应的 Q 值 。也可以只输入状态,输出所有的动作值,然后挑选值最大的动作作为下一步要采取的动作。

在对 NN 进行训练时,需要设置损失函数,但是在该问题中又是没有标签数据的。可以将损失函数设为:
L ( θ ) = E [ ( Q _ t a r g e t − Q _ e v a l u e ) 2 ] L(\theta)=E[(Q\_{target}-Q\_{evalue})^2] L(θ)=E[(Q_targetQ_evalue)2]
Q-target 和 Q-eval 就是 Q-Learning 算法中的对应值。该损失函数和 Q-Learning 算法中 Q 表更新公式的含义相同,都是用 Q-eval 逼近 Q-target。

2. DQN 的两大神器

(1)Experience replay(经验回放):NN 的训练样本独立,而 RL 中的前后状态相关,所以需要做一点改动。因为 Q-Learning 是一个离线学习算法,所以在每次 DQN 更新时,可以随机选取一些过去的状态来进行学习。这种方式打乱了状态之间的相关性,可以使神经网络更有效率。

(2)Fixed Q-target(固定 Q-目标):因为网络会不断的更新,所以相同 s 和 a 下的 Q-target 和 Q-eval 的值是不固定的,这样训练起来比较困难。所以可以将 Q-target 固定住,这样目标问题就变成了一个回归问题:用 Q-eval 去逼近 Q-target。

具体实现时,在 DQN 中使用两个结构相同但是参数不同的 NN,预测 Q-eval 的估值网络具有最新的参数,而预测 Q-target 的目标网络的参数则是之前的,隔一段时间才会更新参数(将估值网络的参数赋给目标网络)。 这种方式降低了 Q-target 和 Q-eval 之间的相关性。

3. DQN 算法流程

强化学习(3):Deep Q Network(DQN)算法_第1张图片

你可能感兴趣的:(强化学习)