오늘은 목표물을 향해서 바닥에 떨어지지 않고 추적하는 교육을 시키도록 하겠습니다.


우선 기본적인 환경을 만들기 위한 세팅을 합니다. (저번 포스트에서 봤듯이 ML-Agent폴더를 가져옵니다. 

패키지도 가져옵니다.)


1. 빈 오브젝트를 만들어주시고 이름은 Academy라고 짓습니다.

2. 빈 오브젝트를 하나 더 만들고 Brain이라고 이름을 지은 후에 Academy에 child시킵니다.

3. floor을 만듭니다. plane 오브젝트로 만들며 위치와 로테이션 값을 모두 0으로 하시고 스케일은 1로 합니다.(스케일은 변경하면 안됩니다. 환경을 고정적으로 에이전트의 기능만 사용할 것이기 때문.)

4. target도 만들어줍니다. target의 크기나 위치는 상관 없습니다. 

5. 마지막으로 agent를 만들어줍니다. 

agent는 sphere 게임오브젝트로 만들고 rigidbody component를 추가해줍니다. 



스크립트를 만듭니다. 

1. academy script

2. agent script


1. academy script 


1-1. using mlagent; 추가 

1-2 academy 상속


1
2
3
4
5
6
7
8
9
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using MLAgents;
 
public class RollerAcademy : Academy {
 
}
 
cs


2. agent script 


2-1. reset 값 설정

2-2.  환경 관찰 

모든 값을 /5로 나누어주는 이유는 현재 환경 plane의 칸 수가 10칸이기 때문에  

5로 나누어주는 것이다. (normalizing)

2-3. 리워드 

2-4. brain으로부터 지시 받는 함수


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using MLAgents;
 
public class RollerAgent : Agent
{
    Rigidbody rBody;
    private void Start()
    {
        rBody = GetComponent<Rigidbody>();
    }
    public Transform Target;
 
