本文主要讲解有关 Deep Q Network(DQN)算法的相关内容。
1. DQN 的基本思想
传统的 Q-Learning 算法当 Q 表过大时不仅难以存储而且难以搜索,并且当状态是连续的话,用 Q 表存储是不现实的,这时可以用一个函数来拟合 Q 表,所以提出了神经网络和 Q-Learning 相融合的 Deep Q-Learning(DQN)算法,其中神经网络用来代替 Q 表,以获得状态和动作对应的 Q 值。
在 DQN 中将状态和动作作为神经网络的输入值,并得到相应的输出——对应的 Q 值 。也可以只输入状态,输出所有的动作值,然后挑选值最大的动作作为下一步要采取的动作。
在对 NN 进行训练时,需要设置损失函数,但是在该问题中又是没有标签数据的。可以将损失函数设为:
$$
L(\theta)=E[(Q_{target}-Q_{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 算法流程
- 本文作者: 俎志昂
- 本文链接: zuzhiang.cn/2019/10/10/DQN/
- 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!