ml-agents v1.0 : Overview
Unity3D/ml-agent 2020. 12. 28. 16:53ML-Agents Toolkit Overview
Unity Machine Learning Agents Toolkit(ML-에이전트s Toolkit)은 게임 및 시뮬레이션이 지능형 에이전트 교육을 위한 환경 역할을 할 수 있도록 지원하는 오픈 소스 프로젝트입니다. 에이전트는 사용이 간편한 Python API를 통해 강화 학습, 모방 학습, 신경 진화 또는 기타 기계 학습 방법을 사용하여 훈련될 수 있다. 또한 게임 개발자와 취미 활동가들이 2D, 3D 및 VR/AR 게임을 위한 지능형 에이전트를 쉽게 교육할 수 있도록 최신 알고리즘의 구현(PyTorch 기반)도 제공합니다.
이러한 훈련된 에이전트는 NPC 동작 제어(다중 에이전트 및 적대와 같은 다양한 설정에서), 게임 빌드의 자동 테스트 및 다양한 게임 설계 결정 사전 릴리스를 평가하는 등 여러 목적으로 사용될 수 있다. ML-Agents Tolkit은 Unity의 풍부한 환경에서 AI의 진보를 평가하고 더 넓은 연구 및 게임 개발자 커뮤니티에 접근할 수 있는 중앙 플랫폼을 제공하기 때문에 게임 개발자와 AI 연구원 모두에게 상호 유익하다.
배경(예: 연구원, 게임 개발자, 취미 생활자)에 따라 현재 여러분은 매우 다른 질문을 하고 있을 수 있습니다. ML-에이전트 툴킷으로 보다 쉽게 전환할 수 있도록 Unity Engine, 기계 학습 및 PyTorch에 대한 개요와 유용한 리소스가 포함된 몇 가지 배경 페이지를 제공합니다. Unity 씬(scene)의 기본 기계 학습 개념을 잘 모르거나 이전에 PyTorch에 대해 들어본 적이 없는 경우 관련 배경 페이지를 검색하는 것이 좋습니다.
Background: Machine Learning
ML-Agents Tolkit의 많은 사용자가 공식적인 기계 학습 배경을 가지고 있지 않을 수 있다는 점을 감안할 때, 이 페이지는 ML-Agents Tolkit의 이해를 용이하게 하기 위한 개요를 제공한다. 하지만, 우리는 온라인에 환상적인 자원이 있기 때문에 기계 학습에 대한 철저한 치료를 제공하려고 시도하지 않을 것이다.
인공지능의 한 분야인 머신러닝은 데이터로부터 패턴을 학습하는 데 초점을 맞추고 있다. 기계 학습 알고리즘의 세 가지 주요 등급에는 비지도 학습, 감독 학습 및 강화 학습이 포함된다. 각 알고리즘 클래스는 다른 유형의 데이터로부터 학습합니다. 다음 단락에서는 이러한 기계 학습의 각 클래스에 대한 개요와 소개 예를 제공합니다.
Unsupervised Learning
비지도 학습의 목표는 데이터 세트에서 유사한 항목을 그룹화하거나 군집화하는 것이다. 예를 들어, 게임의 플레이어를 고려해보세요. 우리는 선수들이 얼마나 게임에 몰입하느냐에 따라 그들을 분류하고 싶을지도 모른다. 이렇게 하면 서로 다른 그룹을 대상으로 할 수 있습니다(예: 참여도가 높은 플레이어의 경우 새로운 기능의 베타 테스터로 초대할 수 있으며, 참여하지 않은 플레이어의 경우 유용한 자습서를 이메일로 보낼 수 있습니다).
우리 선수들을 두 그룹으로 나누고 싶다고 말해라. 우리는 먼저 경기 시간, 앱 내 구매에 소비되는 총 돈, 완료된 레벨 수와 같은 플레이어의 기본 속성을 정의할 것이다. 그런 다음 이 데이터 세트(모든 플레이어에 대한 세 가지 속성)를 감독되지 않은 학습 알고리즘에 공급하여 두 그룹으로 그룹 수를 지정할 수 있다.
그런 다음 알고리즘은 플레이어들의 데이터 세트를 두 그룹으로 나누어 각 그룹 내의 플레이어가 서로 유사할 수 있도록 합니다. 각 플레이어를 설명하는 데 사용한 속성을 고려할 때, 이 경우 출력은 모든 플레이어를 두 그룹으로 나누는 것이며, 여기서 한 그룹은 의미론적으로 참여 플레이어를 나타내고 두 번째 그룹은 의미론적으로 비참여 플레이어를 나타낸다.
비지도 학습을 통해 우리는 어떤 플레이어가 참여한 것으로 간주되고 참여하지 않은 것으로 간주되는 구체적인 예를 제공하지 않았습니다. 우리는 적절한 속성을 정의하고 알고리즘에 의존하여 자체적으로 두 그룹을 발견했습니다.
이러한 유형의 데이터 세트는 일반적으로 이러한 직접 레이블이 없기 때문에 라벨이 없는 데이터 세트라고 합니다. 따라서 감독되지 않은 학습은 이러한 라벨이 비싸거나 생산하기 어려운 상황에서 도움이 될 수 있다. 다음 단락에서는 속성 외에 입력 레이블을 수용하는 감독 학습 알고리즘을 개괄한다.
Supervised Learning
감독된 학습에서 우리는 단지 유사한 항목을 그룹화하는 것이 아니라 각 항목에서 해당 항목이 속한 그룹(또는 클래스)에 대한 매핑을 직접 학습하고 싶다. 선수들을 집적시키는 이전의 사례로 돌아가면, 이제 우리 선수들 중 누가 앞으로 30일 동안 경기를 중단할 것인지 예측하고 싶다고 하자.
우리는 우리의 역사적 기록을 조사하고, 그들이 휘저었는지 아닌지를 나타내는 라벨 외에 우리 선수들의 속성이 들어 있는 데이터 세트를 만들 수 있다. 이 츄런 예측 작업에 사용하는 플레이어 속성은 이전 클러스터링 작업에 사용한 플레이어 속성과 다를 수 있습니다.
그런 다음 우리는 이 데이터 세트(각 플레이어의 속성 및 레이블)를 지도 학습 알고리즘에 공급할 수 있으며, 이 알고리즘은 플레이어 속성에서 플레이어의 휘어짐 여부를 나타내는 레이블로의 매핑을 학습한다. 직관적인 것은 감독된 학습 알고리즘이 이러한 속성들의 어떤 값이 휘젓고 휘젓지 않은 플레이어에 일반적으로 해당하는지를 학습할 것이라는 것이다(예를 들어, 매우 적은 시간을 소비하고 매우 짧은 시간 동안 플레이하는 플레이어는 휘젓을 가능성이 크다는 것을 배울 수 있다).
이제 학습된 모델이 주어지면 새로운 플레이어의 특성(최근 게임을 시작한 플레이어)을 제공할 수 있으며 해당 플레이어에 대해 예측 레이블을 출력합니다. 이 예측은 플레이어가 흔들릴지 여부에 대한 알고리즘 기대치입니다. 우리는 이제 이러한 예측들을 이용하여 동요할 것으로 예상되는 선수들을 타겟으로 삼고 그들이 게임을 계속하도록 유인할 수 있다.
여러분이 눈치챘겠지만, 지도 학습과 감독되지 않은 학습 모두에 대해 수행해야 할 두 가지 작업이 있습니다: 속성 선택과 모델 선택입니다. 속성 선택(기능 선택이라고도 함)은 관심 있는 엔터티를 나타낼 방법을 선택하는 것과 관련이 있습니다. 반면에 모델 선택은 작업을 잘 수행하는 알고리즘(및 해당 파라미터)을 선택하는 것과 관련이 있습니다. 이 두 작업 모두 기계 학습 연구의 활동 영역이며, 실제로 우수한 성능을 달성하기 위해 여러 번 반복해야 한다.
이제 강화 학습, 기계 학습 알고리즘의 세 번째 등급, 그리고 ML-에이전트 툴킷과 가장 관련성이 높은 것으로 전환합니다.
Reinforcement Learning
강화 학습은 일반적으로 제어 로봇과 관련된 순차적 의사 결정을 위한 학습의 한 형태로 볼 수 있다(실제로 훨씬 더 일반적이다). 지역을 탐색하고, 화재를 찾아내고, 그것을 중화시키는 임무를 맡고 있는 자율 소방 로봇을 생각해 보자. 로봇은 언제든지 센서(예: 카메라, 열, 터치)를 통해 환경을 인식하여 이 정보를 처리하고 동작을 수행합니다(예: 왼쪽으로 이동, 물 호스 회전, 물 켜기).
즉, 세상을 보는 관점(즉, 센서 입력)과 목적(즉, 화재를 중화)을 고려하여 이 환경에서 상호작용하는 방법에 대한 결정을 지속적으로 내리고 있다. 로봇에게 성공적인 소방 기계가 되도록 가르치는 것은 강화 학습이 정확히 계획되어 있는 것이다.
보다 구체적으로는 강화 학습의 목표는 정책을 배우는 것인데, 이는 본질적으로 관찰에서 행동으로의 매핑입니다. 관찰은 로봇이 환경으로부터 측정할 수 있는 것(이 경우 모든 감각 입력)이며, 가장 원시적인 형태로 작용하는 것은 로봇의 구성(예:)의 변화다. 베이스의 위치, 워터 호스의 위치 및 호스의 켜짐 또는 꺼짐).
강화 학습 과제의 마지막 남은 부분은 보상 신호이다. 로봇은 전반적인 보상을 극대화하는 정책을 배우도록 훈련 받는다. 로봇이 평균 소방 기계가 되도록 훈련할 때, 우리는 로봇이 작업을 얼마나 잘 수행하고 있는지를 나타내는 보상(긍정적이고 부정적인)을 로봇에게 제공한다. 로봇은 교육을 받기 전에 불을 끄는 방법을 알지 못합니다.
그것은 불을 끌 때 큰 양의 보상을 받기 때문에 목표를 배운다. 그리고 지나가는 매 초마다 작은 부정적인 보상을 받기 때문이다. 보상이 희박하다는 사실(즉, 로봇이 성공 또는 실패 상황에 도달할 때에만)은 강화 학습의 정의 특성이며, 복잡한 환경에서 우수한 정책을 학습하는 것이 어려울 수 있는(및/또는 시간이 많이 소요되는)
정책을 학습하려면 일반적으로 많은 시도와 반복적 인 정책 업데이트가 필요합니다. 보다 구체적으로 로봇은 여러 화재 상황에 배치되고 시간이 지남에 따라보다 효과적으로 화재를 진압 할 수있는 최적의 정책을 학습합니다.
분명히, 우리는 현실 세계에서, 특히 화재가 발생할 때 로봇을 반복적으로 훈련시킬 것이라고 기대할 수 없다. 이것이 바로 유니티를 시뮬레이터로 사용하는 것이 그러한 행동을 배우는 완벽한 훈련의 근거가 되는 이유다. 강화 학습에 대한 우리의 논의는 로봇을 중심으로 이루어졌지만, 게임에서 로봇과 캐릭터 사이에는 강한 유사점이 있다. 실제로, 많은 면에서, 사람들은 환경, 그 자신의 행동 세트, 그리고 특정한 목표에 대한 자체적인 관찰을 가지고, 재생 불가능한 캐릭터(NPC)를 가상 로봇으로 볼 수 있다.
따라서 강화학습을 통해 통합 안에서의 행동을 어떻게 훈련시킬 수 있는지 탐구하는 것이 당연하다. 이것이 바로 ML-에이전트 툴킷이 제공하는 것이다. 아래 링크된 비디오에는 ML-Agents Tolkit을 사용하여 훈련 캐릭터 동작을 보여주는 강화 학습 데모가 포함됩니다.
www.youtube.com/watch?v=fiQsmdwEGT8&feature=youtu.be
감독되지 않고 감독된 학습과 마찬가지로 강화 학습은 속성 선택과 모델 선택의 두 가지 작업을 포함합니다. 속성 선택은 로봇의 목표를 완료하는 데 가장 잘 도움이 되는 관측치 집합을 정의하는 반면, 모델 선택은 정책의 형태(관찰에서 동작으로 매핑)와 그 매개변수를 정의하는 것이다. 실제로 훈련 행동은 속성과 모델 선택을 변경해야할 수 있는 반복적인 과정입니다.
Training and Inference
훈련 및 추론
기계 학습의 세 가지 가지 가지의 공통적인 측면 중 하나는 모두 훈련 단계와 추론 단계를 포함한다는 것입니다. 훈련 및 추론 단계의 세부 사항은 세 가지 각각에 대해 다르지만, 높은 수준에서 훈련 단계는 제공된 데이터를 사용하여 모델을 구축하는 것을 포함하며, 추론 단계는 이전에 보이지 않았던 새로운 데이터에 이 모델을 적용하는 것을 포함한다. 더 구체적으로 :
우리의 비지도 학습 예제의 경우, 훈련 단계는 기존 플레이어를 설명하는 데이터를 기반으로 최적의 두 클러스터를 학습하는 반면, 추론 단계는 이 두 클러스터 중 하나에 새 플레이어를 할당한다.
우리의 감독된 학습 예제의 경우, 훈련 단계는 플레이어 속성에서 플레이어 레이블로의 매핑을 학습하고(그 속성들이 흔들렸는지 안 흔들렸는지), 추론 단계는 학습된 매핑을 기반으로 새 플레이어가 휘어질지 여부를 예측한다.
강화 학습 예제의 경우, 훈련 단계는 안내된 시험을 통해 최적의 정책을 학습하고, 추론 단계에서 에이전트는 학습된 정책을 사용하여 야생에서 행동을 관찰하고 이야기한다.
Deep Learning
딥러닝은 위에서 소개한 문제를 해결하는 데 사용할 수 있는 알고리즘 계열이다. 보다 구체적으로 말하면, 속성 및 모델 선택 작업을 모두 해결하는 데 사용할 수 있습니다. 딥 러닝은 최근 몇 년 동안 여러 가지 어려운 기계 학습 작업에서 뛰어난 성능으로 인기를 얻고 있다. 딥러닝을 활용한 컴퓨터 바둑 프로그램 알파고가 바둑 세계 챔피언인 이세돌을 물리칠 수 있었다.
딥러닝 알고리즘의 주요 특징은 대량의 훈련 데이터에서 매우 복잡한 기능을 학습할 수 있다는 것이다. 이를 통해 시뮬레이터 또는 Unity와 같은 엔진의 사용을 통해 대량의 데이터가 생성될 수 있는 경우 강화 학습 작업을 위한 자연스러운 선택이 가능합니다. Unity 내에서 수십만 건의 환경 시뮬레이션을 생성함으로써 매우 복잡한 환경에 대한 정책을 학습할 수 있습니다(복잡한 환경은 에이전트에서 인식하는 관찰 수와 수행할 수 있는 작업 수가 많은 환경임). ML-에이전트에서 제공하는 많은 알고리즘은 오픈 소스 라이브러리인 PyTorch 위에 구축된 일종의 딥 러닝을 사용합니다.
Background: PyTorch
기계 학습 배경 페이지에서 설명한 바와 같이, ML-에이전트 툴킷에서 제공하는 많은 알고리즘은 어떤 형태의 딥 러닝을 활용한다. 보다 구체적으로, 우리의 구현은 오픈 소스 라이브러리 PyTorch 위에 구축된다. 이 페이지에서는 ML-에이전트 툴킷에서 활용하는 PyTorch 및 TensorBoard에 대한 간략한 개요를 제공합니다.
PyTorch
PyTorch는 딥 러닝 모델의 기본 표현인 데이터 흐름 그래프를 사용하여 계산을 수행하기 위한 오픈 소스 라이브러리입니다. 데스크톱, 서버 또는 모바일 장치의 CPU 및 GPU에 대한 교육 및 추론을 용이하게 합니다. ML-에이전트s 툴킷에서 에이전트의 동작을 교육할 때 출력은 에이전트와 연결할 수 있는 모델(.onnx) 파일입니다. 새로운 알고리즘을 구현하지 않는 한, PyTorch의 사용은 대부분 추상화되거나 막후에서 이루어집니다.
TensorBoard
PyTorch를 사용한 교육 모델의 한 가지 요소는 특정 모델 속성(하이퍼 파라미터라고 함)의 값을 설정하는 것입니다. 이러한 하이퍼 파라미터의 올바른 값을 찾으려면 몇 번의 반복이 필요할 수 있습니다. 결과적으로, 우리는 TensorBoard라는 시각화 도구를 활용한다. 이를 통해 교육 전반에 걸쳐 특정 에이전트 속성(예: 보상)을 시각화할 수 있으며, 이는 서로 다른 하이퍼 파라미터에 대한 직관력을 구축하고 Unity 환경에 대한 최적의 값을 설정하는 데 모두 도움이 될 수 있습니다. 하이퍼 파라미터 설정에 대한 자세한 내용은 Training ML-에이전트s 페이지에서 확인할 수 있습니다. TensorBoard와 ML-에이전트를 함께 사용하는 방법에 대한 가이드 또는 본 자습서를 사용하는 것이 좋습니다.
이 페이지의 나머지 부분에는 ML-에이전트, 주요 구성 요소, 다양한 교육 모드 및 시나리오에 대한 심층적인 설명이 포함되어 있습니다. 이 작업을 마치면 ML-에이전트 툴킷에서 수행할 수 있는 작업에 대해 잘 이해할 수 있어야 합니다. 후속 설명서 페이지에는 ML-에이전트 사용 방법에 대한 예가 나와 있습니다. 시작하려면 실행 중인 ML-에이전트의 데모 비디오를 보십시오
Running Example: Training NPC Behaviors
실행 예제 : NPC 행동 훈련
이 페이지의 자료와 용어를 설명하는 데 도움이 되기 위해, 우리는 내내 가상의 실행된 예를 사용할 것이다. 우리는 게임에서 재생할 수 없는 캐릭터(NPC)의 행동을 훈련시키는 문제를 탐구할 것이다. (NPC는 인간 플레이어에 의해 결코 통제되지 않는 게임 캐릭터로, 그 행동은 게임 개발자에 의해 미리 정의된다.) 더 구체적으로 말하자면, 우리가 선수들이 군인들을 통제하는 다인종 전쟁 테마 게임을 만들고 있다고 가정해 보자. 이 게임에서는 부상당한 선수들을 찾고 되살리는 의료진 역할을 하는 NPC가 한 명 있다. 마지막으로, 각각 5명의 선수와 1명의 NPC 의료진이 있는 두 팀이 있다고 가정해 보자.
의료인의 행동은 꽤 복잡하다. 먼저 부상자 가는 것을 피하기 나왔을 때 위험에 처해 있고 안전한 장소로 옮기는 검출이 필요할 필요가 있다. 둘째, 팀 구성원 중 어느 쪽이 부상을 당했는지 알아야 하며 도움이 필요하다. 다수의 부상의 경우, 부상 정도를 평가하고 누구를 먼저 도와야 할지 결정해야 한다. 마지막으로, 좋은 의료인은 항상 팀원들을 빠르게 도울 수 있는 위치에 놓이게 될 것이다. 이러한 특성을 모두 고려한다는 것은 모든 경우에 의료진이 환경의 몇 가지 속성(예: 팀원의 위치, 팀원의 부상 및 정도)을 측정한 다음 조치를 결정해야 한다는 것을 의미한다. 많은 수의 환경 설정과 의료인이 취할 수 있는 많은 수의 조치를 고려할 때, 그러한 복잡한 행동을 손으로 정의하고 실행하는 것은 어렵고 오류가 발생하기 쉽다.
ML-Agent를 사용하면 다양한 방법을 사용하여 이러한 NPC (에이전트라고 함)의 동작을 훈련 할 수 있습니다. 기본 아이디어는 아주 간단합니다. 게임의 매 순간마다 세 가지 개체 (환경이라고 함)를 정의해야합니다.
Observations (관찰) - 의료진이 환경에 대해 인식하는 것. 관측은 숫자 및/또는 시각적일 수 있습니다. 수치 관측치는 에이전트의 관점에서 환경의 속성을 측정합니다. 우리의 의료진에게 이것은 그것이 보이는 전장의 속성일 것이다. 가장 흥미로운 환경에서 에이전트는 몇 가지 연속적인 숫자 관측을 필요로 할 것이다. 반면에 시각적 관찰은 에이전트에 부착된 카메라에서 생성되는 이미지이며 에이전트가 그 시점에서 보고 있는 것을 나타냅니다. 에이전트의 관찰을 환경(또는 게임) 상태와 혼동하는 것이 일반적이다. 환경 상태는 모든 게임 캐릭터가 포함된 전체 장면에 대한 정보를 나타냅니다. 그러나 에이전트 관찰에는 에이전트가 알고 있으며 일반적으로 환경 상태의 하위 집합인 정보만 포함됩니다. 예를 들어, 의료 관측은 의료진이 알지 못하는 은신처에서 적에 대한 정보를 포함할 수 없습니다.
Actions (조치) - 의료인이 취할 수 있는 조치. 관찰과 마찬가지로, 작업은 환경 및 에이전트의 복잡성에 따라 연속적이거나 별개일 수 있습니다. 의료의 경우, 환경이 위치만 중요한 단순한 그리드 세계인 경우, 네 가지 값(북, 남, 동, 서) 중 하나를 취하는 이산적인 조치만으로도 충분하다. 그러나 환경이 더 복잡하고 의약품이 자유롭게 움직일 수 있는 경우에는 두 가지 연속 작용(방향과 속도 각각)을 사용하는 것이 더 적절하다.
Reward signals (보상 신호) - 의료진이 얼마나 잘 지내고 있는지를 나타내는 스칼라 값. 보상 신호는 매 순간 제공될 필요가 없지만, 의료진이 좋거나 나쁜 행동을 할 때만 제공되어야 한다는 점에 유의하십시오. 예를 들어 사망하면 큰 부정적 보상, 부상당한 팀원을 되살릴 때마다 겸손한 긍정적인 보상, 지원 부족으로 부상당한 팀원이 사망할 때 겸손한 부정적인 보상을 받을 수 있다. 보상 신호는 작업의 목표가 에이전트와 어떻게 통신되는가이므로 보상을 극대화하는 것이 원하는 최적의 행동을 생성하는 방식으로 설정해야 합니다.
이 세 가지 실체(강화 학습 과제의 구성 요소)를 정의한 후, 우리는 이제 의료진의 행동을 훈련시킬 수 있다. 이것은 시간이 지남에 따라 의료진이 미래의 보상을 극대화하여 측정한 모든 관찰에 대해 취할 최적의 조치가 무엇인지 배우는 많은 실험을 위한 환경을 시뮬레이션함으로써 달성됩니다. 핵심은 보상을 극대화하는 행동을 배움으로써 의료진이 좋은 의료진(즉, 좋은 의료진)으로 만드는 행동을 배우는 것이다. 가장 많은 생명을 구하는 사람). 강화 학습 용어에서 학습되는 행동을 정책이라고 하는데, 이는 본질적으로 관찰에서 행동으로의 (최적) 매핑이다. 시뮬레이션 실행을 통해 정책을 배우는 과정을 훈련 단계라고 하며, 학습된 정책을 사용하는 NPC로 게임을 하는 것을 추론 단계라고 한다.
ML-에이전트s 툴킷은 Unity 환경에서 서로 다른 개체의 정책을 학습하기 위한 시뮬레이션 엔진으로 Unity를 사용하는 데 필요한 모든 도구를 제공합니다. 다음 몇 섹션에서는 ML-에이전트 툴킷이 이를 달성하는 방법과 어떤 기능을 제공하는지 설명합니다.
Key Components
주요 성분
ML-Agents Toolkit에는 5 개의 상위 수준 구성 요소가 포함되어 있습니다.
Learning Environment (학습 환경)
여기에는 유니티 장면과 모든 게임 캐릭터가 포함됩니다. Unity 씬(scene)은 에이전트가 관찰, 작업 및 학습하는 환경을 제공합니다. Unity 씬(scene)을 학습 환경으로 설정하는 방법은 실제로 목표에 따라 다릅니다. 제한된 범위의 특정 강화 학습 문제를 해결하려고 할 수 있으며, 이 경우 동일한 장면을 훈련 및 훈련된 에이전트 테스트에 모두 사용할 수 있습니다. 또는 복잡한 게임이나 시뮬레이션에서 작동하도록 에이전트를 교육할 수도 있습니다. 이 경우, 목적에 맞게 제작된 훈련 장면을 만드는 것이 더 효과적이고 실용적일 수 있다. ML-에이전트s 툴킷에는 에이전트 및 해당 동작을 정의하여 모든 Unity 장면을 학습 환경으로 전환할 수 있는 ML-에이전트s Unity SDK(com.unity.ml-backage)가 포함되어 있습니다.
Python Low-Level API (하위수준 파이썬 API)
학습 환경을 상호 작용하고 조작하기 위한 저수준 파이썬 인터페이스를 포함합니다. 학습 환경과 달리 파이썬 API는 유니티의 일부가 아니라 외부에 살고 통신기를 통해 유니티와 통신한다는 점에 유의하십시오. 이 API는 전용 mlagents_envs Python 패키지에 포함되어 있으며, 훈련 중 아카데미와 통신하고 제어하기 위해 Python 훈련 프로세스에서 사용된다. 그러나, 그것은 다른 목적으로도 사용될 수 있다. 예를 들어, API를 사용하여 유니티를 자신의 기계 학습 알고리즘의 시뮬레이션 엔진으로 사용할 수 있다. 자세한 내용은 Python API를 참조하십시오.
External Communicator (외부 커뮤니케이터)
학습 환경과 파이썬 로우 레벨 API를 연결합니다. 그것은 학습 환경 내에 산다.
Python Trainers (파이썬 트레이너)
훈련 에이전트를 가능하게 하는 모든 기계 학습 알고리즘을 포함하는 파이썬 트레이너. 알고리즘은 Python에서 구현되며 자체 mlagents Python 패키지의 일부입니다. 패키지는 이 문서에 설명된 모든 교육 방법과 옵션을 지원하는 단일 명령줄 유틸리티 mlagents-learn을 노출합니다. 파이썬 트레이너는 파이썬 로우 레벨 API와만 인터페이스한다.
Gym Wrapper (짐 래퍼)
기계 학습 연구원들이 시뮬레이션 환경과 상호작용하는 일반적인 방법은 Open에서 제공하는 포장지를 통해서이다.AI가 체육관을 불렀다. 우리는 체육관을 이용하는 기존의 기계 학습 알고리즘과 함께 체육관 통합 파이썬 패키지로 체육관 래퍼와 그것을 사용하기 위한 지침을 제공한다.
학습 환경에는 Unity 장면을 구성하는 데 도움이되는 두 가지 Unity 구성 요소가 포함되어 있습니다.
Agents - Unity GameObject (장면 내의 모든 캐릭터)에 연결되고 관찰 생성, 수신 작업 수행 및 적절한 경우 보상 (긍정 / 부정) 할당을 처리합니다. 각 에이전트는 행동에 연결됩니다.
Behavior - 에이전트가 수행할 수 있는 작업 수와 같은 에이전트의 특정 속성을 정의합니다. 각 동작은 동작 이름 필드로 고유하게 식별됩니다. 동작은 에이전트로부터 관찰 및 보상을 받고 액션을 반환하는 기능으로 생각할 수 있습니다. 동작은 학습, 경험적 접근 또는 추론의 세 가지 유형 중 하나일 수 있습니다. 학습 동작은 아직 정의되지 않았지만 교육받으려고 하는 동작입니다. 경험적 접근 동작은 코드로 구현된 하드 코딩된 규칙 집합으로 정의되는 동작입니다. 추론 동작은 훈련된 신경 네트워크 파일을 포함하는 동작입니다. 본질적으로, 학습 행동이 훈련되면, 그것은 추론 행동이 된다.
모든 학습 환경은 항상 장면의 모든 캐릭터에 대해 하나의 에이전트를 갖게 될 것이다. 각 에이전트는 동작에 연결되어야 하지만 유사한 관찰 및 동작을 가진 에이전트가 동일한 동작을 가질 수 있습니다. 샘플 게임에서는 각각 두 팀이 그들만의 의료진과 함께 있다. 따라서 우리는 학습 환경에 두 명의 요원을 둘 것이다. 하나는 각 의료진에 하나씩이지만, 이 두 의료진은 같은 행동을 할 수 있다. 이것은 각 인스턴스에서 동일한 관찰 및 작업 값을 갖는다는 것을 의미하지는 않습니다.
단일 환경에서는 여러 에이전트와 여러 동작이 동시에 있을 수 있습니다. 예를 들어, 탱크 드라이버 NPC를 포함하도록 게임을 확장한 경우 해당 캐릭터에 연결된 에이전트는 해당 동작을 의료에 연결된 에이전트와 공유할 수 없습니다(메디컬과 드라이버는 다른 작업을 수행함). Academy를 통한 학습 환경(도표에 표시되지 않음)은 환경 전체의 설정을 제어하는 것 외에 모든 에이전트가 동기화되도록 합니다.
마지막으로 Side Channels를 통해 기계 학습 루프 외부에서 Unity와 Python 간에 데이터를 교환할 수 있습니다. Side Channels를 사용하는 한 가지 예는 환경 매개 변수에 대한 Python과 데이터를 교환하는 것입니다. 다음 다이어그램은 위와 같습니다.
Training Modes
ML-에이전트의 유연성을 고려할 때, 훈련과 추론을 진행할 수 있는 몇 가지 방법이 있다.
Built-in Training and Inference
앞서 언급했듯이, ML-Agents Tolkit 선박은 지능형 에이전트를 훈련시키기 위한 최첨단 알고리즘의 여러 구현을 제공합니다. 더 구체적으로는 훈련하는 동안 현장에 있는 모든 의료진이 외부 통신기를 통해 파이썬 API로 관찰을 보낸다. 파이썬 API는 이러한 관찰을 처리하고 각 의료진이 취할 조치를 다시 보냅니다. 훈련하는 동안 이러한 행동들은 대부분 파이썬 API가 각 의료진에 대한 최선의 정책을 배우도록 돕기 위한 탐구적이다. 교육이 끝나면 각 의료진에 대한 학습된 정책을 모델 파일로 내보낼 수 있습니다. 그런 다음 추론 단계에서 의료진은 여전히 관찰을 계속 생성하지만, 파이톤 API로 보내지는 대신, 각 의료진이 매 시점마다 취할 수 있는 최적의 조치를 생성하기 위해 (내부, 내장) 모델로 공급될 것이다.
시작 가이드 자습서에서는 3D Balance Ball 샘플 환경에서이 교육 모드를 다룹니다.
교차 플랫폼 추론 Cross-Platform Inference
ML-에이전트s 툴킷은 Unity 추론 엔진을 활용하여 에이전트가 각 단계에서 최적의 조치를 취할 수 있도록 Unity 씬(scene) 내에서 모델을 실행합니다. Unity 추론 엔진은 Unity에서 지원하는 대부분의 플랫폼을 지원하므로, ML-에이전트s 툴킷으로 교육하는 모든 모델을 모든 플랫폼에서 실행되는 Unity 애플리케이션에 내장할 수 있습니다. 자세한 내용은 당사의 전용 블로그 게시물을 참조하십시오.
Custom Training and Inference
이전 모드에서는 에이전트가 나중에 사용할 수 있는 PyTorch 모델을 생성하기 위해 에이전트가 교육에 사용되었습니다. 그러나 ML-에이전트 Toolkit의 모든 사용자는 자체 알고리즘을 사용하여 교육을 수행할 수 있습니다. 이 경우 씬(scene)의 모든 에이전트의 동작이 Python 내에서 제어됩니다. 여러분은 심지어 여러분의 환경을 체육관(Gym)으로 바꿀 수도 있습니다.
현재이 모드를 강조하는 자습서가 없지만 여기에서 Python API에 대해 자세히 알아볼 수 있습니다.
Flexible Training Scenarios
유연한 교육 시나리오
지금까지 논의는 ML-에이전트와 함께 주로 단일 에이전트 훈련에 초점을 맞췄지만, 몇 가지 훈련 시나리오가 가능하다. 우리는 그 공동체가 어떤 종류의 신기하고 재미있는 환경을 만들어내는지 보는 것에 흥분된다. 지능형 에이전트 교육을 처음 받는 사람들에게 아래에는 영감을 줄 수 있는 몇 가지 예가 나와 있습니다.
- 단일 에이전트. 자체 보상 신호가 있는 단일 에이전트입니다. 에이전트를 교육하는 전통적인 방법입니다. 예를 들어 치킨과 같은 싱글 플레이어 게임이 있습니다.
- 동시 단일 에이전트. 동작 매개 변수가 동일한 독립적 보상 신호를 가진 여러 독립 에이전트. 전통적인 교육 시나리오의 병렬화된 버전으로, 교육 프로세스의 속도를 높이고 안정화시킬 수 있습니다. 환경에서 유사한 동작을 학습해야 하는 동일한 캐릭터의 여러 버전이 있는 경우 유용합니다. 예를 들어, 12개의 로봇 암이 동시에 문을 열도록 훈련시킬 수 있습니다.
- 역 보상 신호가 있는 상호작용제 두 개. 2인 게임에서, 적의 자기 플레이는 에이전트가 점점 더 숙련되어지도록 하는 동시에 항상 완벽하게 일치하는 상대를 가질 수 있다. 이것은 알파고를 훈련시킬 때 사용되는 전략이었고, 최근에는 오픈AI가 인간 비팅 1-vs-1 도타 2 에이전트를 훈련시키기 위해 사용했다.
- 공동 다중 에이전트. 동일하거나 다른 동작 매개 변수를 가진 공유 보상 신호를 가진 여러 상호 작용 에이전트. 이 시나리오에서는 모든 에이전트가 함께 작업하여 단독으로 수행할 수 없는 작업을 수행해야 합니다. 예를 들어 각 에이전트가 부분 정보에만 액세스할 수 있는 환경을 포함하며, 작업을 수행하거나 공동으로 퍼즐을 풀기 위해 공유해야 합니다.
- 경쟁적 멀티 에이전트입니다. 동일한 또는 다른 동작 파라미터를 가진 역 보상 신호를 가진 여러 상호작용 에이전트. 이 시나리오에서 에이전트는 경쟁에서 이기거나 제한된 리소스 세트를 얻기 위해 서로 경쟁해야 합니다. 모든 팀 스포츠는 이 시나리오에 해당한다.
- 생태계. 동작 매개 변수가 동일하거나 다른 독립적인 보상 신호를 가진 여러 상호 작용 에이전트. 이 시나리오는 얼룩말, 코끼리, 기린, 또는 도시 환경 내에 자율 주행 시뮬레이션이 있을 수 있는 사바나와 같이 서로 다른 목표를 가진 동물들이 상호 작용하는 작은 세계를 창조한다고 생각할 수 있습니다.
Training Methods: Environment-agnostic
교육방법: 환경불가
나머지 섹션에서는 ML-Agents Tolkit의 일부인 다양한 최첨단 기계 학습 알고리즘을 개관합니다. 기계와 강화 학습을 주제로 하지 않고 에이전트를 훈련시켜 과제를 달성하고 싶다면 이러한 알고리즘을 블랙박스로 취급할 수 있다. 파이썬 훈련 측면뿐만 아니라 유니티 내부에서도 조정할 수 있는 훈련 관련 매개변수가 몇 가지 있지만, 에이전트를 성공적으로 만들고 훈련시키기 위해 알고리즘 자체에 대한 심층적인 지식이 필요하지 않다. 훈련 과정을 실행하기 위한 단계별 절차는 훈련 ML-에이전트 페이지에 제공된다.
이 섹션에서는 학습 환경의 특성에 관계없이 사용할 수있는 교육 방법에 특히 중점을 둡니다.
보상 신호에 대한 빠른 참고
이 절에서는 내재적 보상과 외재적 보상의 개념을 소개하여 훈련 방법의 일부를 설명하는 데 도움이 됩니다. 강화 학습에서 에이전트의 최종 목표는 보상을 극대화하는 행동(정책)을 발견하는 것이다. 훈련 중에 사용할 하나 이상의 보상 신호를 에이전트에 제공해야 합니다. 일반적으로 보상은 환경에 의해 정의되며, 어떤 목표에 도달하는 것에 해당한다. 학습 알고리즘의 외부에 정의되어 있기 때문에, 이것들은 우리가 외적 보상이라고 부르는 것이다. 그러나 보상은 환경 밖에서도 정의 될 수 있으며, 에이전트가 특정 방식으로 행동하도록 장려하거나 진정한 외적 보상의 학습을 돕기 위해 정의 될 수 있습니다. 우리는 이러한 보상을 본질적인 보상 신호라고 부른다. 에이전트가 최대화하는 법을 배우는 총 보상은 외재적 보상 신호와 내재적 보상 신호가 혼합된 것일 수 있다.
ML-Agents 툴킷을 사용하면 보상 신호를 모듈 방식으로 정의 할 수 있으며, 에이전트의 행동을 형성하는 데 도움이되도록 혼합 및 일치 할 수있는 4 가지 보상 신호를 제공합니다.
- extrinsic : 환경에 정의 된 보상을 나타내며 기본적으로 활성화되어 있습니다.
- gail : GAIL에 의해 정의 된 내재적 보상 신호를 나타냅니다 (아래 참조).
- curiosity : 모듈에 의해 정의 된 희소 보상 환경에서 탐색을 장려하는 본질적인 보상 신호를 나타냅니다 (아래 참조).
- rnd : Curiosity 모듈에 의해 정의 된 희소 보상 환경에서 탐색을 장려하는 본질적인 보상 신호를 나타냅니다 (아래 참조). (TensorFlow 트레이너에게는 사용할 수 없음)
Deep Reinforcement Learning
심층 강화 학습
ML-Agent는 두 가지 강화 학습 알고리즘의 구현을 제공합니다.
기본 알고리즘은 PPO입니다. 이것은 다른 많은 RL 알고리즘보다 더 범용적이고 안정적인 것으로 입증 된 방법입니다.
PPO와는 대조적으로, SAC는 정책에서 벗어난 것으로, 이는 과거 어느 때라도 수집된 경험으로부터 배울 수 있다는 것을 의미한다. 경험 수집이 진행됨에 따라 경험 재생 버퍼에 배치되고 훈련 중에 무작위로 그려집니다. 이것은 SAC를 훨씬 더 샘플 효율적으로 만들며, 종종 PPO와 동일한 작업을 배우기 위해 5-10배 적은 샘플을 필요로 한다. 그러나 SAC는 더 많은 모델 업데이트가 필요한 경향이 있다. SAC는 더 무겁거나 느린 환경에 좋은 선택이다(단계당 약 0.1초 이상). SAC는 또한 "최대 엔트로피" 알고리즘이며, 본질적인 방법으로 탐험을 가능하게 한다. 여기에서 최대 엔트로피 RL에 대해 자세히 읽어보십시오.
희소 보상 환경에 대한 호기심 Curiosity for Sparse-reward Environments
에이전트가 드물거나 드물게 보상을 받는 환경에서(즉, 희소-보상), 에이전트는 훈련 과정을 부트스트랩할 보상 신호를 결코 받지 못할 수 있다. 이것은 내재적 보상 신호의 사용이 가치 있을 수 있는 시나리오이다. 호기심은 외부 보상이 희박할 때 에이전트가 탐색하는 데 도움이 될 수 있는 그러한 신호 중 하나이다.
호기심 보상 신호는 본질적인 호기심 모듈을 활성화합니다. 이것은 Pathak, et al.의 Self-supervised Prediction에 의한 Curiosity-driven Exploration에 설명 된 접근 방식을 구현 한 것입니다. 두 네트워크를 훈련시킵니다.
- 에이전트의 현재 및 다음 관찰을 취하고이를 인코딩하고 인코딩을 사용하여 관찰간에 취해진 조치를 예측하는 역 모델
- 인코딩 된 현재 관찰 및 조치를 취하고 다음 인코딩 된 관찰을 예측하는 순방향 모델.
순방향 모델의 손실 (예측 된 관측 값과 실제 인코딩 된 관측 값의 차이)이 내재적 보상으로 사용되므로 모델이 더 놀라 울수록 보상이 커집니다.
자세한 내용은 Curiosity 모듈의 전용 블로그 게시물을 참조하십시오.
RND for Sparse-reward Environments
희소 보상 환경을위한 RND
호기심과 마찬가지로 랜덤 네트워크 증류(RD)는 에이전트 탐색에 도움이 되므로 희박하거나 드문 보상 환경에서 유용합니다. RND 모듈은 랜덤 네트워크 증류에 의한 탐색 문서에 따라 구현됩니다. RND는 두 개의 네트워크를 사용합니다.
- 첫 번째는 관측 값을 입력으로 사용하고 인코딩을 생성하는 고정 된 임의 가중치가있는 네트워크입니다.
- 두 번째는 첫 번째 네트워크의 출력을 예측하도록 훈련되고 에이전트가 수집 한 관측치를 훈련 데이터로 사용하는 유사한 아키텍처를 가진 네트워크입니다.
훈련된 모델의 손실(예측된 관측치와 실제 인코딩된 관측치 사이의 제곱된 차이)은 고유 보상으로 사용된다. 에이전트가 상태를 방문할수록 예측이 정확해지고 에이전트가 더 높은 예측 오류를 가진 새로운 상태를 탐색하도록 장려하는 보상이 낮아진다.
참고 : TensorFlow 트레이너에게는 RND를 사용할 수 없습니다 (PyTorch 트레이너 만 해당).
Imitation Learning
모방 학습
시행착오 방법을 통해 에이전트를 학습하기 보다는 에이전트가 수행하기를 원하는 동작을 단순히 보여주는 것이 더 직관적인 경우가 많습니다. 예를 들어, 보상 기능의 도움을 받아 의료진을 간접적으로 훈련시키는 대신, 우리는 게임에서의 관찰 결과와 게임 통제관의 조치의 실제 사례를 의료인에게 제공하여 의료인의 행동을 안내할 수 있다. 모방 학습은 정책을 학습하기 위해 데모의 관찰과 행동 쌍을 사용합니다. 이 모방 학습 비디오 데모를 참조하십시오.
www.youtube.com/watch?v=kpb8ZkMBFYs&feature=youtu.be
모방 학습은 혼자 또는 강화 학습과 함께 사용될 수 있다. 혼자 사용하면 특정 유형의 행동(즉, 특정 유형의 행동)을 학습하기 위한 메커니즘을 제공할 수 있다. 과제를 해결하는 구체적인 스타일). 강화 학습과 함께 사용하면 에이전트가 환경을 해결하는 데 걸리는 시간을 극적으로 줄일 수 있습니다. 이것은 특히 희소 보상 환경에서 발음될 수 있다. 예를 들어 피라미드 환경에서는 6개의 데모 에피소드를 사용하여 훈련 단계를 4배 이상 줄일 수 있다. 행동복제 + GAIL + 호기심 + RL 아래를 참조하십시오.
ML-에이전트s 툴킷은 시연에서 직접 학습할 수 있는 방법뿐만 아니라, 보상 기반 교육(RL)의 속도를 높이는 데 활용할 수 있는 방법을 제공합니다. 행동 복제(BC)와 생성적 적대 모방 학습(GAIL)이라는 두 가지 알고리즘을 포함한다. 대부분의 시나리오에서는 다음 두 가지 기능을 결합할 수 있습니다.
- 에이전트가 사전 녹화된 데모를 사용하여 (특히 보상이 희박한 환경에서) 학습할 수 있도록 도우려면 일반적으로 외부 보상이 있을 뿐만 아니라 낮은 강도로 GAIL 및 Actival Cloning을 모두 실행할 수 있습니다. 이것의 예는 피라미드 아래의 피라미드 환경을 위해 제공된다.config/gail_config.yaml에서 학습 중입니다.
- 순수하게 데모에서 훈련하려면 외부 보상 신호가없는 GAIL 및 BC가 선호되는 접근 방식입니다. 이에 대한 예는 config / gail_config.yaml의 CrawlerStaticLearning 아래에있는 크롤러 예제 환경에 제공됩니다.
GAIL (Generative Adversarial Imitation Learning)
GEAIL, 즉 생성적 적대적 모방 학습은 일련의 시위와 유사한 행동을 한 에이전트에게 보상하기 위해 적대적인 접근법을 사용한다. GAIL은 환경 보상과 함께 또는없이 사용할 수 있으며 제한된 수의 시위가 있을 때 잘 작동합니다. 이 프레임 워크에서 두 번째 신경 네트워크인 판별기는 관찰 / 행동이 시연과 일치하는지 또는 에이전트가 생성하는지를 구별하도록 가르쳐집니다. 이 판별자는 새로운 관찰 / 행동을 검사하고 이 새로운 관찰 / 행동이 제공된 데모에 얼마나 근접하다고 믿는지에 따라 보상을 제공할 수 있습니다.
각 훈련 단계에서 에이전트는 이 보상을 극대화하는 방법을 배우려고 한다. 그런 다음, 차별자는 시위와 에이전트 상태/행동을 더 잘 구별하도록 훈련된다. 이런 식으로, 대리인이 시위를 모방하는 데 점점 더 능숙해지지만, 차별자는 점점 더 엄격해지고 에이전트는 그것을 "바보"하기 위해 더 열심히 노력해야 한다. 이 접근법은 시위와 유사한 주 및 행동을 생성하는 정책을 학습하여 행동의 직접 복제보다 시위가 적습니다. 순수하게 데모에서 배우는 것 외에도, GAIL 보상 신호는 학습 과정을 안내하기 위해 외부 보상 신호와 혼합 될 수 있습니다.
Behavioral Cloning (BC)
BC는 일련의 데모에 표시된 작업을 정확하게 모방하도록 에이전트의 정책을 훈련합니다. BC 기능은 PPO 또는 SAC 트레이너에서 활성화할 수 있습니다. BC는 데모에 나타난 예들을 지나칠 수 없기 때문에, BC는 에이전트가 경험할 수 있는 거의 모든 상태에 대한 데모가 있거나 GAIL 및/또는 외부 보상과 함께 존재할 때 가장 잘 작동하는 경향이 있다.
Recording Demonstrations
에이전트 동작의 표시는 유니티 편집기 또는 빌드에서 기록하고 자산으로 저장할 수 있습니다. 이러한 데모에는 기록 세션 중에 주어진 에이전트에 대한 관찰, 작업 및 보상에 대한 정보가 포함되어 있습니다. 편집기에서 관리할 수 있을 뿐만 아니라 BC 및 GAIL과의 훈련에도 사용할 수 있다. 에이전트에 대한 데모를 기록하는 방법에 대한 자세한 내용은 "설계 에이전트 페이지"를 참조하십시오.
Summary
요약하면, BC, GAIL 및 RL (PPO 또는 SAC)의 3 가지 교육 방법을 제공하며 독립적으로 또는 함께 사용할 수 있습니다.
- BC는 자체적으로 또는 GAIL 및 / 또는 RL 전에 사전 훈련 단계로 사용할 수 있습니다.
- GAIL은 외부 보상과 함께 또는없이 사용할 수 있습니다.
- RL은 자체적으로 (PPO 또는 SAC) 또는 BC 및 / 또는 GAIL과 함께 사용할 수 있습니다.
BC 또는 GAIL을 활용하려면 훈련 알고리즘에 대한 입력으로 제공되는 레코딩 데모가 필요합니다.
Training Methods: Environment-specific
교육 방법 : 환경 별
이전 섹션에서 소개 한 세 가지 환경에 구애받지 않는 교육 방법 외에도 ML-Agents Toolkit은 특정 유형의 환경에 대한 교육 동작을 지원할 수있는 추가 방법을 제공합니다.
Training in Multi-Agent Environments with Self-Play
셀프 플레이를 통한 다중 에이전트 환경에서의 교육
ML-에이전트는 셀프 플레이를 통해 대칭 및 비대칭 적대 게임을 모두 훈련할 수 있는 기능을 제공합니다. 대칭 게임은 상대편 에이전트가 형태, 기능, 그리고 객관적인 면에서 동일한 게임이다. 대칭 게임의 예로는 테니스와 축구가 있습니다. 강화 학습에서 이는 두 행위자가 동일한 관찰과 행동을 하고 동일한 보상 기능을 통해 학습하여 동일한 정책을 공유할 수 있음을 의미한다. 비대칭 게임에서는 그렇지 않다. 비대칭 게임의 예로는 숨김과 탐색이 있습니다. 이러한 유형의 게임에서 에이전트가 항상 동일한 관찰이나 동작을 하는 것은 아니므로 정책 네트워크를 공유하는 것이 반드시 이상적인 것은 아닙니다.
셀프 플레이를 통해 에이전트는 보다 안정적이고 고정된 학습 환경을 제공하기 위해 (대칭 게임에서처럼) 고정된 과거 버전의 상대와 경쟁함으로써 적대적인 게임에서 학습한다. 이것은 모든 에피소드에서 현재 최고의 상대와 경쟁하는 것과 비교됩니다. 현재 최고의 상대는 끊임없이 변화하고 있습니다.
자기 플레이는 근위 정책 최적화(PPO)와 소프트 배우-비판(SAC)의 구현과 함께 사용될 수 있다. 그러나 개별 에이전트의 관점에서 볼 때, 이러한 시나리오는 상대가 종종 변화하기 때문에 비정전적인 역학 관계를 갖는 것으로 보인다. 이것은 SAC가 사용하는 경험 재생 메커니즘에서 중요한 문제를 일으킬 수 있다.
따라서 사용자는 PPO를 사용하는 것이 좋습니다. 특히이 문제에 대한 자세한 내용은 Deep Multi-Agent Reinforcement Learning을위한 Stabilizing Experience Replay 논문을 참조하십시오.
Unity 씬에서 팀을 구성하는 방법에 대한 자세한 내용은 Designing Agents 페이지를 참조하십시오. 또한 추가 정보는 셀프 플레이에 대한 블로그 게시물을 참조하십시오.
Solving Complex Tasks using Curriculum Learning
커리큘럼 학습을 사용하여 복잡한 작업 해결
교육과정 학습은 문제에서 보다 어려운 측면이 점차 도입되어 항상 최적의 도전을 받게 되는 기계학습 모형을 훈련시키는 방법이다. 이 아이디어는 오랫동안 존재해왔고, 그것은 우리 인간이 전형적으로 배우는 방법이다. 만약 당신이 어린 시절 초등학교 교육을 상상한다면, 수업과 주제의 순서가 있다. 예를 들어, 산술은 대수보다 먼저 가르친다. 마찬가지로 미적분보다 대수학을 먼저 가르친다. 이전 과목에서 배운 기술과 지식은 이후의 수업을 위한 비계를 제공합니다. 동일한 원리가 기계 학습에 적용될 수 있는데, 여기서 쉬운 작업에 대한 훈련은 미래에 더 어려운 작업에 대한 비계를 제공할 수 있다.
부상당한 팀원에게 도착하기 위해 의료진이 벽을 기어오르도록 훈련시킨다고 상상해 보십시오. 이 과제를 수행하기 위해 의료진을 훈련시키는 출발점은 무작위 정책이 될 것이다. 그 시작 정책은 의료진을 순환 운영하게 할 것이고, 그들의 팀원을 되살리기 위해 벽을 제대로 쌓는 일은 결코 또는 거의 없을 것이다. 만약 우리가 방해받지 않는 팀원을 향해 나아가는 것과 같은 더 간단한 일로 시작한다면, 의료인은 쉽게 그 일을 수행하는 법을 배울 수 있다. 거기서부터, 우리는 의학자가 처음에 거의 불가능한 벽 확장 작업을 완료할 때까지 벽의 크기를 늘림으로써 작업의 난이도를 천천히 더할 수 있다. 월 점프(Wall Jump)라고 하는 ML-에이전트를 통해 이를 입증할 수 있는 환경을 포함했습니다.
[참고 : 위에 제공된 예제는 교육용이며 Wall Jump 예제 환경의 초기 버전을 기반으로합니다. 따라서 해당 환경을 사용하여 여기에서 결과를 직접 복제 할 수 없습니다.]
ML-에이전트s 툴킷은 학습에 도움이 되도록 교육 과정 중에 사용자 정의 환경 매개변수를 수정할 수 있도록 지원합니다. 이를 통해 난이도 또는 복잡성과 관련된 환경 요소를 교육 진행 상황에 따라 동적으로 조정할 수 있습니다. Training ML-에이전트s 페이지에는 교육 커리큘럼 정의에 대한 자세한 정보가 있습니다.
Training Robust Agents using Environment Parameter Randomization
환경 매개 변수 무작위 화를 사용하여 강력한 에이전트 훈련
특정 환경에서 훈련된 에이전트는 환경의 어떤 수정이나 변형에 일반화할 수 없을 수 있다(기계 학습에서는 이를 과적합이라고 한다). 이것은 환경이 다양한 물체나 특성으로 인스턴스화되는 경우에 문제가 된다.
이를 완화하고 환경의 보이지 않는 변형으로 일반화할 수 있는보다 강력한 에이전트를 훈련시키는한 가지 메커니즘은 훈련 중에 이러한 변형에 노출시키는 것입니다. 에이전트가 학습함에 따라 환경이 어려워지는 커리큘럼 학습과 마찬가지로 ML-Agents Tolkit은 훈련 중 환경의 매개 변수를 무작위로 샘플링할 수 있는 방법을 제공합니다. 우리는 이 접근법을 환경 파라미터 랜덤화라고 부른다. 강화학습 연구에 익숙한 사람들에게 이 접근법은 도메인 랜덤화 개념에 기초한다. 훈련 중 파라미터 랜덤화를 사용함으로써, 에이전트는 미래의 보이지 않는 환경 변화에 적응(더 높은 성능으로)하기에 더 적합할 수 있다.
parameter randomization during training
Model Types
배치된 교육 방법에 관계없이 사용자가 ML-에이전트 툴킷을 사용하여 교육할 수 있는 몇 가지 모델 유형이 있습니다. 이는 벡터, 광선 주조 및 시각적 관찰을 포함할 수 있는 에이전트 관찰을 유연하게 정의하기 때문입니다. 에이전트 설계 안내서에서 에이전트 관찰을 수행하는 방법에 대해 자세히 알아볼 수 있습니다.
Learning from Vector Observations
벡터 관찰에서 학습
에이전트의 관측치가 광선 캐스트인지 벡터인지에 관계없이 ML-에이전트 툴킷은 이러한 관측치로부터 학습할 수 있는 완전히 연결된 신경 네트워크 모델을 제공한다. 교육 시 숨겨진 유닛 수 및 레이어 수 등 이 모델의 다양한 측면을 구성할 수 있습니다.
Learning from Cameras using Convolutional Neural Networks
Convolutional Neural Networks를 사용하여 카메라에서 배우기
에이전트의 관찰이 단일 벡터 또는 이미지로 제한될 수 있는 다른 플랫폼과 달리, ML-에이전트s 툴킷을 사용하면 에이전트당 관찰에 여러 대의 카메라를 사용할 수 있습니다. 이를 통해 에이전트는 여러 시각적 스트림의 정보를 통합할 수 있습니다. 이것은 서로 다른 관점을 가진 여러 대의 카메라가 필요한 자율주행차 훈련이나 항공 및 1인칭 비주얼을 통합해야 할 수 있는 내비게이션 에이전트와 같은 몇 가지 시나리오에서 유용할 수 있다. 에이전트에서 시각 관찰을 추가하는 방법에 대해 자세히 알아볼 수 있습니다. here
시각적 관찰이 활용되면 ML-Agents Toolkit은 컨볼 루션 신경망 (CNN)을 활용하여 입력 이미지에서 학습합니다. 세 가지 네트워크 아키텍처를 제공합니다.
두 개의 컨볼루션 레이어로 구성된 간단한 인코더 Mnih 등이 제안한 구현, 3개의 컨볼루션 레이어로 구성, IMPALA Resnet은 3개의 층으로 구성되어 있으며, 각각 2개의 잔여 블록이 있으며, 나머지 2개보다 훨씬 큰 네트워크를 형성합니다.
아키텍처의 선택은 장면의 시각적 복잡성과 사용 가능한 계산 리소스에 따라 다릅니다.
Memory-enhanced Agents using Recurrent Neural Networks
Recurrent Neural Networks를 사용하는 메모리 강화 에이전트
무언가를 얻기 위해 방에 들어 갔는데 찾고 있던 것을 즉시 잊어 버린 적이 있습니까? 요원에게 그런 일이 일어나지 않도록하십시오
일부 시나리오에서는 에이전트가 최상의 결정을 내리기 위해 과거를 기억하는 방법을 배워야 합니다. 에이전트가 환경을 부분적으로만 관찰할 수 있는 경우, 과거의 관찰을 추적하면 에이전트가 학습하는 데 도움이 될 수 있습니다. 과제를 해결하기 위해 에이전트가 기억해야 할 것을 결정하는 것은 손으로 하는 것이 쉽지 않지만, 우리의 훈련 알고리즘은 LSTM으로 기억해야 할 중요한 것을 추적하는 법을 배울 수 있다.
Additional Features
추가 기능
사용 가능한 유연한 교육 시나리오 외에도 ML-Agents Toolkit에는 교육 프로세스의 유연성과 해석 가능성을 개선하는 추가 기능이 포함되어 있습니다.
Concurrent Unity Instances - 개발자가 교육 중에 Unity 실행 파일의 동시 병렬 인스턴스를 실행할 수 있습니다. 특정 시나리오의 경우 학습 속도가 빨라집니다. 동시 인스턴스 수를 설정하는 방법에 대한 지침은 Unity 실행 파일 생성에 대한 전용 페이지와 ML-Agent 교육 페이지를 확인하십시오.
github.com/Unity-Technologies/ml-agents/blob/release_12_docs/docs/Learning-Environment-Executable.md
Recording Statistics from Unity - 개발자는 Unity 환경에서 통계를 기록 할 수 있습니다. 이러한 통계는 훈련 과정에서 집계되고 생성됩니다.
Custom Side Channels - 개발자는 교육 워크 플로 및 / 또는 환경에 고유 한 Unity와 Python 간의 데이터 전송을 관리하기위한 사용자 지정 사이드 채널을 만들 수 있습니다.
github.com/Unity-Technologies/ml-agents/blob/release_12_docs/docs/Custom-SideChannels.md
Custom Samplers - 개발자가 환경 매개 변수 무작위 화를위한 맞춤형 샘플링 방법을 생성 할 수 있습니다. 이를 통해 사용자는 특정 환경에 맞게이 교육 방법을 사용자 지정할 수 있습니다.
Summary and Next Steps
간략히 요약하자면: ML-에이전트s 툴킷을 사용하면 Unity에 내장된 게임과 시뮬레이션이 지능형 에이전트 교육을 위한 플랫폼 역할을 할 수 있습니다. 본 제품은 다양한 교육 모드와 시나리오를 사용할 수 있도록 설계되었으며 연구자와 개발자가 Unity 내에서 기계 학습을 활용할 수 있도록 지원하는 여러 가지 기능으로 꽉 차 있습니다.
다음 단계의 관점에서 : 간단한 장면으로 ML-Agents를 실행하려면 시작 가이드를 확인하십시오. 여러분만의 학습 환경을 만들기 위한 "안녕 세계" 소개는 새로운 학습 환경 만들기 페이지를 참조하십시오. 이 툴킷에 제공되는 보다 복잡한 예제 환경에 대한 개요는 예제 환경 페이지를 참조하십시오. 사용 가능한 다양한 교육 옵션에 대한 자세한 내용은 교육 ML-Agents 페이지를 참조하십시오.
- For a walkthrough of running ML-Agents with a simple scene, check out the Getting Started guide.
- For a "Hello World" introduction to creating your own Learning Environment, check out the Making a New Learning Environment page.
- For an overview on the more complex example environments that are provided in this toolkit, check out the Example Environments page.
- For more information on the various training options available, check out the Training ML-Agents page.
참고
blogs.unity3d.com/2018/06/26/solving-sparse-reward-tasks-with-curiosity/
github.com/Unity-Technologies/ml-agents/blob/release_12_docs/docs/Background-Machine-Learning.md
github.com/Unity-Technologies/ml-agents/blob/release_12_docs/docs/Background-PyTorch.md
github.com/Unity-Technologies/ml-agents/blob/release_12_docs/docs/ML-Agents-Overview.md
'Unity3D > ml-agent' 카테고리의 다른 글
Learning Environment Design Agents (0) | 2020.12.28 |
---|---|
Class Academy (0) | 2020.12.28 |
ml-agents v1.0 : Getting Started Guide (0) | 2020.12.28 |
ml-agents v1.0 : Installation (0) | 2020.12.28 |
ml-agents v1.0 (0) | 2020.12.28 |