Demo

Puppo, 코기: Unity ML-Agents Toolkit으로 귀여움 폭발

VINCENT-PIERRE BERGES / UNITY TECHNOLOGIESContributor
Oct 2, 2018|7 분
Puppo, 코기: Unity ML-Agents Toolkit으로 귀여움 폭발
이 웹페이지는 이해를 돕기 위해 기계 번역으로 제공됩니다. 기계 번역으로 제공되는 콘텐츠에 대한 정확도나 신뢰도는 보장되지 않습니다. 번역된 콘텐츠의 정확도에 관해 의문이 있는 경우 웹페이지의 공식 영어 원문을 참고해 주시기 바랍니다.

게임을 만드는 것은 게임 개념과 논리를 정의하고, 자산과 애니메이션을 구축하고, NPC 행동을 지정하고, 난이도와 균형을 조정하며, 마지막으로 출시 전에 실제 플레이어와 함께 게임을 테스트하는 등 많은 도전적인 단계를 포함하는 창의적인 과정입니다. 우리는 머신 러닝이 전체 창의적 과정에서 사용될 수 있다고 믿으며, 오늘 블로그 포스트에서는 이러한 도전 중 하나인 NPC의 행동을 지정하는 데 초점을 맞출 것입니다.

전통적으로 NPC의 행동은 스크립팅과 행동 트리를 사용하여 하드코딩됩니다. 이러한 (일반적으로 긴) 규칙 목록은 NPC의 주변 환경에 대한 정보(관찰이라고 함)를 처리하여 다음 행동을 결정합니다. 게임이 발전함에 따라 이러한 규칙을 작성하고 유지하는 데 시간이 많이 소요될 수 있습니다. 강화 학습은 NPC의 행동을 정의하는 데 유망한 대안 프레임워크를 제공합니다. 보다 구체적으로, 관찰에서 행동으로의 매핑을 수동으로 정의하는 대신, 원하는 목표를 달성할 때 보상을 제공하여 NPC를 훈련할 수 있습니다.

강화 학습을 사용하여 NPC를 훈련하는 것은 우리가 강아지를 훈련하여 물건을 가져오게 하는 방법과 매우 유사합니다. 우리는 강아지에게 간식을 주고 나서 막대를 던집니다. 처음에 강아지는 무엇을 해야 할지 몰라서 주위를 돌아다니다가 결국 막대를 집어 들고 돌아오면 즉시 간식을 받습니다. 몇 번의 세션 후, 강아지는 막대를 가져오는 것이 간식을 얻는 가장 좋은 방법이라는 것을 배우고 계속 그렇게 합니다.

바로 이것이 NPC의 행동을 훈련하는 데 있어 강화 학습이 작동하는 방식입니다. 우리는 NPC가 작업을 올바르게 완료할 때마다 보상을 제공합니다. 게임의 여러 시뮬레이션을 통해 (많은 물건 가져오기 세션에 해당), NPC는 보상을 극대화하기 위해 각 인스턴스에서 수행해야 할 행동에 대한 내부 모델을 구축하며, 이는 이상적이고 원하는 행동으로 이어집니다. 따라서 NPC의 각 관찰에 대해 저수준 행동을 생성하고 유지하는 대신, 작업이 올바르게 완료될 때 고수준 보상만 제공하면 NPC는 적절한 저수준 행동을 학습합니다.

이 기술의 효과를 보여주기 위해 우리는 데모 게임 “퍼포 (읽는 법: ‘펍-오’), 코기”를 만들고 유나이트 베를린에서 발표했습니다. 귀여운 작은 코기와 함께 물건을 가져오는 모바일 게임입니다. 화면을 스와이프하여 퍼포에게 막대를 던지면 퍼포가 그것을 가져옵니다. 상위 수준의 게임 로직은 전통적인 스크립팅을 사용하지만, 코기는 강화 학습을 사용하여 걷고, 뛰고, 점프하고, 막대를 가져오는 법을 배웁니다. 애니메이션이나 스크립트된 행동을 사용하는 대신, 코기의 움직임은 오로지 강화 학습으로 훈련됩니다. 너무 귀여워 보일 뿐만 아니라, 코기의 움직임은 물리 엔진에 의해 독점적으로 구동됩니다. 이는 예를 들어 코기의 움직임이 주변의 RigidBodies에 의해 영향을 받을 수 있음을 의미합니다.

Puppo는 Unite Berlin에서 너무 인기를 끌어 많은 개발자들이 우리가 어떻게 만들었는지 물어보았습니다. 그래서 우리는 이 블로그 게시물을 작성하고 여러분이 직접 시도해 볼 수 있도록 프로젝트를 공개하기로 결정했습니다.

Unity 프로젝트 다운로드

시작하기 위해, 우리는 코기를 훈련시키기 위해 필요한 요구 사항과 사전 작업을 다룰 것입니다. 그런 다음, 우리는 그것을 훈련시키는 경험을 공유할 것입니다. 마지막으로, 우리는 Puppo를 주인공으로 하는 게임을 만드는 데 걸린 단계를 살펴볼 것입니다.

세부 사항에 들어가기 전에, 강화 학습에서 몇 가지 중요한 개념을 정의해 봅시다. 강화 학습의 목표는 정책을 배우는 것입니다 에이전트에 대해. 에이전트는 자신의 환경과 상호작용하는 존재입니다: 매 학습 단계마다, 에이전트는 환경의 상태에 대한 관찰을 수집하고, 행동을 수행하며, 그 행동에 대한 보상을 받습니다. 정책은 에이전트가 인식하는 관찰에 따라 어떻게 행동하는지를 정의합니다. 우리는 에이전트의 행동이 적절할 때 보상을 주어 정책을 개발할 수 있습니다.

