본문 바로가기
Deep Learning/RL

[모두RL-⑥] DQN

by 룰루셩 2022. 3. 7.

2022.03.07 - [Deep Learning/RL] - [모두RL-⑤] Q-Network에 이어서 김성훈 교수님의 모두를 위한 RL강좌 lecture 7을 듣고 작성하였다.

 


 

이번 강의에서는 CartPole이라는 게임으로 진행이 된다. 

카트(cart)가 있고 카트에는 막대기(pole)이 연결되어있다. 

카트를 오른쪽(+1) 왼쪽(-1)으로 움직여서(action) 막대기가 넘어지지 않도록 하는 게임이다. 


 

 

앞의 게시물에서 완성한 Q-network는 unstable하다.

 

이유

1. Correlations between samples

2. Non-stationary targets

 

 

 

1. Correlations between samples

위의 그림처럼 전체의 데이터를 모두 보지 않고, 몇 개의 인접한 sample만 골라서 본다면 모든 데이터로 예측하는 것과는 완전히 다르게 예측하게 될 것이다. 이것이 sample들 간의 correlation 때문이다. 

 

이 문제가 Q-network에서는 어떻게 나타난다는 것인지 보자.

 

5번 루프를 돌아 학습한다고 하자. 

각각의 루프에서 받아오는 환경들은 상당히 유사할 것이다.

어떤 action을 취할 때 환경이 조금씩 조금씩 바뀐다. 그래서 받아오는 데이터들이 굉장히 유사하고 연관성이 많다.(correlation)

 

2. Non-stationary targets

target이 움직인다.

Qpred = $\hat{Q}(s_t,a_t|\theta)$

target = $r_t+\gamma \max_{a'} \hat{Q}(s_{t+1},a'|\theta)$

Qpred와 target이 같은 $\theta$를 사용한다. 이는 같은 network를 학습시킨다는 뜻이다.

우리의 Qpred를 업데이트 시키면 target도 같이 업데이트 된다.

 

 

 

위의 문제들을 해결하기 위한 DQN의 솔루션은 다음과 같다.

 

1. Go deep

2. Capture and replay

   - correlation between samples

3. Separate networks: create a target network

   - Non-stationary targets

 

 

1. Go deep

여러 layer 사용

 

 

2. Experience replay

action을 취하는 루프를 돌면서 이 액션을 통해 상태(s)를 받아오게 된다.

이때, 학습하지 않고 저장한다. (buffer라는 데에 저장!)

수만 장을 저장하고 일정한 시간이 지나면 여기서 랜덤하게 몇 개 가져와서 학습을 시킨다.

랜덤하게 가져오면, 전체의 데이터 분포 비슷해질 것이다.

 

3. Separate target network

Qpred만 업데이트하도록 한다.

 

1) 네트워크를 복사한다. 

2) $\theta$만 업데이트한다.

3) 어느정도 시간이 지난 다음에 (C 스텝마다) $\hat{Q}=Q$ 복사한다.

 

 

 

이러한 방법을 써서 DQN으로 CartPole 게임을 학습시키면 빠른 epoch 내에 막대기가 안넘어지고 유지된다.

댓글