Unity 검색

ML Agents outside playing dodgeball
ML Agents outside playing dodgeball
공유

Is this article helpful for you?

Thank you for your feedback!

유니티는 최신 ML-Agents 블로그 포스팅에서 강화 학습으로 협동형 동작을 제작하는 새로운 기능을 소개했습니다. 오늘은 ML-Agents의 역량을 더욱 자세히 들여다볼 수 있는 새로운 환경을 소개합니다. DodgeBall은 슈팅 게임과 같은 팀 대 팀 대항 환경으로, 에이전트들은 Elimination 또는 Capture the Flag 모드로 시합을 벌입니다. 이 환경은 오픈 소스이니 리포지토리를 참조하세요.

최근 ML-Agents에 MA-POCA 알고리즘이 추가되어 누구든지 에이전트 그룹에게 협동형 동작을 가르칠 수 있습니다. 이 새로운 알고리즘은 분산형 실행을 통해 중앙집중형 학습을 구현합니다. 중앙집중형 크리틱(신경망)은 그룹 내 모든 에이전트의 상태를 처리하여 에이전트들의 행동이 얼마나 바람직한지 평가하는 한편, 다수의 분산형 액터(에이전트당 하나)가 에이전트를 제어합니다. 이로써 각 에이전트는 국지적으로 인식한 정보를 바탕으로 의사 결정을 내리는 동시에, 전체 그룹의 맥락에서 자신의 행동이 적절한지 평가할 수 있습니다. 아래 다이어그램은 MA-POCA의 중앙집중형 학습 및 분산형 실행을 설명합니다.

Illustration of centralized learning with decentralized execution
분산형 실행을 통한 중앙집중형 학습의 예. 여기서 3개의 액터가 에이전트 하나에 대한 관찰을 토대로 행동을 선택하는 한편, 단일 크리틱이 훈련을 위해 그룹 전체의 행동을 평가합니다.

MA-POCA 알고리즘의 새로운 특징 중 하나는 고정되지 않은 수의 입력을 처리할 수 있는 주의망(attention network)이라는 특수한 유형의 신경망 아키텍처를 사용한다는 점입니다. 따라서 중앙집중형 크리틱이 모든 에이전트를 그 수에 상관없이 처리할 수 있으므로, MA-POCA는 게임 내 협동형 동작에 특히 적합합니다. MA-POCA를 사용하면 언제든지 에이전트를 그룹에서 제거하거나 추가할 수 있으며, 이는 마치 비디오 게임의 캐릭터가 팀 대항전 중에 제거되거나 생성될 수 있는 것과 같습니다. 아울러 MA-POCA는 에이전트가 자신에게 불리하더라도 팀에게 이로운 결정을 내릴 수 있도록 설계되었습니다. 직접 작성된 코드로는 이끌어 내기 어려운 이러한 이타적인 동작은 에이전트의 마지막 행동이 그룹 전체의 승리에 얼마나 일조했는지를 통해 학습될 수 있습니다. 마지막으로, 다중 에이전트 강화 학습 알고리즘의 상당수는 모든 에이전트가 동시에 다음 행동을 결정한다고 가정하지만, 많은 에이전트가 참여하는 실제 게임에서는 프레임 드롭을 피하기 위해 에이전트들이 서로 다른 때에 결정을 내리도록 하는 것이 좋습니다. 따라서 MA-POCA는 이러한 가정을 하지 않으며, 단일 그룹에 속한 에이전트들의 의사결정이 동기화되지 않은 상태에서도 계속 작동합니다. MA-POCA가 게임에서 얼마나 잘 작동하는지 선보이기 위해 유니티에서는 ML-Agents만으로 훈련된 Al를 이용하여 재미있는 팀대항 게임인 DodgeBall 환경을 만들었습니다.

DodgeBall 환경

