Computer Science/DL, ML

강화학습 Deep Q-Network(DQN)에 대한 정리

TwinParadox 2020. 8. 27. 01:15
728x90

현재 학교 졸업 프로젝트로 강화 학습 관련 프로젝트를 진행하고 있다.

그러면서 DQN에 대한 차이를 설명하면서 여러 자료를 보게 됐고, 이를 좀 정리하기 위해 남겨 놓는다.

 

Deep Q-Network

  • Q-Learning에 Value Function Approximation(VFA)을 사용하는 것은, Weight Update 과정에서 샘플들 간의 상관관계와, Non-stationary Target으로 인해 수렴하지 않고 발산 가능성이 있다.
  • 이러한 문제를 해결할 필요가 있는데 Deep Q-Learning(DQN)이 이 문제를 Experience Repaly와 Fixed Q-targets으로 해결을 시도하였다.
  • State, Action을 Q-Table로 정의하기에 Table이 너무 방대해지는 경우(ex, 간단한 게임), DQN을 종종 사용한다.

Experience Replay

  • Experience Replay Buffer에는 DQN의 학습 과정에서 매 step마다 주어지는 stage, action, Q-Value에 대한 값들, 즉 경험(Experience)이 저장되며, 저장된 경험을 이용해 Network를 학습할 때 사용한다.
  • Experience Replay를 사용하면, 과거에는 그냥 Nerual Network의 Weight와 Policy를 한 번 업데이트해주고 끝날 동작이, Replay Buffer에 남아 있다가, 이 값을 바탕으로 Network의 Weight를 Update하는데 사용하게 된다.
  • 이 과정에서 대부분 mini-batch 크기만큼 Random-Sampling을 거친 Experience 데이터를 추출해서 Weight를 갱신하는데, 현재의 데이터보다 연관성이 떨어져 독립성을 확보할 수 있다.
  • 또한, Weight Update 과정에서도 Q-Learning의 방식을 사용하여 Target Value가 변경되어 있으며 이 변경된 값에 대해 새로운 독립적인 데이터로 Weight Update가 가능하다.

FIxed Q-Targets

  • Target Weight를 고정한다. 기존의 Q-Learning에서 Target의 변화 문제를 아예 고정하는 방식으로 대응한다.
  • Target Update 과정에서는 Update할 때 사용하는 Weight와 실제 Update할 Weight를 나누어 사용한다.
  • 이런 방식으로 궁극적으로 Q-Learning에서 잠재적으로 Weight가 발산해버리는 문제를 방지하도록 한다.

Algorithm

DQN Algorithm

최초 실행 시점에 용량 N을 갖는 Replay Memory를 할당해주고, Q-function은 Random Weights로 초기화한다.

에피소드의 정의는 적용하고자 하는 문제에 따라 다르다. Atari 게임이나, 슈퍼마리오 같은 것은 게임 한 판을 의미할 수 있고, 알고리즘 트레이딩에서는 학습에 사용되는 거래일 전체로 정의할 수 있다.

 

이후, M번의 episode를 진행하는데, 매 에피소드마다 다음과 같은 동작을 수행한다.

 


최초의 State를 설정한 후, 전처리를 수행

 

에피소드 하나가 끝날 때까지,(Step이 끝날 때까지)

  • epsilon에 따라서 Random Action을 지정하거나, 공식에 따라 정의된(Q를 최대화하는) Action을 선택한다.
  • Action을 수행한 후, 그에 대한 Reward와 Action으로 인해 변화된 상태를 받는다.
  • Next State를 현재 State와 Action, Action으로 인해 변화된 상태로 설정한 후, Next Policy에 대한 전처리 진행
  • Replay Memory D에 t step에서의 State, Action, Reward, (t+1) step에서의 State를 저장한다.
  • D에서 무작위로 minibatch size만큼의 기록을 가져와서, Epsiode가 종료되는 경우와 그렇지 않은 경우에 따라 Ground Truth로 활용될 Y를 지정하고, 공식에 따라서 Gradient Descent를 사용해 학습한다.

 

알고리즘 수행 과정에서 참고할 부분

Gradient Descent를 진행하기 위해 일종의 Ground Truth인 y를 지정할 때, 마지막 스텝인 경우는 누적된 Reward를 그대로 사용하고, 마지막 스텝이 아닌 경우에는 Q-Value를 최대로 하는 정책에서의 Reward에 dicsount factor를 곱한 값을 더한, 예상 Reward를 y로 지정한다. 이 때, Discount Factor인 gamma의 크기를 어떻게 하느냐에 따라, 미래의 예상 Reward에 대한 가중치가 달라진다.

 

 

DQN 그 이후...

DQN을 더 개선하기 위해 Double DQN이나 Prioritized replay, Dueling DQN 등이 논의된다. 주로 GitHub에서 DQN을 기반으로 한 프로젝트들은 DDQN이라는 이름으로 Double 혹은 Duleing DQN을 사용하고, 여기에 대해 간략하게 정리하면 다음과 같다.

 

Double DQN

DQN에서 필요 이상으로 Q-Value가 커질 경우, Q-Network의 성능 저하가 발생하는데, 이 문제를 해결하기 위해서 두 개의 Q-Network를 사용한다. 이 부분은 사실 Target Network 개념으로 어느정도 구현되어 있다. 앞서 보인 알고리즘 예시에서는 Action을 취하는 Network가 Q-Value를 계산하는 Network가 가중치를 공유한다. 여기서 Q-Value를 계산하는 Network를 Target Network로 만들어서 Network를 2개가 되도록 하여 Double DQN을 구현할 수 있다. 즉, Action을 취하는 Network와 Q-Value를 가져오는 Target Network, 이렇게 2개의 Q-Network를 이용하여 Double DQN을 구현한다는 것이다.

 

Dueling DQN

Dueling은 Q-Value 계산 이전에, Value Function과 Advantage라는 개념을 두어 둘을 나누었다가 합치는 방식으로, 여기서 Value Function은 Q-Value와 유사하다. 결국 Value와 Action에 대한 정보를 나눠 접근하여 성능 향상을 도모하는 것이다. 이렇게 Action과 Value를 나눠 접근하는 개념은 Actor-Critic과 유사하다.

Dueling DQN은 앞서 언급한 DQN과 Double DQN과는 다르게, 중간의 Value와 Advantage 분기로 인해 Network의 중간 구조가 달라진다. 

 

요약

  • DQN은 간단하게 이야기하면 Q-Value를 Neural Network로 구하는 것이다.
  • Fixed Q-target이나 Experience Replay를 통해서 Q-Learning에서의 샘플링 문제와 Non-stationary target 문제를 해소하여 발산하지 않도록 하였다.
  • Neural Network의 Hyperparameter 조정, Replay Buffer의 크기 조정, Target Network Update 주기 등을 통해 성능 개선을 도모할 수 있다.

 

 

Reference

https://arxiv.org/abs/1312.5602

https://arxiv.org/abs/1509.06461

youtu.be/gOV8-bC1_KU

https://greentec.github.io/reinforcement-learning-third/

 

728x90
728x90