Deep RL : PG method for Pong game

그동안은 reinforcement learning관련 기본 개념 소개에 시간을 할애하였다. 이론으로 부터 얻어낸 여러 algorithm의 실제 구현예를 보이는 것도 비교적 간단한 문제(toy problem)에 국한하였다. 아무래도 보다 현실적 응용 사례는 application/research 관점에서 접근한 자료를 찾아보는 것이 바람직할 것이다. 이번 포스팅은 그 정도 수준의 project는 아니지만 약간은 흥미로운 고전적 게임에서 RL을 적용한 간단한 예를 다루고자 한다.

알고리즘

인공지능연구에서 개인적 견해로 볼때 상당히 매력적인 분야가 몇 있는데, policy gradient methods도 그 중 하나이다. 이러한 맥락에서 여기서 소개할 ping-pong game의 응용예는 PG 가능성을 엿볼 수 있는 좋은 사례라는 생각이 들어 소개하고자 한다. PG method는 같은 작업을 수행하더라도 DQN보다는 coding이 훨씬간단하다. 특히, 이 예가 가진 특징은 순수한 policy gradient method를 사용했다는점이다. RL의 핵심(value function based method인 경우)인 value function을 구해내는 작업이 존재하지 않는다. 이 알고리즘은 순수하게 policy만을 학습한다. Policy networks가 value function 도움없이 최선의 action을 학습한다는 의미이다.

또 하나 언급할 필요가 있는것이 policy network자체에 관한 것이다. Atari game에 적용된 DQN의 경우 게임 이미지 처리를 위해 Convolutional Neural Networks를 사용하였다. 이미지를 정보로 이용하는 경우 대게 CNN을 도입하여 많은 수의 layers/filter를 사용한다. 그러나 이 사례에 사용한 policy network는  DQN의 q-value network보다 훨씬 간단하게 구축되어 있다. Input layer + hidden layer + output layer로 구조 설계되어 있고, 반드시 필요한 input layer와 output layer를 제외하면 단지 하나의 hidden fully-connected layer만으로 되어 있다. 이미지를 처리하면서도 convolutional layer가 아니라 FC layer를 사용했다는 것이 인상적이다. 이와 더불어 이미지 자체를 그대로 사용하기 보다는 배경을 제거하고 두 프레임의 차를 입력으로 사용한것은 brilliant idea(!)로 생각된다. 동적게임 상황에서 입력에 동적정보(dynamics)를 포함하게 되기 때문이다. 물론 task가 복잡하고, input image에서 다양한 feature를 뽑아내야 할 경우, 이 algorithm이 어느 정도로 학습이 쉬울지 판단하기엔 아직 이르다. (이런 경우 PG methods중 하나인 actor-critic이 더 나을 수도 있을 것이다. )

핑퐁게임 알고리즘 구현

Karpathy의 blog의 내용은 PG method를 보다 직관적으로 설명하면서, PG methods의  성능을 예시하기 위해 OpenAI Gym에서 구축한 “Pong-v0” environment를 대상으로 실험한 결과를 보여주고 있다. 아래 학습결과 얻은 영상을 제시하였다. 왼쪽 paddle의 움직임은 게임 컨트롤러가 제어하는 paddle의 움직임이고, 오른쪽 paddle의 움직임은 RL에 의해 학습한 인공지능의 것이다. 눈여겨 보면 서로의 특징을 볼 수 있는데, 게임 컨트롤러는 ball의 움직임과 나란히 기계적으로 움직이는 것을 볼 수 있다. 가장 단순한 전략이지만, 인간은 쉽지 않을지언정 컴퓨터에게는 무척 쉬운 작업일 것이다. 그냥 볼을 따라 수직 포지션만 그대로 같게 하면 되는 것이므로. 이러한 단순하고 확실한 전략을 가진 게임 컨트롤러를 이기는 방법은 paddle 조정속도보다 빠르게 공의 수직좌표를 변화시키는 것이다.(이건 필자가 생각한 전략이지만 맞을것으로 생각된다.) 인공지능이 이기기 위해서는 이러한 전략을 구사해야 하는데, 인간이 인위적으로 그러한 paddle 조정 메카니즘을 coding에 포함시키지 않아도, 학습하는 과정중에 놀랍게도 이러한 전략을 스스로 습득하게 되고, 결과적으로 게임에서 이기는 횟수가 점차 증가된다.


