Unity 검색

ML-Agents v2.0 release hero image
ML-Agents v2.0 release hero image
공유

Is this article helpful for you?

Thank you for your feedback!

유니티에서 한 해 전 발표한 ML-Agents v1.0 Unity 패키지 릴리스는 2020.2 에디터 릴리스에서 검증된 상태입니다. 이번 블로그 포스팅에서는 기쁜 마음으로 ML-Agents Unity 패키지 v2.0 릴리스를 발표합니다. 이번 릴리스는 현재 2021.2 에디터 릴리스에 포함시키기 위해 검증 작업을 진행하고 있습니다. 지난 한 해 동안 ML-Agents GitHub 프로젝트에 15차례가 넘는 업데이트가 이루어져 사용자 워크플로가 개선되었으며, 새로운 훈련 알고리즘과 기능이 추가되었고, 성능이 더욱 향상되었습니다. 이번 포스팅에서는 세 가지 주요 개발 결과를 중점적으로 다룰 예정입니다. 먼저 협동형 동작을 훈련시키는 기능에 대해 다룬 후, 에이전트가 환경 내 다양한 엔티티를 관찰하는 기능, 여러 작업을 훈련하도록 지원하는 작업 파라미터화 기능에 대해 순차적으로 설명할 예정입니다. 새로운 개선 사항으로 인해 이제 ML-Agents가 복잡한 협동형 환경을 더 완벽하게 지원할 수 있습니다.

2020년 연말 블로그 포스팅에서는 v1.0이 릴리스된 2020년 5월부터 같은 해 12월까지 진행된 사항에 대해 요약하였습니다. 아울러 2021년 상반기에 주력하기로 했던 세 가지 주요 알고리즘 개선 사항, 즉 협동형 다중 에이전트 동작, 에이전트가 다양한 수의 엔티티를 관찰하는 기능, 여러 작업을 해결하는 단일 모델 구축에 대해서도 언급했습니다. 이제 이러한 주요 개선 사항 세 가지가 ML-Agents에서 모두 구현되었습니다. 

세 가지 개선 사항 외에도 주요 ML-Agents 패키지에서는 다음과 같은 사항이 변경되었습니다.

  1. 이전에는 유니티의 컴패니언 확장 Unity 패키지의 일부(Grid Sensors 컴포넌트Match-3 게임 보드)였던 기능이 다수 추가되었습니다. 
  2. 인퍼런스 도중 메모리 할당이 향상되었습니다. 일부 데모 씬에서는 최대 98%가 감소된 것을 확인했습니다.
  3. 지원 중단 예정인 API를 제거하여 API가 차지하는 공간을 줄였습니다. API를 제거 조정하려면 1.x에서 2.0으로 버전을 업그레이드해야 합니다. 손쉽게 업그레이드하는 방법에 대한 자세한 내용은 릴리스 노트마이그레이션 가이드를 참조하세요.

이번 포스팅에서는 협동형 동작, 가변 길이 관찰 버퍼, 작업 파라미터화의 역할과 함께 두 가지 추가 개선 사항인 확장 패키지에서 승격된 기능과 전반적인 성능에 대해 자세히 살펴보려 합니다. 또한 ML-Agents Cloud 제품에 대한 새로운 소식과 몇 주 후에 릴리스가 예정된 복잡한 협동성 동작을 선보이는 새로운 게임 환경의 프리뷰를 공개합니다.

협동형 동작 훈련

어몽 어스 등 여러 멀티플레이어 게임 환경에서 플레이어들은 협동을 통해 주어진 과제를 해결해야 합니다. 예전에도 씬에 여러 에이전트들이 있는 ML-Agents를 훈련할 수 있었지만, 릴리스 15(2020년 3월) 이전까지는 공동의 목표를 가진 특정 에이전트 그룹의 정의가 불가능했습니다. ML-Agents는 이제 명시적으로 협동형 동작 훈련을 지원합니다. 따라서 개인의 성공이 팀의 성공과 직결되는 방식으로 에이전트 그룹이 협업을 수행할 수 있습니다.

