앎을 경계하기

Machine Learning/Reinforcement Learning

차근차근 Spinning Up 톺아보기 Key Paper : DRQN

양갱맨 2019. 11. 20. 02:09

 

이번에 볼 논문은 DRQN이다.

논문 번역 식으로 포스팅하다보니 양이 많아지기도 해서 내가 읽은 대로 잊지않기 위해 정리한다.

먼저 DRQN 구조를 보자.

DRQN은 DQN에서 첫번째 FC layer를 LSTM layer로 변경한 RNN+CNN 구조의 DQN이다.


LSTM

LSTM에 대해 이해하기 위해서 블로그를 참고하였다.

RNN(Recurrent Neural Network)은 스스로 반복해서 이전 단계에 얻은 정보를 계속 기억하는 뉴럴네트워크이다.

출처 : http://colah.github.io/posts/2015-08-Understanding-LSTMs/

이 그림이 RNN을 이해하는데 도움이 되었다.

input X가 차례로 들어오면서 A에 누적되는것을 볼 수 있다.

LSTM은 아래와 같은 구조로 생겼다.

각 요소들을 gate라고 하는데,

먼저 f는 forget gate, 잊는 것에 대한 게이트이다. sigmoid를 취해서 0이면 잊고 1이면 전부 기억하는 것에 대한 gate이다.

i와 g는 input gate, 현재 정보를 기억하는 것에 대한 게이트. 같은 input 값으로 한 번은 sigmoid, 다른 한 번은 tanh를 취하여 아다마르 곱을 취한 결과이다.

o는 sigmoid를 취한 값으로 tanh를 취한 c와 아다마르 곱은 h가 된다.

c는 cell state인데, 이 c가 있어서 오랫동안 state가 경과해도 Backpropagation이 잘되어 vanishing gradient problem을 해결할 수 있는 것이다.


다시 DRQN으로 돌아와서

LSTM의 초기 hidden state는 0이 되거나 이전 값으로부터 이월될 수 있다.

이전 값에의해 이월되는 것은 Bootstrapped Sequential Updates, 0로 초기화는 Bootstrapped Random Updates이다.

첫 번째 방법인 Bootstrapped Sequential Updates는

에피소드들을 replay memory에서 랜덤하게 선택한다.

그리고 에피소드의 시작부터 순차적으로 다 사용한다.

hidden state는 에피소트를 통해 이월된다.

 

두번째 방법인 Bootstrapped Random Updates는

똑같이 replay memory에서 랜덤하게 에피소드들을 선택한다.

다른 점은 에피소드의 각 시작 포인트를 랜덤하게 선택한다는 것이다.

그리고 timesteps만큼만 사용한다. 전자는 에피소드 전체를 사용하는 방법이었다.

hidden state는 업데이트 시작 때 0이다.

 

Sequential update 방법은 전체 에피소드를 사용하기 때문에 DQN의 random sampling policy(여기서 policy는 RL의 policy가 아닌,,)를 방해한다. 

Random update 방법은 random sampling을 더 잘 지키지만 LSTM의 hidden state를 반드시 0으로 초기화시켜야한다는 점이 있다.

0으로 초기화시키는 것이 학습하는 것을 더 어렵게 하기 때문에 안좋다.

 

논문에서는 둘 다 비슷한 수렴성을 보였다고 한다.

 

DRQN에서는 DQN과 실험환경에서 차이가 있었는데, Atari 환경에 flickering을 추가하여 깜빡깜빡이는 듯한 환경을 제공함으로써 Partially Observable MDP에서 실험한 것이다.

50% 확률로 게임 화면이 다 보이거나 안보이도록 화면을 생성하였다.

그림을 보면 (a),(b),(c) conv 필터를 거치면서 공의 움직임을 파악할 수 있었다.

(d)에서의 LSTM에서도 순차적으로 정보가 계속 입력되고 기억하고 있기 때문에 공의 움직임을 알 수 있도록 학습한 것을 볼 수 있다.

 

DRQN에서는 input으로 1frame만 사용했지만 DQN에서는 10frame을 사용했다.

그러나 game screens의 history는 같기 때문에 1개씩 타임스텝마다 들어갔다는 거랑 한번에 10개가 들어갔다는 것의 차이인 것같다.

DRQN이 DQN의 성능을 완전 뛰어넘거나 하는 결과가 나오지는 않았다.

다만 POMDP환경에서는 DRQN이 학습을 잘한다는 점이 있었다.

학습은 MDP에서 하고 평가는 POMDP에서 했을때 DQN보다 DRQN이 더 잘했다는 실험 결과를 보였다.