Published on

REVIEW | PADL: Language-Directed Physics-Based Character Control

Review Today

이 논문 리뷰하기 전에 글을 남겼어야 했는데, 정리하는 김에 바로 적느라 기록을 남기지 못했다..ㅠㅠ 이 논문은 Nvidia Lab에서 Adversarial Skill Embedding 의 후속 연구로, NLP를 추가하여 유저들에게 직관적으로 인터페이스를 제공한다는 점을 contribution으로 두고 있다. 본 논문은 Siggraph Asia 2022에 발표되었고 해당 코드는 아래 참조.

Introduction

Downstream task로 지난 모션 생성 모델에서 Reinforcement Learning으로 목표를 달성해왔다. 내가 읽은 것만해도 downstream tasks들은 DRL로 처리해왔다.

  • Adversarial Motion Prior
  • Adversarial Skill Embedding (GAN): Hierarchical
  • Motion VAE
  • Physics-based Control using VAE

하지만 이런 방법으로는 비전공자나 일반인들에게 접근은 어렵고 (보상함수나 이런 환경 세팅 등등) 최근 Midjourney와 같이 텍스트를 이용하여 유저들에게 더 쉬운 인터페이스를 제공하는 연구들이 나타나기 시작했는데, 모션 쪽에서도 자연어처리와 융합하는 시도가 생겨나기 시작했다. 작년 stable diffusion 기반 Text to Motion 이라던가 등등..

Background

기본적인 강화학습 관련 내용이다. 강화학습에 빠르게 설명한다면,

  1. agent는 policy로부터 action값을 받게되고
  2. agent는 action을 한 환경으로 부터 state을 받게 되고
  3. state로부터 reward를 받게 된다!

말그대로 행동에 대한 강화 즉, 원하는 goal에 맞는 action을 유도하게끔 하는 것이 강화학습이다. 이와 관련해서는 추후 포스팅할테니 여기까지 간단하게 알고만 있자..!

이 논문으로 아예 첩한.. 사람은 없을꺼라고 생각하나, 만약 처음 보게 된다면, Generative Adversarial Imitation Learning 개념 정도는 알고 가자.

Overview

본 논문은 3단계로 나뉘어 접근하였다.

  1. Skill Embedding
  2. Policy Training
  3. Multi-task aggregation

해결하고자 하는 문제를 다시 정리하자면, User의 command를 입력을 받고 그에 해당하는 motion을 출력하는 것인데, 이 때 command를 agent가 무엇(what task)을 달성해야 하는지, 어떻게(control how) task를 달성할 것인지로 세부적으로 나누어서, 접근하였다.

그림에서 보이는 것과 같이,

  1. motion encoder와 language encoder 각각 출력된 latent space의 유사한 latent space로 훈련한다. (Training Skill)
  2. 1에서 훈련된 motion encoder를 토대로 adversarial imitation learning을 한다. 결과적으로 어떤 task에 따른 motion encoder을 토대로 policy룰 훈련한다. 이 때의 policy는 latent space(z)를 입력을 받아 z에 상응하는 task를 수행한다. (정확히는 what을 훈련한다고 보면 된다. = Training Tasks)
  3. 다양한 명령어 입력을 받기 위해 2에서 훈련한 여러 policy를 토대로 선택하여 수행. (이 때 선택하는 일을 담당하는 것이 Multiple Choice QA)

이 정도로 알아보고 자세히 알아보자.

Skill Embedding

첫번째 단계에서는 motion과 그에 따른 skill text에 상응하는 embedded space를 훈련하게 된다. 이 때 사용하는 모델은 아래와 같다

  • Transformer autoencoder(from MotionCLIP)

이와 같은 방식으로 CLIP encoder을 language encoder로, 양방향 transformer을 motion encoder로 설정한다.

두 encoder는 language latent 정보와 motion latent 정보가 상응한 embedded space를 훈련하게 된다. 앙뱡향 transformer로 motion decoder는 embedded 정보로부터 motion을 reconstruct하게 된다.

loss function 정보는 논문 참고* (ground truth - reconstructed data의 제곱한 값의 평균한 reconstruction loss와 language latent와 motion latent의 코사인 유사도를 구한 align loss를 합한 값이다.)

이 때 overfitting을 방지하기 위해 random하게 motion을 추출하였으며 reconstructino loss에게만 영향을 준다라고 밝혔다.

Policy Training

kinematic하게만 처리한다면 이 과정을 건너뛰어도 상관없을듯 싶다.
물리 엔진에 적용하게 하기 위해 Adversarial Imitation Learning 과정을 거친다. Adversarial Imitation Learning과 AMP에 대해서는 나중에 포스팅을 해보도록 하겠다.