이 시나리오에서 에이전트는 일반적으로 그룹 단위의 보상을 받습니다. 어느 에이전트 팀이 경기에서 승리하면 모든 에이전트가 보상을 받습니다. 직접적으로 승리에 기여하지 않은 에이전트조차 보상을 받게 되므로 결국 독자적으로 무엇을 해야 할지 학습하기가 어렵게 됩니다. 이 점을 보완하기 인해 전체 에이전트 그룹에서 ‘코치’ 역할을 하는 신경망인 중앙집중형 크리틱을 훈련시키기 위한 새로운 다중 에이전트 트레이너(Multi-Agent POsthumous Credit Assignment 또는 MA-POCA, arXiv 논문 전문 공개 예정)가 개발되었습니다. 

이 추가 기능을 통해 팀 전체를 대상으로 계속 보상을 지급하면서도 에이전트가 공동 목표에 최대한 기여하는 방법을 학습할 수 있습니다. 에이전트들이 계속 목표를 위해 동기를 유지하고 협동할 수 있도록 개별적인 보상을 지급할 수도 있습니다. 학습 도중 게임에서 에이전트가 생성 또는 사망하는 경우와 같이 그룹에서 에이전트를 추가하거나 제거할 수 있습니다. 학습 도중에 에이전트가 제거되더라도 자신의 행동이 이후 팀의 승리에 기여했는지 여부를 파악할 수 있으므로 에이전트가 그룹을 우선시하여 행동하도록 지원합니다. 자기 희생을 비롯한 기타 게임플레이 의사결정으로 인해 스스로 게임 도중 제거되는 경우에도 마찬가지입니다. MA-POCA와 자가 경기(self-play)를 결합하여 에이전트의 팀들이 서로 시합하도록 훈련시킬 수 있습니다.

이 외에도 두 가지 새로운 샘플 환경인 Cooperative Push BlockDungeon Escape가 개발되었습니다. Cooperative Push Block은 다수의 에이전트가 완료해야 하는 작업을 제시합니다. 아래의 Dungeon Escape 동영상을 보면 팀원들이 키를 가지고 던전을 탈출하기 위해 한 에이전트가 반드시 드래곤을 처치해야 하며, 그 결과 자신은 학습 도중 제거됩니다.

프로젝트에 협동형 에이전트를 구현하는 방법에 대한 자세한 내용은 유니티 기술 자료를 참조하세요.

다양한 수의 엔티티 관찰

툴킷에 가장 많이 요청된 기능 중 하나는 게임 캐릭터가 다양한 수의 엔티티에 반응할 수 있도록 하는 기능이었습니다. 비디오 게임에서 캐릭터는 여러 적이나 아이템을 동시에 다루는 방법을 학습하는 경우가 많습니다. 이 요구를 충족하기 위해 릴리스 15(2020년 3월)에서는 ‘관찰 버퍼’라는 임의 길이의 관찰 배열을 지정할 수 있습니다. 에이전트는 다양한 수의 관찰을 인코딩하고 처리하는 Attention Module을 통해 임의 크기의 버퍼를 활용하는 방법을 학습할 수 있습니다. 

예를 들어 게임 캐릭터가 발사체를 피하는 방법을 학습해야 하며, 씬의 발사체 수가 고정되어 있지 않은 상황에서는 Attention Module이 훌륭한 해결책이 될 수 있습니다. 이 동영상에서 각 발사체는 네 가지 값으로 표현됩니다. 두 개의 값은 위치를 지정하고 다른 두 개의 값은 속도를 나타냅니다. 씬의 각 발사체마다 이 네 가지 값이 발사체 관측 버퍼에 추가됩니다. 그러면 에이전트는 충돌 궤적에 있지 않은 발사체를 무시하고 더 위험한 발사체에 특히 주의를 기울이는 방법을 학습할 수 있습니다.

