Artoke

애니 논문: AMP: 적대적 모션 프라이어로 스타일만 뽑아내기

물리 기반 캐릭터에게 "달려라"라고 시키면 목표는 쉽게 준다. 앞으로 나아가는 속도에 보상을 주면 된다. 문제는 그 결과가 대부분 보기 흉하다는 것이다. 최적화는 목표를 채우는 가장 값싼 경로를 찾을 뿐이라, 팔을 기괴하게 휘젓거나 게처럼 질질 끄는 걸음으로도 "앞으로 가기"를 달성한다. 사람이 원하는 건 목표 달성만이 아니라 그럴듯하게 움직이는 것인데, 그 "그럴듯함"을 보상 함수로 손으로 적어 넣기가 거의 불가능하다.

기존 해법인 모션 모방(motion imitation)은 정답 궤적을 하나 정해 두고 매 프레임 그 자세를 얼마나 잘 따라 했는지로 보상을 준다. 잘 되긴 하지만, 참조 클립 하나에 정책 하나가 붙어 버린다. 여러 동작을 섞으려면 지금 몇 번째 클립의 몇 번째 프레임을 흉내 낼지 알려 주는 위상(phase) 변수와 동작 선택 로직을 따로 붙여야 한다. AMP는 이 "프레임을 맞춰라"라는 요구 자체를 버린다.

핵심 전환: 따라 하지 말고, 데이터셋다워 보이게 하라

AMP의 아이디어는 판별자(discriminator)를 하나 세우는 것이다. 이 판별자는 딱 한 가지를 판정한다. "이 움직임의 조각이 참조 데이터셋에서 나온 것처럼 보이는가?" 정책이 만든 움직임과 사람이 캡처한 데이터셋의 움직임을 구별하도록 판별자를 훈련하고, 정책은 반대로 판별자를 속이도록, 즉 데이터셋처럼 보이도록 훈련한다. GAN을 모션에 적용한 셈이고, 뿌리는 모방학습의 GAIL이다.

여기서 "움직임의 조각"은 한 프레임이 아니라 상태 전이 이다. 즉 지금 자세와 다음 자세의 쌍을 본다. 왜 쌍인가. 한 프레임만 보면 "서 있는 자세"가 데이터셋다운지는 알아도 그게 걷다가 나온 건지 넘어지다가 나온 건지 알 수 없다. 연속한 두 상태를 함께 보면 속도와 변화의 방향, 즉 움직임의 질감이 드러난다. 판별자는 이 질감을 학습한다.

기호를 풀면 이렇다. 는 시각 에서 캐릭터의 상태(관절 각도·속도, 몸통 자세 등)이고, 는 정책이 고른 행동, 은 그 행동으로 도달한 다음 상태다. 는 판별자로, 상태 전이 하나를 받아 실수 점수를 뱉는다.

판별자를 어떻게 학습시키는가

AMP는 일반적인 로그 손실 대신 최소제곱(least-squares) 목적함수를 쓴다. 학습이 안정적이고 그래디언트가 잘 죽지 않기 때문이다. 판별자의 목적함수는 다음과 같다.

기호를 하나씩 보자. 은 참조 모션 데이터셋 에서 뽑은 상태 전이의 분포다. 은 현재 정책 가 시뮬레이션을 돌려 실제로 만들어 낸 상태 전이의 분포다. 는 각 분포에서 전이를 뽑았을 때의 평균(기댓값)이다.

첫째 항은 데이터셋에서 온 전이에 대해 을 뱉기를 바란다. 이 0이 되려면 이어야 하니까. 둘째 항은 정책이 만든 전이에 대해 을 뱉기를 바란다. 그래서 판별자는 "진짜=, 가짜="이라는 눈금을 스스로 만든다. 는 이 두 항의 합을 가장 작게 만드는 판별자를 고른다는 뜻이다.

여기에 안정화를 위한 그래디언트 페널티가 붙는다.

는 판별자의 입력을 한 덩어리로 본 것이고, 는 그 입력에 대한 판별자 출력의 기울기다. 이 기울기의 크기(제곱 노름)에 벌점을 줘서, 판별자가 데이터 근처에서 너무 가파르게 변하지 못하게 누른다. 는 이 벌점의 세기를 정하는 가중치다. 판별자가 지나치게 날카로워지면 정책이 받을 보상 신호가 뾰족해져 학습이 불안정해지는데, 이 항이 그걸 막는다.

판별자 점수를 보상으로 바꾸기