인공지능은 아직 논리적 사고력이 인간에 훨씬 못미친다. 그러나 수많은 시행착오를 인간보다 수없이 빠른 시간에 할 수 있고, 학습한 내용을 손실없이 저장가능하다는 면이 큰 장점이다. 비록 단순한 방법이라도 많이 해보고 성공사례를 사장시키지 않고 기억/활용한다면 결국에는 더 나은 결과를 가져올 수 있다. 이점이 인공지능의 가능성에 대한 일면이며, 어느정도까지 발전할지 아니면 그것 까지가 한계인지를 판단하기엔 아직 이르다. 인공지능에게는 유리한 여건이 많다. 데이터는 충분하면서도 팽창하고 있고, 컴퓨터는 충분히 빠르고 기억장치는 용량과 속도가 발전하고 있다. 유투브의 그 많은 동영상은 다 어디에 저장되어 있단 말인가. 양자컴퓨터가 실용화되어 빛의 속도로 계산을 하게되면 인공지능은 어떤 양상으로 발전될 것인가.


원 저자는 action space로 단지 paddle의 UP/DOWN만을 고려하였다. 아래 학습결과를 실행시켜 보니 paddle이 위아래로 바삐 움직이는 것을 볼 수 있다. 만약 action space가 3개 이상인 경우에는 아무래도 약간의 응용이 필요하다. 위아래로 정신없이 두개의 action(Up/Down)만 고려하지 않고 움직이는 paddle을 진정시키고자(?) 원저자의 소스코드를 약간 응용하여 UP/PAUSE/DOWN으로 이루어진 3개의 action space로 수정하였다. 이를 위해 policy network가 3개의 action probability를 내도록 수정하고 결과적으로 forward propagation 및 back propagation code를 수정하였다. 특히 forward propagation의 경우 원저자의 sigmoid policy를 temperature가 포함된 softmax policy로 변경하였다. Neuron 갯수나 learning rate등의 hyper parameter는 바꾸지 않았으며, 학습속도는 기존 코드보다 좀 느려지는 감이 없지 않다. (GPU없이도 학습이 가능하므로 PG method의 장점을 실감하지만, CPU만으로 학습을 시키자니 내 맥북이 따뜻하다. 겨울이라 다행이지만 하루 이상 걸리니 GPU가 생각난다.^^)

학습 결과

위와 같은 알고리즘으로 학습을 시키니, 학습을 진행시켜 점차 이기는 확률이 높아진다.아래 두개의 screen shot은 학습중 찍은 것이다. running mean은 21점 먼저내는 게임에서 두 상대간 점수차이며 음수는 아직 인공지능이 그 점수차로 지는 추세라는 의미이다. 그러므로 양수가 될때까지는 학습을 시켰으며 두번째 스크린샷이 그상태에서 찍은것이다. 스크린샷은 없으나 학습초기에는 3개의 action중 pause동작이 약간 우세한 경향의 비슷한 확률로 세가지 action이 선택된다. 학습중에 점차 pause동작이 차지하는 비중이 줄어드는데, 마지막 스크린샷을 보면 비중이 거의 없다는 것을 알 수 있다. 하나의 에피소드에서 전체 paddle의 action중 새로 도입한 action(pause)이 차지하는 비율이 학습이 진행됨에 따라 점차 줄어드는 것을 확인하였다. 사실 승패가 중요한 게임에서 paddle을 제자리에 놔둘 필요가 없다. 가만히 있는것에 대한 메리트가 없기 때문이다. 게임 플레이 동영상을 확인해 보니 원래의 코드에 의한 결과와 paddle 움직임에 대한 차이가 거의 없다. 상대편(게임 컨트롤러)으로 부터 날아오는 공을 다시 bounce back하려면 가만히 있기에는 너무 공이 빨리 날아온다. 즉, 인공지능은 pause action을 점차 줄여가는 방향으로 학습해 나가는 것이다. 결국은 원래 소스코드의 2 action 구조와 action선택이나 학습결과측면에서 다를바가 없다.

rl-pong-screen-shot3actionsarl-pong-screen-shot3actionsb

 

Advertisements

Deep RL : PG method for Pong game”에 대한 답글 1개

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중