오랜만에 포스팅이다. Reinforcement learning을 공부해보자. 한글로는 강화학습이라고 하는데 사실은 이 분야는 Data Mining이라기보다는 Machine Learning 부분이다. 그런데 Data Mining 폴더에 집어넣는 이유는... 모르겠다. 아무튼 Reinforcement learning을 공부해보자.


이번 포스팅에서는 Reinforcement learning의 개념을 알아보려고 한다. 우선 Supervised learning을 먼저 생각해보자. 이 개념은 아주 간단하다. 주어진 데이터를 기반으로 학습을 진행하여 학습되지 않은 데이터에 대해서 예측을 하는 것이다. 단, 그 학습을 할 때 사용되는 데이터는 반드시 레이블을 가지고 있어야 한다. 이것이 Supervised learning이다. Supervised learning은 기본적으로 데이터를 가지고 학습이 진행된다.


그런데 Reinforcement learning은 조금 개념이 다르다. 일단 데이터 뭐 이런거 잊어보자. 내가 알파고(Agent)를 만든다고 해보자. 이 알파고의 최종 목적은 바둑을 둬서 이기는 것이다. 알파고는 이기면 항상 보상을(Reward) 받게 된다. 그런데 알파고는 이길 수도 있고 질 수도 있다. 뭐에 따라서? 상대방이 어떻게 두느냐에 따라서(환경). 상대방이 어떻게 두더라도(여러 환경) 알파고는 최대한 이길 수 있는 수를(Reward를 쫒아서) 두도록 학습해간다.  바둑이라는 예로 Reinforcement learning을 설명해봤다. 한 가지 예를 더 들어보자. 탁구를 치는 로봇을(Agent) 만든다고 해보자. 그 로봇은 오는 공을 받아칠 때마다 잘했다고 칭찬을 받는다(Reward). 상대방은 여러 방향에서 다각도로 공을 준다(여러 환경). 로봇은 상대방이 주는 공을 항상 받아칠 수 있도록 계속적으로 Reward를 쫓아서 학습되어간다. 


조금 더 이론적으로 설명해볼까?


Agent가 (알파고, 탁구로봇)

주어진 환경에 대하여 (상대방이 두는 바둑 수, 상대방이 치는 탁구)

Reward를 얻을 수 있는 (바둑을 이기기, 상대방의 공을 잘 쳐내기)

방향으로 계속 학습해나가는 것 (상황에 따른 최고의 바둑 수를 두기, 상황에 따른 최적의 각도와 힘으로 공을 쳐내기)


바둑을 예로 한번 더 설명해보자. Reinforcement learning을 하는 과정을 보면 알파고가 여러가지의 기보 데이터를 가지고 학습을 진행한다. 


기보1 : A, B, C, D, E, ..., Z → 승리


알파고가 A를 두고 상대방이 뭐를 뒀을 것이고 그 상태에서 B를 두고 상대방이 또 뭐를 뒀을 것이고 그 상태에서 C를 또 두고 이런 식이다. 이 기보의 결과가 승리라고 해보자. 그럼 알파고는 A, B, C...Z까지의 결정을 올바른 결정이라고 학습한다. 그런데 이게 상식적으로 맞나? 아니다. 예를 들어 B가 실수여도 나머지를 잘 둬서 결론적으로 승리를 할 수 있다. 반대로 특정 수를 매우 잘 뒀어도 나머지를 잘못둬서 결론적으로 패배했을 수도 있다. 그런데 강화학습에서는 이것들이 계속적으로 반복되어 수많은 기보로부터 학습을 하면 그 영향이 사라진다고 말하고 있다.


이 과정을 다시 한번 예제로 들어보자. 


DeepMind에서 스타크래프트를 하는 인공지능도 개발 중이라고 하는데, 스타크래프트를 예로 들어서 설명해보자. 수 많은 스타크래프트 개임 데이터가 있다고 하자. 그 중에 한 경기가 아래와 같이 흘러갔다.


스타1 : 벙커링 실패, 저글링러쉬로 본진이 거의 초토화, 드랍십공격 성공, 베틀크루져생산, 저크폭탄드랍방어 → 승리


자 대충 이런 경기가 있었다고 해보자. 이 태란 유저는 승리를 했다. 그런데 벙커링 실패하고 저글링러쉬로 본진이 거의 초토화됐는데 역전승을 한 경우이다. 강화학습에서는 이런 경우에도 벙커링 실패한 것과 저글링러쉬로 본진이 거의 초토화된 상태에 대해서도 올바른 결정으로 판단을 한다는 것이다. 단, 이런 경우는 거의 없기 때문에 스타크래프트 데이터를 계속적으로 학습하다보면 그 영향은 사라진다는 것이다. 


이제 다시 이론적으로 말해보자. 강화학습은 어떤 agent가 최종적으로 reward를 얻기 위하여 그 과정의 행동 결정 하나하나를 최고의 행동으로 결정하는 것을 반복하여, 최종적으로 optimal한 decision process를 갖춘 agent를 만드는 과정인 것이다. 아래의 그림을 봐보자. 

이 그림에서 START state에서 로봇이 움직인다. +Reward로 가면 성공, -Reward로 가면 실패이다. 그렇게 가기 위해서 로봇은 이리저리 움직인다. 벽면에 부딧히기도 할 것이고 실패도 하고 성공도 할 것이다.


그런데 계속적으로 로봇을 훈련을 시키면 가장 Optimal하게 아래와 같이 간다


이렇게 움직이는 거를 아래와 같이 구현해봤다.


위의 그림이 강화학습을 한 최종 결과인데, EAST, NORTH, WEST, SOUTH는 각각 그 방향으로 움직일 확률을 의미한다. 즉, 7에서 0.84의 확률로 EAST로 움직이고, 6에서 0.88의 확률로 NORTH, 5에서 0.92의 확률로 NORTH, 4에서 0.96의 확률로 다시 EAST로 가면 결국 +REWARD(PEND)로 가게 된다는 것이다.


※ 여기서 이해하기 쉽게 설명하기 위해서 저 숫자를 확률이라고 했는데, 사실은 확률이 아니라 그 State에 있는 value 값이다. 이것에 대해서는 다음 포스팅에 설명하려고 하니 여기서는 그냥 확률 정도로 이해하는 것이 편할 것 같다.


다음 포스팅에서는 Reinforcement learning에 대한 개요는 끝내고 조금 더 디테일하게 Reinforcement learning의 Markov Reward Process에 대하여 이야기 해보려고 한다.

Posted by 빛나유
,