Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Deep Reinforcement Learning: Playing a Racing Game

Avatar for Pedro Lopes Pedro Lopes
December 07, 2016

Deep Reinforcement Learning: Playing a Racing Game

Slides for the presentations given at:
- STARTUP LISBOA, on December 7th, 2016: https://www.meetup.com/Lisbon-Open-Data-Meetup/events/235879313/
- Porto's TensorFlow Dev Summit Viewing Party, on February 15th 2017, organised by GDG Porto: https://www.nei-isep.org/2017/02/tensorflow-dev-summit-viewing-party-porto/

Abstract:

We will go through the inner workings of Deep Q-learning, a deep reinforcement learning algorithm implemented by a Python/Tensorflow agent to play "Out Run", an arcade racing game. This algorithm was previously developed and used by DeepMind to play 49 different Atari games.

In particular, we will dive into Q-learning and to how it interconnects with Neural Networks and other concepts to create an autonomous agent capable of playing a game, only by having access to its screens, score (lives, speed, etc) and controls.

This presentation builds upon a blog article about the aforementioned Python/Tensorflow agent. Source code, AWS EC2 GPU instance deployment scripts and blog article are available here: https://lopespm.github.io/machine_learning/2016/10/06/deep-reinforcement-learning-racing-game.html

Avatar for Pedro Lopes

Pedro Lopes

December 07, 2016
Tweet

Other Decks in Technology

