본문 바로가기

컴퓨터 공학/머신러닝

[ML-agents]관찰, 행위, 보상이란?

ML-agents에 관한 모든 포스팅 내용은 https://github.com/Unity-Technologies/ml-agents 에 있는 내용을 바탕으로 만들어졌습니다. 


 

문서에서 이 툴킷을 설명하기 위해, 게임을 진행할 때 등장하는 NPC를 학습시키는 것을 예로 들고있다. NPC는 "Non Playable Character"의 약어로서 게임에서 상인이나 도움을 주는 사람들로 주로 등장한다. 더욱 올바른 설명을 하기 위해서 더욱 자세한 가정을 하는데 가정은 다음과 같다.

 

  1. 게임의 테마는 전쟁이고, 오로지 두 팀만이 존재한다.
  2. 각각의 팀은 다섯명의 플레이어와 한명의 메딕 NPC가 존재한다. 
  3. 이 메딕은 상처를 발견하고 치료를 해준다. (마치 스타크래프트1에서 메딕같다.)

메딕의 행동은 꽤 복잡하게 정의되어야 하는데 다음과 같은 요구사항이 있다. 첫째로 이 메딕은 자기자신을 보호해야 하기 때문에 언제 이러한 위험한 상황을 벗어나서 안전한 장소로 이동할 지 알아야 한다. 두번 째로 팀 맴버중 어떤 사람이 도움을 필요로 하고 다쳤는지 알아야 한다. 만약 여러명이 다쳤을 경우, 어떤 순서로 치료해야 할지도 결정해야 한다. 마지막으로 좋은 치료를 위해 어떤 위치가 안전할지 파악하고 이 곳으로 이동해서 치료를 진행해야 한다.

 

이러한 상황과, 메딕의 행동을 모두 Rule Base(if, esle)로 정의하는 것은 거의 불가능에 가깝고, 정의한다 할지라도 오류가 분명히 존재함에 틀림없다. 

 

그런데 ML-agents는 이같은 복잡한 행동을 하는 NPC를 만들 수 있는 간단한 방법을 제공하는데 이를 위해 3가지 요소를 정의해야 할 필요가 있다.

 

  1. Obervations(관찰) : 메딕이 환경을 보았을 때 들어오는 정보
    메딕이 환경을 관찰한다면 어떤 정보가 들어올 지 생각해보면, 메딕은 사람이기 때문에 5감(시각, 촉각, 청각, 미각, 후각)에서 오는 정보들일 것이다. 그런데 이 감각들 중에서 실제로 상황을 판단하는데 사용하는 감각은 Visual Observation(시각적 관찰)일 것이다. 따라서 지금 부상자가 있는지, 적은 어디에 있고 미사일은 어디에서 날라오는지 같은 정보들은 NPC의 눈으로 들어오게 된다. 그런데 environment state와 agent의 observation은 확실하게 구분해야 할 것이다.
  2. Actions(행위): 메딕이 취하는 행위
     메딕은 연속적인(continuous) 또는 이산적인(discrete) 액션을 취할 수 있는데 이 것은 에이젼트와 환경에 따라 다른다. 위의 예로 들었던 전쟁게임이 그리드 위에서 진행될 경우에는 "상", "하", "좌", "우"로 이동하는 액션이 있을 수 있다. 그러나 환경이 복잡할 경우에는 direction과 speed 같은 요소의 연속적인 Action이 필요하다.
  3. Reward signals(보상): 메딕이 얼마나 잘 하고있는지를 나타내는 스칼라 값
     매딕은 좋은 행위를 할 수도 있고 반대로 나쁜 행위를 할 수 도 있는데, 이 때 좋은 행위을 하면 보상값이 높고  그렇지 않을 경우에는 나쁜 보상 값을 받는다. 그리고 보상은 매 순간 순간마다 제공되지 않는다는 점을 명심해야한다. 예를들어 팀의 동료를 치료했을 경우에는 적당한 +의 보상을 받고 팀이 죽었을 경우에는 -보상을 받게 할 수 있다. Reward signal은 어떠한 Task와 에이젼트와 통신할 수 있도록 하고, 따라서 에이젼트는 reward를 최대화 하는 방향으로 최선의 행위를 하게 한다.

이러한 세가지 Entities들은 강화학습을 이루는 블록을 정의하고 나서 우리가 할 것은 메딕의 행동을 훈련시키면 되는 것이다. 이는 우리가 세팅해 놓은 환경에서 시뮬레이션을 실행시켜 메딕이 여러번의 시도와 실패를 하면서 최선의 행위을 취할 수 있도록 하는 것이다. 이러한 Behavior(행동)을 강화학습이라는 전문분야에서는  Policy(정책)이라고 불리며 이것은 관찰(observation)과 행동(action)을 매핑시켜주는 역할을 한다. 이러한 policy를 학습하는 시뮬레이션을 training phase라 한다. 또한 이러한 학습된 policy를 NPC에 적용해서 실재로 실행해 보는 것을 inference phase라고 한다.