순서도를 보면 알겠지만 Discriminator에 모두 state에 관한 정보를 입력으로 받는데, 이 때의 state transition의 likelihood를 토대로 loss를 계산한다.
AMP와 loss와 차이점은, 추가적으로 주어진 latent conditioned된 state transition, 다른 모션clip으로부터 random transition, 그리고 gradient penalty의 likelihood룰 추가시켜서 훈련하게 된다.

Reward function 또한 skill과 task를 둘다 훈련시키는 과정은 동일하나, language latent 정보를 추가시켜서 보상을 학습하게 한다.

Multi-task Aggregration

Skill 명령은 위 학습한 language encoder를 거치게 되지만, task 명령은 QA 모델을 거치게 된다. 아래는 그 이유와 방법에 관한 내용.

하나의 multi task policy는 좋지 않은 결과로, 분할 정복법으로 문제를 접근하였다.
QA모델은 task 명령을 또 나뉘어서 task에 관련된 policy의 index를, 어떤 target으로 접근할지 에 대한 target(object) index를 출력한다. 매 timestep마다 policy index로 해당 policy를 호출한다. 따라서 실시간으로 dynamic하게 제어할 수 있다고 한다.

Multiple Choice Question Answering

  • pre-trained BERT fine-tuned on the SWAG dataset.

task는 task에 해당하는 가장 높은 유사도를 보이는 policy를 토대로 object들 중 유사도가 가장 높은 object을 target object으로 선정한다.

Experimental Setup

자세한 건 논문 참고* 여기서 37 degree of freedom data란 뜻은, humanoid의 관절 자유도이다. 이와 관련해서 나중에 시리즈로 포스팅해보겠다..!

Tasks

  • Facing: 주어진 방향에 따라 이동
  • Location: 목표 지점을 향해 이동
  • Strike: 목표 지점을 쓰러뜨림

사실 Downstream task 관련해서는 여러 논문들이 많아서 생략한다. 보상함수에 관해 더 자세한 정보는 본 논문 Appendix에서 확인하면 된다!

Training

  • Issac Gym, 4096 parallel environment, 128 latent space
  • Policy, value function, discriminator
  • 2.5day (시뮬레이션 시간으로 7년)

※ Issac gym을 모르시는 분들이라면, mujoco나 pybullet과 같은 훈련용으로 나온 물리엔진이다. 병렬환경에서 multi gpu (humanoid는 single gpu 현재까지는) 로 훈련해서 상당한 시간을 절약한다. Nvidia에서 나왔으며 Omniverse에 올리면 렌더링한 결과도 준수하게 나오므로 공식사이트에서 확인해보는 걸 추천한다.

Result

아래 이미지를 누르면 결과 영상으로 이어진다.

논문에서는 적은 양의 caption으로 새로운 명령(skill)에서는 에러를 보인다고 한다. task 명령도 마찬가지로 몇몇 명령은 인식하지 못한다고 한다.

GAIL을 사용한 AMP와 Policy learning에서 사용한 두 Discriminator의 차이점은, AMP의 disc는 marginal disc로 모션 데이터를 직접 받고, PADL의 joint disc는 모션 관련 데이터를 latent 정보를 통해 받는다. AMP는 비슷한 fake 데이터만 생성하는 mode collapse에 봉착하게 되는 문제점을 지니고 있다.

이와 비슷한 ASE는 random한 latent 정보를 얻어 action을 결과값을 나오는 low level policy를 훈련하나, 이 또한 marginal disc 훈련으로 mode collapse 문제를 지니고 있다. PADL은 모든 motion clip에 대한 모든 latent 정보를 담는 embedded space를 만들어 해결하였다고 한다. PADL skill embedding 부분을 low-level controller 적용시켜서 훈련한 결과, 새로운 명령어에 대해 대처하지 못하는 문제점이 있다고 서술한다.

Conclusion

ASE와 비슷하게(?) low level skill (language encoder)와 high level policy (trained policy)로 NLP로도 충분히 motion 생성이 가능함을 보여주었다. 다양한 skill들을 step-1에서 훈련하여 복잡한 task를 수행하기 위해 step-2까지 거쳐왔다. 하지만 논문에서 task는 정해진 task만 수행하기 때문에 다양한 skill에 비해서 할 수 있는 일이 적다는 한계점을 지니고 있다.

이미지와는 다르게 모션 데이터가 annotated된게 적거나 손으로 일일히 label해야하다보니 이미지 연구에 비해 더딘 것이 아닌가 싶다. 소개와 다르게 ASE보다는 AMP에 policy training 방식이 더 가깝지 않나 생각한다.

다음 리뷰 포스팅은 2020년 연구로 다시 돌아간다! 뿅

Authors