이 콘텐츠는 Targeting Cookies 카테고리를 수락해야만 동영상을 시청할 수 있도록 허용하는 타사 제공업체에서 호스팅합니다. 이러한 제공업체의 비디오를 보려면 쿠키 환경 설정에서 Targeting Cookies 카테고리를 수락하시기 바랍니다.

DodgeBall 환경은 플레이어가 최대한 많은 공을 집어 상대에게 던지는 3인칭 슈팅 게임입니다. 게임은 Elimination과 Capture the Flag라는 두 가지 모드로 구성됩니다. Elemination 모드로 게임을 할 경우 각 그룹은 상대 그룹의 모든 멤버를 제거해야 합니다. 공에 두 번 맞으면 게임에서 제외됩니다. Capture the Flag 모드의 경우 플레이어는 상대 팀의 깃발을 훔쳐 자신의 기지로 가져가야 합니다(기지에 자기 팀 깃발이 안전하게 있어야만 점수를 올릴 수 있음). 이 모드에서는 공에 맞으면 깃발을 떨어뜨리고 10초간 기절하며, 이후에 기지로 소환됩니다. 두 가지 모드 모두 플레이어는 최대 4개의 공을 가질 수 있고, 날아오는 공을 피하기 위해 돌진하거나 울타리를 돌파할 수 있습니다.

강화 학습에서 에이전트는 환경을 관찰하고 보상을 극대화하는 행동을 취합니다. 에이전트에게 DodgeBall 플레이를 가르치는 데 필요한 관찰과 행동, 보상은 아래에서 확인할 수 있습니다.

DodgeBall에서 에이전트는 다음 세 가지 정보 소스를 통해 환경을 관찰합니다.

  • 레이캐스트: 레이캐스트를 통해 에이전트는 주변 월드가 어떤 형태인지 인식할 수 있습니다. 에이전트는 해당 정보를 사용하여 공을 감지하여 잡고, 벽을 피하고, 상대를 겨냥합니다. 다양한 오브젝트 클래스를 감지하기 위해 아래에 각기 다른 색으로 표시된 다양한 레이캐스트가 사용됩니다.
Image showcasing a ML-Agent noting all visible world surroundings using raycasts
  • 상태 데이터: 에이전트의 위치, 현재 보유한 공의 수, 제거되기 전까지 공에 맞아도 되는 기회의 수 등의 정보로 구성되며, Capture the Flag 모드에서는 깃발에 대한 정보가 추가됩니다. 에이전트는 이러한 정보를 사용하여 전략을 세우고 승률을 판단합니다.
  • 다른 에이전트의 상태 데이터: 자기 팀원의 위치와 상태, 깃발을 들고 있는 팀원이 있는지 여부 등의 정보로 구성됩니다. 에이전트는 언제든지 제거될 수 있어 그 수가 고정되지 않으므로, 버퍼 센서를 사용하여 에이전트가 다양한 수의 관찰을 처리하도록 합니다. 여기에서 관찰의 수는 아직 시합 중인 팀 구성원의 수를 나타냅니다.

DodgeBall 환경은 연속 행동과 이산 행동이 혼합된 하이브리드 행동도 활용합니다. 에이전트는 앞으로 이동, 옆으로 이동, 회전 등 세 가지 연속 행동으로 이동합니다. 동시에 공 던지기 및 돌진의 두 가지 이산 행동을 합니다. 이러한 행동 공간은 Capture the Flag 및 Elimination 시나리오에서 사람 플레이어가 수행할 수 있는 행동과 일치합니다. 

한편, 보상에 관해서는 의도적으로 에이전트에게 다소 단순한 보상이 주어지도록 설정했습니다. 승패에 따라 큰 규모의 최종 보상을 제공하고, 게임 방법의 학습을 위해 몇 차례의 중간 보상을 제공합니다.

Elimination 모드:

  • 에이전트가 공으로 적을 때리면 +0.1점의 보상을 받습니다.
  • 상대팀을 모두 제거하여 게임에서 승리한 팀은 +1점을 받고, 패배한 팀은 -1점을 받습니다.
  • 빠르게 승리한 팀은 총 시간 중 남은 시간에 비례하여 시간 보너스 점수를 받습니다.

