프로그래밍 농장

ML-Agents 프로젝트 구성 ( agent, brain, academy ) 본문

카테고리 없음

ML-Agents 프로젝트 구성 ( agent, brain, academy )

Tennessee201 2021. 12. 27.
728x90

ML-Agents 프로젝트 구성

 

Unity의 ML-Agents 프로젝트 구성은 제목과 같이 agent, brain, academy로 이루어진다. 이는 아래와 같이 유니티 머신러닝 프로젝트의 대략적인 구성체계라고 볼수있다. 

아래에서 Unity Scene이 유니티 내부프로젝트 구성이며, 위(외부)의 Python 프로그램이 유니티와는 독립적으로 돌아가며, 이는 python을 통해 설치한 ml-agents와 tensorflow이다.

즉, 강화학습에서 머신러닝과 관련된 모델이나 혹은 수학적인 처리 등 low level의 작업들은 유니티 외부에서 일어난다.  다만 유니티는 강화학습을 위한 환경을 마련해주는것이다.

이 구조에서, Unity 내부의 agent 들은 관측된 정보들을 brain과 Academy를 통해서 외부에있는 python program으로 보내고, 외부의 python program은 모델과 관측된 환경에서의 결과값을 다시 유니티 내부로 보내는 구조이다 .


에이전트 (Agent)

에이전트는, 실제로 어떤 행위를 시행하는 '액터(Actor)' 이다. 이는 실제로 자신의 속도, 시야 등 주변정보를 인지할수있는 기능을 한다. 

이를 통해서, 선택과 행동을 실제로 수행하며, 사용자가 원하는 목표의 유무에 따라 보상과 처벌을 받으면서 강화학습하여, 에이전트의 행동이 유도된다.


브레인 (Brain)

브레인은, 에이전트의 선택을 실제로 결정하는 정책(Policy) 결정자이다. 브레인은 선택에 의한 모델을 가지고있으며, 이 모델은 어떤상태에서 어떤행동을 해야하는지 판단하는 논리집합이다. 결국 브레인은 에이전트 행위의 방향성을 결정한다.

또한 하나의 브레인은 동시에 여러개의 에이전트의 정보를 받고 여러개의 결정을 동시에 내릴수있다. 

하지만, 브레인을 공유하는 에이전트가 서로 정보를 교환하는 것은 아니다. 이는 단지 정택과 경향이 같은것이다.

ex) 브레인 = 종족, 에이전트 = 개별 캐릭터 


현재 ml-agents에서는 4가지의 브레인 타입이 존재한다. 

1. 브레인 타입 : External(외부) 

: 외부의 파이썬 프로그램에서 강화학습이 진행되면, 이를 실시간으로 external brain이 받아와서 적용. (가장 많이사용하여 일반적인 타입이다.)

- 외부 파이썬 프로그램에서 모델 제공

- 외부 프로그램과 통신 필요

- 가장 기본 설정 

 

2. 브레인 타입 : Internal(내부) 

: 이미 강화학습이 진행된 모델파일을 유니티에 import해서 사용하는것이다. ( 추가학습 불가능)

- 유니티 프로젝트에 포함된 모델 사용

- 외부 프로그램과 통신이 필요 없음

- 이미 학습된 모델을 시연할때 사용 

- 추가 학습 불가능 

 

3. 브레인 타입 : Player 

: 사용자의 입력을 그대로 brain을 거쳐서 agent로 전달하는것이다. 

- 플레이어 입력을 그대로 전달 

- 테스트에 주로 사용

- 모방(Imitation) 학습에 사용 : 인간 사용자의 플레이를 모방함 

 

4. 브레인 타입 : Heuristic 

: 상황에 따른 결정을 미리 정해주는 하드코딩 방식 

- 상황에 따른 선택을 하드 코딩

- 머신러닝과 직접적인 관련은 없음

- 대조군으로 사용하기 적절 


아카데미 (Academy)

 아카데미는 brain 위에 있으며, 학습의 에피소드를 관리한다. (ex.  게임의 한 라운드 . .)

하나의 에피소드에서 여러 에이전드가 죽고,살고 등의 이슈가 발생하는데 적당한 시점에서 아카데미가 모든것을 리셋한 후에 다음라운드를 시작한다. (= 이전 episode를 종료하지만, 학습된 내용을 그대로 저장하고 생성,종료를 통제한다)

-학습 환경의 에피소드 관리

- 브레인들과 에이전트들을 통제

- 외부 프로그램의 메시지를 브레인에게 전달 

728x90