또한 에이전트는 씬에서 엔티티 간의 관계를 기반으로 엔티티의 중요성을 학습할 수 있습니다. 예를 들어 에이전트가 타일을 오름차순으로 정렬하는 방법을 학습해야 하는 경우, 다른 모든 타일의 정보를 기반으로 다음에 어떤 타일을 정렬해야 하는지 파악할 수 있습니다. Sorter라고 이름이 붙은 이 새로운 환경은 이제 예시 환경의 일부로 다운로드하여 사용해 볼 수 있습니다.

 

프로젝트에 가변 길이 관찰 버퍼를 구현하는 방법에 대한 자세한 내용은 유니티 기술 자료를 참조하세요.

작업 파라미터화: 하나의 모델에 훈련하기

비디오 게임 캐릭터는 다양한 게임 모드에서 여러 작업을 하게 됩니다. 다양한 과제에 대응하는 한 가지 방법은 여러 동작을 개별적으로 훈련시킨 다음 서로 교환하는 것입니다. 하지만 여러 작업을 한 번에 완료할 수 있는 단일 모델을 훈련시키는 것이 보다 바람직합니다. 단일 모델을 사용하면 최종 게임에서 메모리 할당 공간을 줄일 수 있고, 여러 작업에서 신경망의 일부를 재사용하여 전반적인 훈련 시간을 단축할 수 있기 때문입니다. 이를 위해 HyperNetworks를 사용하여 단일 모델이 여러 동작을 인코딩할 수 있는 기능을 최신 릴리스(릴리스 17)에 추가했습니다. 

실제로 ‘목표 신호’라는 새로운 유형의 관찰 및 ‘HyperNetwork’라는 작은 신경망을 사용하여 더 큰 다른 신경망의 가중치를 일부 생성합니다. 여기서 더 큰 네트워크는 에이전트의 동작을 알리고, 해당 에이전트의 목표에 따라 동작의 신경망이 다른 가중치를 갖도록 하며, 필요한 경우 목표 전체에 걸쳐 공유되는 내용을 일부 유지합니다.

다음 동영상에서는 ML-Agents 예제(WallJumpPushBlock)에서 에이전트가 두 작업을 동시에 해결하는 모습을 볼 수 있습니다. 아래쪽의 색이 녹색이면 에이전트는 블록을 녹색 영역으로 밀어 넣어야 합니다. 하지만 오른쪽 위에 있는 사각형이 녹색이면 에이전트는 벽을 넘어 녹색 사각형으로 점프해야 합니다.

프로젝트에 작업 파라미터화를 구현하는 방법에 대한 자세한 내용은 유니티 기술 자료를 참조하세요.

최신 릴리스에서 핵심 패키지에 포함된

Grid Sensor

ML-Agents called Grid Sensor

2020년 11월에 유니티는 ML-Agents에 Grid Sensor라는 새로운 유형의 센서가 Eidos에서 개발된 과정에 대해 포스팅을 작성했습니다. 당시에 Grid Sensor의 구현이 확장 패키지에 추가되었고 구현을 반복한 후 이제 주요 ML-Agents 패키지 최신 릴리스에 포함되었습니다. 

Match-3

유니티는 ML-Agents의 릴리스 10(2020년 11월)에 새로운 Match-3 환경을 도입하고 Match-3 게임을 훈련할 수 있도록 확장 패키지에 유틸리티를 추가했습니다. 이후 Code Monkey와 제휴하여 튜토리얼 동영상을 공개했고, Grid Sensor에서와 마찬가지로 Match-3 게임 훈련용 유틸리티를 제작하여 최신 릴리스에서 핵심 ML-Agents 패키지에 포함시켰습니다.

성능 개선

