Search Unity

유니티는 인공 지능(AI) 연구 분야에서 Unity를 유용한 플랫폼으로 만들기 위해 많은 노력을 기울이고 있습니다. 지난 몇 주간 Unity를 사용하여 로봇 손에게 잡는 동작을 훈련시킨 OpenAI(영문), Unity로 호기심 기반 학습(Curiosity-based Learning)이라는 새로운 방식을 테스트(영문)한 UC 버클리 연구팀의 사례 등을 통해 여러 연구 그룹이 저희를 주목하고 있음을 알게 되었습니다. AI 연구 커뮤니티 지원이라는 Unity의 미션을 실현하는 데 도움이 되는 차세대 기능과 리소스를 공유할 수 있게 되어 매우 기쁩니다.

이번 릴리스에는 ML 에이전트 툴킷의 새로운 버전(v0.5)이 포함됩니다. 이 버전에는 액션에 대한 더욱 유연해진 명세와 커리큘럼, ML 에이전트와 Unity 플랫폼에 관한 유니티의 연구 논문, ML 에이전트 환경을 학습 워크플로로 더욱 쉽게 통합할 수 있는 연구자용 Gym 인터페이스, 그리고 여러 심층 강화 학습(Deep Reinforcement Learning) 연구자들이 사용하는 연속 제어(Continuous Control) 표준의 일부를 모사하여 적용한 새로운 학습 환경이 포함되어 있습니다.

AI 플랫폼으로서의 Unity에 대한 연구 논문

Unity와 ML 에이전트 툴킷을 연구 플랫폼으로 사용하는 사례가 늘어나면서 플랫폼에 대한 설명이 들어 있어 참고할 수 있는 논문 제공에 대한 요청을 많이 받았습니다. 이 기대에 부응하여 논문 ‘Unity: A General Platform for Intelligent Agents(Unity: 지능형 에이전트를 위한 종합 플랫폼)’이 발간되었습니다. 이 논문은 arXiv에서 다운로드하실 수 있습니다. 이 참고용 논문에서는 유사한 다른 플랫폼의 기능을 구축하고 여기서 더 확장한 시뮬레이션 플랫폼으로 만들고자 하는 Unity의 비전에 대해 설명하고, 기초 설계뿐 아니라 부가 기능까지 언급하면서 연구 툴로서의 ML 에이전트 툴킷에 대해 대략적으로 설명하고 있습니다. 더불어 비교 대상으로 인간 동작의 표준으로 사용할 소규모의 Unity 직원들에 대한 데이터와 PPO(Proximal Policy Optimization) 알고리즘을 사용하여 예시 환경에서 연구한 벤치마크 결과도 포함되어 있습니다. 이러한 결과를 토대로 많은 연구팀들이 Unity를 능가하는 연구 성과를 내고, 최대한 많은 예시 환경에서 “사람보다 더 나은(Superhuman) 동작을 실현하기를 바랍니다.

Gym 인터페이스 지원

유니티는 ML 에이전트 툴킷을 처음 출시할 당시 학습 환경과의 상호작용을 위해 커스텀 Python API를 제공했습니다. 이는 Unity 환경에는 기존의 관행으로 인한 제약이 없다는 장점을 활용하여, 강력하고 유연한 방식으로 학습 환경과 상호작용하는 방법을 알려주려는 의도였습니다. 그 덕분에 관찰 공간이 복잡하게 섞여 있는 환경에서 멀티 에이전트와 멀티 브레인 학습을 수행하는 시나리오를 사용할 수 있게 되었습니다. 많은 연구자분들이 이러한 환경을 위한 gym 래퍼(wrapper)가 제공되는지 문의하셨습니다. 익숙하지 않은 사람들에게는 gym이 시뮬레이션 환경과 상호작용하는 표준 방식으로 널리 사용되고 있습니다. 이제 Unity 환경과의 상호작용에 사용할 수 있는 gym 인터페이스가 제작되었다는 기쁜 소식을 전해드립니다. gym 사용에 관한 실험 파이프라인을 제작하는 연구자는 이제 다른 gym 환경을 손쉽게 Unity gym 환경으로 바꿀 수 있습니다. gym 인터페이스에 대한 자세한 내용은 Unity의 패키지 페이지(영문)를 참조하세요.

