'전체 글'에 해당되는 글 162건

  1. 2018.11.11 ML-Agents Toolkit 개요
  2. 2018.11.08 유니티 mlAgent 설치하기 (version. v0.5 ) - 맥북

ML-Agents Toolkit 개요

mlAgent 2018. 11. 11. 04:31

최근에 리처드 도킨스의 지상 최대의 쇼를 읽고 있다.

유전자는 섞이는 것이 아니라 무수한 조합으로 각 목적에 맞게 점점 진화하는데.

이 과정이 무수하게 시뮬레이션을 하여 정제하는 머신러닝을 연상시켰다. 


책에서 리처드 도킨슨이 만든 진화 프로그램이 있는데 

직접 유전적으로 진화하는 과정을 볼 수 있도록 프로그래밍 해둔 것이라하여 흥미로워 찾아보았다.


https://youtu.be/jAy9TIp3qH4

 


<ml-agent 사용하기 위한 기본 아이디어>


agent: 교육을 받는 NPC

entities: 환경


강화 학습 과제의 기본 요소 3가지


1.관측 

agent 관점에서 환경 속성을 측정한다. 

(, 환경상태와 혼동하지 . 환경상태는 전체 장면에 대한 정보임. agent 관찰은  agent 인식하는 정보 포함되며 전체 장면의 일부만 인식한다.)


2.행동  

agnet 취할 있는 행동. 


3.보상 신호  

agent 얼마나 과제를 수행하고 있는지를 나태내는 스칼라 . 


강화 학습 과제의 기본 요소를 정의한 후에 agent 행동을 교육할 있다. 

교육은 보상을 극대화하여 agent 최적의 행동이 무엇인지를 알게되는 많은 시뮬레이션을 함으로써 성취된다. 

핵심은 보상을 최대화하는 행동을 배우는 것이다. 

강화 학습에서는 학습된 행동을 policy(정책)라고 부른다. 이것은 관측에서의 행동 최적의 보상을 가져온다.

시뮬레이션을 실행하여 policy 학습하는 과정을 training phase(학습 단계)라고 한다. 

학습된 policy 사용하는 agent 함께 게임을 하는 것을 inference phase(추론 단계)라고 한다. 


<ml-agent 주요 구성 요소>


1.learning environment(학습환경)

유니티 씬과 모든 게임 캐릭터를 포함.


2.python API

교육에 사용되는 모든 기계 학습 알고리즘을 포함. 

learning environment 달리 python API unity 일부는 아니지만 외부 communicator 통해 외부와 통신한다.


3.External Communicator(외부 커뮤니케이터)

learning environment pythonAPI 연결한다. 학습환경 내부에 위치한다. 




<learning environment>

학습 환경에는 unity장면을 구성하는데 도움이 되는 가지 추가 구성요소가 존재한다.


1-1. Agents

unity game object 첨부되어 관찰, 작업의 수행, 적절한 보상(negative/positive) 할당한다. 

agent 정확히 하나의 brain 연결된다. 


1-2. Brains

agent 대한 결정을 내리는 논리를 캡슐화한다. 

brain agent 대한 policy 유지하고 agent 각각의 경우에 취해야하는 조치를 결정한다. 

agent에게서 관찰 보상과 관련된 정보를 받고 행동을 명령하는 구성요소이다. 


1-3. Academy

관측 의사 결정 과정을 조정한다. academy에서는 렌더링 품질 환경 실행 속도와 같은 환경 전반에 걸친 매개 변수를 지정할 있다. 외부 communicator 아카데미 내에 존재한다. 


모든 learning environment에는 항상 현장의 모든 game object 대해 하나의 글로벌 academy agent 존재한다.(img참조)

agent brain 연결되어야 하는 된다. 비슷한 관찰 행동을 하는 agent 동일한 brain 연결 있다.

하지만, 말은 agent 각각의 경우에서 동일한 관찰 조치를 것이라는 의미는 아니다. 

