基于Q-function的强化学习方法的总结

本篇博客只讨论reinforcement learning方法中Q-function的方法,包括Q-learning,NIPS DQN和Nature DQN算法上面的区别,尝试探讨为什么这些改进会对效果有很大的提升。



基于Q-funtion的强化学习方法主要有五个要素,agent、environment、action、observation(state)、reward,下图是它的关系图,Agent从环境中得到observation,根据得到的observation去执行action,环境会给一个回报值(reward),并且返回下一个observation。
在Q-learning中,是怎么根据observation选择action的呢?原来Q-learning中存在一个Q-table,用来存储state和action对应的Q值, Q值反映的是环境的回报,Q-table会往回报高的方向进行更新。Q-table类似于下图

当state、action维度增大时。Q-table的维度会变得特别的大,难以维护,查找的时间消耗也会变得特别的大,所以就有了NIPS的DQN,它的创新点在于用CNN做一个非线性函数,用来拟合state、action和Q值之间的关系。并且提出了experience replay来降低数据之间的关联性。
experience replay 的具体做法是经历一个state的时候把state、对应的action、reward存到一个固定长度buffer里面,后面在进行训练更新网络的时候,输入的数据就是从buffer里面随机选择的。
但是NIPS的DQN同时也存在一个问题,在于它的Loss。它的Loss是通过同一个网络产生Q-target和Q-eval的差作为Loss的,两者同时变,网络收敛比较困难。



这里想强调一下的是r(t)是在状态s(t)下执行action获得的reward(和s(t)无关),所以写成r(t)。整个Loss的解释就是 当前状态s(t)下的Q值需要往“执行当前action获得的reward + 下一个状态可能获得的最大的Q值”的方向变化。后来Nature的DQN为了解决收敛问题,提出 使用一个延迟网络target network用来计算下一个状态可能获得的最大的Q值



标红色的是target Network的网络参数。
Nature的DQN还是存在一个问题,就是overestimate的问题。 每次计算Loss的时候会计算连续N次的均值,如果是每次取完了最大值max然后取均值后更新网络会出现overestimate的问题。


所以后来的Double DQN使用eval Network来计算a值,这样就 去掉了max a’这个操作,解决了overestimate的问题.Double DQN的Loss为:

参考论文:
[1]Mnih, V., Kavukcuoglu, K., Silver, D., Graves, A., Antonoglou, I., Wierstra, D., & Riedmiller, M. (2013). Playing atari with deep reinforcement learning. arXiv preprint arXiv:1312.5602.
[2]Mnih, V., Kavukcuoglu, K., Silver, D., Rusu, A. A., Veness, J., Bellemare, M. G., … & Petersen, S. (2015). Human-level control through deep reinforcement learning. Nature, 518(7540), 529-533.
[3]Van Hasselt, H., Guez, A., & Silver, D. (2016, February). Deep Reinforcement Learning with Double Q-Learning. In AAAI (pp. 2094-2100).

参考博客:
[1]”DQN从入门到放弃6 DQN的各种改进” Flood Sung
https://zhuanlan.zhihu.com/p/21547911
[2]莫烦python强化学习系列

猜你喜欢

转载自blog.csdn.net/osgoodwu/article/details/78896450