드디어 결과보고서를 쓰네요ㅎ 많이 늦었습니다
예전 게시물에서도 언급했다시피 팀을 정리하다보니 시간도 1달이라는 시간밖에 남지 않았었고, 인원도 대폭 줄게 되어 정의진(필자)님과 정준식님 두 명이서 진행을 하였습니다. 앞에서 스타크래프트를 목표로 잡았다고 말을 하였고 Pandulum이라는 환경에서 간단히 DDPG 알고리즘을 이용하여 학습을 시켜보기도 하였습니다. 스타크래프트 풀 게임을 학습시키기는 힘들다고 판단하여 스타크래프트 강화학습 환경에서 재공되는 DefeatRoaches(마린 9마리를 이용하여 바퀴 4마리를 잡도록 구성된 환경) 을 목표로 잡았습니다.
처음에는 Deepmind에서 쓴 논문(https://arxiv.org/abs/1708.04782)에서 언급된 fully convnet가 녹아든 A2C 알고리즘을 이용하여 학습을 진행해 보았습니다. 하지만 결과는 만족스럽지 못하였습니다.
위 GIF 사진의 오른쪽에서 파란색 점이 Agent가 클릭하는 좌표를 나타내주고 있는데요, 저 상태에서 조금 더 시간이 지나게 되면 64*64, 총 4096 가지의 좌표 가짓수가 있는데도 불구하고 계속 선택되는 좌표만 다시 선택되는 현상이 도드라집니다. 첫번째 요인은 논문에서 A3C라는 알고리즘을 쓴 것에 비해서 A2C 알고리즘을 씀으로써 Agent가 조금 더 다양한 환경을 접하지 못하여 너무나도 많은 좌표의 가짓수 중 특정 좌표에서 리워드를 얻었을 경우에 해당 좌표의 Q값만 커져 이런 문제가 나타났다고 예상하였습니다. 그리고 지금 보니 64*64라는 해상도가 이러한 A2C 알고리즘에게 너무 큰 Action space인 것도 하나의 요인이 되지 않았을까 생각이 듭니다.
그리고 나서는 논문 구현에 충실하게 A3C 알고리즘을 접목시켜볼 만도 했지만, 저희는 "이런 좌표값을 Continuous action space에서 근사시켜보면 어떨까?" 라는 호기심이 들었습니다. classification 문제처럼 4096개의 선택지 중 하나를 고르는 것이 아니라 회기 문제로 좌표의 값을 바로 근사하는 것이죠. 그래서 Continuous action space에서 강세를 보이는 알고리즘 DDPG 를 배워보기로 하였습니다. 좌표의 값을 DDPG 알고리즘으로 근사시키는 것이죠. 그리고 액션의 가짓수(공격하기, 이동하기, 선택하기, 행동하지 않기)도 고를 수 있도록 설계를 했습니다. 처음에는 이 4가지중 가장 큰 값을 고르도록 하려고 했더니 argmax가 이용되어 미분이 불가능해져 어떻게 action을 미분해야할지 고민하다가, argmax가 아닌 신경망에서 출력된 4가지 값 중 가장 큰 값의 action을 행하되 미분은 4개의 raw 값에 대하여 그대로 미분을 하였습니다.
아래는 DDPG로 학습시킨 Agent입니다. 어느정도 control이라고 볼 수 있는 action을 취하는 장면도 많이 나왔습니다.
하지만 이 알고리즘도 학습을 계속하다 보니 계속 좌표의 값이 계속 발산하는 경향을 보였고, 이 방법 또한 특정 좌표에서 계속 머무려는 현상을 보였습니다. 그리고 4가지 action을 고르는 과정도 좋은 학습방법인가 의심이 계속 들었습니다.
이러한 문제를 해결하기 위한 방안으로 생각한 것들은 : 처음에는 x, y값을 따로 근사하려 했는데 이 또한 1부터 64*64, 4096 까지 사이의 숫자를 근사하여 screen_size의 크기로 나누어 x, y 좌표로 분리하는 방식으로 하여 발산의 방향을 줄이고자 하였고, 4가지 action을 고르는 SPG actor을 만들어 1critic 2actor 로 학습을 하면 어떨까 라는 여러 생각들을 남긴채 1기 연구소 활동을 마무리하게 되었습니다.
저희 모두 강화학습을 공부하는 입장이었기 때문에, 학습과 동시에 프로젝트를 진행하는 도중 여러가지 시도에 있어서 확신을 얻기 위해서는 추가로 고민을 많이 해야 했습니다. 그래도 한국인공지능연구소에서 이러한 기회를 마련해 주었기 때문에 단순히 알고리즘을 이해하는 선을 넘어서 실제 환경에 강화학습 알고리즘을 접목킬 수 있을 정도의 수준까지 올 수 있었다고 생각합니다.
한국인공지능연구소 1기 강화학습랩 결과보고서 PPT : https://www.slideshare.net/LeejinJeong/ss-112561778
Experimental code :
https://github.com/jinPrelude/starcraft_ai
위 Repo에는 Agent를 만들기 위해 여러가지 방법을 적용하여 시도한 흔적이 기록되어 있습니다. 개인적으로 준비해야할 것들이 많아 정리 상태가 좋지는 않습니다만ㅠ 앞으로 코드 정리나 주석 등도 지속해서 수정해나가도록 하고 완성된 agent도 여러분들께 빨리 보여드릴 수 있었으면 좋겠습니다.
끝까지 함께 해주신 정준식님 소중한 시간 할애하며 열심히 해주셔서 정말 감사합니다. 그리고 제가 발표까지 성공적으로 마칠 수 있도록 격려해주시고 연구소 잡일 모두 도맡아 하시면서 한국인공지능연구소가 올바른 방향으로 나아갈 수 있도록 정말 고생하신 이강훈 소장님, 문아라 국장님께 정말 감사드립니다.
이상 한국인공지능연구소 1기 강화학습랩장 정의진이었습니다!