, brain 모든 가능한 관찰 행동의 공간을 정의하는 반면, 그것에 연결된 agent 각각 고유한 관찰 조치값을 가질 있다. 다른 행동을 수행하는 agent 경우에는 기존의 agent brain 공유할 없다. 수행하는 행동 혹은 공간에 따라 다른 brain 연결된다.


<정리>

game object agent 연결되며 agent brain 연결된다. 

brain agent로부터 관찰과 보상 정보를 받고 행동을 명령합니다.

academy 환경 전반의 설정을 제어하는 외에도 모든 agent brain 동조(연결)되어있는지 확인한다. 




<brain>

다양한 훈련 추론을 위해 가지 유형의 brain 존재한다.


1.external

python API 사용하여 의사결정이 이루어지는 . brain 수집한 관찰 보상 정보는 외부 communicator 통해 python API 전달된다. 그런다음 Python API agent 수행해야하는 행동을 명령한다.


2.internal

내장된(embedded) tensorFlow 모델을 사용하여 의사결정이 이루어지는 . 내장 TensorFlow 모델은 policy(학습된 행동)이다. brain 모델을 직접 사용하여 agent 대한 작업을 결정한다.


3.player

키보드 또는 컨트롤러의 실제 입력을 사용하여 의사 결정이 이루어지는 . 여기서는 플레이어(사용자) agent 제어한다. 두뇌가 수집한 관찰 보상 정보는 agent 제어하는데 사용되지 않는다. 


4.heuristic(지능형)

하드 코딩 동작을 사용하여 의사 결정이 이루어지는 . 이것은 현재 정의된 캐릭터의 행동이 얼마나 유사한지,

하드 코딩 규칙이 있는 agent 행동이 훈련된 agent 비교하는 방법을 디버깅하거나 비교하는데 유용하다.


+external communicator 통해서 관측, 보상 행동을 python API 전송하도록 internal, player, heuristic brain 구성할 있다. 




<Training Modes>


1.Built-in Training 추론

ml-agent에는 지능형 agent 교육하기 위한 최첨단 알고리즘 구현이 포함되어 있다. 

모드에서는 brain 유형은 학습 중에는 external 추측 중에는 internal 설정된다. 

, 훈련 중에는 현장의 모든 agent들이 external communicator 통해 python API에게 관찰에 대한 정보를 보낸다. (이것은 external brain 관련된 행동이다.) python API 이러한 관찰을 처리하고 agent 취할 행동을 명령한다. training phase(교육 과정)에서 이러한 조치는 대부분 python API agent 위한 최상의 policy(학습 행동) 배우는데 도움을 준다. 

학습이 끝나면 agent 대한 policy 내보낼 있다. 모든 구현이 tensorFlow 기반으로 한다는 것을 감안할 , policy tensorFlow모델 파일일 뿐이다. 그런 다음 추론단계에서 brain유형을 internal 전환하고 training phase에서 생성된 tensorFlow 모델을 포함시킨다. 추론 단계에서 agent 여전히 관측을 하지만 pythonAPI 보내지는 대신 internal 모델에 입력되어 모든 시점에서 agent 최적화된 행동을 취하도록 한다.


요약: built-in 구현은 tensorFlow 기반으로 한다. 따라서, 교육 중에 pythonAPI tensorFlow 모델을 배우기 위해 받은 관측 값을 사용한다. 모델은 추론 중에 internal brain 내장되어 brain 연결된 모든 agent 대해 최적의 행동을 생성한다. internal brain 현재 실험중이기 때문에 tensorflow모델과 tensorflowsharp라이브러리 활용만 하도록 제한되어있다. 


*built-in training예제 (3차원 balance ball)

https://github.com/Unity-Technologies/ml-agents/blob/master/docs/Getting-Started-with-Balance-Ball.md


2.Custom Training 추론

교육 추론에 자체 알고리즘을 사용. 경우 brain 유형은 교육 추론 단계에서 모두 external 설정되며 장면의 모든 agent동작은 python에서 제어된다. 


*python API 대한 추가적 자료

https://github.com/Unity-Technologies/ml-agents/blob/master/docs/Python-API.md


3.Curriculum 학습

