Asynchronous Advantage Actor-Critic (A3C)

RL과 신경망의 조합과 관련하여 매우 중요한 전환점이라면 DQN이다. 하지만 이 방법은 많은 저장용량 및 계산량이 요구되며, replay memory로 부터 데이터를 가져오기 때문에 과거의 policy에 의존하여 update를 수행해야 하는 off-policy method일 수 밖에 없는 단점을 가지고 있다. (DQN을 학습시키려면 GPU를 동원해야 하며, GPU도 메모리 용량이 충분해야 한다. DQN의 포스팅에 관련 정보를 제공하였다. 워낙 빨리 발전하다 보니 채 1년이 안된 논문도 오래된 논문처럼 느껴진다. 이 논문에서는 기존의 DQN의 단점을 극복하고자 DQN의 개발자가 개선된 새로운 알고리즘을 발표하였다.) 이러한 배경에서 2016년 초에 발표한 중요한 논문이 있어 이것을 소개하고자 한다.

Asynchronous Methods for Deep Reinforcement Learning 

Experience replay대신 고안한 아이디어는 environment를 여러개 구동시켜 비동기적으로 agent를 병렬로 실행시키는 방법이다. 이러한 병렬환경은 agent의 데이터의 상호 연관성을 줄이고, 각 agent가 다양한  state를 경험하게 해주므로 학습과정이 stationary process가 되도록 유도한다. 이와 같은 간단한 아이디어로 인해 Q learning과 같은 off-policy method뿐만아니라 더 다양하게 개발되어 있는 on-policy method (예를 들면, Sarsa, TD, actor-critic)도 적용가능하게 만들어 준다. 이 알고리즘은 실용적 측면에서 유익한데, 그 이유는 일반적인 multi-core CPU만을 사용해서도 학습이 가능하면서도 성능도 더 좋다고 한다. 이 알고리즘을 asynchronous advantage actor-critic(A3C)라고 하며, discrete action space뿐만 아니라 continuous space에도 적용 가능하며, feedforward와 recurrent agent도 모두 학습시킬 수 있는 장점도 가지고 있다.

Asynchronous RL Frameworks

이 frameworks에서는 주목할 첫번째는 asynchronous actor-learner를 사용하되, 다른 컴퓨터와 parameter server를 동원하는 대신에 한 컴퓨터의 multiple CPU 쓰레드(thread)를 사용함으로써, 서로 다른 컴퓨터간 데이터 이동에 필요한 비용(시간 및 전산자원)을 줄였다. 두번째 multiple actor-learner가 서로 다른 environment로 부터 병렬로 실행된다. 이런 이유로 서로다른 exploration policy를 사용할 수 가 있어서 다양성(diversity)를 극대화 할 수 있다. 결국, 서로 다른 환경의 결과물에 의한 parameter update는 한 환경에서 수행하는 것에 비해 상호 연관성을 줄일 수 있는 장점이 있다. 그러므로 DQN의 experience replay를 사용하지 않고 서로 다른 exploration policy를 따르는 병렬 actor는 알고리즘의 안정화에 기여하게 된다.

Asynchronous one-step Q-learning

Asynchronous Q-learning의  pseudocode가 아래 나타나 있다. 각 쓰레드는 개별적인 environment와 상호작용으로 매 step마다 Q-learning loss gradient를 계산하고, 계산된 gradient를 합산해 나가는데, 이것은 minibatch의 역할을 하게 된다. 이를 통해 learner들이 다른 learner의 update를 덮어 쓰는 일이 생기지 못하도록 한다. 또한 서로 다른 learner를 통한 다양한 environment에서의 학습은 알고리즘이 더 견고한 성능을 갖는데 일조한다.

rl-a3c-one-step-q-learning-algorithm

Asynchronous one-step Sarsa

이 알고리즘은 Q(s,a)의 target function이 r+\gamma Q(s',a';\theta^{-})인것을 제외하고는 완전히 동일하다.

 Asynchronous n-step Q-learning

Multi-step Q-learning에 asynchronous algorithm을 적용한 pseudocode를 아래 나타내었다. 여기서는 일반적인 backward view multi-step대신에 forward view multi-step을 사용한다. Momentum-based method와 backpropagation through time이 적용된 신경망을 이용한 학습의 경우에는 forward view가 더 적당하다고 저자는 판단한다. t_{max} step까지 진행후에 각 step을  multi-step update를 적용하고 gradient들을 합산하는 방식으로 전개된다.

