019년 8월 1일부터 Google Play에 게시되는 앱에서는 64비트 아키텍처를 지원해야 합니다

Unity3D 2019.06.05 11:38

64비트 빌드를 해야함 
https://developer.android.com/distribute/best-practices/develop/64-bit
2019년 8월 1일부터 Google Play에 게시되는 앱에서는 64비트 아키텍처를 지원해야 합니다. 64비트 CPU는 사용자에게 더 빠르고 풍부한 환경을 제공합니다. 앱의 64비트 버전을 추가하면 성능이 향상되고 향후 혁신을 이룰 가능성이 높아지며 64비트 전용 하드웨어가 장착된 기기에 대응할 수 있습니다.

유니티 에디터 Player Setting > Target Architectures (ARMv7, x86) 둘다 체크 할것

 

 

참고: https://blogs.unity3d.com/kr/2019/03/05/android-support-update-64-bit-and-app-bundles-backported-to-2017-4-lts/

 

Trackbacks 0 : Comments 0

[ml-agent] Build-in reinforcement learning

Unity3D/ml-agent 2019.06.05 09:30

안드로이드 플랫폼 빌드후 기기에 설치 하고 강화 학습을 시도해보았다.

 

여러경로를 통해 현재는 불가능 하다는것을 알았다.

 

PC, Mac & Linux Standalone platform으로 빌드를 했다.

 

다음과 같이 실행파일이 생성되었다.

 

파일 경로는 다음과 같다.

C:\Users\smilejsu\Desktop\test-mlagent.exe

 

Anaconda Prompt 를 사용하여 다음 명령어를 통해 훈련을 시도 해보았다.

(base) C:\Users\smilejsu>activate ml-agents

(ml-agents) C:\Users\smilejsu>d:

(ml-agents) D:\>cd D:\workspace\unity\Test\UnitySDK