복잡한 환경에서 복잡한 행동을 훈련할 유용. curriculum학습은 machine learning 모델을 훈련하는 방법으로, 문제의 어려운 측면을 모델에 점진적으로 도입한다. 방식은 인간이 일반적으로 배우는 방식이다. 


강화학습이 실제로 어떻게 작동하는지 생각할 , 학습 신호는 훈련을 통해 때때로 받는 보상이다. 작업을 수행하기 위해서 agent 교육을 출발점은 무작위 policy이다. 무작위 policy agent 순환으로 운영할 것이고, 복잡한 환경에 대한 보상을 거의 달성하지 못하거나 아예 달성하지 못한다. 따라서, 교육 초기에 환경을 단순화함으로써 agent 무작위 policy보다 의미있는 것으로 신속하게 업데이트 있게하여 환경이 점진적으로 복잡해짐에 따라 점진적으로 개선한다. ml-agent tool kit academy내의 맞춤 환경 매개변수 설정을 지원한다. 이를 통해 어려움이나 복잡성과 관련된 환경 요소를 교육 진행 상황에 따라 동적으로 조정할 있다. 


*curriculum learning( 높이 증가 환경 복잡성)

https://github.com/Unity-Technologies/ml-agents/blob/master/docs/Training-Curriculum-Learning.md


4.Imitation Learning

agent 수행하기를 원하는 행동을 지시할 실제 사례를 제공.

모드에서 트레이닝 brain 유형은 player 설정되고 컨트롤러와 함께 수행 모든 작업이 기록되어 pythonAPI 전송된다. 모방 학습 알고리즘은 인간 플레이어의 관찰 행동 쌍을 사용하여 policy 학습한다. 


*모방 학습과 교육(바나나 수집기)

https://github.com/Unity-Technologies/ml-agents/blob/master/docs/Training-Imitation-Learning.md


<Flexible Training Scenario>


1.Single-Agent

명의 agent 하나의 brain 연결되어 있음. 보상신호가 있음. 싱글 플레이어 게임.

 

2.Simultaneous Single-Agent

하나의 두뇌에 연결된 독립적 보상신호를 가진 여러 agent. single-agent 병령화 버젼. 교육 프로세스의 속도를 높이고 안정화 있음. 비슷한 행동을 배워야하는 환경에서 동일한 캐릭터의 버젼이 여러개 있을 유용. 


3.Adversarial Self-Play

하나의 brain 연결된 보상 신호를 가진 개의 상호 작용하는 agent. 2인칭 게임에서 적의 셀프 플레이는 agent 점점 숙련되고 항상 완벽하게 일치하는 상대를 가질 있게함. alphago 교육할 사용한 전략. 

https://gym.openai.com/


4.Cooperative Multi-Agent

하나 또는 여러 개의 서로 다른 brain 연결된 보상 신호와 함께 여러 상호 작용을 하는 agent. 

시나리오에서 모든 agent 단독으로 수행 없는 작업을 수행하기 위해 함께 작업한다. 

예를들어, agent 부분 정보에만 접근할 있는 환경이 있다. 환경에서 agent 무제를 해결하기 위하여 협동해야 한다.


5.Competitive Multi-Agent

하나 또는 여러 개의 서로 다른 brain 연결된 보상 신호로 상호 작용. 시나리오에서는 경쟁에서 이기거나 제한된 리소스를 얻기 위해 서로 경쟁해야 한다. 스포츠가 해당된다. 


6.Ecosystem

하나 또는 여러 개의 다른 brain 연결된 독립적인 보상 신호로 상호작용. 시나리오는 동물원 혹은 도시 환경 내의 자율 주행 시뮬레이션과 같이 서로 다른 목표를 가진 동물이 상호 작용하는 작은 세계를 만드는 것이다. 


<추가적인 특징>

1.On Demand Decision Making

필요할 때만 의사결정을 요청할 있음. 이를 통해 기반 게임, agent 이벤트에 반응해야하는 게임 또는 agent 다양한 기간 동안 행동을 취할 있는 게임을 학습 있음. 의사 결정과 주문형 결정 간의 전환은 버튼을 번만 클릭하면 된다. 