마라톤 환경(Marathon Environment) 소개

Unity 커뮤니티 멤버인 조 부스(Joe Booth)는 지난 1년 동안 ML 에이전트를 사용하여 심층 강화 학습 논문에 흔히 나오는 연속 제어(Continuous Control) 벤치마크의 기존 세트를 Unity 환경에 맞게 재구현하는 작업을 진행해왔습니다. 조가 재구현한 환경은 DeepMind Control SuiteOpenAI Gym에서 제공하는 환경에 기반한 워커(Walker), 호퍼(Hopper), 휴머노이드(Humanoid)와 앤트(Ant) 등입니다. Unity는 이처럼 공통적으로 에이전트가 최대한 일관성있게 빠른 속도로 앞으로 달려나가는 방법을 학습하는 것이 목적인 환경을 ‘마라톤 환경(Marathon Environment)’으로 총칭하고, 기존의 작업에 대한 벤치마크 알고리즘을 쉽게 시작할 수 있는 방법으로 사용하도록 연구자 커뮤니티에 제공합니다.

게임 업계의 베테랑 출신으로 머신러닝 연구에 전념하고 있는 조 부스의 노고 덕분에 이 모든 것이 가능했습니다. 환경을 다운로드하고 시작하려면 여기를 클릭하세요. 다음은 이 환경을 어떻게 구현했는지 조 부스가 직접 설명한 내용입니다.

OpenAIDeepMind를 비롯한 여러 연구 기업의 연속 제어와 이동(locomotion)에 대한 연구를 Unity와 PhysX 등의 최신 게임 엔진으로도 이어나갈 수 있는지 확인해보고 싶었습니다. 게임 디자이너가 원하는 애니메이션의 YouTube URL을 입력하기만 하면 AI가 변화하는 환경에 맞춰 동적으로 반응하면서 애니메이션을 모방하는 미래를 상상해 보세요. 정말 멋지죠! Unity 환경에서 이러한 벤치마크를 재현할 수 있는 프레임워크를 제작하면 이러한 미래를 향해 단계별로 나아갈 수 있을 겁니다.

논문을 작성하거나 새로운 아이디어를 구현할 때에는 우선 호퍼와 같은 간단한 모델로 테스트한 다음, 테스트 결과를 워커나 휴머노이드와 같은 보다 복잡한 모델로 확장하여 적용해나갈 수 있죠. 동적 환경 익히기(영문), 컨트롤러(영문)스타일 이전(영문)에 관한 제 연구에서 이러한 점진적 접근 방식을 어떻게 활용하고 있는지 확인할 수 있습니다.

앞으로 다른 분들이 마라톤 환경을 어떻게 활용하실지 매우 기대됩니다. 이제 gym이 추가됨으로써 수많은 최첨단 알고리즘을 HER 또는 MAML과 같은 ML 에이전트에서 사용할 수 있게 되었습니다. 저는 앞으로도 이러한 시도에 동참하고 지원할 생각입니다.”

기타 새로운 기능

개별 액션 공간의 확장 – 개별(discrete) 액션 공간 작동 방식을 변경하여 이 공간 유형을 사용하는 에이전트에서 한 번에 여러 액션을 선택할 수 있게 되었습니다. ML 에이전트의 이전 버전에서는 에이전트에서 한 번에 하나의 개별 액션만 선택할 수 있었지만, v0.5에서는 에이전트에 액션 브랜치(action branch)를 생성할 수 있습니다. 각 브랜치에는 선택할 수 있는 액션이 정해져 있으며, 런타임 중 선택이 필요한 경우 에이전트가 브랜치당 액션 1개를 선택합니다. 즉, 이제 에이전트는 지정한 방향으로 움직이는 동시에 점프할 수도 있습니다(예: WallJump). 또한 BananaCollector 환경을 수정하여 해당 환경 내 에이전트가 움직이고, 방향을 전환하고, 가능한 경우 레이저를 발사할 수도 있게 되었습니다.