    //에이전트가 리셋될 때 초기값
    public override void AgentReset()
    {
        if(this.transform.position.y < -1.0
        {
            //agent가 떨어지면
            this.transform.position = Vector3.zero;
            this.rBody.angularVelocity = Vector3.zero;
            this.rBody.velocity = Vector3.zero;
        }
        else
        {
            //target을 새로운 지점으로 이동 
            Target.position = new Vector3(Random.value * 8 - 4,
                                          0.5f,
                                          Random.value * 8 - 4);
        }
    }
 
    //에이전트가 환경을 관찰하는 함수
    public override void CollectObservations()
    {
        //타겟과 에이전트의 상대적 위치 
        Vector3 relativePosition = Target.position - this.transform.position;
 
        //상대적 위치
        AddVectorObs(relativePosition.x / 5);
        AddVectorObs(relativePosition.z / 5);
 
        //바닥과 에이전트 사이의 거리
        AddVectorObs((this.transform.position.x + 5/ 5);
        AddVectorObs((this.transform.position.x - 5/ 5);
        AddVectorObs((this.transform.position.z + 5/ 5);
        AddVectorObs((this.transform.position.z - 5/ 5);
 
        //에이전트의 속도
        AddVectorObs(rBody.velocity.x / 5);
        AddVectorObs(rBody.velocity.z / 5);
    }
 
    //brain으로부터 지시를 받는 함수
    public float speed = 10;
    private float previousDistance = float.MaxValue;
 
    public override void AgentAction(float[] vectorAction, string textAction)
    {
        // Rewards
        float distanceToTarget = Vector3.Distance(this.transform.position,
                                                  Target.position);
 
        // Reached target
        if (distanceToTarget < 1.42f)
        {
            AddReward(1.0f);
            Done();
        }
 
        // Time penalty
        AddReward(-0.05f);
 ₩
        if(_collision.obs == true)
        {
            AddReward(-0.05f);
        }
 
        // Fell off platform
        if (this.transform.position.y < -1.0)
        {
            AddReward(-1.0f);
            Done();
        }
 
        // Actions, size = 2 
        // brain으로부터 받는 지시를 수행하는 
        Vector3 controlSignal = Vector3.zero;
        controlSignal.x = vectorAction[0];
        controlSignal.z = vectorAction[1];
        rBody.AddForce(controlSignal * speed);
    }
 
}
 
 
 

cs



작성한 스크립트들을 각각 이름에 맞게 배치한다. 

에이전트 스크립트의 경우 inspector창에서 추가 작업이 필요하다. 
1. brain게임오브젝트에 스크립트를 넣은 후에 Brain에 끌어다 놓는다. 
2. target으로 설정한 오브젝트를 target으로 가져온다. 




brain 스크립트를 ml-agent폴더에서 가져와서 
brain 게임 오브젝트에 넣어주고 
아래와 같이 세팅값을 맞춘다. 


이 후에 테스트를 위하여 player를 사용해보자

player를 사용하기 위해서는 input값에 대한 키 세팅이 필요하다. 


brain에서 brain mode를 player로 설정하고 아래와 같이 세팅을 맞춘다.


그러면 이제 플레이를 할 수 있다. 


본인은 개인적으로 obstacle을 만들어서 obstacle에도 부정적 보상을 주어 obstacle을 피하면서 target을 추적하도록 교육시켰다. 그런데 실질적으로 교육성과는 시간이 지남에 따라서 별로 크게 변화하지 않았다... 보상값을 더 조절해야 될 듯.... 하지만, 미세하게 좀 더 빨리 찾는 것 같기도 하였다. 아래 영상은 brain mode를 external로 둔 것이다. 

사용하는 방법은 이전 포스팅에 기록되어있다. 


보다시피 교육에 눈에 띄는 성과가 없이 계속 뒤죽박죽하다. 



결론. 머신러닝은 자동적인 움직임 관찰이 흥미로움. 

생각보다 원하는 목표를 위해서는 보상체계에 대한 정교한 가이드가 필요한 듯. 





Posted by 도이(doi)
,

*??표시되어있는 부분은 아직 확실하게 이해하지 못한 부분입니다.

차후에 관련서적을 참고하고 업데이트 할 것 같아요!


저번에 설치한 환경설정을 한 5번 정도 시행착오를 거쳐서 이제 완벽하게 설치 가능합니다. 

관련 정보는 mlagent설치하기 포스팅에서 확인해주세요!


이제 설치한 환경 중 3d ball 환경을 하나하나 분석해보았는데요.

관련하여 정리를 하다보니 기반 지식이 많이 부족하여 생각보다 시간이 많이 걸리더군요... (부동소수점, 이산의 개념...)

그리고 생각보다 새로나온 기능이라 그런지 설명을 찾기 힘든 부분도 있었고요(ex... PPO Algorithm. 공식 사이트인 openAI설명이 전부인데 별로 똑똑하지 않은 사람이라 잘 이해가 안됐다... 어디서부터 공부를 시작해야 될지. 우선은 마구잡이로 쑤셔넣고 있습니다.)


단일 환경에 대한 이해 (3d ball 예제로)

3D Balance Ball 장면을 후에 가장 먼저 알아야 점은 하나가 아닌 여러 플랫폼이 포함되어 있다는 것입니다

장면의 플랫폼은 독립적 에이전트이지만 모두 동일한 두뇌를 공유합니다

3D Balance Ball 모든 12 명의 agent 동시에 교육에 기여하기 때문에 교육 속도를 높이기 위해이 작업을 수행합니다.




Academy

아카데미 구성 요소에는 환경 작동 방식을 제어하는 여러가지 속성이 있다.

예를들어 Training Inference Configuration 속성은 Unity 응용프로그램의 그래픽과 시간 속성을 설정한다.

아카데미는 교육을 하는 동안에는 Training Configuration 사용하고 교육을 하지 않을 때는 Inference Configuration 사용한다일반적으로 Training Configuration에는 낮은 그래픽 품질과 높은 time scale 설정하고, Inference Configuration 높은 그래픽 품질과 time scale 1.0으로 설정한다


??참고: 교육중에 환경을 관찰하려면 Inference Configuration 설정을 화면과 time scale 1:1 가깝도록 조정한다. 실질적으로 트레이닝을 때는 파라미터를 초기값으로 되돌린다. 그렇지 않으면 훈련의 시간이 너무 길어질 것이다. 

(inference Configuration의 timeScale을 training configuration과 같은 스케일로 조정했는데 의미있는 발견을 얻지 못했다.)


??Academy 구현

기본 아카데미 클래스는 추상 클래스이기 때문에 항상 하위 클래스를 정의해야 한다. 모두 선택적이지만 구현할 있는 가지 기능이 있다.

  • Academy.InitializeAcademy () - 환경이 시작될 호출됩니다.
  • Academy.AcademyStep () - agent.AgentAction () 전에 모든 시뮬레이션 단계에서 호출됩니다.
  • Academy.AcademyReset () - 아카데미가 시뮬레이션을 시작하거나 다시 시작할 호출됩니다 (처음 포함).



3d ball예제에서는 환경에서 이러한 기능을 사용하지 않는다. (사용하지 않는다길래 분석하지 않았다...나중에 사용하는 곳이 있으면 다루겠습니다. ) 필요할 때마다 에이전트가 재설정되지만 많은 환경에서는이 기능을 사용하여 에이전트 주변 환경을 제어합니다.


Brain

모든 brain객체는 Academy 자식 개체여야 한다. brain agent 대한 정보를 저장하지 않고 상담원이 수집한 관찰 내용을 의사 결정 과정으로 정하고 선택한 작업을 agent에게 명령합니다. 따라서 모든 agent 동일한 두뇌를 공유하지만 독립적으로 행동할 있다.


Brain 유형

External - agent 훈련할

Internal - 숙련된 모델을 사용할

Heuristic - Decision 클래스를 확장하여 agent 논리를 직접 코딩함

Player - 키보드 명령을 작업에 맵핑할 있으므로 agent 환경을 테스트 유용


*만약, 어떠한 brain 사용자가 필요로 하지 않을 경우, 사용자는 자신만의 CoreBrain 생성할 있다.



??벡터 관측 공간

의사 결정을하기 전에 에이전트는 자신의 상태를 환경에서 관찰한다벡터 관측은 에이전트가 결정을 내리는 필요한 관련 정보가 들어있는 부동소수점의 벡터입니다. 3d ball예시에서 사용 뇌의 instance 8 state size 갖고 Continuous vector observation space 사용하였다 의미는 agent 관찰을 포함하는 특징 벡터가 8개의 요소를 포함한다는 것이다. (8개의 요소: x z플랫폼의 회전 구성 요소와 x, y z구성 요소를 볼의 상대적 위치와 속도. - 관찰값은 agent collectObservations()기능에서 정의된다.)

(8개의 요소를 갖는다는 의미를 잘 파악할 수 없었다. 왜냐하면 현재 요소는 내가 보기에는 4가지로 보이기 때문...)


*부동소수점이란?

실수를 가수부와 지수부로 나누어서 표현함. 

그렇기 때문에  많은 범위를 표현할  있음하지만항상 10진수로 변환할  오차가 생기게 근사치만 구함.



벡터 작업 공간(space type : Continous/ discrete,  연속/ 이산)

에이전트는 행동 양식으로 두뇌의 지시를받습니다 . ML-Agents 툴킷은 동작을 가지 유형으로 분류합니다

continuous type은 연속적으로 달라질 수있는 숫자의 벡터입니다벡터의 요소는 에이전트 논리에 의해 정의됩니다 (PPO 교육 프로세스는 다른 값을 시도 때받은 보상을 기준으로 특정 상태를 관찰 어떤 값이 나은지를 학습합니다). 예를 들어 요소 Rigidbody 에이전트에 적용된 또는 토크를 나타낼 있습니다 . 

discrete type 동작 벡터 공간은 테이블과의 작업을 정의합니다에이전트에 주어진 작업은 테이블에 대한 인덱스 배열입니다.


*ppo(Proximal Policy Optimization)

open AI에서 출시한 알고리즘. 근위 정책 최적화로 대략적으로 가이드라인(감독) 상태에서 교육을 시키는 알고리즘.

다른 알고리즘에 의하여 적은 매개 변수로 우수한 결과를 얻어낼 있음. 최근에 새로나온 알고리즘. 


(3d ball 예제에서는 연속타입과 이산타입을 둘 다 시뮬레이션 해볼 수 있는데 시도해본 결과 차이는 플레이트의 움직임이 끊기는지 아니면 끊기지 않고 연속적으로 움직이는지 정도의 차이가 있었다. 이산의 개념에 대해서 알아보니 연속되지 않는 것을 의미한다.)



에이전트

에이전트는 환경에서 관찰하고 행동하는 행위자입니다. 3d ball 예제 환경에서 에이전트 구성 요소는 12 개의 Platform GameObjects 배치됩니다기본 Agent 객체에는 동작에 영향을주는 가지 속성이 있습니다.


  • 두뇌 - 모든 요원은 두뇌가 있어야합니다두뇌는 에이전트가 결정을 내리는 방법을 결정합니다. 3D Balance Ball 장면의 모든 에이전트는 동일한 두뇌를 공유합니다.
  • Visual Observations - 에이전트가 환경을 관찰하기 위해 사용하는 Camera 객체를 정의합니다. 3D Balance Ball 카메라 관측을 사용하지 않습니다.
  • Max Step - 에이전트가 완료 결정을 내리기 전에 발생할 수있는 시뮬레이션 단계 수를 정의합니다. 3D Balance Ball에서 에이전트는 5000 단계 후에 다시 시작됩니다.
  • Reset On Done- 에이전트가 완료 다시 시작할지 여부를 정의합니다3D Balance Ball  단계를 설정 하여 최대 단계   도달 하거나 공을 놓은 후에 agent 다시 시작되도록합니다 .



에이전트의 흥미로운 측면은 에이전트 서브 클래스 구현입니다에이전트를 만들 기본 에이전트 클래스를 확장해야합니다. Ball3DAgent 서브 클래스는 다음 메소드를 정의합니다.


  • agent.AgentReset () - 세션이 시작될 때를 포함하여 에이전트가 재설정 호출됩니다. Ball3DAgent 클래스는 reset 함수를 사용하여 플랫폼과 공을 재설정합니다 기능은 재설정 값을 무작위로 지정하여 교육이 특정 시작 위치 플랫폼 태도 이상으로 일반화되도록합니다.
  • agent.CollectObservations () - 모든 시뮬레이션 단계를 호출합니다. agent 환경 관찰을 수집한다. 에이전트에 할당 Brain 인스턴스는 state size 8 continuous vector observation space 설정되므로, CollectObservations() AddVectorObs 8 호출해야합니다.
  • agent.AgentAction () - 모든 시뮬레이션 단계를 호출합니다두뇌가 선택한 행동을받습니다. Ball3DAgent 예제는 연속 불연속 작업 공간 유형을 모두 처리합니다 환경에서는 상태 유형간에 실제로 많은 차이가 없습니다. 벡터 공간 모두 단계에서 플랫폼 회전의 작은 변화를 가져옵니다.(불연속(이산) 플랫폼의 움직임이 끊어진다.) AgentAction() 함수는 상담원에게 보상을 할당합니다 예에서 에이전트는 플랫폼에서 볼을 유지하는 단계에 대해 작은 긍정적 보상을 받고 공을 떨어 뜨리는 대한 부정적인 보상을받습니다에이전트는 볼을 떨어 트리면 완료로 표시되어 다음 시뮬레이션 단계에서 볼로 리셋됩니다.


external 교육하고 internal 교육 모델 적용하는 것은 mlagent설치 포스팅에 설명해 두었기 때문에 


tensorflowboard 훈련 진행 관찰하는 방법에 대해서만 설명하겠습니다.


교육을 실행한 후에 ml-agents 디렉토리에 summaries디렉토리가 포함됩니다.

교육과정을 자세히 관찰하기 위해 tensorBoard 사용할 있습니다.

terminal tensorboard --logdir=summaries 타이핑 하신 후에 


브라우저에 localhost:6006 주소로 이동합니다.

주소로 이동하면 아래와 같은 분석 차트가 나옵니다. 저는 시뮬레이션을 두 번 저장하여 아래와 같은 비교 그래프가 나옵니다.

시뮬레이션 값을 한 번 저장하면 그래프가 하나만 나옵니다. 


시뮬레이션의 이름을 다르게 저장하는 방법은 

mlagents-learn config/trainer_config.yaml --run-id=firstRun --train


에서 firstRun의 이름을 원하는 이름으로 바꾸는 것입니다. 

저는 제 이름인 dohee로 저장하였기에 dohee라는 데이터 값으로 파란 그래프가 생성된 것입니다.




tensorBoard에서 교육과 관련된 요약 통계 있습니다. (그래프 분석)

  • lesson커리큘럼 교육을 수행 때만 흥미 롭습니다 . 3D Balance Ball 환경에서는 사용되지 않습니다.
  • Cumulative Reward (누적 보상) - 모든 에이전트에 대한 평균 누적 에피소드 보상성공적인 교육 세션 중에 증가해야합니다.
  • Entropy - 모델의 결정이 얼마나 무작위인지를 나타냅니다성공적인 훈련 과정에서 천천히 감소해야합니다너무 빨리 감소하면, beta 하이퍼 매개 변수가 증가해야합니다.(beta...하이퍼 매개변수는 무엇일까...??)
  • Episode Length (에피소드 길이) - 모든 상담원을위한 환경의 에피소드의 평균 길이입니다.
  • Learning Rate - 학습 알고리즘이 최적의 정책을 검색 걸리는 크기시간이 지남에 따라 감소해야합니다.
  • Policy Loss - 정책 기능 업데이트의 평균 손실정책 (작업 결정 프로세스) 변경되는 정도와 관련됩니다 훈련의 규모는 성공적인 훈련 기간 동안 감소해야합니다.
  • Value estimate - 에이전트가 방문한 모든 주에 대한 평균값 추정치성공적인 교육 세션 중에 증가해야합니다.
  • Value Loss - 함수 업데이트의 평균 손실입니다모델이 상태의 가치를 예측할 수있는 정도와 상관 관계가 있습니다성공적인 교육 세션 동안이 값이 감소해야합니다.



reference

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

<부동소수점에 관하여>

http://tcpschool.com/cpp/cpp_datatype_floatingPointNumber

<PPO>

https://blog.openai.com/openai-baselines-ppo/


'mlAgent' 카테고리의 다른 글

mlagent 기본적인 환경 구축하기  (0) 2018.11.18
ML-Agents Toolkit 개요  (0) 2018.11.11
유니티 mlAgent 설치하기 (version. v0.5 ) - 맥북  (0) 2018.11.08
Posted by 도이(doi)
,

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)
,