前面我们有一篇文章介绍了 q learning,
也用 Deep Q Network 做了一个小游戏,
但是还没有详细的讲DQN的理论,今天我们就来看一下它的概念。
当状态空间比较小的情况下用 q learning 还是可以的,但是在复杂的情况下,例如一个视频游戏,它的状态空间非常大,如果迭代地计算每一个 q 值是非常耗费时间耗费资源的。
这个时候我们就想不是直接的用迭代的方式去计算扣只,而是找到一个最优的 q 函数。
找这个最优的q函数的方法就是用神经网络。
我们用一个深度神经网络来为每一组状态行为估计它们的 q 值,进而近似的估计出最优的 q 函数。
将 Q learning 和深度神经网络相结合就是 DQN
例如我们有一个深度神经网络,
它的输入是给定环境下的状态,
它的输出是这个状态时可以采取的每个行动的 q 值。
这个网络的目标是估计出最优Q函数,
而且这个函数还要满足 bellman equation ,
网络的损失函数是,比较输出的 q 值和方程右边的目标 q 值的差距,
然后用优化算法使这个损失越来越小。
在 q learning 中是用 bellman equation 来计算和更新Q的,
在神经网络中也是用 bellman equation 估计 q 值来找到最佳Q函数,
很多 DQN 只是一些卷积层后面跟着一个全连接层,全连接层的输出就是每个行为的q值。
例如,如果有4个行为,那么最后一层就会有4个节点,每个节点代表1个行为,这个节点的输出值就是这个行为相应的q值。
不过在输出层是没有激活函数的,因为我们想要的是没有经过变换的q值
学习资料:
https://www.youtube.com/watch?v=wrBUkpiRvCA&t=554s
https://medium.com/@awjuliani/simple-reinforcement-learning-with-tensorflow-part-4-deep-q-networks-and-beyond-8438a3e2b8df
https://medium.com/@jonathan_hui/rl-dqn-deep-q-network-e207751f7ae4
网友评论