This is easy-to-follow step-by-step Deep Q Learning tutorial with clean readable code.
The deep reinforcement learning community has made several independent improvements to the DQN algorithm. This tutorial presents latest extensions to the DQN algorithm in the following order:
- Playing Atari with Deep Reinforcement Learning [arxiv] [code]
- Deep Reinforcement Learning with Double Q-learning [arxiv] [code]
- Dueling Network Architectures for Deep Reinforcement Learning [arxiv] [code]
- Prioritized Experience Replay [arxiv] [code]
- Noisy Networks for Exploration [arxiv] [code]
- A Distributional Perspective on Reinforcement Learning [arxiv] [code]
- Rainbow: Combining Improvements in Deep Reinforcement Learning [arxiv] [code]
- Distributional Reinforcement Learning with Quantile Regression [arxiv] [code]
- Hierarchical Deep Reinforcement Learning: Integrating Temporal Abstraction and Intrinsic Motivation [arxiv] [code]
- Neural Episodic Control [arxiv] [code]
First, I recommend to use small test problems to run experiments quickly. Then, you can continue on environments with large observation space.
- CartPole - classic RL environment that can be solved even on a single cpu
- Atari Pong - the easiest atari environment, it takes ~ 1 million frames to converge, comparing with other atari games that take > 40 millions
- Atari others - change hyperparameters, target network update frequency=10K, replay buffer size=1M
- First, remember that you are not stuck unless you have spent more than a week on a single algorithm. It is perfectly normal if you do not have all the required knowledge of mathematics and CS. For example, you will need knowledge of the fundamentals of measure theory and statistics, especially the Wasserstein metric and quantile regression. Statistical inference: importance sampling. Data structures: Segment Tree and K-dimensional Tree.
- Carefully go through the paper. Try to see what is the problem that authors are solving. First you should understand a high-level idea of the approach, then you can read the code skipping the proofs, and after that go over the mathematical details and proofs.