Transcript

  1. penalty: - 0.04 reward: - 1 reward: + 1 Agent

    Q-value Obstacle Q(s t , a t) ← Q(s t , a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) a
  2. a t → ® = 0.5, ° = 1 New

    Q(s t , a t) value: 0 + 0.5 (- 0.04 + 0 - 0) = - 0.02 Q(s t , a t) 0 r t+1 - 0.04 max Q(s t+1 , a) 0 t t+1 a Q(s t , a t) ← Q(s t , a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) a a
  3. a t → Q(s t , a t) 0 r

    t+1 - 0.04 max Q(s t+1 , a) 0 New Q(s t , a t) value: 0 + 0.5 (- 0.04 + 0 - 0) = - 0.02 a ® = 0.5, ° = 1 Q(s t , a t) ← Q(s t , a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) a
  4. a t → Q(s t , a t) 0 r

    t+1 - 0.04 max Q(s t+1 , a) 0 New Q(s t , a t) value: 0 + 0.5 (- 0.04 + 0 - 0) = - 0.02 ® = 0.5, ° = 1 Q(s t , a t) ← Q(s t , a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) a a
  5. a t ↑ Q(s t , a t) 0 r

    t+1 - 0.04 max Q(s t+1 , a) 0 New Q(s t , a t) value: 0 + 0.5 (- 0.04 + 0 - 0) = - 0.02 ® = 0.5, ° = 1 Q(s t , a t) ← Q(s t , a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) a a
  6. a t - Q(s t , a t) 0 r

    t+1 - 1 max Q(s t+1 , a) 0 New Q(s t , a t) value: 0 + 0.5 (- 1 + 0 - 0) = - 0.5 ® = 0.5, ° = 1 Q(s t , a t) ← Q(s t , a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) a a
  7. a t ↑ Q(s t , a t) 0 r

    t+1 - 0.04 max Q(s t+1 , a) 0 New Q(s t , a t) value: 0 + 0.5 (- 0.04 + 0 - 0) = - 0.02 ® = 0.5, ° = 1 Q(s t , a t) ← Q(s t , a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) a a
  8. a t ↑ Q(s t , a t) 0 r

    t+1 - 0.04 max Q(s t+1 , a) 0 New Q(s t , a t) value: 0 + 0.5 (- 0.04 + 0 - 0) = - 0.02 ® = 0.5, ° = 1 Q(s t , a t) ← Q(s t , a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) a a
  9. a t → Q(s t , a t) 0 r

    t+1 - 0.04 max Q(s t+1 , a) 0 New Q(s t , a t) value: 0 + 0.5 (- 0.04 + 0 - 0) = - 0.02 ® = 0.5, ° = 1 Q(s t , a t) ← Q(s t , a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) a a
  10. a t → Q(s t , a t) 0 r

    t+1 - 0.04 max Q(s t+1 , a) 0 New Q(s t , a t) value: 0 + 0.5 (- 0.04 + 0 - 0) = - 0.02 ® = 0.5, ° = 1 Q(s t , a t) ← Q(s t , a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) a a
  11. a t → Q(s t , a t) 0 r

    t+1 - 0.04 max Q(s t+1 , a) 0 New Q(s t , a t) value: 0 + 0.5 (- 0.04 + 0 - 0) = - 0.02 ® = 0.5, ° = 1 Q(s t , a t) ← Q(s t , a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) a a
  12. a t - Q(s t , a t) 0 r

    t+1 1 max Q(s t+1 , a) 0 New Q(s t , a t) value: 0 + 0.5 ( 1 + 0 – 0 ) = 0.5 ® = 0.5, ° = 1 Q(s t , a t) ← Q(s t , a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) a a
  13. a t ← Q(s t , a t) 0 r

    t+1 - 0.04 max Q(s t+1 , a) 0 New Q(s t , a t) value: 0 + 0.5 (- 0.04 + 0 - 0) = - 0.02 ® = 0.5, ° = 1 Q(s t , a t) ← Q(s t , a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) a a
  14. a t ↓ Q(s t , a t) 0 r

    t+1 - 0.04 max Q(s t+1 , a) 0 New Q(s t , a t) value: 0 + 0.5 (- 0.04 + 0 - 0) = - 0.02 ® = 0.5, ° = 1 Q(s t , a t) ← Q(s t , a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) a a
  15. a t → Q(s t , a t) - 0.02

    r t+1 - 0.04 max Q(s t+1 , a) 0 New Q(s t , a t) value: - 0.02 + 0.5 (- 0.04 + 0 - (- 0.02)) = - 0.03 ® = 0.5, ° = 1 Q(s t , a t) ← Q(s t , a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) a a
  16. a t ↓ Q(s t , a t) 0 r

    t+1 - 0.04 max Q(s t+1 , a) 0 New Q(s t , a t) value: 0 + 0.5 (- 0.04 + 0 - 0) = - 0.02 ® = 0.5, ° = 1 Q(s t , a t) ← Q(s t , a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) a a
  17. a t ↑ Q(s t , a t) 0 r

    t+1 - 0.04 max Q(s t+1 , a) 0 New Q(s t , a t) value: 0 + 0.5 (- 0.04 + 0 - 0) = - 0.02 ® = 0.5, ° = 1 Q(s t , a t) ← Q(s t , a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) a a
  18. a t ← Q(s t , a t) 0 r

    t+1 - 0.04 max Q(s t+1 , a) - 0.02 New Q(s t , a t) value: 0 + 0.5 (- 0.04 - 0.02 - 0) = - 0.03 ® = 0.5, ° = 1 Q(s t , a t) ← Q(s t , a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) a a
  19. a t ↑ Q(s t , a t) - 0.02

    r t+1 - 0.04 max Q(s t+1 , a) 0 New Q(s t , a t) value: - 0.02 + 0.5 (- 0.04 + 0 - (- 0.02)) = - 0.03 ® = 0.5, ° = 1 Q(s t , a t) ← Q(s t , a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) a a
  20. ® = 0.5, ° = 1 Q(s t , a

    t) ← Q(s t , a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) a
  21. a t → Q(s t , a t) 0 r

    t+1 - 0.04 max Q(s t+1 , a) - 0.5 New Q(s t , a t) value: 0 + 0.5 (- 0.04 - 0.5 - 0) = - 0.27 ® = 0.5, ° = 1 Q(s t , a t) ← Q(s t , a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) a a
  22. a t - Q(s t , a t) - 0.5

    r t+1 - 1 max Q(s t+1 , a) 0 New Q(s t , a t) value: - 0.5 + 0.5 (- 1 + 0 - (- 0.5)) = - 0.75 ® = 0.5, ° = 1 Q(s t , a t) ← Q(s t , a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) a a
  23. ® = 0.5, ° = 1 Q(s t , a

    t) ← Q(s t , a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) a
  24. a t → Q(s t , a t) - 0.02

    r t+1 - 0.04 max Q(s t+1 , a) 0.5 New Q(s t , a t) value: - 0.02 + 0.5 (- 0.04 + 0.5 - (- 0.02)) = 0.22 ® = 0.5, ° = 1 Q(s t , a t) ← Q(s t , a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) a a
  25. ® = 0.5, ° = 1 Q(s t , a

    t) ← Q(s t , a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) a
  26. a t → Q(s t , a t) - 0.05

    r t+1 - 0.04 max Q(s t+1 , a) 0.22 New Q(s t , a t) value: - 0.05 + 0.5 (- 0.04 + 0.22 - (- 0.05)) = 0.065 ≈ 0.07 ® = 0.5, ° = 1 Q(s t , a t) ← Q(s t , a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) a a
  27. a t → Q(s t , a t) 0.22 r

    t+1 - 0.04 max Q(s t+1 , a) 0.75 New Q(s t , a t) value: 0.22 + 0.5 (- 0.04 + 0.75 - 0.22) = 0.465 ≈ 0.47 ® = 0.5, ° = 1 Q(s t , a t) ← Q(s t , a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) a a
  28. ® = 0.5, ° = 1 Q(s t , a

    t) ← Q(s t , a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) a
  29. a t → Q(s t , a t) - 0.07

    r t+1 - 0.04 max Q(s t+1 , a) 0.07 New Q(s t , a t) value: - 0.07 + 0.5 (- 0.04 + 0.07 - (- 0.07)) = - 0.02 ® = 0.5, ° = 1 Q(s t , a t) ← Q(s t , a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) a a
  30. a t → Q(s t , a t) 0.07 r

    t+1 - 0.04 max Q(s t+1 , a) 0.47 New Q(s t , a t) value: 0.07 + 0.5 (- 0.04 + 0.47 - 0.07) = 0.25 ® = 0.5, ° = 1 Q(s t , a t) ← Q(s t , a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) a a
  31. a t → Q(s t , a t) 0.47 r

    t+1 - 0.04 max Q(s t+1 , a) 0.88 New Q(s t , a t) value: 0.47 + 0.5 (- 0.04 + 0.88 - 0.47) = 0.655 ≈ 0.66 ® = 0.5, ° = 1 Q(s t , a t) ← Q(s t , a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) a a
  32. ® = 0.5, ° = 1 Q(s t , a

    t) ← Q(s t , a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) a
  33. a t → Q(s t , a t) - 0.02

    r t+1 - 0.04 max Q(s t+1 , a) 0.25 New Q(s t , a t) value: - 0.02 + 0.5 (- 0.04 + 0.25 - (- 0.02)) = 0.095 ≈ 0.1 ® = 0.5, ° = 1 Q(s t , a t) ← Q(s t , a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) a a
  34. a t → Q(s t , a t) 0.25 r

    t+1 - 0.04 max Q(s t+1 , a) 0.86 New Q(s t , a t) value: 0.25 + 0.5 (- 0.04 + 0.86 - 0.25) = 0.535 ≈ 0.54 ® = 0.5, ° = 1 Q(s t , a t) ← Q(s t , a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) a a
  35. a t → Q(s t , a t) 0.86 r

    t+1 - 0.04 max Q(s t+1 , a) 0.99 New Q(s t , a t) value: 0.86 + 0.5 (- 0.04 + 0.99 - 0.86) = 0.905 ≈ 0.91 ® = 0.5, ° = 1 Q(s t , a t) ← Q(s t , a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) a a
  36. a t ↑ Q(s t , a t) - 0.12

    r t+1 - 0.04 max Q(s t+1 , a) - 0.08 New Q(s t , a t) value: - 0.12 + 0.5 (- 0.04 - 0.08 - (- 0.12)) = - 0.12 ® = 0.5, ° = 1 Q(s t , a t) ← Q(s t , a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) a a
  37. a t - Q(s t , a t) 0.99 r

    t+1 1 max Q(s t+1 , a) 0 New Q(s t , a t) value: 0.99 + 0.5 ( 1 + 0 – 0.99 ) = 0.995 ≈ 1 ® = 0.5, ° = 1 Q(s t , a t) ← Q(s t , a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) a a
  38. a t ↑ Q(s t , a t) - 0.08

    r t+1 - 0.04 max Q(s t+1 , a) 0.1 New Q(s t , a t) value: - 0.08 + 0.5 (- 0.04 + 0.1 - (- 0.08)) = - 0.01 ® = 0.5, ° = 1 Q(s t , a t) ← Q(s t , a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) a a
  39. a t → Q(s t , a t) 0.1 r

    t+1 - 0.04 max Q(s t+1 , a) 0.54 New Q(s t , a t) value: 0.1 + 0.5 (- 0.04 + 0.54 - 0.1) = 0.3 ® = 0.5, ° = 1 Q(s t , a t) ← Q(s t , a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) a a
  40. a t → Q(s t , a t) 0.54 r

    t+1 - 0.04 max Q(s t+1 , a) 0.91 New Q(s t , a t) value: 0.54 + 0.5 (- 0.04 + 0.91 - 0.54) = 0.705 ≈ 0.71 ® = 0.5, ° = 1 Q(s t , a t) ← Q(s t , a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) a a
  41. a t → Q(s t , a t) 0.91 r

    t+1 - 0.04 max Q(s t+1 , a) 1 New Q(s t , a t) value: 0.91 + 0.5 (- 0.04 + 1 - 0.91) = 0.935 ≈ 0.94 ® = 0.5, ° = 1 Q(s t , a t) ← Q(s t , a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) a a
  42. a t → Q(s t , a t) 1 r

    t+1 1 max Q(s t+1 , a) 0 New Q(s t , a t) value: 1 + 0.5 ( 1 + 0 – 1 ) = 1 ® = 0.5, ° = 1 Q(s t , a t) ← Q(s t , a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) a a
  43. a t ↑ Q(s t , a t) - 0.12

    r t+1 - 0.04 max Q(s t+1 , a) - 0.01 New Q(s t , a t) value: - 0.12 + 0.5 (- 0.04 - 0.01 - (- 0.12)) = - 0.085 ≈ - 0.09 ® = 0.5, ° = 1 Q(s t , a t) ← Q(s t , a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) a a
  44. a t ↑ Q(s t , a t) - 0.01

    r t+1 - 0.04 max Q(s t+1 , a) 0.3 New Q(s t , a t) value: - 0.01 + 0.5 (- 0.04 + 0.3 - (- 0.01)) = 0.125 ≈ 0.13 ® = 0.5, ° = 1 Q(s t , a t) ← Q(s t , a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) a a
  45. a t → Q(s t , a t) 0.3 r

    t+1 - 0.04 max Q(s t+1 , a) 0.71 New Q(s t , a t) value: 0.3 + 0.5 (- 0.04 + 0.71 - 0.3) = 0.485 ≈ 0.49 ® = 0.5, ° = 1 Q(s t , a t) ← Q(s t , a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) a a
  46. a t → Q(s t , a t) 0.71 r

    t+1 - 0.04 max Q(s t+1 , a) 0.94 New Q(s t , a t) value: 0.71 + 0.5 (- 0.04 + 0.94 - 0.71) = 0.805 ≈ 0.81 ® = 0.5, ° = 1 Q(s t , a t) ← Q(s t , a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) a a
  47. a t → Q(s t , a t) 0.94 r

    t+1 - 0.04 max Q(s t+1 , a) 1 New Q(s t , a t) value: 0.94 + 0.5 (- 0.04 + 1 - 0.94) = 0.95 ® = 0.5, ° = 1 Q(s t , a t) ← Q(s t , a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) a a
  48. a t → Q(s t , a t) 1 r

    t+1 1 max Q(s t+1 , a) 0 New Q(s t , a t) value: 1 + 0.5 ( 1 + 0 – 1 ) = 1 ® = 0.5, ° = 1 Q(s t , a t) ← Q(s t , a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) a a
  49. ® = 0.5, ° = 1 Q(s t , a

    t) ← Q(s t , a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) a
  50. ® = 0.5, ° = 1 Q(s t , a

    t) ← Q(s t , a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) a
  51. 9 actionable states State representation: 80x80 luma image (6400 pixels,

    256 tones) 4 possible actions (← ↑ → ↓) 36 (9x4) Q-values 2566400 possible states 9 possible actions 2566400 x 9 possible Q-values
  52. a Q(s t , a t) ← Q(s t ,

    a t) + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) ) s a Q(s,a) s1 a5 2 s2 a5 42 s3 a4 5 ... ... ... Q(s,a) = w1 f1(s,a) + w2 f2(s,a) + ... + wn fn(s,a) error wi ← wi + ® (error) fi(s, a) wi ← wi + ® ( r t+1 + ° max Q(s t+1 , a) { Q(s t , a t)) fi(s, a) a target prediction
  53. Image courtesy of Tambet Matiisen’s Demystifying Deep Reinforcement Learning target

    r t+1 + ° max Q(s t+1 , a) { Q(s t , a t) a prediction