Capture the Flag 모드:

  • 에이전트가 공으로 상대를 맞추면 +0.02점의 보상을 받습니다.
  • 상대팀의 깃발을 기지로 가져와 게임에서 승리한 팀은 +2점을 받고, 패배한 팀은 -1점을 받습니다.

에이전트에게 작은 보상을 여러 번 부여하여 바람직한 행동을 장려하고 싶더라도 에이전트가 추구해야 할 전략을 과도하게 규정하는 것은 피해야 합니다. 예를 들어 Elimination에서 공을 줍는 행위에 대해 보상한다면, 에이전트가 상대를 맞추기보다 공 줍기에 더 열중하게 될 수 있습니다. 보상을 최대한 '드물게' 제공하면 훈련 기간은 길어질 수 있지만, 에이전트가 게임 내에서 고유의 전략을 자유롭게 강구할 수 있습니다.

에이전트에게 이러한 보상을 안기는 승리 전략은 매우 다양하므로, 최적의 행동이 무엇인지 파악해야 했습니다. 예를 들어 공을 비축해두는 것과 나중에 사용하기 편하도록 여기저기 옮겨 놓는 것 중 무엇이 좋은 전략일까요? 팀원들이 뭉쳐 있는 것이 현명할까요, 아니면 흩어져서 적을 빨리 찾는 것이 좋을까요? 이와 같은 질문에 대해서는 게임을 어떻게 디자인하느냐에 따라 답이 달라졌습니다. 만약 공이 부족하다면 에이전트는 적이 공을 차지하지 못하도록 공을 더 오래 가지고 있으려 합니다. 만약 적의 위치를 항상 알 수 있도록 설정하면 에이전트는 최대한 서로 모여 있으려 합니다. 따라서 게임에 변화를 주고 싶을 때에도 AI의 코드를 수정할 필요가 없었습니다. 단지 새로운 환경에 적합한 새로운 행동을 다시 교육하기만 하면 됩니다.

에이전트의 협동 훈련

에이전트 그룹이 협동하도록 훈련시키는 것은 단일 에이전트가 과제를 해결하도록 훈련시키는 것에 비해 복잡합니다. 유니티는 에이전트 그룹 관리에 도움을 제공하기 위해 DodgeBallGameController.cs 스크립트를 만들었습니다. 이 스크립트는 운동장을 초기화하고 재설정합니다(공을 생성하고 에이전트의 위치를 재설정하는 것도 포함). 또한 에이전트를 SimpleMultiAgentGroup에 할당하고 각 그룹이 받는 보상을 관리합니다. 예를 들어 DodgeBallGameController.cs 스크립트는 에이전트가 다른 에이전트를 공으로 맞추면 다음과 같이 처리합니다.

Image showing code for ML-Agents Dodgeball

이 코드에 따르면 공을 던져 상대를 맞춘 에이전트는 작은 보상을 받습니다. 하지만 전체 그룹은 상대팀의 마지막 구성원이 제거된 이후에만 함께 노력한 결과에 대한 보상을 받게 됩니다.

MA-POCA는 개별 에이전트를 관리하는 방식과 다르게 SimpleMultiAgentGroup에 속한 에이전트들을 관리합니다. MA-POCA는 중앙집중형 훈련을 위해 관찰한 내용을 종합합니다. 아울러 그룹에 들어오거나 나가는 에이전트의 수에 관계없이 개별 보상과 전체 그룹에 대한 보상도 관리합니다. TensorBoard에서 에이전트 그룹이 받는 누적 보상을 모니터링할 수 있습니다.

총정리

