본문 바로가기

머신러닝/[논문으로 짚어보는 딥러닝의 맥]

딥러닝을 이용한 강화학습

학습목표

이번 시간에는 Deep Reinforcement Learning(강화학습)에 대해 배워보도록 하겠습니다.

지금 가장 뜨겁게 관심을 받는 분야이며, 세계에서 가장 집중적으로 연구 중이며 상업화중인 딥러닝 분야입니다.

강화학습은 두 가지 큰 물줄기로 나뉘는데 그중 하나인 DQN에 대해서 알아보겠습니다.

핵심키워드

  • Deep Reinforcement Learning
  • DQN(Deep Q Network)
  • MDP(Markov Decision Precess)
  • Q-Learning

학습하기

 우선, 2013년도에 발표된 "Playing Atari with Deep Reinforcement Learning" 을 먼저 보도록 합시다. 당시에는 아직 구글에 속하지 않았던, Deep mind에서 발표한 논문입니다. 들리는 말로는, 이 논문이 나오고, 구글이 딥마인드를 샀다. 하더라구요. 아마 잠재력을 본 거겠죠. 자 그래서, 오늘은 강화학습에 대한 기본적인 이야기를 하겠습니다. 강화학습은 지금까지본 감독학습과는 좀 다릅니다. X,y을 보고, 그 사이 매핑을 찾는게 아니라, 어떤 리워드 펑션이 주어졌을 때, 그 리워드를 가장 늘릴 수 있는 폴리시 펑션을 찾는게 목적입니다. 단어가 조금 어렵죠. 최대한 간단히 설명드리도록 노력하겠습니다.

 강화학습을 위해서, 일단 현재의 상태가 주어집니다. 지금은 게임 이미지가 되겠죠. 다음으로 어떤 행동을 합니다. 버튼을 누르는 것과 같은. 다음은 리워드를 얻습니다. 다만 하나의 행동으로 바로 어떤 리워드를 올리는 개념은 아니에요. 지금의 행위가 당장 도움이 될지는 모르겠죠. 이건 오히려 안좋은 방법이에요. 쨋든 목적은 최적의 Policy를 찾는겁니다.

 그림으로 보면, 어떤 Environment가 있어요. 모니터와 컴퓨터가 있는 셈이죠. 여기서 State를 보고, Agent가 Action을 취하고, Reward를 얻습니다. 여기서 Policy는 어떤 State에서 어떤 Action으로 가는 Mapping이 됩니다. 이 Policy를 직접 찾는 방법이 Policy optimazation이 되구요. Q-functioning을 사용해 찾는게 DQN입니다. 앞에서, 당장 들어오는 Reward가 중요한게 아니라, 미래의 Reward를 높이는게 중요하다고 했죠. 이게 the expected sum of rewards를 높이고 싶다는, RL의 목표가 되는겁니다. 문제는 미래를 모르니까, 이 미래를 고려한다는게 강화학습의 특징이자 재밌는 점이 되는거죠.

 방금 말한걸 수학적으로 풀어내기 위해, Markov Decision Process, 이하 MDP를 적용합니다. State, Action, Reward가 존재하고, Policy를 찾고자 한다. Transition model이란, 내가 어떤 상태에 있을 때, 어떤 행동을 취했을 때, 다음의 상태는 어떻게 변화할지에 대한 겁니다. 그래서 Transition model을 제대로 알지 못하면, 미래를 정확히 예측할 수 없으니까, 당연히 올바른 Reward를 계산하는게 불가능하고, 올바른 Policy를 구할 수 없게 됩니다. 그런데, 이 Transition model이라는게, 내가 가진 공간이 간단한 미로다. 라고 하면, 위로 간다는 픽셀이 한 칸 위로 올라간다. 고 직관적으로 해결이 되지만, Atari game과 같은 경우에서는 내 모니터 화면에서 조이스틱을 위로 움직였을 때 화면이 어떻게 움직일지를 계산해야합니다. 굉장히 어렵죠. 그래서 앞으로 살펴볼 방법론에서는 이 Transition model을 없앨 것이고, 이를 Model free reinforcement learning이라고 합니다. 보통 Model은 Transition model을 지칭할거에요. 그리고 Policy를 직접 찾게되면, Policy optimazation이라는 방법론이 되는 거고. 지금 저희는 Q-Function을 찾아내는 DQN방법론을 살펴볼거에요. 그럼 이 Q-Function이 뭐냐. 

 이제, 미래를 고려하기 위해서 우리는 R_t라는 걸 정의할겁니다. 이건 t시점으로부터, 미래에 얻을 수 있는 모든 Reward들의 합이 됩니다. 문제는 다 더해버리면 무한대가 될 수도 있고, 저 먼 미래에 얻을 수 있는 Reward보다는 조금더 빠른 미래에 얻을 Reward에 더 높은 가중치를 줄 수 있으면 더 좋은 거겠죠. 그래서 실제로는 Dicounted reward를 R_t로 정의합니다. 이 때 당연히 가중치는 0과 1 사이가 되게죠. 보통 0.999정도의 값을 사용합니다. 그렇게 일종의 Dynamic 또는 Recursive programming이 만들어지죠. 

 그래서 Q-Learning이 뭐냐면, 내가 앞으로 얻을 수 있는 Reward를 최대로 하는 Function인 Q를 찾고하자는거에요. 이 Q를 찾아내면, 우리가 Policy를 얻어낼 수 있어요. Q라는게 현재 State에서, 어떤 Action을 취함으로써 얻을 수 있는 모든 미래에 대한 Discounted reward들의 총합 중 가장 큰 값을 의미해요. 다른 말로는, 이 게임이 끝났을 때, 내가 얻을 수 있는 가장 높은 값입니다. 때문에, 지금 Q-Function을 알고 있다면, 내가 할 수 있는 모든 Action을 취했을 때 가장 높은 Reward를 갖는 Action이 가장 Optimal한 Policy겠죠. 그래서 Q-Function을 학습하면 끝이겠죠. 어떻게? Deep-learning을 활용해서.

 Q-Function을 더 구체화시켜봅시다. 계속 보던 식과 유사하죠. 현재의 상태에서, 어떤 액션을 취하고, 다음 상태와 리워드를 얻고, 다시 이 상태에서 얻을 수 있는 모든 리워드들의 합을 계산하고. 결국 Q라는 걸 Neural Net을 통해 Modeling했다면, 우린 이걸 감독학습으로 학습시킬 수 있게 되겠죠.

 더 자세하게, 초기 상태에서 어떤 액션을 선택하고, 리워드와 다음 상태를 관측한 다음 이를 다시 위의 Bellman equation에 대입하고 다음 리워드와 다음 상태를 관측하고, 이 들을 반복하면, (X,y)쌍이 쌓이게 되는 셈이고, 이렇게 모인 (X,y)를 Neural Net의 데이터셋으로 활용하는 거죠.

 다만, 그렇게 NN를 학습시킬 때, 아웃풋을 1개로 놓게 되면, 많은 액션마다 새롭게 NN를 돌려야할텐데, 그러면 너무 귀찮아지죠. 그래서 액션의 개수만큼 Q값이 나오도록 네트워크를 구성합니다.

 다음은 데이터의 특성이 관한 건데요. 감독 학습을 진행할 때, 데이터에 공통적으로 가정되는 점은 independent identically distributed, 이하 iid 라는 점이에요. 각 특성이 서로에게 의존하면 안되요. 그런데 저희가 앞서 추출한 (X,y)를 생각해보면, 현재의 상태에서 다음의 상태를 체이닝하게 추출하니까 높은 연관성을 갖게되죠. 그래서 이 Correlation을 끊어줘야하는데, 이를 위해서 Experience replay가 제안됩니다.

 Experience replay는 별거 없이, 아래 그림 처럼, Experience memory에 많은 (X,y)가 있으면, 거기서 랜덤하게 데이터셋을 추출해서 사용하는 겁니다.

 그렇게 기본적인 DQN을 살펴봤구요. 이제 Double DQN에 대해 설명해드리겠습니다. 이건 DQN을 할 때 거의 무조건 사용하는 기법이며, 이런게 몇 가지 더 있습니다만, 이번에는 여기까지만 보여드리겠습니다. 이번 논문, "Deep Reinforcement Learning with Double Q-Learning, (2015)"에서는 DQN의 약점 하나를 언급합니다. 바로 Q-Function이 두 곳에서 사용된다는 점입니다. 액션을 선택할 때, 그리고 액션을 평가할 때. 같은 Q를 사용하니까, Q를 Over estimate 한다는 거죠. 그리서 이 Q를 2개로 분할함으로써, Over-optimism을 방지합니다. 그리고 이런 방법론을 Double DQN이라고 합니다. DQN 특성상, 한번 Over-estimate가 발생하고나면, Reward의 흐름 자체가 망가져서, 학습이 잘 안됩니다. 그래서 이런 문제를 해결하는건 중요한 문제고, Double DQN은 좋은 해결방법 중 하나입니다. 이상입니다.