一、Q-Learning 概述
Q-Learning 可以参考 强化学习 Q-learning 算法举例
二、DQN
Q-Learning算法利用Q table来记录和检索 Q value,在状态空间较小的情况下可以适用,但是当状态空间很大的时候,利用Q table来维护数据就不太可行,所以就诞生了DQN算法(deep Q learning),用神经网络代替了Q table。将输入数据输入神经网络,神经网络会输出对应的Q value。
下图是DQN算法的结构图,输入数据仅仅只是当前的state,经过deep NN之后,输出是Q value。在很多时候,action的个数是固定的,所以神经网络的输出个数也是固定的,它的输出是n个数字,n表示的是action的维度,每个输出表示的是action对应的Q value。
下面是DQN的损失函数。损失函数是要最小化predicted Q value和target Q value之间的error。右边是predicted Q value,它就是神经网络的输出,表示的是状态为s,动作为a的时候神经网络的预测值。左边是target Q value,它是指当选择动作a时实际观测到的值。当agent选择一个动作,它会得到一个reward,然后我们可以它存下来,我们同样可以把every action after that的discounted reward存下来。它们两的和就是target Q value,是给一个动作实际获得的所有reward。
可以用predicted Q value去做回归问题,然后用和普通神经网络里一样的反向传播去训练损失函数,然后根据损失函数去训练神经网络使得predicted Q value尽量接近target Q value。
三、DQN 应用
下面是一张游戏的画面截图,左边的输入是游戏的状态state,经过一系列卷积层和RuLU函数,然后经过全连接层,最后在输出层得到一列Q值。每一个Q值对应一个agent可能采取的动作。
DQN算法虽然可以在多个不同的atari游戏中表现不错,但是它也有自己的缺点。
在复杂性方面,它能解决动作空间是较少且离散的问题,它不能解决连续动作空间的问题。
比如在自动驾驶时,方向盘的转动角度是连续的,这时候就不能用DQN,因为它的输出是有限的个数。当然也可以把连续的空间分割成很小的bins,然后学习这些bins的Q value,但是也存在一些问题,如将bin划分为多小,bin越小,计算越复杂等。
在灵活性方面,它不能学习随机的policy,因为在DQN中policy都是由Q 函数很确定地计算出来的。因为在DQN中,action都是由Q value决定,选择最大Q value对应的action。关于这两个问题,可以用Policy Gradient(PG)算法来解决。
四、DQN 几点把握
- DQN 是对 Q-Learning Table 的神经网络化
- Q-Learning Table是 特殊的 DQN
- DQN 是更一般化的 Q-Learning
- DQN 出现的目的是为了解决 Q-Learning 无法解决的维度爆炸问题