我一直对强化学习感兴趣,这学期正好选了一门强化学习的课,第一次作业是让复现DQN。这几年也看了不少DQN的代码,但要自己实现起来,还是犯晕,效率很低。这篇文章从深度强化学习所需的元素出发,达到用DQN解决atari games的目的。
1. Observe, Value, Act
强化学习研究的是Agent和环境交互中如何学习最优策略,以获得最大收益。Agent需要能够观察环境(observe)的到所处的状态,评判(value)状态下每个动作的价值,并选出最优的动作(act)来和环境交互。因此,observe,value和act是强化学习Agent必不可少的元素。
class
在atari game中,环境给出的observation(84x84x1的array)可以直接作为state,observe()函数可以帮忙把numpy array转换为torch tensor。在更复杂的partial observable环境,我们可以利用observation来推断所处的state,observe()函数可以更复杂些。value()在DQN中主要是给出state下每个action的Q value。act()则是通过epsilon greedy policy选出action。
2. Deep-Q Network
对于复杂的问题,state维度非常大,我们很难基于tabular method来判断每一个(state, action)的价值。这种情况下,我们利用function approximation方法,构建一个深度神经网络(Deep-Q Network, DQN)