개별 액션 마스킹 – 경우에 따라 에이전트가 특정 액션을 하지 못하도록 설정해야 할 수 있습니다. 예를 들어 에이전트가 공중에 떠 있는 상태에서 점프하는 동작은 의미가 없어 보입니다. ML 에이전트 v0.5에서는 에이전트의 다음 액션을 결정할 때 불가능한 특정 액션을 하지 못하도록 지정할 수 있습니다. 관찰 결과를 수집할 때 에이전트의 각 액션 브랜치에서 하나 이상의 불가능한 액션을 선택적으로 지정할 수도 있습니다. 그러면 에이전트가 다음 결정 단계에서 지정한 액션을 시도하지 않습니다. 즉 액션 메서드에 코드를 추가하지 않고도 에이전트가 불가능한 액션을 하지 않도록 간편하게 설정할 수 있습니다.

Unity는 에이전트가 벽으로 걸어 들어가려는 동작과 관련된 액션을 마스킹하도록 GridWorld 환경(영문)을 수정했습니다. 이로써 에이전트는 그리드 탐색 시 시간을 낭비하지 않으며 더욱 빠른 속도로 학습할 수 있게 되었습니다. 액션 마스킹을 사용하는 경우와 사용하지 않는 경우의 학습 프로세스는 아래 그래프에서 비교해볼 수 있습니다.

메타 커리큘럼 – 커리큘럼 학습(Curriculum learning)은 에이전트의 학습이 진전될수록 점점 더 난이도가 높아지는 환경을 제작할 수 있게 하는 유용한 기능입니다. 이 기능은 v0.2부터 도입되었고, v0.5에서 기능이 개선되었습니다. 이제 메타 커리큘럼을 사용하여 여러 개의 브레인을 사용하는 환경에서 커리큘럼 시나리오를 생성할 수 있습니다. 각 브레인에 대해 커리큘럼을 개별적으로 지정하기만 하면 됩니다. 또한 여러 종류의 에이전트가 각 에이전트에 맞는 속도로 학습할 수 있는 학습 환경도 만들 수 있습니다. WallJump 환경의 커리큘럼 예시를 참조하세요.

결론

유니티는 연구 커뮤니티에서 이러한 새로운 리소스와 개선된 기능을 활용한 사례를 볼 수 있기를 기대합니다. 앞으로도 지속적으로 당사의 결과물과 새로운 기능을 선보이면서 연구자 커뮤니티와 게임 개발자 커뮤니티를 지원할 예정입니다. 의견, 피드백, 질문은 유니티의 GitHub 이슈 페이지(영문)를 이용하거나 이메일(ml-agents@unity3d.com)로 유니티에 직접 문의하실 수 있습니다. 그럼 재미있게 머신러닝을 연구해 보세요!

7 코멘트

코멘트 구독

코멘트를 달 수 없습니다.

  1. Hi, thanks for the blog post. I’m using the last version of ml-agents and I’m updating myself on the newest version. I’m going through the paper right now. There is a typo – We next outline the functionality
    and tools provided by our open source toolkit for creating high-quality and flexible simulation
    environments using Unity, and finally provide a set of benchmark results on our EXAMPLE EXAMPLE
    learning environments.
    (Example is repeated)
    Ml-agents is an amazing library.

    1. Hi Divij,

      Thanks for pointing out the typo. It will be corrected in a future version of the paper.

  2. Amlesh @7091

  3. Download Now

  4. I strongly urge pytorch to get first class support. In the mean time, with the option to train while ‘in’ /showing the environment, is that the best way to use pytorch?

    1. Arthur Juliani

      9월 12, 2018 7:31 오후

      Hi James. It depends on what you mean by support. It is currently possible to interact with Unity environments using a generic python api, or a gym wrapper. From there you are free to use pytorch to train models. If you are asking about integrating pytorch models into games for deployment, we are working on expanding the kinds of models/backends supported beyond TensorFlow.

  5. Good stuff!