Elimination과 Capture the Flag 모두 대항 게임이므로, 유니티는 MA-POCA와 셀프 플레이(self-play)를 결합하여 에이전트가 자신의 이전 버전과 대항하면서 이전 버전을 이기는 방법을 학습하도록 했습니다. ML-Agents에서 셀프 플레이를 실행할 때는 ELO가 계속 증가하는지 확인하여 에이전트의 학습 진행률을 모니터링할 수 있습니다. 수천만 번의 단계를 거치면 에이전트가 사람처럼 플레이할 수 있게 됩니다.

Graph monitoring ELO

이 동영상은 Elemination 플레이를 학습하는 에이전트가 시간이 지나며 발전하는 모습을 보여줍니다. 훈련 초기의 에이전트는 공을 던질 줄은 알지만 조준 정확성이 떨어지고 무작위로 던지는 경향이 있음을 확인할 수 있습니다. 4,000만 번의 타임 스텝을 거치자, 에이전트는 여전히 다소 아무렇게나 배회하며 적을 찾지만 조준력은 향상되었습니다. 상대와 마주치면 보통 일대일로 맞붙습니다. 다시 1억 2,000만 번의 타임 스텝을 추가로 훈련한 이후, 에이전트는 훨씬 더 공격적이고 자신만만하게 되며, 그룹을 지어 상대 진영으로 돌격하는 등 정교한 전략을 전개합니다.

이 콘텐츠는 Targeting Cookies 카테고리를 수락해야만 동영상을 시청할 수 있도록 허용하는 타사 제공업체에서 호스팅합니다. 이러한 제공업체의 비디오를 보려면 쿠키 환경 설정에서 Targeting Cookies 카테고리를 수락하시기 바랍니다.

다음은 Capture the Flag 플레이를 학습하는 에이전트입니다. 타임 스텝이 1,400만 번인 훈련 초기에는 에이전트가 실제로 깃발을 잡지는 않고 서로에게 공을 던지는 법만 학습합니다. 3,000만 번 째에 에이전트는 상대의 깃발을 들고 기지로 복귀하는 법을 배우지만, 깃발을 든 에이전트를 제외한 나머지 에이전트가 어떻게 팀에 일조하는지는 명확하지 않습니다. 하지만 타임 스텝이 8,000만 번이 되자 에이전트들이 흥미로운 전략을 보입니다.

이 콘텐츠는 Targeting Cookies 카테고리를 수락해야만 동영상을 시청할 수 있도록 허용하는 타사 제공업체에서 호스팅합니다. 이러한 제공업체의 비디오를 보려면 쿠키 환경 설정에서 Targeting Cookies 카테고리를 수락하시기 바랍니다.

상대팀의 깃발을 들고 있지 않은 에이전트는 기지를 지키기도 하고, 자기 팀의 깃발을 든 상대 팀원을 추격하기도 하고, 상대팀의 기지에서 기다리다가 깃발을 들고 귀환하는 상대 팀원을 공으로 맞추기도 합니다. 자기 팀이 깃발을 차지하면 에이전트는 팀 구성원이 상대팀의 깃발을 가지고 돌아와 득점할 때까지 기지에서 대기하기도 합니다. 다음 동영상은 에이전트가 우연히 학습한 몇 가지 흥미로운 전략을 보여줍니다. 이는 명시적으로 지정한 행동이 아니며, 수백 번의 셀프 플레이를 반복하는 과정에서 학습된 것입니다.

이 콘텐츠는 Targeting Cookies 카테고리를 수락해야만 동영상을 시청할 수 있도록 허용하는 타사 제공업체에서 호스팅합니다. 이러한 제공업체의 비디오를 보려면 쿠키 환경 설정에서 Targeting Cookies 카테고리를 수락하시기 바랍니다.

다음 단계

DodgeBall 환경은 오픈 소스이며 여기에서 다운로드할 수 있습니다. 직접 실행해 보시기 바랍니다. 머신러닝과 게임이 만나는 이 흥미로운 분야를 연구하고 싶다면, 당사에서 진행 중인 채용 공고를 참고하여 여기에서 지원하세요.

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

Is this article helpful for you?

Thank you for your feedback!