본문 바로가기
AI/Reinforcement Learning

[Reinforcement Learning-4] Deep Q-Network(DQN)에 대한 간단한 이해

by 노마드공학자 2021. 8. 29.
Deep Q Learning(DQN)?

 

강화학습(Reinforcement Learning)과 심층학습(Deep Learning)을 섞으려는 시도는 예전부터 있었습니다.

하지만, 비교적 최근에 들어서야 DeepMind사가 발표한 "DQN"논문에 의해 현실에 적용되기 시작했는데요

어떤문제점들 때문이였을까요??

 

기존 심층강화학습의 한계점

https://limitsinx.tistory.com/152?category=956263 

 

[강화학습-2] Q-Learning에 대한 간단한 이해

Q Learning? Q-Learning은 앞으로 강화학습 공부를 진행해야한다면, 반드시 확실하게 알고 넘어가야하는 부분입니다! Q-Learning을 한줄로 표현하라면 상기의 수학식입니다! (벨만 방정식) Q(s,a) = r + lr * m

limitsinx.tistory.com

 

이전글에서도 다루었듯, Q-learning은 기본적으로 "벨만 방정식"기반의 반복기반 최적화 과정입니다.

벨만방정식

MDP(Markov Decision Process)를 기반으로 보상과 Q-value에 대한 Q-table을 만들어 가지만, 벨만방정식을 보면 현재 state(t)와 다음 state(t+1)가 아주 강하게 영향을 받는것을 알 수 있습니다.

 

즉, 현재 t에서 다음 t+1이 한칸앞의 미래에서는 최적의 값이지만, 최종 목적지까지 도달하는 경우에는 최적이 아닐 수 있다는 문제점이 있습니다.

 

슈퍼마리오

예를들어, 슈퍼마리오 게임을 한다고 생각해보시죠!

지금 당장 점프를 해서 머리위의 벽돌을 깨부시면 점수라는 보상을 얻게된다고 할때

단순히 앞으로 이동만 하는것은 별다른 보상이 없습니다.

이런경우, 슈퍼마리오를 한다면 모든 벽돌을 부시면서 가야 최적의 루트일까요??

즉, 당장과 한스텝후의 보상이 최대라고 프로세스 전체에서 최적이라는 보장이 없다는 것입니다.

 

morioh

 

또한, 딥러닝을 접목한다면 Gradient Descent를 진행할때 Loss Function의 Target(목표)값이 있어야합니다.

 

벨만방정식

DQN에서의 학습값은 위의 벨만방정식 값인데요

그 이유는, 현재 state에서의 최적값은 다음 state에서 a라는 행동을할때 보상이 최고인 지점으로 이동하는것이 합리적이기 때문이죠

 

C(C→D Q=50) D
A B(B→D Q=100)

 

즉, A에서 D로가는 Mission이 있을때, 현재 state가 A라고 가정하면

당연히 'B'를 선택하는것이 C를 선택하는것보다 합리적이겠죠? 

왜냐면, B에서 D까지 갈때의 Q-value가 C에서 D까지 갈때의 Q-value보다 높기때문입니다.

 

출처 : https://gwangmin1.tistory.com/2

DQN은 위와 같은 Loss Function으로 Gradient Descent를 진행하는데요,

결국 우리가 알아야할것은 Q(s,a)이며, 위에서 설명한 이유로 Target은 위의 수식이라고 정리할 수 있습니다.

그러면 내가 반복학습을 진행하며 Prediction값들을 바꿔갈동안 Target값은 어떤 '상수'로 존재해야겠죠??

내가 예측을하는데 매번 목표값도 바뀌면 학습이 진행될 수가 없습니다.

 

하지만 수식에서 확인하실 수 있다시피, Target값은 Prediction값과 같은 변수로 묶여있어 학습이 원활하게 진행되지 않는다는 문제점이 있었습니다.

 


구글이 제시한 해결방안

 

이런 한계점들을 해결하여 세상에 내놓은것이 바로 DeepMind의 "DQN"입니다.

어떻게 해결했는지 세가지 문장으로 요약하면 다음과 같습니다.

 

1. Go Deep

2. Experience Replay

3. Fixed Q target

 

 

Q-learning에서 벨만방정식에 의해 하나씩 Q-table을 작성해주던것을

딥러닝으로 바로 얻어내겠다는것이 DQN입니다.

 

즉, 현재 state를 Input으로 넣었을때 Deep Neural Network의 output으로 Q(s,a)를 얻어내는것입니다.

 

출처 : https://www.slideshare.net/LeejinJeong/deep-sarsa-deep-qlearning-dqn-102870392

 

현재 state와 다음 state간의 Corrleation이 강해서 슈퍼마리오의 예시처럼 시간지연보상(Time delay reward)을 얻지 못하는 경우는 Random Batch를 통해 해결합니다. 

 

즉, 최종 보상까지 가기위한 Q-value들을 위의 그림과 같이 그려져있다고 생각해보시죠

목표는 전체적인 데이터의 흐름에 맞는 붉은색선을 찾아내는것입니다.

하지만 현재상태(t)와 다음상태(t+1) 두점만 고려할시 푸른색선처럼 완전히 다른 결과를 도출해낼수가있죠

 

구글이 제시한 방법은 "Shuffle" 입니다.

"한번에 여러 시점의 상태들을 넣고 Random하게 섞어서 몇개만 뽑은다음 그것들에 대한 결과를 얻어내는 과정을 여러번 반복하면 붉은색선처럼 따라갈것이다" 라는 생각을 하게 된것입니다.

이것은 결과적으로 유의미했습니다.

 

 

출처 : Playing Atari with Deep Reinforcement Learning, Osband at el

 

다음으로, Prediction해야하는 Q(s,a)와 학습시 목표값으로 설정해야하는 Target의 Q(s',a)가 a라는 공통적인 항을 가지고 있어 학습이 원활하지 못하다는 문제였습니다.

이것은, Target에 사용될 Q(s',a)를 Q(s',a^)으로 두어, 즉 다른 파라미터로 두어 Prediction과 Target을 다른 함수로 둚으로써 해결했습니다.

원논문에서는 특정 학습횟수가 넘어가기 전까지 Q(s',a^)을 고정하고, 넘어가게 되면 a^을 다른값으로 바꾸어주는식으로 진행을 했습니다.

 

출처 : https://joungheekim.github.io/2020/12/06/code-review/

 

위의 방법들을 통해 기존의 심층강화학습(Deep Reinforcement Learning)의 한계점을 어느정도 해결?했으며, 거시적인 관점에서는 알파고도 DQN을 기반으로 모델링 되었습니다.

이후 Q를 추정하는 네트워크를 어떤걸 사용할지(CNN,LSTM...)혹은 DDQN 및 여러 다른 많은 방법들이 나오게 되었습니다.

 

 

[참고]

Playing Atari with Deep Reinforcement Learning, Osband at el
김성훈 교수님 RL강의

강화학습/심층강화학습 특강, 아들랑 드 폰테베

댓글