*주문형 결정 기능에 대한 참조

https://github.com/Unity-Technologies/ml-agents/blob/master/docs/Learning-Environment-Design-Agents.md#on-demand-decision-making


2. Memory-enhanced Agents

과거 관측을 축적하여 학습을 해야할 . 트레이너에게 long short-term memory(LSTM) 구현을 제공하여 agent 이후 단계에서 사용할 메모리를 저장할 있도록 . 


*훈련 LSTM 사용법

https://github.com/Unity-Technologies/ml-agents/blob/master/docs/Feature-Memory.md


3. Monitoring Agent’s Decision Making

모니터링 창을 띄우는

https://github.com/Unity-Technologies/ml-agents/blob/master/docs/Feature-Monitor.m 


4.Complex Visual Observations

agent 여러 카메라를 사용할 있음. 이를 통해 agent 여러 시각적 스트림 정보를 통합하여 학습할 있다. 

여러 시점의 다른 카메라를 필요로 하는 자율 운전 차량을 교육하거나 항공 일인칭 비주얼을 통합하는 탐색 에이전트같은 시나리오에서 사용. 


*에이전트에 다중 카메라 사용

https://github.com/Unity-Technologies/ml-agents/blob/master/docs/Learning-Environment-Design-Agents.md#multiple-visual-observations


5.Broadcasting

agent관찰 행동이 pythonAPI 전송. imitation learning 의해 활용됨. 플레이어의 brain 대한 관찰과 행동은 데모를 통해 agent policy 학습하는데 사용됨. 이것은 특히 heuristic internal brain에서 유용하게 사용됨. 특히, agent동작을 디버깅할 유용하다. 


https://github.com/Unity-Technologies/ml-agents/blob/master/docs/Learning-Environment-Design-Brains.md#using-the-broadcast-feature


6.Docker Set-Up(Experimental)

python이나 tensorflow 직접 설치하지 않고 ml-agent 쉽게 설정할 있도록 docker컨테이너를 만들고 실행하는 방법에 대한 가이드

https://github.com/Unity-Technologies/ml-agents/blob/master/docs/Using-Docker.md


7.Cloud Training on AWS

Amazon Web Services (AWS) 시스템에서 ML-Agents 툴킷을 사용하기 쉽게하기 위해 사전 구성된 Amazon Machine Image (AMI) 이외에 EC2 인스턴스를 설정하는 방법에 대한 지침  제공합니다.


8.Cloud Training on Microsoft Azure

Azure 컴퓨터에서 ML-Agents 도구 키트를 쉽게 사용할  있도록 사전 구성된 데이터 과학 이미지 외에 가상 컴퓨터 인스턴스를 설정하는 방법에 대한 가이드  제공합니다 .



reference

https://github.com/Unity-Technologies/ml-agents/blob/master/docs/ML-Agents-Overview.md


전체적인 개요를 정리하느라 오늘 고생했다...변역기의 번역을 해석하는...

내일은 환경 시작과 고유 환경을 만드는 실습을 진행해볼 것 같다.


https://github.com/Unity-Technologies/ml-agents/blob/master/docs/Getting-Started-with-Balance-Ball.md

https://github.com/Unity-Technologies/ml-agents/blob/master/docs/Learning-Environment-Create-New.md







Posted by 도이(doi)
,

무니무니 교수의 시뮬레이션을 보고

머신러닝을 공부하게 되었다.


무니무니 교수는 ode(open dynamics engine)를 사용하는데...

유니티에서도 머신러닝 시뮬레이션을 할 수 있게 되었다! :) 


한 번 setup을 해보도록 하자!

1. 유니티 머신러닝 toolkit download 받기.


2. 유니티는 2017.4 이상 버젼을 다운 받아야 한다. (유니티 허브 다운)


3. 파이썬 3.6버젼 다운(현재 다른 버젼은 지원하지 않음.)

anaconda 다운로드

*anaconda python downgrade방법 (**파이썬 3.6버젼으로 변경.)



mlagent의 파이썬 패키지를 설치

