2019년 9월 4일 수요일

강화학습 공부를 위한 추천 논문 - DQN 계열

v.2019.09.05

강화학습을 공부하고 연구하려고 하는 사람들이 많이 늘어나고 있다. 하지만 다들 어디에서 부터 시작해서 뭘 봐야하는지 어떤 논문들이 있는지 조차 알기 어려운 경우 또한 많다.

우선 강화학습의 기초를 공부했다는 전제 하에 간략한 요약과 함께 유명한 논문을 몇 편을 추천하려고 한다. 아직 강화학습의 기초 공부가 덜 된 분들은 https://memopage2019.blogspot.com/2019/09/blog-post.html 게시물의 내용을 참고해서 꼭꼭 공부하고 넘어오길 바란다.

DQN 논문의 Nature 표지(2015)


우선 많은 논문들이 있지만 제일 먼저 추천하는 논문으로는 DQN과 그 파생 논문들, Rainbow는 꼭 봐야한다.


  • Deep Q-Learning
https://arxiv.org/abs/1312.5602


DQN은 지금의 딥 강화학습의 시발점이 되는 논문이라고 할 수 있으며, 2015년 Nature 논문의 표지를 장식하기도 했다.
이 논문은 강화학습에 딥러닝을 적용하여 아타리 게임에서 사람을 뛰어넘는 수준까지 끌어올린 논문으로, 

  • Target network
    • Q-learning update 식에서 다음 스텝의 q함수와 현재 스텝의 q 함수가 같아서 학습이 방해되었는데, 분리함으로써 학습을 돕는다.
  • Experience replay 
    • 강화학습을 학습하기 위해 수집된 데이터들을 보면 현재 state와 직전 state 간의 차이가 너무 미미해서 데이터 간의 correlation이 상당히 심해 학습이 실패한다. 그 문제를 해결하기 위해 replay memory에 탐험한 데이터를 모으고, 학습 할 때는 랜덤으로 불러옴으로써 correlation 문제를 해결하였다.

위 두 가지가 논문의 핵심이 된다. 

DQN은 워낙 많이 알려져있기도 하고, 유명해서 찾아볼만한 블로그나 강의자료가 많으나, 개인적으로 김성훈 교수님의 강의를 추천한다.
https://www.inflearn.com/course/reinforcement-learning/



  • Double Q-learning


https://arxiv.org/pdf/1509.06461.pdf
DQN에서 Q 함수가 종종 과대평가(overestimate) 하는 경우가 있어서 이를 막기 위해 등장한 개념. 아래 블로그에서 그 원인과 증명까지 설명이 잘 되어 있으니 자세한 설명은 패스
https://parkgeonyeong.github.io/Double-DQN%EC%9D%98-%EC%9D%B4%EB%A1%A0%EC%A0%81-%EC%9B%90%EB%A6%AC/

  • Prioritized Experience Replay
https://arxiv.org/abs/1511.05952

이 논문은 위 DQN 논문에서 핵심적인 역할을 한 Experience replay 를 한단계 발전시킨 형태이다. 기존의 방법은 랜덤으로 불러왔다면, 이번 논문에서는 우선순위에 따라 탐험한 데이터를 불러와서 학습함으로써 학습을 빠르고 강건하게 이루어질 수 있도록 하였다. 경험해보면 알겠지만 DQN은 상당히 느리다.



  • Dueling Network

https://arxiv.org/abs/1511.06581

위 그림과 같이 나눠졌다가 다시 합쳐지는 구조의 모델을 제안한 논문으로, 기존에는 State-Action value 값만 나왔다면, 이 논문에서는 State value 값과 Advantage 값이 따로 나오고 이들을 계산하여 State-Action value 값을 구하는 구조이다. 이렇게 했더니 성능 잘 나오더라

  • Rainbow

https://arxiv.org/pdf/1710.02298.pdf
그 외에도 Noise DQN이나 Distributed DQN 등이 있다. 모두 읽어보면 좋을 논문들이라고 생각하며, Rainbow 논문에 인용되면서 설명도 함께 있으니 이해안되는 부분 위주로 찾아 보면 좋을 것 같다. Rainbow 논문은 위의 DQN과 그 파생 논문들을 모두 합쳐놓은 형태로, 상당히 훌륭한 성능을 나타낸다. 다만 구현이 어렵겠지



2019년 9월 3일 화요일

강화학습 공부를 위한 추천 자료

v.2019.09.04


최근 인공지능/머신러닝/딥러닝이 큰 인기를 끌면서 머신러닝의 일종인 강화학습을 공부하고자 하는 사람들이 많아지고 있다. 내가 공부하면서 봤던 자료들 중 크게 도움이 되었던 자료들을 정리하고 공유한다.

David Silver 교수님의 강화학습 수업

  • David Silver 교수님 강의

우선 강화학습의 기본적인 내용들을 공부해야 한다. 강화학습의 이론적 토대가 되는 dynamic programming 부터 model-based, model free 및 exploration & exploitation 까지 강화학습의 기초가 되는 내용들 어느 것 하나 놓치지 않고 설명해주는, 알파고 논문의 저자이자 앞으로 두고두고 보게 될 강화학습 논문들을 많이 쓴 교수님 강의이다.
http://www0.cs.ucl.ac.uk/staff/d.silver/web/Teaching.html

  • 한글로 정리한 내용들

하지만 강의가 영어로 진행되고, 동영상 강의로 진행되다 보니 진행속도가 빠르지는 않다. 제이마플의 이웅원 님께서 David Silver 교수님의 수업 자료를 토대로 한글로 정리해서 책 처럼 만든 자료가 있으니 빠르게 공부하고자 하는 사람들에게 좋은 자료가 될 것이다.
https://dnddnjs.gitbooks.io/rl/content/

위 자료들을 보면서 잘 이해가 되지 않거나 추가 설명이 필요한 부분이 있다. 그럴 때 아래 블로그에서 참고하기도 했는데, 이 또한 잘 만든 강화학습 기초 자료로 생각된다.
https://sumniya.tistory.com/category/Reinforcement%20Learning/Contents


  • 실습 코드


공부하면서 실제로 코드가 돌아가는 환경이 보고 싶다면 RLCode 팀이 직접 만든 github을 활용해도 좋을 것 같다. 강화학습의 기본 알고리즘 부터 딥 강화학습의 토대가 되는 DQN 및 A3C 까지도 다루고 있으니 두고두고 공부하기 좋은 자료라고 생각한다.
https://github.com/rlcode/reinforcement-learning-kr


여기까지 딥하지 않은 강화학습을 공부하기 위해 추천할 만한 기본 자료들을 정리해보았다. 이 외에도 요즘에는 정리가 잘 되어 있는 블로그나 git이 많기 때문에 공부하다 어려운 부분은 키워드 위주로 찾아가면서 공부하면 좋을 것 같다.