최근에 리처드 도킨스의 지상 최대의 쇼를 읽고 있다.
유전자는 섞이는 것이 아니라 무수한 조합으로 각 목적에 맞게 점점 진화하는데.
이 과정이 무수하게 시뮬레이션을 하여 정제하는 머신러닝을 연상시켰다.
책에서 리처드 도킨슨이 만든 진화 프로그램이 있는데
직접 유전적으로 진화하는 과정을 볼 수 있도록 프로그래밍 해둔 것이라하여 흥미로워 찾아보았다.
<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)
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를 교육할 때 사용한 전략.
4.Cooperative Multi-Agent
하나 또는 여러 개의 서로 다른 brain에 연결된 보상 신호와 함께 여러 상호 작용을 하는 agent.
이 시나리오에서 모든 agent가 단독으로 수행 할 수 없는 작업을 수행하기 위해 함께 작업한다.
예를들어, 각 agent가 부분 정보에만 접근할 수 있는 환경이 있다. 이 환경에서 agent는 무제를 해결하기 위하여 협동해야 한다.
5.Competitive Multi-Agent
하나 또는 여러 개의 서로 다른 brain에 연결된 역 보상 신호로 상호 작용. 이 시나리오에서는 경쟁에서 이기거나 제한된 리소스를 얻기 위해 서로 경쟁해야 한다. 팀 스포츠가 해당된다.
6.Ecosystem
하나 또는 여러 개의 다른 brain에 연결된 독립적인 보상 신호로 상호작용. 이 시나리오는 동물원 혹은 도시 환경 내의 자율 주행 시뮬레이션과 같이 서로 다른 목표를 가진 동물이 상호 작용하는 작은 세계를 만드는 것이다.
<추가적인 특징>
1.On Demand Decision Making
필요할 때만 의사결정을 요청할 수 있음. 이를 통해 턴 기반 게임, agent가 이벤트에 반응해야하는 게임 또는 agent가 다양한 기간 동안 행동을 취할 수 있는 게임을 학습 할 수 있음. 의사 결정과 주문형 결정 간의 전환은 버튼을 한 번만 클릭하면 된다.
*주문형 결정 기능에 대한 참조
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는 여러 시각적 스트림 정보를 통합하여 학습할 수 있다.
여러 시점의 다른 카메라를 필요로 하는 자율 운전 차량을 교육하거나 항공 및 일인칭 비주얼을 통합하는 탐색 에이전트같은 시나리오에서 사용.
*에이전트에 다중 카메라 사용
5.Broadcasting
agent관찰 및 행동이 pythonAPI로 전송. imitation learning에 의해 활용됨. 플레이어의 brain에 대한 관찰과 행동은 데모를 통해 agent의 policy를 학습하는데 사용됨. 이것은 특히 heuristic과 internal brain에서 유용하게 사용됨. 특히, agent동작을 디버깅할 때 유용하다.
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
'mlAgent' 카테고리의 다른 글
mlagent 기본적인 환경 구축하기 (0) | 2018.11.18 |
---|---|
3d ball 환경 분석하기 + tensorBoard사용법 (0) | 2018.11.14 |
유니티 mlAgent 설치하기 (version. v0.5 ) - 맥북 (0) | 2018.11.08 |