터미널 열기 -> cd ~ (홈으로 간다.) > pwd (현재 위치 확인) > cd (본인의 ml-agents파일로 이동 저장한 toolkit을 열어서 ml-agents-master안에 있는 ml-agents폴더를 가져온다. 드래그 앤 드롭.) > ls(리스트 확인) > pip3 install . (현재 위치에 설치)

mlagents-learn --help로 설치를 확인할 수 있다. 


*unix언어



유니티 hub > installs > 우측 점 세 개> 

add component에서 linux build support를 다운 받는다. (아래와 같은 이미지 이미 설치 된 상태.)



새로운 프로젝트를 생성한다.


1. 다운받은 mlagent-toolkit인 ml-agent-master > unitySDK > Assets > ML-Agents를 오픈한다.

*처음에 파일을 열면 4개의 오류코드가 뜬다. 이 문제는 패키지를 임포트하면 해결된다. 

2. Edit > Project Setting > Player 로 간다.

3-1. Options에 있는 OtherSetting으로 간다.

3-2. Scripting Runtime VersionExperimental로 변경한다. (.NET 4.6 Equivalent or. NET 4.x Equivalent)

* 재시작하게 됨. 

3-3. Scripting Defined SymbolsENABLE_TENSORFLOW를 추가 후 엔터를 누른다. 

4. File > Save Project로 프로젝트를 저장한다. 


TensorFlowSharp Plugin을 다운받는다.  

다운 받은 후에 프로젝트에 import한다. 

Assets > ML-Agents>Plugins>Computer에 설치되었는지 확인한다. 


<미리 세팅되어 있는 모델을 작동>

1. Assets> ML-Agents>Examples>3DBall의 Scene파일을 연다.

2. Ball3DBrain 오브젝트의 Brain 컴포넌트의 Brain Type을 Internal로 변경한다.

3. 플레이한다.


<강화학습을 통하여 Brain 교육시키기>

1.Ball3DBrain 오브젝트의 Brain 컴포넌트의 Brain Type을 External로 변경한다.

2. player setting > Resolution & Presentation > 

Run in Background 체크 / Display Resolution Dialog: Disabled 



2.터미널을 연다.

3. mlagents-learn을 입력한다. 유니티 아스키 아트가 나오면 제대로 따라왔다는 이야기.

4. config/trainer_config.yam1의 위치를 찾아서 확인한 후에 

mlagents-learn config/trainer_config.yaml --run-id=firstRun --train 를 입력한다. 


5. 아래와 같은 이미지가 뜨고 가장 하단의 INFO에 "Start training by pressing the Play button in the Unity Editor" 말이 나오면 unity에서 play 버튼을 누른다.


*아나콘다는 실행된 상태여야 한다. - anaconda navigation창을 실행시켜 둘 것. 


6. 교육이 제대로 실시되고 있다면 아래와 같은 이미지가 나올 것이다. 



훈련을 끝맞춘 후에는 

1. ctrl+c로 훈련에서 빠져나올 수 있다.

2. ml-agents-master > models 폴더를 프로젝트 unitySDK>Assets>ML-Agents>Examples>3DBall>TFModels의 하위 항목으로 넣는다. 

3. Ball3DBrain 오브젝트의 Brain 컴포넌트의 type of Brain을 Internal로 바꾼다. 

4. models 파일 중에 ....bytes로 끝나는 파일을 Brain컴포넌트의 Graph Model에 드래그앤 드랍한다. 

5. play 버튼을 누르면 훈련 받은 simulation 결과가 작동하게 된다. 



reference:

https://github.com/Unity-Technologies/ml-agents/blob/master/docs/Installation.md

https://github.com/Unity-Technologies/ml-agents/blob/master/docs/Basic-Guide.md

https://github.com/Unity-Technologies/ml-agents/blob/master/docs/Readme.md

'mlAgent' 카테고리의 다른 글

mlagent 기본적인 환경 구축하기  (0) 2018.11.18
3d ball 환경 분석하기 + tensorBoard사용법  (0) 2018.11.14
ML-Agents Toolkit 개요  (0) 2018.11.11
Posted by 도이(doi)
,