rl-a3c-n-step-q-learning-algorithm

Asynchronous advantage actor-critic

Asynchronous advantage actor-critic(A3C) 알고리즘에서는 policy \pi(a_t |S_t ;\theta)와 value function V(s_t ; \theta_v 개념은 그대로 유지한채, n-step Q-learning과 같이 forward view update를 실시한다. Policy와 value function은 t_{max}마다, 또는 terminal state, update가 된다.  Policy에 대한 update는 아래와 같은 식을 이용한다. 이 algorithm의 pseudocode를 아래 나타내었다.

\nabla_{\theta'}log\pi(a_t |s_t ;\theta' )A(s_t , a_t , ; \theta , \theta_v )

 A(s_t , a_t ; \theta , \theta_v ) = \displaystyle\sum_{i=0} ^{k-1} \gamma ^i r_{t+i}+ \gamma ^k V(s_{t+k};\theta_v ) - V(s_t ; \theta_v )

rl-a3c-algorithm

여기서 k는 state에 따라서 달라지면 최대 t_{max}이다. 여기서도 병렬로 actor-learner가 실행되며, 일반적으로 convolutional neural network를 policy와 value function approximation 용으로 사용한다. Policy objective  function에  policy \pi의 entropy항을 추가하는 것이 deterministic policy의  suboptimal조건에 빠지지 않도록 exploration을 장려하는 효과가 있는것을 발견하였다. 이러한 policy entropy H를 사용한 objective function gradient는 아래와 같다.

\nabla_{\theta'}log\pi(a_t |s_t ;\theta' )(R_t - V(s_t  ;  \theta_v )) + \beta \nabla_{\theta'} H(\pi (s_t ; \theta '))

A3C Test Run

CPU의 thread를 전부 사용하여 A3C 알고리즘을 구현해 보았다. Environment는 OpenAI Gym의 “SpaceInvaders-v0″이고, 모든 thread에 RL agent를 할당시켜, 여러개의 agent가 동시에 environment와의 interaction을 통해 weight parameter를 update해나가도록 한다. 위의 알고리즘은 개별 agent가 수행하는 작업을 나열한 것이다. 각 thread에 할당된 agent는 n-step만큼의 MDP transition를 저장한 후, 이 정보를 이용하여 target값들을 구한후에 이 target값을 이용하여 global parameter 패러미터를 update하는 순서로 알고리즘이 이루어져 있다. 모든 agent는 각각의 MDP transition을 사용하여 개별적으로 global parameter update에 사용하므로 asynchronous update가 이루어짐을 알 수 있다. 아래에 A3C algorithm을 이용하여 구현한 결과를 보여주는 동영상을 참고하기 바란다. Atari game을 GPU를 이용하여 학습한 DQN에 비해 CPU core만으로도 빠른 학습 속도를 보여주었다.

screenshot-from-2017-01-18-16-10-30


Multi-core를 갖춘 CPU, 특히 인텔의 CPU는 hyper-threading기술로 하나의 core당 다수의 thread를 생성시킬 수 있고, 노트북용 모바일 i-series 라인업(i3, i5, i7)은 2개 core에 4개의 tread를 활용할 수 있다. 데스크탑용 CPU는 라인업에 따라 core수와 thread수가 달라지는데, i5의 경우에는 core수와 thread수가 같으며, i7의 경우 쿼드코어에 8개의 thread가 있다. 내 데스크탑은  Intel i7으로 4개의 core(8개 thread)를 활용할 수 있다. 위의 스크린샷은 학습중 CPU의 load를 살펴보기 위해 구동한 모니터링 프로그램의 스크린샷 화면이다. A3C algorithm구현시 동원가능한 8개 thread모두를 활용하도록 설정하니 모든 thread가 90%이상의 가동률을 보이고 있음을 알 수 있다. 일반적인 작업을 하는 경우에는 한두개의 thread가 매우 적은 load만 차지한다. Intel processor중에 i-series extreme edition의 경우 8개의 core(16 thread) CPU가 있으며, 워크스테이션에 사용되는 제온 프로세서는 그보다도 훨씬 많은 core를 가진다. 각 CPU의 자세한 사양은  intel 사이트에서 찾아 볼 수 있다. 


Advertisements

Asynchronous Advantage Actor-Critic (A3C)”에 대한 답글 1개

답글 남기기

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

WordPress.com 로고

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

Google+ photo

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

Twitter 사진

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

Facebook 사진

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

%s에 연결하는 중