유니티의 목표는 ML-Agents를 지속적으로 개선하는 것입니다. 인퍼런스 중에 할당되는 메모리의 양과 관련된 피드백을 받고 즉시 할당량을 축소했습니다. 아래 표에서 버전 1.0(2020년 5월 릴리스)과 2.0(2021년 4월 릴리스) 사이의 두 개의 예시 씬을 대상으로 비교한 가비지 컬렉션 지표(아카데미 단계당 킬로바이트)를 확인할 수 있습니다. Barracuda(ML-Agents가 크로스 플랫폼 인퍼런스에 사용하는 Unity 인퍼런스 엔진)에서 사용하는 메모리는 이 지표에 포함되지 않습니다.

a comparison of the garbage collection metrics in two of our example scenes between versions 1.0 and 2.0

ML-Agents Cloud: 업데이트

v1.0 블로그 포스팅에서 유니티는 처음으로 ML-Agents Cloud에 대한 세부 정보를 일부 공개했습니다. ML-Agents Cloud 서비스를 사용하면 클라우드 인프라에서 여러 훈련 세션을 병렬로 실행할 수 있으므로, 빠르게 실험을 완료할 수 있습니다. ML-Agents Cloud의 핵심 기능을 사용하면 현재 다음과 같은 역량을 갖출 수 있습니다.

  1. 구현된 ML-Agents(C#)로 게임 빌드를 업로드합니다.

  2. 훈련 실험을 시작, 일시 중지, 재개 및 중단합니다. 여러 실험을 동시에 실행할 수 있고, 하이엔드 머신을 활용하여 훈련 실험마다 동시 Unity 인스턴스를 다수 생성할 수 있으며, 모든 작업을 더 빠르게 완료할 수 있습니다.

  3. 여러 훈련 실험 결과를 다운로드합니다.

유니티는 2021년 남은 기간 동안 알파 고객의 피드백을 바탕으로 ML-Agents Cloud를 더욱 개선할 계획입니다. 결과를 가시화하고, 웹 UI에서 실험을 관리할 뿐 아니라 하이퍼 파라미터 튜닝을 활용할 수 있게 될 예정입니다. 알파 프로그램 신청은 지금도 가능합니다. 신청을 원하시면 여기에서 등록하시기 바랍니다.

향후 출시 계획

이번 포스팅에서는 ML-Agents가 복잡한 협동형 게임을 지원할 수 있도록 하는 세 가지 핵심 개선 사항에 대해 간략히 설명했습니다. 세 가지 개선 사항을 각각 설명했으며, 최근에 툴킷에 추가된 샘플 환경에 대해서도 이야기했습니다. 아직 공개되지 않은 Dodgeball이라는 새로운 환경은 팀 대항 게임으로, 세 가지 개선 사항이 함께 작용하는 모습을 보여줍니다. 에이전트는 복잡한 환경에서 추론을 통해 여러 모드를 해결하고, 팀원과 협동하며, 씬의 다양한 엔티티를 관찰해야 합니다. 향후 몇 주 내에 이 환경이 릴리스되면 별도의 포스팅에서 다룰 예정입니다. 이번 포스팅에서는 유니티 에이전트들의 Dodgeball 플레이 훈련 장면을 일부 공개합니다. 

감사의 말

지난 수년 동안 지원해주신 모든 분께 Unity ML-Agents 팀을 대신하여 감사의 말씀을 드립니다.

머신러닝과 게임이 교차하는 이 흥미로운 분야를 연구하고 싶다면, 당사에서 진행 중인 채용 공고를 참고하여 여기에서 지원해 보시기 바랍니다.

마지막으로, Unity ML-Agents 툴킷에 대한 피드백이 있다면 다음 설문조사를 작성하거나 ml-agents@unity3d.com으로 직접 이메일을 보내주세요.사용 중 문제가 발생할 경우 ML-Agents GitHub 이슈 페이지로 문의하세요. 기타 의견이나 질문이 있다면 Unity ML-Agents 포럼을 통해 공유해 주시기 바랍니다.

Is this article helpful for you?

Thank you for your feedback!

관련 게시물