(ml-agents) D:\workspace\unity\Test\UnitySDK>mlagents-learn trainer_config.yaml --env=C:\Users\smilejsu\Desktop\test-mlagent.exe --run-id=train --train


                        ▄▄▄▓▓▓▓
                   ╓▓▓▓▓▓▓█▓▓▓▓▓
              ,▄▄▄m▀▀▀'  ,▓▓▓▀▓▓▄                           ▓▓▓  ▓▓▌
            ▄▓▓▓▀'      ▄▓▓▀  ▓▓▓      ▄▄     ▄▄ ,▄▄ ▄▄▄▄   ,▄▄ ▄▓▓▌▄ ▄▄▄    ,▄▄
          ▄▓▓▓▀        ▄▓▓▀   ▐▓▓▌     ▓▓▌   ▐▓▓ ▐▓▓▓▀▀▀▓▓▌ ▓▓▓ ▀▓▓▌▀ ^▓▓▌  ╒▓▓▌
        ▄▓▓▓▓▓▄▄▄▄▄▄▄▄▓▓▓      ▓▀      ▓▓▌   ▐▓▓ ▐▓▓    ▓▓▓ ▓▓▓  ▓▓▌   ▐▓▓▄ ▓▓▌
        ▀▓▓▓▓▀▀▀▀▀▀▀▀▀▀▓▓▄     ▓▓      ▓▓▌   ▐▓▓ ▐▓▓    ▓▓▓ ▓▓▓  ▓▓▌    ▐▓▓▐▓▓
          ^█▓▓▓        ▀▓▓▄   ▐▓▓▌     ▓▓▓▓▄▓▓▓▓ ▐▓▓    ▓▓▓ ▓▓▓  ▓▓▓▄    ▓▓▓▓`
            '▀▓▓▓▄      ^▓▓▓  ▓▓▓       └▀▀▀▀ ▀▀ ^▀▀    `▀▀ `▀▀   '▀▀    ▐▓▓▌
               ▀▀▀▀▓▄▄▄   ▓▓▓▓▓▓,                                      ▓▓▓▓▀
                   `▀█▓▓▓▓▓▓▓▓▓▌
                        ¬`▀▀▀█▓


INFO:mlagents.trainers:{'--base-port': '5005',
 '--curriculum': 'None',
 '--debug': False,
 '--docker-target-name': 'None',
 '--env': 'C:\\Users\\smilejsu\\Desktop\\test-mlagent.exe',
 '--help': False,
 '--keep-checkpoints': '5',
 '--lesson': '0',
 '--load': False,
 '--no-graphics': False,
 '--num-envs': '1',
 '--num-runs': '1',
 '--run-id': 'train',
 '--save-freq': '50000',
 '--seed': '-1',
 '--slow': False,
 '--train': True,
 '<trainer-config-path>': 'trainer_config.yaml'}
c:\users\smilejsu\appdata\local\conda\conda\envs\ml-agents\lib\site-packages\mlagents\trainers\learn.py:141: YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details.
  trainer_config = yaml.load(data_file)
INFO:mlagents.envs:
'TestAcademy' started successfully!
Unity Academy name: TestAcademy
        Number of Brains: 1
        Number of Training Brains : 1
        Reset Parameters :

Unity brain name: RollerBallBrain
        Number of Visual Observations (per agent): 0
        Vector Observation space size (per agent): 6
        Number of stacked Vector Observation: 1
        Vector Action space type: continuous
        Vector Action space size (per agent): [2]
        Vector Action descriptions: ,
2019-06-05 09:23:09.796920: I T:\src\github\tensorflow\tensorflow\core\platform\cpu_feature_guard.cc:140] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
INFO:mlagents.envs:Hyperparameters for the PPO Trainer of brain RollerBallBrain:
        batch_size:     10
        beta:   0.005
        buffer_size:    100
        epsilon:        0.2
        gamma:  0.99
        hidden_units:   128
        lambd:  0.95
        learning_rate:  0.0003
        max_steps:      5.0e4
        normalize:      False
        num_epoch:      3
        num_layers:     2
        time_horizon:   64
        sequence_length:        64
        summary_freq:   1000
        use_recurrent:  False
        summary_path:   ./summaries/train-0_RollerBallBrain
        memory_size:    256
        use_curiosity:  False
        curiosity_strength:     0.01
        curiosity_enc_size:     128
        model_path:     ./models/train-0/RollerBallBrain
c:\users\smilejsu\appdata\local\conda\conda\envs\ml-agents\lib\site-packages\numpy\core\fromnumeric.py:2957: RuntimeWarning: Mean of empty slice.
  out=out, **kwargs)
c:\users\smilejsu\appdata\local\conda\conda\envs\ml-agents\lib\site-packages\numpy\core\_methods.py:80: RuntimeWarning: invalid value encountered in double_scalars
  ret = ret.dtype.type(ret / rcount)
INFO:mlagents.trainers: train-0: RollerBallBrain: Step: 1000. Time Elapsed: 8.189 s Mean Reward: -0.976. Std of Reward: 0.623. Training.
INFO:mlagents.trainers: train-0: RollerBallBrain: Step: 2000. Time Elapsed: 15.860 s Mean Reward: -1.394. Std of Reward: 1.200. Training.
INFO:mlagents.trainers: train-0: RollerBallBrain: Step: 3000. Time Elapsed: 23.409 s Mean Reward: -0.484. Std of Reward: 1.027. Training.
INFO:mlagents.trainers: train-0: RollerBallBrain: Step: 4000. Time Elapsed: 30.629 s Mean Reward: -0.551. Std of Reward: 0.405. Training.
INFO:mlagents.trainers: train-0: RollerBallBrain: Step: 5000. Time Elapsed: 37.751 s Mean Reward: -0.378. Std of Reward: 0.480. Training.

 

다음과 같이 실행파일 (test-mlagent.exe)이 자동으로 실행 되며 훈련이 잘 진행 되었다.

 

 

참고:

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

 

Unity-Technologies/ml-agents

Unity Machine Learning Agents Toolkit. Contribute to Unity-Technologies/ml-agents development by creating an account on GitHub.

github.com

https://github.com/Unity-Technologies/ml-agents/issues/2099

 

How do I train brain after building mobile with ml-agent? · Issue #2099 · Unity-Technologies/ml-agents

Hi. I am a developer who is enjoying ml-agent nowadays. I am trying to follow the documentation here. (https://github.com/Unity-Technologies/ml-agents) I am currently using Windows 10. So I use mla...

github.com

학습이 끝나면 .nn파일도 만들어 졌으며 동적으로 훈련된 모델을 Brain에 넣어 실행 시키는것도 가능했다.

INFO:mlagents.envs:Saved Model
INFO:mlagents.trainers:List of nodes to export for brain :RollerBallBrain
INFO:mlagents.trainers: is_continuous_control
INFO:mlagents.trainers: version_number
INFO:mlagents.trainers: memory_size
INFO:mlagents.trainers: action_output_shape
INFO:mlagents.trainers: action
INFO:mlagents.trainers: action_probs
INFO:mlagents.trainers: value_estimate
INFO:tensorflow:Restoring parameters from ./models/train-0/RollerBallBrain\model-15901.cptk
INFO:tensorflow:Froze 17 variables.
Converted 17 variables to const ops.
Converting ./models/train-0/RollerBallBrain/frozen_graph_def.pb to ./models/train-0/RollerBallBrain.nn
IGNORED: StopGradient unknown layer
GLOBALS: 'is_continuous_control', 'version_number', 'memory_size', 'action_output_shape'
IN: 'vector_observation': [-1, 1, 1, 6] => 'main_graph_0/hidden_0/BiasAdd'
IN: 'vector_observation': [-1, 1, 1, 6] => 'main_graph_1/hidden_0/BiasAdd'
IN: 'epsilon': [-1, 1, 1, 2] => 'mul'
OUT: 'action', 'action_probs', 'value_estimate'
DONE: wrote ./models/train-0/RollerBallBrain.nn file.
INFO:mlagents.trainers:Exported ./models/train-0/RollerBallBrain.nn file

(ml-agents) D:\workspace\unity\Test\UnitySDK>

 

Android platform 빌드후 기기(안드로이드)에 apk를 설치 하고 앱을 실행시켜 강화 학습을 할수 있는지 궁금하다 

 

 

 

 

 

 

Trackbacks 0 : Comments 0

How do I train brain after building mobile with ml-agent?

Unity3D/ml-agent 2019.06.02 18:03

https://github.com/Unity-Technologies/ml-agents/issues/2099

 

How do I train brain after building mobile with ml-agent? · Issue #2099 · Unity-Technologies/ml-agents

Hi. I am a developer who is enjoying ml-agent nowadays. I am trying to follow the documentation here. (https://github.com/Unity-Technologies/ml-agents) I am currently using Windows 10. So I use mla...

github.com

 

https://blogs.unity3d.com/kr/2017/09/19/introducing-unity-machine-learning-agents/

 

유니티 머신러닝 에이전트 소개 – Unity Blog

기존에 작성한 두 개의 블로그 게시물에서 게임이 강화 학습 알고리즘 개발을 진전시키는데 수행할 수 있는 역할이 있다고 언급했었습니다. 유니티는 세계에서 가장 널리 사용되는 3D 엔진 개발업체로 머신러닝 및 게임 분야 사이에서 미래를 그려나가고 있습니다. 머신러닝 연구자가 가장 ...

blogs.unity3d.com

 

Trackbacks 0 : Comments 0

Running "mlagents-learn" from Unity Process

Unity3D/ml-agent 2019.06.01 23:25

https://github.com/Unity-Technologies/ml-agents/issues/1500

 

Running "mlagents-learn" from Unity Process · Issue #1500 · Unity-Technologies/ml-agents

Hi guys, I'm trying to figure out how to run the training from a Unity Process instead of doing by hand in the command line. I tried to execute python ml-agents\mlagents\trainers\learn.py but I...

github.com

13Flo commented on 17 Dec 2018  

edited 

Hi guys,

I'm trying to figure out how to run the training from a Unity Process instead of doing by hand in the command line. I tried to execute python ml-agents\mlagents\trainers\learn.py but I get the following errors: No module named 'docopt'. I also tried to execute a batch file containing activate ml-agents and then mlagents-learn config.yaml --train --run-id=xxx but that won't work either (everything that comes after activate in the .bat file is ignored).

Someone is doing that with ml-agents 0.3 here, so I assume it is possible, but he folder structure has changed in 0.5 and I can't figure out how to do that with Conda.

Could anybody help me with that? Thanks!

  

Author

13Flo commented on 17 Dec 2018

(replying to myself after finding a solution)
The trick was actually to do (in a batch file):
call C:\Users\username\Anaconda3\Scripts\activate.bat C:\Users\username\Anaconda3
call mlagents-learn config.yaml --train --run-id=xxx

Trackbacks 0 : Comments 0

[ml-agent] Learning-Environment-Create-New

Unity3D/ml-agent 2019.05.30 17:33

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

 

이 튜토리얼은 유니티 환경을 만드과정을 안내 합니다.

이 환경은 유니티 엔진을 사용하여 구축된 애플리케이션으로 Agent를 강화 학습  교육하는데 사용할수 있습니다.

 

이예제에서는 무작위로 배치된 큐브로 롤(움직이는)하는 공을 훈련 합니다.

공은 또한 플랫폼에서 떨어지지 않도록 배웁니다.

 

Overview

Unity프로젝트에서 ML-Agents 툴킷을 사용하는 과정은 다음과 같습니다.

 

1. Agent가 살수 있는 환경을 만드세요. 이 환경을 몇가지 객체가 포함된 간단한 물리적 시뮬레이션에서 전체 게임 또는 생태계에 이르기까지 다양할수 있습니다.

 

2. 아카데미 하위 클래스를 구현하고 환경을 포함하는 Unity 장면의 GameObject에 추가하십시오.

Academy는 임의의 Agent와 독립적으로 장면을 업데이트하는 몇 가지 옵션 방법을 구현할 수 있습니다.

예를 들어, 환경에서 에이전트 및 기타 항목을 추가, 이동 또는 삭제할 수 있습니다.

 

3. Assets> Create> ML-Agents> Brain을 클릭하여 하나 이상의 Brain 자산을 생성하고 적절하게 이름을 지정하십시오.

 

4. Agent의 서브클래스를 작성하세요.

에이전트 하위 클래스는 에이전트가 환경을 관찰하고 할당 된 작업을 수행하며 강화 훈련에 사용 된 보상을 계산하는 데 사용되는 코드를 정의합니다.

또한 에이전트가 작업을 마쳤거나 실패 할 때 옵션 메소드를 구현하여 에이전트를 재설정 할 수 있습니다

 

5. 적절한 GameObjects, 일반적으로 시뮬레이션에서 에이전트를 나타내는 장면의 오브젝트에 에이전트 서브 클래스를 추가하십시오.

각 Agent 객체에는 Brain 객체가 할당되어야합니다.

 

6. 교육을받는 경우 아카데미의 BroadcastHub에서 Control 확인란을 선택하십시오.run the training process.

 

개발환경 셋팅이 안되었다면 아래 링크로 가서 셋팅 하세요.

If you haven't already, follow the installation instructions.

 

 

 

Set Up the Unity Project

1. 달성 할 첫 번째 작업은 새로운 Unity 프로젝트를 만들고 ML-Agents 에셋을 임포트하는 것입니다.

 

2. Unity Editor를 시작하고 "RollerBall"이라는 새 프로젝트를 만듭니다.

프로젝트의 Scripting Runtime Version이 .NET 4.x Equivalent를 사용하도록 설정되어 있는지 확인하십시오 (이는 Unity 2017의 실험적인 옵션이지만 2018.3의 기본값 임).

 

File > Build Settings > Player Settings 

3. 파일 시스템 창에서 복제 된 ML-Agents 저장소가있는 폴더로 이동합니다.

 

4. ML-Agents와 Gizmos 폴더를 UnitySDK / Assets에서 Unity Editor Project 창으로 드래그하십시오.

유니티 프로젝트 윈도우는 다음과 같은 애셋을 포함해야합니다 :

 

 

Create the Environment

 

다음으로 우리는 ML-Agents 환경으로 작동 할 수있는 매우 간단한 장면을 만듭니다.

환경의 "물리적"구성 요소에는 에이전트가 이동하기위한 바닥, 에이전트가 탐색 할 목표 또는 대상 역할을하는 큐브 및 에이전트 자체를 나타내는 Sphere가 있습니다.

 

 

Create the Floor Plane

 

1. Hierarchy 창에서 마우스 오른쪽 버튼을 클릭하고 3D Object> Plane을 선택하십시오.

 

2. GameObject "Floor"의 이름을 지정하십시오.

 

3. Floor을 선택하면 속성 윈도우에서 속성을 볼 수 있습니다.

 

4. Transform을 Position = (0, 0, 0), Rotation = (0, 0, 0), Scale = (1, 1, 1)로 설정하십시오.

 

5. Plane의 Mesh Renderer에서 Materials 속성을 확장하고 기본 재질을 LightGridFloorSquare (또는 원하는 임의의 적합한 재질)로 변경합니다.

 

(새 재질을 설정하려면 현재 재질 이름 옆의 작은 원 모양 아이콘을 클릭합니다. 개체 선택 대화 상자가 열리므로 현재 프로젝트에있는 모든 재료 목록에서 다른 재료를 선택할 수 있습니다.)

 

 

 

Add the Target Cube

1. Hierarchy 창에서 마우스 오른쪽 버튼을 클릭하고 3D Object> Cube를 선택합니다.

2. GameObject의 이름을 "Target"이라고 지정한다.

3. Cube를 선택하고 인스펙터 창을 본다.

4. Transform을 Position = (3, 0.5, 3), Rotation = (0, 0, 0), Scale = (1, 1, 1)로 설정하십시오.

5. 큐브의 Mesh Renderer에서 Materials 속성을 확장하고 default-material을 Block으로 변경합니다.

 

 

 

Add the Agent Sphere

 

1. Hierarchy 창에서 마우스 오른쪽 버튼을 클릭하고 3D Object> Sphere를 선택하십시오.

2. GameObject의 이름을 "RollerAgent"로 설정 

3. RollerAgent를 선택한후 인스펙터창 보기 

4. Transform을 Position = (0, 0.5, 0), Rotation = (0, 0, 0), Scale = (1, 1, 1)로 설정하십시오.

5. Sphere의 Mesh Renderer에서 Materials 속성을 확장하고 Default-Material을 CheckerSquare로 변경합니다.

6. Add Component를 누른다.

7. Physics / Rigidbody 구성 요소를 Sphere에 추가하십시오.

 

 

튜토리얼의 뒷부분에서이 GameObject에 컴포넌트로 추가 할 Agent 서브 클래스를 생성합니다.

 

 

Add an Empty GameObject to Hold the Academy

 

1. Hierarchy 창에서 마우스 오른쪽 버튼을 클릭하고 Create Empty를 선택하십시오.

2. GameObject이름을 "Academy"로 설정 

 

 

런타임에 장면을 더 잘 볼 수 있도록 카메라 각도를 조정할 수 있습니다. 다음 단계는 ML-Agent 구성 요소를 생성하고 추가하는 것입니다.

 

 

Implement an Academy

Academy 객체는 장면의 ML-Agents를 조정하고 시뮬레이션 루프의 의사 결정 부분을 유도합니다.

모든 ML-Agent 씬은 하나의 아카데미 인스턴스를 필요로합니다.

기본 아카데미 클래스는 추상 클래스이므로 특정 환경에 대해 메서드를 사용할 필요가 없더라도 사용자 고유의 하위 클래스를 만들어야합니다.

 

 

먼저, 앞서 만든 아카데미 GameObject에 새 스크립트 구성 요소를 추가합니다.

 

1. Inspector 창에서 아카데미 GameObject를 보려면 아카데미 GameObject를 선택하십시오.

2. Add Component버튼을 누른다.

3. 컴포넌트 리스트에서 새로운 스크립트를 선택 한다.

4. 스크립트 이름은 RollerAcademy이다.

5. 생성하고 추가 한다.

 

 

다음으로 새로운 RollerAcademy 스크립트를 편집하십시오.

 

1. Unity Project 창에서 RollerAcademy 스크립트를 두 번 클릭하여 코드 편집기에서 엽니 다. (기본적으로 새 스크립트는 Assets 폴더에 직접 배치됩니다.)

2. 코드 편집기에서 MLAgents;를 사용하여 문을 추가합니다.

3. 기본 클래스를 MonoBehaviour에서 Academy로 변경합니다.

4. 기본적으로 추가 된 Start () 및 Update () 메서드를 삭제합니다.

 

 

이러한 기본 장면에서 우리는 아카데미를 초기화, 재설정 또는 환경 내의 객체를 제어 할 필요가 없으므로 가능한 가장 간단한 아카데미 구현을 갖게됩니다.

 

 

아카데미 속성의 기본 설정은이 환경에서도 좋습니다. 따라서 Inspector 창에서 RollerAcademy 구성 요소를 변경할 필요가 없습니다.

Broadcast Hub에 RollerBrain을 아직 설치하지 않았을 수도 있습니다.

 

 

Add Brain Assets

Brain 객체는 의사 결정 프로세스를 캡슐화합니다.

에이전트는 뇌에 관찰을 보내고 결과에 대한 결정을 기대합니다.

Brain (Learning, Heuristic 또는 Player) 유형은 뇌가 결정을 내리는 방식을 결정합니다. 두뇌를 창조하려면 :

 

 

1. Assets> Create> ML-Agents로 이동하여 생성하려는 Brain 에셋의 유형을 선택하십시오. 이 튜토리얼에서는 Learning Brain과 Player Brain을 작성하십시오

RollerBallBrain과 RollerBallPlayer의 이름을 각각 지정하십시오.

나중에 Brain 속성으로 돌아갈 것이지만 RollerBallBrain의 Model 속성은 None으로 두십시오.

Learning Brain에 추가하기 전에 먼저 모델을 훈련시켜야합니다.

 

 

 

Implement an Agent

에이전트를 생성하려면 다음과 같이하십시오.

 

1. Inspector 창에서 보려면 RollerAgent GameObject를 선택하십시오.

2. 구성 요소 추가를 클릭하십시오.

3. 스크립트 이름을 RollerAgent라고 설정 합니다.

5. 생성하고 추가 하세요.

 

그런 다음 새 RollerAgent 스크립트를 편집합니다.

 

1. Unity Project 창에서 RollerAgent 스크립트를 두 번 클릭하여 코드 편집기에서 엽니 다.

2. 편집기에서 MLAgents를 추가합니다. 기본 클래스를 MonoBehaviour에서 Agent로 변경하십시오.

3. Update () 메서드를 삭제하지만 Start () 함수를 사용하므로 지금 당장 그대로 두십시오.

 

지금까지는 Unity 프로젝트에 ML-Agents를 추가하기 위해 사용하는 기본 단계입니다.

다음으로, 에이전트가 보강 학습을 사용하여 큐브에 롤백하는 법을 배울 수있는 논리를 추가합니다

 

이 간단한 시나리오에서 우리는 아카데미 객체를 사용하여 환경을 제어하지 않습니다.

예를 들어 시뮬레이션 전이나 시뮬레이션 중에 바닥의 크기를 변경하거나 에이전트 나 다른 객체를 추가 또는 제거하는 등 환경을 변경하려는 경우 아카데미에서 적절한 방법을 구현할 수 있습니다.

대신, 우리는 에이전트가 성공하거나 실패 할 때 자신과 대상을 다시 설정하는 모든 작업을 수행하게 할 것입니다

 

 

 

Initialization and Resetting the Agent

 

 

에이전트가 목표에 도달하면 에이전트는 완료되었음을 표시하고 에이전트 재설정 기능은 대상을 임의의 위치로 이동시킵니다.

또한 에이전트가 플랫폼에서 벗어나면 재설정 기능을 통해 플랫폼에 다시 넣습니다.

 

대상 GameObject를 이동하려면 Transform (3D 세계에서 GameObject의 위치, 방향 및 축척을 저장함)에 대한 참조가 필요합니다.

이 참조를 얻으려면 Transform 유형의 공용 필드를 RollerAgent 클래스에 추가하십시오.

Unity의 구성 요소 공개 필드는 Inspector 창에 표시되므로 Unity Editor에서 대상으로 사용할 GameObject를 선택할 수 있습니다.

 

에이전트의 속도를 재설정하려면 (나중에 에이전트 강제 이동을 적용하려면) Rigidbody 구성 요소에 대한 참조가 필요합니다. 리지드 바디

리지드 바디 (Rigidbody)는 물리학 시뮬레이션을위한 Unity의 주요 요소입니다. Unity 물리학의 전체 문서는 물리학을 참조하십시오.

Rigidbody 구성 요소가 에이전트 스크립트와 동일한 GameObject에 있기 때문에이 참조를 얻는 가장 좋은 방법은 GameObject.GetComponent <T> ()를 사용하는 것입니다.이 스크립트는 스크립트의 Start () 메소드에서 호출 할 수 있습니다.

 

지금까지 RollerAgent 스크립트는 다음과 같습니다.

 

다음으로 Agent.CollectObservations () 메소드를 구현해 보겠습니다.

 

 

Observing the Environment

에이전트는 우리가 수집 한 정보를 두뇌에 보내고,이 정보를 사용하여 결정을 내립니다.

에이전트를 훈련 시키거나 (훈련 된 모델을 사용할 때), 데이터는 특징 벡터로서 신경망에 공급됩니다.

에이전트가 작업을 성공적으로 배우려면 정확한 정보를 제공해야합니다.

수집 할 정보를 결정하는 좋은 방법은 문제에 대한 분석 솔루션을 계산하는 데 필요한 것이 무엇인지 고려하는 것입니다.

 

 

우리의 경우 에이전트가 수집하는 정보에는 다음이 포함됩니다.

 

  • 타겟의 위치 
AddVectorObs(Target.position);

 

  • Agent 자신의 위치 
AddVectorObs(this.transform.position);

 

  • 에이전트 속도. 이렇게하면 에이전트가 속도를 제어하여 타겟을 오버 슛하고 플랫폼에서 벗어날 수 있습니다.
// Agent velocity
AddVectorObs(rBody.velocity.x);
AddVectorObs(rBody.velocity.z);

 

총계로, 상태 관측은 8 개의 가치를 포함하고 우리는 두뇌 재산을 놓기 위하여 주변에 얻을 때 연속적인 국가 공간을 이용할 필요가있다 :

public override void CollectObservations()
{
    // Target and Agent positions
    AddVectorObs(Target.position);
    AddVectorObs(this.transform.position);

    // Agent velocity
    AddVectorObs(rBody.velocity.x);
    AddVectorObs(rBody.velocity.z);
}

 

에이전트 코드의 마지막 부분은 Agent.AgentAction () 메서드입니다.이 메서드는 Brain에서 결정을 받고 보상을 할당합니다.

 

Actions

 

Brain의 결정은 AgentAction () 함수에 전달 된 액션 배열의 형태로 이루어집니다.

이 배열의 요소 수는 상담원의 Brain의 Vector Action Space Type 및 Space Size 설정에 의해 결정됩니다.

RollerAgent는 연속 벡터 작업 공간을 사용하며 두뇌에서 두 개의 연속 제어 신호가 필요합니다.

따라서 Brain Space Size를 2로 설정합니다. 첫 번째 요소 인 action [0]은 x 축을 따라 적용되는 힘을 결정합니다. 액션 [1]은 z 축을 따라 적용되는 힘을 결정합니다.

(상담원이 3 차원으로 이동하도록 허용 한 경우 벡터 작업 크기를 3으로 설정해야합니다.)

Brain은 액션 배열의 값이 무엇을 의미하는지 실제로 알지 못합니다.

교육 프로세스는 관찰 입력에 대한 응답으로 동작 값을 조정 한 다음 결과로 얻는 보상의 종류를 확인합니다.

RollerAgent는 Rigidbody.AddForce 함수를 사용하여 action [] 배열의 값을 Rigidbody 구성 요소 인 rBody에 적용합니다.

Vector3 controlSignal = Vector3.zero;
controlSignal.x = action[0];
controlSignal.z = action[1];
rBody.AddForce(controlSignal * speed);

 

 

 

Rewards

강화 학습에는 보상이 필요합니다.

AgentAction () 함수에서 보상을 할당하십시오. 학습 알고리즘은 시뮬레이션 및 학습 과정에서 상담원에게 할당 된 보상을 사용하여 상담원에게 최적의 작업을 제공하는지 여부를 결정합니다.

할당 된 작업을 완료하기 위해 상담원에게 보상하기를 원합니다.

이 경우 에이전트는 대상 큐브에 도달하기 위해 1.0의 보상을받습니다.

 

float distanceToTarget = Vector3.Distance(this.transform.position,
                                          Target.position);
// Reached target
if (distanceToTarget < 1.42f)
{
    SetReward(1.0f);
    Done();
}

 

참고 : 상담원을 완료로 표시하면 재설정 될 때까지 해당 상담원이 활동을 중지합니다.

관리자에서 Agent.ResetOnDone 속성을 true로 설정하여 에이전트를 즉시 재설정하거나 아카데미에서 환경을 재설정 할 때까지 기다릴 수 있습니다

그의 RollerBall 환경은 ResetOnDone 메커니즘에 의존하며 아카데미의 최대 단계 제한을 설정하지 않기 때문에 환경을 재설정하지 않습니다.

 

마지막으로, 에이전트가 플랫폼에서 떨어지면 에이전트 자체를 재설정 할 수 있도록 에이전트를 완료로 설정하십시오.

 

// Fell off platform
if (this.transform.position.y < 0)
{
    Done();
}

 

 

 

AgentAction()

위에 요약 된 조치 및 보상 논리로 AgentAction () 함수의 최종 버전은 다음과 같습니다.


함수 앞에 정의 된 속도 클래스 변수에 주목하십시오. 속도는 공개되어 있으므로 관리자 창에서 값을 설정할 수 있습니다.

 

 

 

 

Final Editor Setup

이제 GameObjects와 ML-Agent 구성 요소가 모두 갖추어 졌으므로 Unity Editor에서 모든 것을 하나로 연결해야합니다.

여기에는 Brain 자산을 Agent에 할당하고, Agent 구성 요소의 일부 속성을 변경하고, Brain 속성을 Agent 코드와 호환되도록 설정합니다.

 

1. Academy Inspector에서 RollerBallBrain 및 RollerBallPlayer Brains를 Broadcast Hub에 추가하십시오.

 

2. Inspector 창에서 해당 속성을 표시하려면 RollerAgent GameObject를 선택하십시오.

 

3. Brain RollerBallPlayer를 프로젝트 창에서 RollerAgent Brain 필드로 드래그하십시오.

 

4. 결정 간격을 1에서 10으로 변경하십시오.

 

5. Hierarchy 창에서 RollerAgent Target 필드로 대상 GameObject를 드래그하십시오.

 

 

 

마지막으로 Inspector 창에서 해당 속성을 볼 수 있도록 Project 윈도우에서 RollerBallBrain Asset을 선택하십시오. 다음 속성을 설정합니다.

  • Vector Observation Space Size = 8
  • Vector Action Space Type = Continuous
  • Vector Action Space Size = 2

 

Project 창에서 RollerBallPlayer Asset을 선택하고 동일한 속성 값을 설정하십시오.

이제 교육을 받기 전에 환경을 테스트 할 준비가되었습니다.

 

 

 

Testing the Environment

 

확장 된 교육을 시작하기 전에 수동으로 환경을 테스트하는 것이 좋습니다.

우리가 RollerBallPlayer Brain을 만든 이유는 바로 키보드 컨트롤을 사용하여 Agent를 제어 할 수 있기 때문입니다.

하지만 먼저 키보드 대 액션 매핑을 정의해야합니다.

RollerAgent는 Action Size가 2 임에도 불구하고 양수 값을 지정하는 데 하나의 키를 사용하고 총 네 개의 키에 대해 각 동작에 대해 음수 값을 지정하기 위해 하나의 키를 사용합니다.

 

 

1. Inspector에서 속성을 보려면 RollerBallPlayer Asset을 선택하십시오.

2. 키 연속 플레이어 동작 사전을 확장합니다 (PlayerBrain을 사용할 때만 표시됨).

3. Size 를 4로 설정 

4. 다음 맵핑을 설정하십시오.

 

ElementKeyIndexValue

Element 0 D 0 1
Element 1 A 0 -1
Element 2 W 1 1
Element 3 S 1 -1

Index 값은 AgentAction () 함수에 전달 된 액션 배열의 인덱스에 해당합니다. 키를 누를 때 값은 [인덱스] 동작에 할당됩니다.

 

Play를 눌러 장면을 실행하고 WASD 키를 사용하여 플랫폼에서 에이전트를 이동하십시오.

 

유니티 편집기 콘솔 창에 오류가 표시되지 않았는지, 에이전트가 대상에 도달하거나 플랫폼에서 떨어질 때 에이전트가 재설정되는지 확인하십시오.

 

보다 복잡한 디버깅을 위해 ML-Agents SDK에는 게임 윈도우에 에이전트 상태 정보를 쉽게 표시하는 데 사용할 수있는 편리한 Monitor 클래스가 포함되어 있습니다.

 

수행 할 수있는 추가 테스트 중 하나는 먼저 notebooks / getting-started.ipynb Jupyter 노트북을 사용하여 환경 및 Python API가 예상대로 작동하는지 확인하는 것입니다.

 

노트북에서 env_name을이 환경을 빌드 할 때 지정한 환경 파일의 이름으로 설정하십시오.

 

 

Training the Environment

 

이제 요원을 훈련시킬 수 있습니다. 훈련 준비를하려면 먼저 에이전트의 Brain을 Learning Brain RollerBallBrain으로 변경해야합니다.

 

그런 다음 Academy GameObject를 선택하고 Broadcast Hub 목록에서 RollerBallBrain 항목에 대한 Control 확인란을 선택하십시오. 이 과정은 Training ML-Agents에서 설명한 것과 같습니다.

 

교육용 하이퍼 매개 변수는 mlagents-learn 프로그램에 전달한 구성 파일에 지정되어 있습니다.

 

config / trainer_config.yaml 파일 (ml-agents 폴더에 있음)에 지정된 기본 설정을 사용하여 RollerAgent는 훈련에 약 30 만 단계가 소요됩니다.

 

D:\workspace\unity\git\ml-agents\config

그러나 다음 하이퍼 매개 변수를 변경하여 교육 속도를 상당히 높일 수 있습니다 (20,000 단계 미만).

 

batch_size: 10
buffer_size: 100

이 예제는 입력 및 출력이 적은 매우 간단한 교육 환경을 생성하므로 작은 배치 및 버퍼 크기를 사용하면 교육 속도가 상당히 빨라집니다.

 

그러나 환경을 더 복잡하게하거나 보상이나 관측 기능을 변경하면 다른 하이퍼 매개 변수 값으로 더 나은 학습을 할 수 있습니다.

 

참고 : 상담원의 DecisionFrequency 매개 변수는 이러한 하이퍼 매개 변수 값을 설정하는 것 외에도 교육 시간 및 성공에 큰 효과가 있습니다.

 

값이 클수록 교육 알고리즘이 고려해야하는 의사 결정 횟수가 줄어들며이 간단한 환경에서 교육 속도가 빨라집니다.

 

편집기에서 트레이닝하려면, 재생을 누르기 전에 터미널 또는 콘솔 창에서 다음의 Python 명령을 실행하십시오 :

 

mlagents-learn config/config.yaml --run-id=RollerBall-1 --train

여기서 config.yaml은 뇌의 batch_size 및 buffer_size 하이퍼 매개 변수를 변경하기 위해 편집 한 trainer_config.yaml의 복사본입니다.

 

수정 

Trackbacks 0 : Comments 0

[ml-agent] Training config file

Unity3D/ml-agent 2019.05.30 10:21

git을 통해 클론 받은 프로젝트 폴더의 config폴더에 보며는 3가지 yaml파일이 있다.

D:\workspace\unity\git\ml-agents\config

이 파일들은 교육 설정 파일이며 교육 방법을 지정

하이퍼 파라메터와 PPO(Proximal Policy Optimization)로 훈련하는 동안 사용할 몇가지 추가 값

(근위정책최적화)PPO: https://github.com/Unity-Technologies/ml-agents/blob/master/docs/Training-PPO.md

온라인 오프라인 행동복제  (BC : Behavioral Cloning)

 

이파일들은 섹션으로 나눠져 있다.

기본(default)섹션에서는 사용가능한 모든 설정의 기본값을 정의 한다.

특정 Brain을 훈련시키기 위해 새로운 섹션을 추가하면 이러한 기본값을 무시 할수도 있다.

Brain 컴포넌트를 포함하고 있는 GameObject는 이러한 설정을 구역에 재정의 해야 한다.

Brain이름과 동일 해야 함.

 

이 GameObject는 씬 내의 Academy 의 자식일것이다. 

(예제에서는 Academy자식으로 안붙어 있음.. 음...)

예제 환경의 섹션은 제공된 구성 파일에 포함됩니다.

 

batch_size : gradient(기울기) decent(강하, 하락)의 각 반복에 대한 경험 수 

 

batches_per_epoch : 모방 학습에서 모델을 훈련하기 전에 수집 할 훈련 예제의 배치 수.

 

beta : entropy(동일설) 정규화의 세기 

 

brain_to_imitate : 온라인 모방 학습의 경우 모방할 Brain 컴포넌트가 포함된 GameObject의 이름 

 

demo_path: 오프라인 모방 학습의 경우 기록된 데모 파일의 파일 경로 

 

buffer_size : policy model (정책 모델)을 업데이트 하기전에 수집할수 있는 경험의 수 

 

curiosity_enc_size : 호기심 모듈의 순방향 및 역 모델에서 사용할 인코딩의 크기 

 

curiosity_strength : Intrinsic(본질적, 고유의) 호기심 모듈에 의해 생성 된 고유 보상의 크기.

 

epsilon : 교육 과정에서 정책이 얼마나 신속하게 전개 될 수 있는지 영향을 미칩니다.

 

gamma : Generalized Advantage Estimator (GAE)에 대한 보상 할인율 

 

hidden_units : 신경망의 숨겨진 레이어에있는 단위 수입니다.

 

lambd : 정규화 매개변수 

 

learning_rate : 기울기 강화에 대한 초기 학습 속도 

 

max_steps : 교육 세션 중에 실행할 최대 시뮬레이션 단계 수입니다.

 

memory_size : Agent가 보관 해야하는 메모리 크기. 재발성 신경 네트워크를 사용한 교육에 사용됨 

See Using Recurrent Neural Networks.

 

normalize : 관측치를 자동으로 정규화 할지 여부 

 

num_epoch : gradient descent 최적화를 수행 할때 경험 버퍼를 통과 할 패스 수 

 

num_layers : 신경망에서 숨겨진 레이어의 수.

 

sequence_length : 교육 과정에서 경험의 순서가 얼마나 오래 있어야 하는지 정의.

재발성 신경 네트워크를 사용한 교육에서만 사용됨.

 

summary_freq : 단계별로 교육 통계를 저장하는 빈도, 이것은 TensorBoard가 보여주는 데이터 포인트 수를 결정함 

 

time_horizon : 경험 버퍼에 추가 하기 전에 Agent당 수집할수 있는 경험단계 수 

 

trainer : 수행할 교육의 유형 (ppo 또는 imitation)  (ppo?또는 모방학습)

 

use_curiosity : Intrinsic Curiosity 모듈을 이용한 훈련 

 

use_recurrent : 반복적인 신경망을 사용하여 훈련

 

 

*PPO = Proximal Policy Optimization, BC = Behavioral Cloning (Imitation)

 

수행중인 교육 유형에 따라 하이퍼 매개 변수를 설정하는 방법에 대한 구체적인 조언은 다음을 참조하십시오.

 

예제 환경을 각 예제의 config / trainer_config.yaml 파일의 해당 섹션과 비교하여 하이퍼 매개 변수 및 기타 구성 변수가 기본값에서 어떻게 변경되었는지 확인할 수도 있습니다.

 

 

 

gradient descent

https://medium.com/@peteryun/ml-%EB%AA%A8%EB%91%90%EB%A5%BC-%EC%9C%84%ED%95%9C-tensorflow-3-gradient-descent-algorithm-%EA%B8%B0%EB%B3%B8-c0688208fc59

 

[ ML ] 모두를 위한 TensorFlow (3) Gradient descent algorithm 기본

본 글은 홍콩과기대 김성훈 교수님의 강의를 바탕으로 함 (참고 : https://hunkim.github.io/ml/ )

medium.com

 

Generalized Advantage Estimator (GAE)

참고 : https://github.com/reinforcement-learning-kr/how_to_study_rl/wiki/%EA%B0%95%ED%99%94%ED%95%99%EC%8A%B5-%EA%B4%80%EB%A0%A8-%EB%85%B8%ED%95%98%EC%9A%B0

 

reinforcement-learning-kr/how_to_study_rl

강화학습을 공부하고 싶은 분들을 위한 글. Contribute to reinforcement-learning-kr/how_to_study_rl development by creating an account on GitHub.

github.com

 

'Unity3D > ml-agent' 카테고리의 다른 글

Running "mlagents-learn" from Unity Process  (0) 2019.06.01
[ml-agent] Learning-Environment-Create-New  (0) 2019.05.30
[ml-agent] Training config file  (0) 2019.05.30
[ml-agent] Agents  (0) 2019.05.28
[ml-agent] Basic Guide  (0) 2019.05.27
[ml-agent] Background: Jupyter Notebooks  (0) 2019.05.27
Trackbacks 0 : Comments 0

[ml-agent] Agents

Unity3D/ml-agent 2019.05.28 22:33

Agents

에이전트는 환경을 관찰하고 그러한 관찰을 사용하여 최선의 행동 방침을 결정할 수있는 행위자입니다.

Agent 클래스를 확장하여 Unity에서 에이전트를 생성하십시오.

성공적으로 학습 할 수있는 agent를 만드는 가장 중요한 측면은 에이전트가 강화 학습을 위해 수집 한 관찰 및 agent의 현재 상태 값을 추정하여 작업을 수행하는 데 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using MLAgents;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class TestAgent : Agent
{
    // Start is called before the first frame update
    void Start()
    {
        
    }
 
    // Update is called once per frame
    void Update()
    {
        
    }
}
 
 
 

agent는 관찰 내용을 brain에 전달합니다.

brain는 결정을 내리고 선택된 행동을 agent에게 전달합니다.

agent 코드는 agent를 한 방향 또는 다른 방향으로 이동하는 등의 작업을 실행해야합니다.

강화 학습을 하기 위해서 각행동에 따라 보상 값을 계산 해야 합니다.

보상은 최적의 의사 결정 정책을 발견하는 데 사용됩니다.

(보상은 이미 훈련 된 요원이나 모방 학습에 사용되지 않습니다.)

 

Brain 클래스는 의사 결정 로직을 에이전트 자체에서 추상화하므로 여러 에이전트에서 동일한 Brain을 사용할 수 있습니다.

두뇌가 그 결정을 내리는 방법은 두뇌의 종류에 달려 있습니다.

Player Brain을 사용하면 상담원을 직접 제어 할 수 있습니다.

경험적 브레인 (Behuristic Brain)을 사용하면 의사 결정 스크립트를 작성하여 일련의 규칙으로 에이전트를 제어 할 수 있습니다.

Behuristic Brain직접 코딩한 동작을 기반으로 행동을 결정합니다.

https://blogs.unity3d.com/kr/2017/09/19/introducing-unity-machine-learning-agents/

이 두뇌는 신경 네트워크를 포함하지 않지만 디버깅에 유용 할 수 있습니다.

Learning Brain을 사용하면 agent를 위한 신경망 모델을 학습하고 사용할 수 있습니다.

Brain을 참조하십시오.

 

 

Decisions

 

관측 - 결정 - 행동 - 보상주기는 구성 가능한 수의 시뮬레이션 단계 (주파수는 기본적으로 1 단계 당 1 단계) 이후에 반복됩니다.

또한 요청에 따라 결정을 요청할 수 있도록 에이전트를 설정할 수 있습니다.

정기적인 간격으로 의사 결정을하는 것이 일반적으로 물리 기반 시뮬레이션에 가장 적합합니다.

수요에 대한 의사 결정은 일반적으로 상담원이 특정 이벤트에만 응답하거나 다양한 기간 동안 조치를 취하는 상황에 적절합니다.

예를 들어, 로봇 시뮬레이터의 에이전트는 조인트 토크의 정밀 제어를 제공해야 시뮬레이션의 모든 단계를 결정해야합니다.

반면에 특정 게임이나 시뮬레이션 이벤트가 발생할 때만 의사 결정을 수행해야하는 에이전트는 주문형 의사 결정(on-demand decision making)을 사용해야합니다.

 

 

단계 기반 의사 결정의 빈도를 제어하려면 Unity Inspector 창에서 상담원 객체의 의사 결정 빈도 값(Decision Frequency value)을 설정하십시오.

 

일단 인스펙터에 안보임...

Decision Frequency value 이건가 

툴팁: 에이전트는 모든 X 단계마다 자동으로 결정을 요청하고 모든 단계에서 조치를 수행합니다

 

동일한 Brain 인스턴스를 사용하는 상담원은 다른 빈도를 사용할 수 있습니다. 의사 결정이 요청되지 않은 시뮬레이션 단계 중에 에이전트는 이전 결정에 의해 선택된 것과 동일한 조치를받습니다.

 

 

 

On Demand Decision Making

On demand decision making을 통해 상담원은 고정 주파수로 결정을받는 대신 필요시에만 의사의 결정을 요청할 수 있습니다.

이는 에이전트가 다양한 단계 수에 대한 조치를 수행하거나 에이전트가 동시에 의사 결정을 할 수없는 경우에 유용합니다.

이것은 일반적으로 턴 기반 게임의 경우이며, 에이전트가 이벤트 또는 게임에 반응해야하는 게임 인 경우 에이전트는 다양한 기간 동안 행동을 취할 수 있습니다.

 

에이전트에 대한 On Demand Decisions를 설정하면 에이전트 코드에서 Agent.RequestDecision () 함수를 호출해야합니다.

에이전트가 새로운 결정을 위해 두뇌를 요청해야 할 때 호출됩니다.

1
2
3
4
5
6
7
8
/// <summary>
        /// Is called when the agent must request the brain for a new decision.
        /// </summary>
        public void RequestDecision()
        {
            requestDecision = true;
            RequestAction();
        }
 
 
1
2
3
4
5
6
7
8
9
10
using MLAgents;
 
public class TestAgent : Agent
{
    void Start()
    {
        this.RequestDecision();
    }
}
 
 
 

이 함수 호출은 관찰 - 결정 - 행동 - 보상주기의 한 반복을 시작합니다.

Brain은 Agent의 CollectObservations () 메소드를 호출하고 결정을 내리고 AgentAction () 메소드를 호출하여이를 리턴합니다.

브레인은 다른 반복을 시작하기 전에 에이전트가 다음 결정을 요청할 때까지 기다립니다.

 

결정을 내리기 위해 에이전트는 세계의 상태를 추론하기 위해 환경을 관찰해야합니다. 주 관측은 다음과 같은 형태를 취할 수 있습니다 :

 

Vector Observation (벡터 관측) - 부동 소수점 수 배열로 구성된 피쳐 벡터입니다.

Visual Observations - 하나 이상의 카메라 이미지 및 / 또는 텍스처 렌더링.

 

에이전트에 대해 벡터 관측을 사용하는 경우 Agent.CollectObservations () 메서드를 구현하여 특징 벡터를 만듭니다.

Visual Observations를 사용할 때 Unity Camera 객체 또는 RenderTexture가 이미지를 제공하고 기본 Agent 클래스가 나머지를 처리하는지 확인하기 만하면됩니다.

이 함수를 구현하면 AddVectorObs를 호출하여 벡터 관측치를 추가해야합니다.

agent가 시각 관측(visual observations)을 사용하는 경우 (벡터 관측을 사용하지 않는 경우) CollectObservations () 메소드를 구현할 필요가 없습니다.

Vector Observation Space: Feature Vectors

연속 상태 공간을 사용하는 agent 경우 시뮬레이션의 각 단계에서 상담원의 관찰을 나타내는 피쳐 벡터를 생성합니다.

 

연속 상태 공간(a continuous state space)?

이런 공간을 의미 하는건가?

 

Brain 클래스는 각 에이전트의 CollectObservations () 메소드를 호출합니다.

이 함수를 구현하면 AddVectorObs를 호출하여 벡터 관측치(vector observations)를 추가해야합니다.

 

관찰에는 에이전트가 작업을 수행하는 데 필요한 모든 정보가 포함되어야합니다.

충분하고 적절한 정보가 없으면 agent가 제대로 학습하지 못하거나 전혀 배우지 못할 수도 있습니다.

어떤 정보가 포함되어야하는지 결정하기위한 합리적인 접근법은 문제에 대한 분석적 솔루션을 계산하는 데 필요한 것이 무엇인지 고려하는 것입니다.

 

다양한 상태 관측 기능의 예를 보려면 ML-Agents SDK에 포함 된 예제 환경을 살펴보십시오.

예를 들어, 3DBall 예제는 플랫폼의 회전, 볼의 상대 위치 및 볼의 속도를 상태 관찰로 사용합니다.

실험으로 관측에서 속도 성분을 제거하고 3DBall 에이전트를 재교육 할 수 있습니다.

합리적으로 공의 균형을 잡는것을 해우겠지만 속도를 사용하지 않는 agent의 선능은 현저하게 악화 됩니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public GameObject ball;
 
private List<float> state = new List<float>();
public override void CollectObservations()
{
    AddVectorObs(gameObject.transform.rotation.z);
    AddVectorObs(gameObject.transform.rotation.x);
    AddVectorObs((ball.transform.position.x - gameObject.transform.position.x));
    AddVectorObs((ball.transform.position.y - gameObject.transform.position.y));
    AddVectorObs((ball.transform.position.z - gameObject.transform.position.z));
    AddVectorObs(ball.transform.GetComponent<Rigidbody>().velocity.x);
    AddVectorObs(ball.transform.GetComponent<Rigidbody>().velocity.y);
    AddVectorObs(ball.transform.GetComponent<Rigidbody>().velocity.z);
}
 
 

특징 벡터는 항상 같은 수의 요소를 포함해야하며 관측치는 항상 목록 내의 동일한 위치에 있어야합니다.

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

 

환경에서 관찰 된 엔티티 수가 다를 수있는 경우 특정 관찰에서 누락 된 엔티티에 대해 특성 벡터를 0으로 채우거나 에이전트의 관측치를 고정 된 하위 집합으로 제한 할 수 있습니다.

 

예를들어 한 환경에서 모든 적의 에이전트를관찰하는 대신, 가장 가까운 다섯개만 관찰 할수 있다.

 

Unity Editor에서 Agent 's 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
        /// <summary>
        /// Collects the (vector, visual, text) observations of the agent.
        /// The agent observation describes the current environment from the 
        /// perspective of the agent.
        /// </summary>
        /// <remarks>
        /// Simply, an agents observation is any environment information that helps
        /// the Agent acheive its goal. For example, for a fighting Agent, its
        /// observation could include distances to friends or enemies, or the 
        /// current level of ammunition at its disposal.
        /// Recall that an Agent may attach vector, visual or textual observations.
        /// Vector observations are added by calling the provided helper methods:
        ///     - <see cref="AddVectorObs(int)"/>
        ///     - <see cref="AddVectorObs(float)"/>
        ///     - <see cref="AddVectorObs(Vector3)"/>
        ///     - <see cref="AddVectorObs(Vector2)"/>
        ///     - <see cref="AddVectorObs(float[])"/>
        ///     - <see cref="AddVectorObs(List{float})"/>
        ///     - <see cref="AddVectorObs(Quaternion)"/>
        ///     - <see cref="AddVectorObs(bool)"/>
        ///     - <see cref="AddVectorObs(int, int)"/>
        /// Depending on your environment, any combination of these helpers can
        /// be used. They just need to be used in the exact same order each time
        /// this method is called and the resulting size of the vector observation
        /// needs to match the vectorObservationSize attribute of the linked Brain.
        /// Visual observations are implicitly added from the cameras attached to
        /// the Agent.
        /// Lastly, textual observations are added using 
        /// <see cref="SetTextObs(string)"/>.
        /// </remarks>
 
 

환경에 따라 이러한 헬퍼의 조합을 사용할 수 있습니다.

이 메소드가 호출 될 때마다 정확히 동일한 순서로 사용하면되고 벡터 결과의 결과 크기는 링크 된 Brain의 vectorObservationSize 속성과 일치해야합니다.

시각적 관찰은 에이전트에 연결된 카메라에서 암시 적으로 추가됩니다.

마지막으로 텍스트 관찰은 다음을 사용하여 추가됩니다.

 

Integer와 boolean을 관찰 벡터에 직접 추가 할 수있을뿐 아니라 Vector2, Vector3, Quaternion과 같은 일반적인 Unity 데이터 유형을 추가 할 수 있습니다.

 

형식 열거 형은 one-hot 스타일로 인코딩되어야합니다.

즉, 열거의 각 요소에 대해 특성 벡터에 요소를 추가하고 관찰 된 구성원을 나타내는 요소를 1로 설정하고 나머지는 0으로 설정합니다.

 

예를 들어 열거 형에 [Sword, Shield, Bow]가 포함되어 있고 Bow를 관찰 하고 싶을 경우 0, 0, 1 요소를 특징 벡터에 추가 한다.

다음 예제에서는 어떻게 추가하는지 설명한다.

1
2
3
4
5
6
7
8
9
enum CarriedItems { Sword, Shield, Bow, LastItem }
private List<float> state = new List<float>();
public override void CollectObservations()
{
    for (int ci = 0; ci < (int)CarriedItems.LastItem; ci++)
    {
        AddVectorObs((int)currentItem == ci ? 1.0f : 0.0f);
    }
}
 
 

AddVectorObs 는 2개의 인자를 가지고있는 버전또한 제공한다.

다음 예제는 이전예제와 동일 하다

1
2
3
4
5
6
7
8
9
enum CarriedItems { Sword, Shield, Bow, LastItem }
const int NUM_ITEM_TYPES = (int)CarriedItems.LastItem;
 
public override void CollectObservations()
{
    // The first argument is the selection index; the second is the
    // number of possibilities
    AddVectorObs((int)currentItem, NUM_ITEM_TYPES);
}
 
 

첫 번째 인수는 선택 색인입니다. 두 번째는 가능성의 수이다.

 

(원-핫 인코딩은 단어 집합의 크기를 벡터의 차원으로 하고, 표현하고 싶은 단어의 인덱스에 1의 값을 부여하고, 다른 인덱스에는 0을 부여하는 단어의 벡터 표현 방식입니다. 이렇게 표현된 벡터를 원-핫 벡터(One-hot vector)라고 합니다.)

참조: https://wikidocs.net/22647

 

 

Normalization

 

학습 할 때 최상의 결과를 얻으려면, 특징 벡터의 구성 요소를 [-1, +1] 또는 [0, 1] 범위로 정규화해야합니다.

값을 정규화하면 PPO 신경망이 더 빠르게 솔루션으로 수렴 될 수 있습니다.

이 권장 범위로 정규화 할 필요는 없지만 신경망을 사용할때 모범 사례로 간주 된다.

관측 구성요소간의 범위 편차가 클수록 교육에 영향을 줄 가능성이 커진다.

 

값을 [0, 1]로 정규화하려면 다음 공식을 사용할 수 있습니다.

 

normalizedValue = (currentValue - minValue)/(maxValue - minValue)

 

회전 및 각도도 표준화 해야 한다.

0 ~ 360도 사이의 각도의 경우 다음 수식을 사용 할수 있다.

Quaternion rotation = transform.rotation;
Vector3 normalized = rotation.eulerAngles / 180.0f - Vector3.one;  // [-1,1]
Vector3 normalized = rotation.eulerAngles / 360.0f;  // [0,1]

0 ~ 350범위를 벗어날수 있는 각도의 경우 각도를 줄이거나 회전수가 중요하면 정규화 공식에 사용된 최대값을 늘리십시오 

 

 

Multiple Visual Observations

 

시각적 관찰은 렌더링 된 텍스쳐를 직접 사용하거나 장면의 하나 이상의 카메라에서 사용한다.

Brain은 텍스쳐를 3D Tensor로 벡터화 하여 convolutional neural network에 입력 할수 있다.

CNN에 대한 자세한 내용은이 가이드를 참조하십시오. 측면 벡터 관측과 함께 시각적 관측을 사용할 수 있습니다.

 

 

... 이하 생략 아직 시각적 관찰은 나에게 필요하지 않으므로

 

 

 

 

Vector Actions

 

액션이란 Agent가 수행하는 Brain의 지시임.

Academy가 Agent의 Agentaction() 메서드를 호출할때 작업이 매개변수로 Agent에게 전달됨.

1
2
3
4
5
6
7
8
9
10
11
12
13
        /// <summary>
        /// Specifies the agent behavior at every step based on the provided
        /// action.
        /// </summary>
        /// <param name="vectorAction">
        /// Vector action. Note that for discrete actions, the provided array
        /// will be of length 1.
        /// </param>
        /// <param name="textAction">Text action.</param>
        public virtual void AgentAction(float[] vectorAction, string textAction)
        {
        }
 
 
 

vector action space 를 Continuous로 지정하면 action parameter 가 Agent로 전달 된다.

전달된 매개변수는 Vector Action Space Size속성과 길이가 동일한 제어 신호 배열이다.

 

 

Discrete Vector로 지정하면 매개변수는 정수배열이다.

각정수는 목록또는 명령 표에 대한 Index다.

Discrete Vector에서 Action Parameter는 인덱스 배열이다.

배열의 인덱스 수는 Branches Size 속성에 정의 된 분기 수에 의해 결정된다. 

Branches Size : 각 분기는 작업 테이블에 해당하며 분기 속성을 수정하여 각 테이블의 크기를 지정할수 있다.

Branch Descriptions : 분기 설명 속성은 사용가능한 각 분기 이름을 포함한다.

 

 

Unity Editor Inspector 창을 사용하여 에이전트에 할당 된 Brain 객체에 Vector Action Space Size 및 Vector Action Space Type 속성을 설정하십시오.

 

Brain이나 training 알고리즘은 액션 값 자체가 의미하는 바를 전혀 모른다.

 

훈련 알고리즘은 단순히 행동 목록에 대해 다른 값을 시도 하고 시간이 지남에 따라 누적된 보상 및 많은 훈련 에피소드에 대한 영향을 관찰 한다.

 

따라서 Agent에 대해 AgentAction() 함수에 있는 유일한 작업을 정의한다.

 

단순히 벡터 작업 공간의 유형을 지정하고 연속 벡터 작업 공간의 경우 값 수를 입력 한 다음 ActionAct ()에서 적절히 (그리고 일관되게)받은 값을 적용하면됩니다.

 

 

예를들어 Agent를 2차원으로 이동하도록 설계한후 연속 또는 개별 벡터 동작을 사용할수 있다.

 

연속적인 경우 vector action size를 2로 설정하고 Agent의 Brain은 두개의 부동 소수점 값이 있는 작업을 만들면 된다.

 

 

discrete 일경우 Branch 사이즈를 4개로 설정한다.

Brain은 0 ~ 3까지값을 갖는 단일 요소를 포함하는 동작 배열을 만들거다.

 

 

 

둘중하나로 2개의 Branch를 만들수 있다.

하나는 수평 이동 

하나는 수직 이동 

Brain은 0 ~ 1까지의 값을 갖는 두개의 요소를 포함하는 동작 배열을 만든다.

 

Agent에 대한 액션을 프로그래밍 할 때 키보드 커맨드를 액션에 매핑할수 있는 플레이어 브레인 (Player Brain)을 사용하여 액션 로직을 테스트 하는것이 좋다.

자세한내용은 Brains을 참고 하자 

 

The 3DBall 및 Area 예제 환경은 Continuous 또는 Discrete Vector 액션을 사용하도록 설정 되어 있다.

 

 

Continuous Action Space

 

Agent가 Continuous 로 설정된 Brain을 사용할 경우 Agent의 AgentAction()함수에 전달된 action 매개변수는 Brain객체의 벡터 동작 공간 크기 속성값과 같은 길이의 배열이다.

배열의 개별 값에는 사용자가 정한 의미와 관계가 있다.

 

Agent의 속도를 배열의 요소에 할당 하는 경우 

훈련 과정은 매배변수를 통해 Agent의 속도를 제어 하는것을 배울것이다.

 

Reacher example는 4 개의 제어 값을 갖는 연속 동작 공간을 정의합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/// <summary>
    /// The agent's four actions correspond to torques on each of the two joints.
    /// </summary>
    public override void AgentAction(float[] vectorAction, string textAction)
    {
        goalDegree += goalSpeed;
        UpdateGoalPosition();
 
        var torqueX = Mathf.Clamp(vectorAction[0], -1f, 1f) * 150f;
        var torqueZ = Mathf.Clamp(vectorAction[1], -1f, 1f) * 150f;
        rbA.AddTorque(new Vector3(torqueX, 0f, torqueZ));
 
        torqueX = Mathf.Clamp(vectorAction[2], -1f, 1f) * 150f;
        torqueZ = Mathf.Clamp(vectorAction[3], -1f, 1f) * 150f;
        rbB.AddTorque(new Vector3(torqueX, 0f, torqueZ));
    }
 
 

이 제어 값은 팔을 구성하는 몸체에 적용되는 토크입니다.

 

기본적으로 제공된 PPO 알고리즘의 출력은 vectorAction의 값을 [-1, 1] 범위로 미리 클램프합니다.

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

 

Proximal Policy Optimization

We’re releasing a new class of reinforcement learning algorithms, Proximal Policy Optimization (PPO), which perform comparably or better than state-of-the-art approaches while being much simpler to implement and tune.

openai.com

 

사용자 환경에서 타사 알고리즘을 사용하려는 경우 수동으로 클립핑 하는것이 좋다.

위에서 표시된것 처럼 컨트롤 값을 클램프 한 후 필요에 따라 컨트롤 값을 스케일 할 수 있다.

 

 

Discrete Action Space

 

Agent 가 discrete vector action space로 설저된 Brain을 사용할 경우 action 매개변수는 Agent의 AgentAction()메서드는 인덱스가 포함된 배열을 가진다.

Discrete Vector action space에서 Branches는 정수 배열이며 각 값은 각 분기의 가능성 수에 해당한다.

 

예를들어 비행기에 움직이고 점프 할수 있는 Agent를 원한다면 두개의 지점을 정의 할수 있다(모션용, 점프용)

Agent는 동시에 움직이고 점프 할수 있기를 원하기 때문이다.

 

우리는 첫번째 Branch를 5가지 가능한 행동으로 정의한다

1. 움직이지 않기 

2. 왼쪽으로 가기 

3. 오른쪽으로 가기

4. 뒤로가기 

5. 앞으로 나아가기

 

두번째 행동은 2가지 행동을 취할수 있다.(점프 하거나 점프하지 말것)

AgentAction메서드는 다음과 같다 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// Get the action index for movement
int movement = Mathf.FloorToInt(act[0]);
// Get the action index for jumping
int jump = Mathf.FloorToInt(act[1]);
 
// Look up the index in the movement action list:
if (movement == 1) { directionX = -1; }
if (movement == 2) { directionX = 1; }
if (movement == 3) { directionZ = -1; }
if (movement == 4) { directionZ = 1; }
// Look up the index in the jump action list:
if (jump == 1 && IsGrounded()) { directionY = 1; }
 
// Apply the action results to move the Agent
gameObject.GetComponent<Rigidbody>().AddForce(
    new Vector3(
        directionX * 40f, directionY * 300f, directionZ * 40f));
 

위 코드 예제는 AreaAgent클래스의 단순 추출물로, 이산 액션 공간과 연속 동작 공간에 대한 대체 구현을 제공한다.

 

Masking Discrete Actions(불연속 액션 마스킹 )

 

이산 행동을 사용할때 다음 결정을 위해 불가능한 행동을 지정할수 있다.

Agent가 학습 Brain에 의해 제어 되면 Agent는 지정된 조치를 수행 할 수 없다.

Agent가 Player또는 경험주의 Brain에 의해 제어 될때 Agent는 계속 마스크 작업을 수행 할것인지 결정할수 있다.

 

SetActionMask(branch, actionIndices)
  • 분기는 작업을 마스크하려는 분기의 인덱스 (0에서 시작)입니다.
  • actionIndices는 에이전트가 수행 할 수없는 작업 인덱스에 해당하는 int 또는 단일 int의 목록입니다.

예를들어 2개의 분가가 있는 Agent가 있고 첫번째 분기에 4개의 가능한 조치가 있다고 하자 

: 아무것도하지 말라", "뛰어 오르다", "쏴라", "무기 변경하기"

 

그런 다음 에이전트는 다음 결정을 위해 "아무것도하지 않거나"무기를 변경합니다 (조치 색인 1과 2는 가려져 있기 때문에)

SetActionMask(0, new int[2]{1,2})

 

  • 여러 분기에 마스크를 넣으려면 SetActionMask를 여러 번 호출 할 수 있습니다.
  • 가지의 모든 행동을 숨길 수는 없습니다.
  • 연속 제어에서 동작을 마스킹 할 수 없습니다.

 

 

 

 

 

Rewards

 

보강 학습에서 보상은 상담원이 올바르게 수행 한 신호입니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

Unity-Technologies/ml-agents

Unity Machine Learning Agents Toolkit. Contribute to Unity-Technologies/ml-agents development by creating an account on GitHub.

github.com

 

 

'Unity3D > ml-agent' 카테고리의 다른 글

[ml-agent] Learning-Environment-Create-New  (0) 2019.05.30
[ml-agent] Training config file  (0) 2019.05.30
[ml-agent] Agents  (0) 2019.05.28
[ml-agent] Basic Guide  (0) 2019.05.27
[ml-agent] Background: Jupyter Notebooks  (0) 2019.05.27
[ml-agent] Installation  (0) 2019.05.27
Trackbacks 0 : Comments 0

[ml-agent] Basic Guide

Unity3D/ml-agent 2019.05.27 23:24

이 가이드는 예시적인 Unity 환경 (3D Ball)에서 사전 훈련 된 모델을 사용하고 모델을 직접 훈련시키는 방법을 보여줍니다. Unity Engine에 익숙하지 않다면, Unity의 모든 기본 개념을 배우기 위해 Roll-a-ball 튜토리얼을 적극 권장합니다.

 

Unity 내에서 ML-Agents Toolkit 설정하기

 

1. D:\workspace\unity\git\ml-agents\UnitySDK 폴더를 적당한 위치로 복사 붙여 넣기 

2. Hub로 열기 

 

 

사전 훈련 된 모델 실행

우리는 에이전트 (.nn 파일)에 대한 사전 훈련 된 모델을 포함하고 우리는 유니티 추론 엔진을 사용하여 Unity 내에서 이러한 모델을 실행합니다. 이 섹션에서는 3D Ball 예제에 대해 사전 학습 된 모델을 사용합니다.

 

Project 창에서 Assets / ML-Agents / Examples / 3DBall / Scenes 폴더로 이동하여 3DBall 장면 파일을 엽니 다.

Project 창에서 Assets / ML-Agents / Examples / 3DBall / Prefabs 폴더로 이동하십시오. 게임을 펼치고 플랫폼 프리 팹을 클릭하십시오. Inspector 윈도우에서 Platform 프리 팹을 볼 수 있습니다.

 3DBall 장면의 플랫폼은 플랫폼 프리 패브를 사용하여 만들어졌습니다. 12 개의 플랫폼을 모두 개별적으로 업데이트하는 대신 Platform 프리 패브를 업데이트 할 수 있습니다. 

Project 창에서 Inspector 창에서 Assets / ML-Agents / 3DBall / Brains에있는 3DBallLearning Brain을 Ball 3D Agent (스크립트) 구성 요소 아래의 Brain 속성으로 드래그합니다.

계층 구조 창의 각 게임에있는 각 플랫폼에는 이제 Brain으로 3DBallLearning이 포함되어 있습니다. 참고 : 장면 계층 구조의 검색 막대를 사용하여 한 번에 모든 장면을 선택하여 장면의 여러 게임 개체를 수정할 수 있습니다.

 

 

Project 창에서 Assets / ML-Agents / Examples / 3DBall / Brains에있는 3DBallLearning Brain을 클릭하십시오. Inspector 윈도우에서 속성을 볼 수 있습니다.

 

 

Project 창에서 Assets / ML-Agents / Examples / 3DBall / TFModels 폴더를 엽니 다.

 

TFModels/3DBallLearning 을 ML-Agents/Examples/3DBall/Brains/3DBallLearning에 Model에 Assign하기 

참고 : 모든 두뇌는 이제 3DBallLearning을 Model 속성의 TensorFlow 모델로 가져야합니다.

 

이 모델 (CPU 또는 GPU)에 사용할 InferenceDevice를 선택하십시오. 참고 : CPU는 대부분의 ML-Agents 툴킷 생성 모델에서 더 빠릅니다.

 

 

재생 버튼을 클릭하면 플랫폼이 사전 훈련 된 모델을 사용하여 볼의 균형을 잡는 것을 볼 수 있습니다.

Jupyter Notebook 사용하기

 

notebooks / getting-started.ipynb Jupyter 노트북에는 Python API의 기능에 대한 간단한 설명이 포함되어 있습니다. 또한 환경이 올바르게 구성되었는지 여부를 간단히 테스트 할 수도 있습니다.

 

기본 설정에서 실행 파일을 사용하려면 env_name을 Unity 실행 파일의 이름으로 설정하고 Unity Editor에서 현재 장면과 상호 작용하려면 None으로 설정하십시오.

 

환경을 구축하거나 편집기에서 상호 작용하기 전에 Unity 편집기의 Hierarchy 창에서 Ball3DAcademy를 ​​선택하고 Ball 3D Academy 구성 요소 아래에서 Control 확인란이 선택되어 있는지 확인하십시오.

 

더 많은 정보와 문서는 Python API 페이지에서 제공됩니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

강화 학습을 통한 두뇌 훈련

교육을위한 환경 설정

 

 

교육 환경을 설정하려면 교육에 기여한 상담원과 교육을받는 Brain을 지정해야합니다. Learning Brain으로 만 교육을 수행 할 수 있습니다.

 

 

각 플랫폼 에이전트는 할당 된 Learning Brain이 필요합니다.

이 예에서 각 플랫폼 에이전트는 Prefab을 사용하여 생성되었습니다.

한 번에 각 플랫폼 에이전트의 모든 두뇌를 업데이트하려면 플랫폼 에이전트 Prefab 만 업데이트하면됩니다.

Project 창에서 Assets / ML-Agents / Examples / 3DBall / Prefabs 폴더로 이동하십시오.

게임을 펼치고 플랫폼 프리 팹을 클릭하십시오. Inspector 윈도우에서 Platform 프리 팹을 볼 수 있습니다.

 

 

 

Project 창에서 Inspector 창에서 Assets / ML-Agents / 3DBall / Brains에있는 3DBallLearning Brain을 Ball 3D Agent (스크립트) 구성 요소 아래의 Brain 속성으로 드래그합니다.

 

 

Hierarchy 창에서 Ball3DAcademy를 ​​선택하십시오.

 

 

 

프로젝트 창에서 Assets / ML-Agents / Examples / 3DBall / Brains 폴더로 이동하여 3DBallLearning Brain을 Inspector 창의 Ball3DAcademy 객체에있는 Braodcast Hub의 Brains 속성으로 드래그합니다.

훈련을하려면 제어 확인란이 선택되어 있는지 확인하십시오.

 

 

환경 교육

 

Anaconda를 사용하고 있다면 ml-agents 환경을 먼저 활성화하는 것을 잊지 마십시오.

 

1.명령 또는 터미널 창을 엽니 다.

 

2.ML-Agents 툴킷 저장소를 복제 한 폴더로 이동하십시오.

참고 : 기본 설치를 따른 경우 모든 디렉토리에서 mlagents-learn을 실행할 수 있어야합니다.

 

3. mlagents-learn <trainer-config-path> --run-id = <실행 식별자> --train을 실행합니다.

  • <trainer-config-path>는 트레이너 구성의 상대 또는 절대 파일 경로입니다.
  • MLAgentsSDK에 포함 된 예제 환경에서 사용되는 기본값은 config / trainer_config.yaml에서 찾을 수 있습니다.
  • <실행 식별자>는 여러 가지 교육 실행 결과를 구분하는 데 사용되는 문자열입니다.
  • --train은 mlagents에게 (추측이 아닌) 교육 세션을 실행하는 방법을 알려줍니다.

4. ML-Agent repo를 복제 한 경우 간단히 실행할 수 있습니다.

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

프로젝트를 복제 했을경우 trainer_config.yaml파일을 복사해서 붙여 넣는다 

 

 

 

5. 유니티 에디터에서 Play 버튼을 눌러 트레이닝을 시작하는 메시지가 화면에 표시되면 Unity에서 ▶ ️ 버튼을 눌러 에디터에서 트레이닝을 시작할 수 있습니다.

 

참고 : 또는 편집기 대신 실행 파일을 사용하여 교육을 수행 할 수 있습니다. 실행 파일을 빌드하고 사용하는 방법에 대한 지침은이 페이지를 참조하십시오.

 

ml-agents$ mlagents-learn config/trainer_config.yaml --run-id=first-run --train

 

Ctrl + C를 눌러 학습을 중지하면 숙련 된 모델이 models / <실행 식별자> / <brain_name> .nn에 있습니다. 여기서 <brain_name>은 모델에 해당하는 Brain의 이름입니다.

 

교육을 중지하기 위해 Ctrl + C를 누를 수 있으며 훈련 된 모델은 models / <실행 ID> /  .nn에 있습니다. 여기서 은 모델에 해당하는 Brain의 이름입니다. (참고 : Windows에 알려진 버그로 인해 조기에 교육을 종료 할 때 모델 저장에 실패하게되므로 step이 trainer_config.yaml에서 설정 한 max_steps 매개 변수에 도달 할 때까지 기다리는 것이 좋습니다.)이 파일은 귀하의 모델의 최신 검사 점. 위에서 설명한 단계와 비슷한 아래의 단계에 따라 학습 된 모델을 학습 뇌에 삽입 할 수 있습니다.

 

모델 파일을 UnitySDK / Assets / ML-Agents / Examples / 3DBall / TFModels /로 이동하십시오.
Unity Editor를 열고 위에서 설명한대로 3DBall 장면을 선택하십시오.
Scene 계층 구조에서 3DBallLearning Learning Brain을 선택하십시오.
 .nn 파일을 편집기의 프로젝트 창에서 3DBallLearning 속성 윈도우의 모델 자리 표시 자로 드래그하십시오.
에디터 상단의 ▶ 버튼을 누릅니다.

 

 

다음 단계
ML-Agents 툴킷에 대한 자세한 내용과 함께 유용한 배경 외에도 ML-Agents Toolkit 개요 페이지를 확인하십시오.
3D Balance Ball 환경에 대한 자세한 내용은 시작하기 페이지를 참조하십시오.
자신의 학습 환경을 만드는 "Hello World"소개를 보려면 새로운 학습 환경 만들기 페이지를 확인하십시오.
일련의 YouTube 비디오 자습서를 보려면 Machine Learning Agents PlayList 페이지를 확인하십시오.

 

 

 

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

 

Unity-Technologies/ml-agents

Unity Machine Learning Agents Toolkit. Contribute to Unity-Technologies/ml-agents development by creating an account on GitHub.

github.com

 

 

'Unity3D > ml-agent' 카테고리의 다른 글

[ml-agent] Learning-Environment-Create-New  (0) 2019.05.30
[ml-agent] Training config file  (0) 2019.05.30
[ml-agent] Agents  (0) 2019.05.28
[ml-agent] Basic Guide  (0) 2019.05.27
[ml-agent] Background: Jupyter Notebooks  (0) 2019.05.27
[ml-agent] Installation  (0) 2019.05.27
Trackbacks 0 : Comments 0