아타리 게임에서 할 수 있는 액션은 몇 가지가 있을까요? 벽돌 부수기 게임을 예로 들면 가만히 있기, 오른쪽으로 움직이기, 그리고 왼쪽으로 움직이기 3가지가 되겠네요. softmax 를 이용해서 충분히 정책을 정할 수 있을만한 숫자입니다. 바둑은 총 361개의 착점이 있죠. 꽤 많지만 불연속적이라 가능합니다. 스타크래프트같은 경우는 어떨까요? 일단 마우스를 어느 지점에서 클릭해야 하는지를 정하려고 해도 너무나 많은 가짓수가 존재합니다. 이런 경우에는 softmax같은 분류 모델보다 회기 분석이 더욱 맞을 것입니다. 결과값이 직접 좌표로 나오는 것이죠. 이를 continuous action space라고 합니다. 전통적인 아타리 게임 논문에서는 max q value 에 따라 정책을 결정하는 value-based 알고리즘을 썼지만 action이 연속적이면 q function도 기하급수적으로 늘어나야하므로 현실적으로 불가능합니다. 그렇기 때문에 스타크래프트 인공지능은 policy-based, 즉 정책을 직접 근사하는 방식을 씁니다.
그럼 policy based에서 continuous action 을 출력하는 방법은 또 어떤 것이 있을까요? Stochastic policy gradient(SPG) 방식과 Deterministic policy gradient(DPG) 가 있습니다. SPG는 action을 정규분포(평균과 분산)으로 출력하고 분포에 따라 확률적으로 행동을 선택하는 반면 DPG는 SPG출력에서 분산을 뺀 평균값만 출력, 말그대로 확률적 모델이 아니라 값을 출력하는 것입니다.
저희는 스타크래프트 인공지능을 만들기 위해서 DPG를 쓰기로 하였습니다. action과 state 두개를 적분해서 나온 SPG와는 다르게 DPG는 state만 적분하였기 때문에 SPG는 DPG보다 더욱 많은 sample이 필요하게 되고(특히 action space가 많은 continuous action space를 다루는 문제라면 더욱 많은 sample이 필요하게 되겠죠) 결과적으로 DPG가 더욱 빠른 학습 성능을 나타내기 때문입니다. 하지만 DPG 자체로만은 학습 편향, Time-Difference error으로부터 오는 문제점들이 있었고, 이러한 문제점들을 해결한 알고리즘이 Deep Deterministic Policy Gradient(DDPG) 알고리즘입니다.
서론이 길었내요. 이런 DDPG 알고리즘을 스타크레프트 인공지능에 적용시키기 위해서는 예제를 이용하여 DDPG 알고리즘 코딩에 익숙해져야 할 필요가 있다고 생각하여 "막대기 중심잡기"라는 OpenAI 에서 제공해주는 환경을 이용하여 DDPG 에이전트를 개발해보았습니다.
약 130번 정도의 반복에도 불구하고 저희가 기대하는 행동을 잘 보여주었습니다.
코드는 아메리카노 연구소 깃허브(https://github.com/jinPrelude/Americano_lab/tree/master/DDPG_Pendulum)에 실행 방법과 같이 올려놓았습니다. 비록 중간성과지만 혹시 강화학습에 관심이 있으신 분이 이 게시물을 접하게 된다면 코드가 도움이 되지 않을까 싶어서 올렸습니다. 주석도 이해하기 쉽도록 달아놓았는데, 생각 날 때마다 적은거라 정리가 잘 안 되어 있습니다ㅎ 시간 날 때마다 주석 수정할 수 있도록 하겠습니다.
다음에는 스타크래프트 에이전트에 관련한 게시물을 들고 올 수 있도록 하겠습니다. 감사합니다!!