정책 입장에서는 판별자 점수를 그대로 쓰기보다, 다루기 좋은 보상 값으로 바꾼다. AMP의 스타일 보상은 이렇게 정의된다.

이 식을 감으로 읽어 보자. 판별자가 "진짜다"라며 을 뱉으면 괄호 안이 0이 되어 , 즉 만점이다. 판별자가 "가짜다"라며 을 뱉으면 이고 , 보상은 0이다. 그 사이 값은 부드럽게 이어진다. 은 보상을 범위에 가두어, 판별자가 아주 낮은 점수를 줘도 음수 보상으로 폭주하지 않게 한다. 정책은 이 스타일 보상을 최대화하려 애쓰면서, 결과적으로 데이터셋을 닮은 움직임 쪽으로 밀려간다. 어느 프레임을 흉내 낼지는 아무도 지정하지 않았다.

스타일과 과업을 분리하기

AMP의 진짜 장점은 이 스타일 보상을 과업 보상과 따로 떼어 하나의 정책에 함께 준다는 데 있다. 최종 보상은 두 항의 가중합이다.

는 과업(goal) 보상이다. 는 그 과업이 무엇인지 알려 주는 값으로, 이를테면 목표 지점의 방향이나 도달해야 할 위치다. "저기까지 걸어가라" 같은 지시가 여기에 들어간다. 는 앞서 본 스타일 보상이다. 는 각각의 가중치로, 목표 달성과 움직임의 자연스러움 사이의 균형을 정한다.

이 분리가 왜 강력한가. 과업은 "무엇을 하라"만 말하고, 스타일은 "어떤 결과가 데이터셋다운가"만 말한다. 둘은 서로 다른 클립에서 와도 된다. 예컨대 좀비처럼 걷는 참조 데이터로 스타일을 학습시키고, 과업으로는 임의의 목표점 도달을 주면, 정책은 좀비 스타일을 유지하면서 시키는 곳으로 걸어간다. 참조 데이터에 그런 목표 지향 궤적이 하나도 없어도 된다. 스타일은 질감이고, 과업은 방향이며, 둘을 이 식이 합쳐 준다.

애니 논문: 논문 — AMP: 적대적 모션 프라이어로 스타일만 뽑아내기 도식
판별자는 데이터셋과 정책의 상태 전이를 구별하고, 그 점수가 스타일 보상이 된다. 정책은 과업 보상과 스타일 보상의 가중합으로 갱신된다.

왜 위상 변수가 사라졌는가

모션 모방에서는 "지금은 참조 클립의 42% 지점을 흉내 낼 차례"라는 정보가 필요했다. 그래야 어느 프레임과 비교할지 정해지기 때문이다. AMP에는 비교할 특정 프레임이 없다. 판별자는 분포를 본다. 정책이 만든 상태 전이가 데이터셋 전이의 분포 안에 들어오기만 하면 순서가 어긋나도, 클립을 넘나들어도 상관없다. 그래서 위상 변수도, 동작 선택기도 필요 없어진다. 여러 동작이 담긴 데이터셋을 통째로 주면, 정책은 과업 상황에 맞는 조각들을 알아서 섞어 자연스러운 전환을 만들어 낸다.

이것은 모방학습의 한 관점에서 자연스럽다. 판별자를 속이도록 정책을 미는 것은, 정책이 만든 상태 전이 분포 를 데이터 분포 에 가깝게 맞추는 일과 같다. 즉 AMP는 "프레임을 맞춰라"를 "분포를 맞춰라"로 바꾼 것이고, 후자가 훨씬 유연하다.

정리하면

AMP는 세 가지를 한 묶음으로 해낸다. 첫째, 판별자를 스타일의 척도로 세워 손으로 못 적는 "자연스러움"을 데이터에서 뽑아낸다. 둘째, 스타일 보상 와 과업 보상 를 분리해 하나의 정책이 스타일을 유지하며 새 목표를 수행하게 한다. 셋째, 상태 전이 분포를 맞추는 방식이라 위상·동작 선택 같은 손 붙임 장치를 걷어낸다. 결과적으로 "이 데이터셋처럼 움직이면서, 이 목표를 달성하라"라는 요청을, 참조 데이터에 그 조합이 존재하지 않아도 만족시킬 수 있게 된다.

출처

광고

리깅 파이프라인 자동화 도구

반복 작업은 스크립트에게. 현업에서 쓰는 리깅 툴 모음.

리깅 도구 보기