3.5기(200104~)/강화학습

20.03.13 강화학습 1팀 스터티 / DQN agent 소개

KAU-Deeperent 2020. 3. 16. 21:52

발표자 : 김성훈

DQN은 Deep Q network의 약자로서 강화학습에서 상당히 큰 의미를 가지고 있는 개념이다. 이 논문은 2015년도에 등재되었다. 이전엔 RL에 DNN는 사용되지 않고, 오로지 룩업테이블이나 리니어 피쳐를 활용한 구조가 사용되었다. 그 이유는 뉴럴넷과 같은 비선형모델은 강화학습을 불안정하게 만드는 것 뿐만 아니라 종종 학습을 발산시키게 된다. 그러던중  deep mind 에서 연구한 DQN은 DNN에 RL을 접목시켜 사람 수준의 제어를 가능케 하는 2가지 학습 테크닉을 도입하였다. 앞으로 소개할 개념은 deep RL 에서 대부분 사용되며, 강화학습을 공부한다면 필수적으로 알고 있어야할 것이다.

 

DQN에서 사용한 학습 대상은 아타리 게임이다. 게임 화면의 RGB채널을 input으로 한 후, 여러번의 합성곱과 FC를 거친후 도달한 output은 게임기 조작의 action value function이다. 8 방향의 조이스틱조작과, 하나의 버튼으로 가능한 액션의 가짓수는 아무 조작도 하지 않는 것을 포함하여 총 18가지 이다. 뉴럴네트워크의 output layer는 각각 18가지 행동을 취했을 때 앞으로 기대되는 reward의 총합을 근사하여 나타내준다. 그리고 실제 취하는 행동은 작은 확률로 랜덤액션을 취하는 것을 제외하곤, 항상 가장 높은 value를 가진 액션을 선택한다. 이 agent는 학습을 진행하며 어떤 스테이트에서 어떤 액션을 선택하여, 얼마의 리워드를 받고 어떤 스테이트로 도달했는지를 기록하며 학습한다. 뉴럴네트워크의 loss function은 agent의 state에서 Q target ( ' R+ r*maxQ(s',a') ' )과 네트워크가 예측하는 action value function ( ' Q(s,a) ' )사이의 MSE이다. 따라서 네트워크는 예측하는 기대값이 Q target에 가까워지는 방향으로 학습한다.

 

여기서 DeepRL이 잘 작동하기 위한 두 가지 테크닉을 제시하는데 'Experience Replay', 'Fixed Q target'이다. Experience Replay는 agent가 경험했던 state, action, reward, next_state를 튜플로서 저장하여 학습할 때 마다 꺼내 사용하자는 것이다. 이것은 상당히 오래전에 있었던 경험을 현재 학습에 사용할 수 있고, 이미 한 번 학습했던 경험을 여러번 사용하여 학습할 수있게 해준다. 이 방식은 기존에 RL의 학습데이터의 급격한 변동의 폭을 줄여주어, 좀 더 안정된 학습이 가능해진다. ( ' randomizes over the data, thereby removing correlations in the observation sequence and smoothing over changes in the data distribution. ' ) 

또 하나의 테크닉인 Fixed Q target 은 말 그대로 Q target만 을 예측하는 네트워크를 두어 일정 학습 스텝 동안은 고정시켜두자는 아이디어이다. 앞 선 문단에서 언급하였듯, 네트워크의 loss function은 네트워크의 예측과 Q target 사이의 MSE이다. 따라서 Q target은 네트워크의 학습방향과도 같다. 고로 일정 학습스텝 동안 이 Q target을 고정시킨다면, 네트워크의 학습 방향을 일정하게 유지할 수 있다. ( ' The target network parameters are only updated with the Q network parameters every C steps and ard held fixed between individual updates. ' ) 

 

우리는 프로젝트 모델에 이 DQN모델을 사용하고자 한다. DQN이 사용하능한 범위는 continuous state & discrete action이다. 그래서 우리는 드론 agent의 action을 다음과 같이 설정하였다. x1방향 속도와 psi각을 제어목표로 하여, 각 action은 PID 제어입력을 조금 키우거나 줄이는 식으로 만들었다. 프로젝트 agent의 디테일은 다음 발표 때 자세히 소개하고자 한다.

 

위 코드는 experience replay를 구현한 것으로, 학습에서 얻은 정보들을 transition으로서 튜플로 저장하고, 학습할 땐 sample함수를 이용하여, batch size만큼을 텐서로 만들어 반환한다.

 

위 코드는 Fixde Q target을 구현한 것으로, 일정 에피소드에 도달할 때마다 학습된 network의 parameter를 Q target에게 넘겨주도록 하였다.