우리의 경우, 환경은 게임 장면이고 에이전트는 Puppo입니다. Puppo는 우리와 함께 막대를 가져올 수 있도록 정책을 배워야 합니다. 우리가 실제 개를 간식으로 훈련시켜 막대를 가져오게 하는 것과 유사하게, 우리는 Puppo를 적절히 보상하여 훈련할 수 있습니다.

우리는 Puppo를 만들기 위해 라그돌을 사용했으며, 그의 다리는 조인트 모터에 의해 구동됩니다. 따라서 Puppo가 목표에 도달하는 방법을 배우기 위해서는 먼저 관절 모터를 회전시켜 움직이는 방법을 배워야 합니다.

진짜 개는 시각과 다른 감각을 사용하여 자신을 정위치하고 어디로 갈지 결정합니다. Puppo는 동일한 방법론을 따릅니다. Puppo는 목표와의 근접성, 자신과 목표 간의 상대적 위치, 자신의 다리의 방향과 같은 장면에 대한 관찰을 수집하여 다음에 어떤 행동을 취할지 결정할 수 있습니다. Puppo의 경우, 행동은 이동하기 위해 관절 모터를 회전시키는 방법을 설명합니다.

Puppo가 수행하는 각 행동 후에 우리는 에이전트에게 보상을 줍니다. 보상은 다음으로 구성됩니다:

- 방향 보너스: Puppo가 목표를 향해 움직일 때 보상을 줍니다. 이를 위해 우리는 Vector3.Dot() 메서드를 사용합니다.

- 시간 패널티: 우리는 Puppo의 모든 행동에 대해 고정된 패널티(부정적 보상)를 줍니다. 이렇게 하면 Puppo는 무거운 시간 패널티를 피하기 위해 가능한 한 빨리 막대를 가져오는 방법을 배울 것입니다.

- 회전 패널티: 우리는 Puppo가 너무 많이 회전하려고 할 때 패널티를 부과합니다. 진짜 개는 너무 많이 회전하면 어지러워질 것입니다. 진짜처럼 보이게 하기 위해, 우리는 Puppo가 너무 빨리 돌아갈 때 패널티를 부과합니다.

- 목표에 도달하기 보상: 가장 중요한 것은, 우리는 Puppo가 목표에 도달할 때 보상을 준다는 것입니다.

코기 이미지
공식

이제 퍼포가 학습할 준비가 되었습니다. 개가 목표를 효율적으로 향해 달리는 법을 배우는 데 두 시간이 걸렸습니다. 훈련 과정에서 우리는 하나의 흥미로운 행동을 발견했습니다. 개는 약 1분 만에 꽤 빠르게 걷는 법을 배웠습니다. 그런 다음 훈련이 계속되면서 개는 달리는 법을 배웠습니다. 곧, 개는 달리면서 갑자기 방향을 바꾸려고 할 때 뒤집히기 시작했습니다. 다행히도, 개는 실제 개처럼 다시 일어나는 법을 배웠습니다. 이 서투른 행동은 너무 귀여워서 이 시점에서 훈련을 중단하고 게임에서 직접 사용할 수 있습니다.

퍼포를 직접 훈련시키고 싶다면, 프로젝트에서 지침을 따를 수 있습니다. 훈련을 설정하는 방법과 선택해야 할 매개변수에 대한 세부 단계가 포함되어 있습니다. 에이전트를 훈련하는 방법에 대한 더 자세한 튜토리얼은 ML-Agents 문서 사이트를 방문해 주세요.

“퍼포, 코기” 게임을 만들기 위해서는 플레이어가 훈련된 모델과 상호작용할 수 있는 게임 로직을 정의해야 합니다. 퍼포가 목표를 향해 달리는 법을 배웠기 때문에, 게임 내에서 퍼포의 목표를 변경하는 로직을 구현해야 합니다.

게임 모드에서는 플레이어가 막 던진 막대기를 목표로 설정합니다. 퍼포가 막대기에 도착하면, 퍼포의 목표를 장면에서 플레이어의 위치로 변경하여 퍼포가 막대기를 플레이어에게 반환하도록 합니다. 이렇게 하는 이유는 스크립트로 게임 흐름 로직을 정의하면서 퍼포를 목표로 이동시키는 것이 훨씬 더 쉽기 때문입니다. 우리는 머신 러닝과 전통적인 게임 개발 방법이 결합되어 두 접근 방식의 장점을 모두 얻을 수 있다고 믿습니다. “퍼포, 코기” 프로젝트에는 즉시 사용할 수 있는 코기를 위한 사전 훈련된 모델이 포함되어 있으며, 모바일 장치에 배포할 수도 있습니다.

이 블로그 게시물이 게임 개발을 위한 ML-Agents Toolkit으로 달성할 수 있는 것에 대한 통찰을 제공했기를 바랍니다.

이 프로젝트의 코드에 깊이 들어가고 싶으신가요? 우리는 프로젝트를 출시했으며 여기에서 다운로드할 수 있습니다. ML-Agents Toolkit 사용 방법에 대해 더 알고 싶다면 공식 문서와 단계별 초보자 가이드 여기를 찾을 수 있습니다. 강화 학습 뒤에 있는 수학, 알고리즘 및 이론에 대한 더 깊은 이해를 원하신다면, Udacity와 협력하여 제공하는 강화 학습 나노 학위가 있습니다.

귀하의 게임에 ML-Agents Toolkit을 사용한 경험에 대해 듣고 싶습니다. 우리의 GitHub 이슈 페이지에 연락하시거나 이메일로 직접 연락해 주세요.

감사합니다!