Recurrent Experience Replay in Distributed Reinforcement Learning

Abstract

이 논문은 최근 distributed RL의 성공적인 성능의 기반하여 RNN 계열의 Ape-X(이전에 리뷰한 논문에 있습니다.)에 대해 조사한 논문입니다.

we study the effects of parameter lag resulting in representational drift and recurrent state staleness and empirically derive an improved strategy.

introduction

RL은 최근 여러 도전적인 문제들을 해결하면서 재조명을 받았습니다. 이러한 성공에는 초기에는 experience replay와 frame을 stack해서 input으로 넣는 technic들이 있습니다. 하지만 문제들이 점점 어려워지면서, memory기반의 representation의 요구가 증가했고 결국에, RNN계열의 layer를 적용시켜 이를 효과적으로 해결하였습니다.

이 논문에서는 RNN을 experience replay와함께 학습하는 것에 대해 조사했고, 이에 대해 세가지 contribution을 남겼습니다. 첫째로, experience replay가 parameter lag(representational drift와 recurrent state staleness를 이끄는)에 얼마나 영향을 미치는지 설명합니다. 이는 distributed RL에서 안정성과 성능을 떨어뜨립니다. 둘째로, experience replay를 사용한 RNN training을 하면서 이전의 효과들을 완화하는 것을 보입니다. 셋째로, 위의 말한 것들을 통합해 좋은 결과를내는 것을 보입니다.

Background

2.2 Distributed Reinforcement learning

Impala는 transition의 sequence와 함께, initial recurrent state를 experience queue에 넣는 방식을 사용합니다.

2.3 The Recurrent Replay Distributed DQN Agent

이 논문에서는 Recurrent Replay Distributed DQN(R2D2)라는 새로운 agent를 소개합니다. 이를 사용해 recurrent state와 experience replay, 그리고 distributed training의 사이에서 상호작용을 하는 것에 대해 연구하였습니다. r2d2는 ape-X처럼 PER과 n-step double Q-learning, 많은 actor로 부터 오는 replay를 단일 learner가 학습한다는 점, dueling network를 사용한다는 점에서 유사한점이 많습니다. 하지만, 여기서는 Convolutional layer뒤에 LSTM layer를 통해 학습하는 점이 크게 다른점입니다.

그렇게 하기 위해서, 여기서는 일반적인 sars’의 transition tuple의 data 구조 대신, 인접한 sequence는 40 step씩 서로 겹치게, 정해진 길이(m=80)의 sar를 저장하였습니다. (물론 episode boundary는 넘지 않게) 학습할 때에는, 같은 길이의 states를 가지고, network와 target network에 input으로 넣어주었습니다.

Ape-X의 변형중에 reward를 clipping하는 기법을 쓰지 않고, 다음과 같이 역함수가 가능한 function h(x)를 이용해 만들었습니다.

[2.3 수식위에 h]

[2.3 수식] 또한, replay buffer에서의 prioritization도 absolute error의 mean과 max의 혼합으로 만들었습니다.

[2.3 아래수식] 이는 긴 sequence를 평균낼 수록, 큰 error를 없애는 것에서 영감을 얻었습니다.

마지막으로, 높은 discount factor를 사용하게 되었습니다.

3. Training Recurrent RL Agent with Experience Replay

POMDP상황에서 좋은 성능을 내기위해서 좋은 성능을 내기 위해서 RL agent는 현재의 observation외에도 trajectory를 함께 encoding한 state의 representation을 얻을 수 있어야 하는데, 이를 위해 최근에는 Recurrent Neural Network를 사용함으로써 해결해왔습니다. replay를 이용해 RNN을 학습하기 위해선, 유효한 long-term dependency를 학습할 수 있또록, 한 episode의 trajectories들을 모두 저장해 사용해야 합니다. 그렇게 하기 위해 이전에는 두가지 방법을 사용하였습니다.

  • sampling한 sequence의 시작을 0으로 초기화한 state를 이용해 initialize를 합니다.
  • 한 episode의 전체 trajectories를 이용합니다. 첫번째 방법은 simplicity때문에 유용해보이고, 짧은 sequence에 대해 독립적이고 상관관계가 없는 sampling이 되도록 합니다. 반면에 RNN은 0으로 초기화된 비정상의 state를 가지고도 의미있는 prediction을 하도록 학습되기 때문에 RNN의 성능을 제한합니다.

두번째 방법은 initialize의 어려움을 회피하기위해 episode 전체를 들고가기 때문에, variance가 높고 computation양이 많을 수 있습니다.

Hausknetcht & Stone은 두 가지 전략에대해 Atari game에서 실험하고, 첫번째 전략을 선택했는데, RNN은 충분히 긴 sequence에 대해 일정개수의 ‘burn-in’ step이 있다면, 안좋은 initial state를 벗어날 수 있기 때문이라고 보았습니다. 이 논문에서도 또한 zero start 전략이 충분하다고 보았습니다.(long-term dependency가 중요한 memory-critical한 곳에서는 어렵다고 봄)

이런 이슈들을 해결하기 위해 RNN을 학습할때 random하게 sampling한 sequence를 가지고 두가지 전략을 실험해 보았습니다.

  • Stored state : 이는 예전 network의 recurrent state를 저장하는 방법인데, 오래된 network의 state의 경우 안좋은 효과를 낼 수 있습니다.
  • Burn-in : replay sequence 일부를 이용해 start state를 생성하고, 나머지를 이용해 network를 update하는 방법입니다. 이를 통해 start state를 어느정도 조정할 수 있다고 가정하였고, 확인하였습니다.

이 논문에서의 모든 실험은 Section 2.3에서 말한 R2D2를 사용하며, 80개의 frame을 가지고 40개 혹은 20개의 burn-in을 가지고 시작합니다. 특히 여기서의 목표점은 위의 “stored state”의 안좋은 영향들을 평가하기 위함입니다. 그렇게 하기 위해, replay sequence에서 sampling해 얻은 q값과 실제 각 step에서의 실제 state의 q값을 비교합니다.

그리고 Q값의 차이를 다음과 같이 측정하였습니다.

r2d2

1.fig(a)는 위의 방식을 그림으로 표현했고,r2d2

1.fig(b)는 initial state가 final state보다 영향을 크게받는다는 것을 주목할 수 있습니다.r2d2

이 논문에서는 burn-in하는 과정이 Q값의 괴리를 줄이는 효과적인 방법은 되지 못했지만, 성능에서 큰 차이를 보여줬고, 이 차이를 burn-in을 하면, RNN이 너무 부정확한 initial state로부터 update되는 것을 방지할 수 있기 때문으로 보았습니다.

반면에 state를 저장하는 방식으로 사용하면, Q의 괴리는 훨씬 줄어들고 이 두 방법의 혼합이 가장 적은 괴리를 보였고, robust했습니다.

References