Artoke

애니 논문: DeepMimic: 강화학습으로 모션 캡처를 물리 시뮬레이션에 옮기다

모션 캡처로 찍은 백플립 데이터는 그 자체로는 그냥 좌표의 나열이다. 관절 각도가 프레임마다 어떤 값이었는지 적어 놓은 표에 가깝다. 이걸 그대로 재생하면 화면 속 캐릭터는 백플립을 한다. 다만 그 캐릭터는 밀면 밀리지 않고, 바닥이 기울어도 미끄러지지 않으며, 착지 순간에 무릎이 받아야 할 힘 같은 건 존재하지 않는다. 애니메이션은 있고 물리는 없다.

물리 시뮬레이션 안에서 같은 동작을 만들려면 이야기가 완전히 달라진다. 이제 캐릭터는 관절에 토크를 걸어서 스스로 몸을 회전시켜야 하고, 공중에서는 각운동량이 보존되며, 착지할 때 발이 지면에 닿는 순간의 마찰과 충격을 견뎌야 한다. 각 프레임의 목표 자세를 안다고 해도, 그 자세로 가기 위해 어떤 토크를 언제 걸어야 하는지는 알려주지 않는다. DeepMimic(Peng, Abbeel, Levine, van de Panne, SIGGRAPH 2018)이 푸는 문제가 정확히 이것이다. 레퍼런스 클립을 목표로 주고, 그 목표를 물리 시뮬레이션 안에서 재현하는 제어기를 강화학습으로 찾는다.

보상을 "따라하기"로 정의한다

강화학습에서 보상 함수를 설계하는 일은 보통 고통스럽다. "잘 걸어라"를 수식으로 옮기려면 전진 속도, 자세 유지, 에너지 소모, 발 위치 같은 항을 하나씩 손으로 조율해야 하고, 그렇게 만든 보상은 대체로 기괴한 걸음걸이를 낳는다. DeepMimic의 우회로는 단순하다. 보상을 사람이 설계하지 말고, 레퍼런스 모션과의 차이로 정의하자. 자연스러움을 수식으로 표현할 필요가 없다. 자연스러운 예시가 이미 있으니까.

전체 보상은 두 조각의 가중합이다.

여기서 모방(imitation) 보상으로, 시뮬레이션 캐릭터가 레퍼런스 클립과 얼마나 닮았는지를 잰다. 과제(goal) 보상으로, "저 목표 지점으로 공을 차라" 같은 추가 임무가 있을 때 붙는다. 목표 없이 그냥 동작을 재현하기만 하면 되는 경우엔 이 되어 모방 항만 남는다. 아래부터는 이 모방 항을 뜯어본다.

모방 보상은 다시 네 항으로 쪼개진다. 이게 논문의 심장이다.

가중치는 각각 로, 합이 1이 되게 잡혀 있다. 자세(pose) 항이 압도적으로 크다는 점을 기억해 두자. 나머지 셋은 자세만으로는 놓치는 것들을 보정하는 역할이다.

자세 항: 관절 각도가 얼마나 어긋났나

는 시각 에서 시뮬레이션 캐릭터의 번째 관절 회전이고, 는 같은 시각 레퍼런스 클립의 관절 회전이다. 모자(hat) 기호가 붙으면 "레퍼런스 쪽 값"이라는 뜻으로, 논문 전체에서 일관되게 쓰인다. 회전은 쿼터니언으로 표현되므로 단순 뺄셈이 성립하지 않는다. 그래서 라는 기호를 쓰는데, 이건 두 회전의 상대 회전을 구하는 연산이다. 의 크기는 로 돌리기 위해 필요한 회전각이 된다. 두 자세가 같으면 0, 많이 틀어질수록 커진다.

이 제곱합을 모든 관절 에 대해 더한 뒤, 음수를 붙여 에 넣는다. 지수 함수로 감싸는 이유는 보상을 구간에 가두기 위해서다. 오차가 0이면 로 최대 보상, 오차가 커지면 부드럽게 0으로 수렴한다. 앞에 붙은 의 절댓값은 민감도다. 이 계수가 클수록 작은 오차에도 보상이 급격히 떨어진다.

속도 항: 자세가 맞아도 타이밍이 틀릴 수 있다

는 관절 각속도다. 점(dot)은 시간 미분을 뜻한다. 레퍼런스 클립에는 각속도가 직접 기록돼 있지 않으므로, 인접 프레임의 자세를 유한 차분해서 얻는다.

왜 이 항이 필요한가. 자세 항만 쓰면 캐릭터가 목표 자세를 지나쳤다가 다시 돌아오는 식으로, 매 순간의 스냅샷은 맞지만 움직임 자체는 덜덜 떨리는 해를 찾을 수 있다. 속도를 함께 맞추라고 요구하면 궤적의 매끄러움이 강제된다. 민감도가 로 자세 항의 보다 훨씬 낮은데, 각속도는 원래 값의 크기가 크고 노이즈가 많아서 엄격하게 맞추라고 하면 학습이 불안정해지기 때문이다.

말단 항: 손발은 특별대우를 받는다

는 end-effector, 즉 양손과 양발을 가리킨다. 는 그 말단의 3차원 위치(각도가 아니다)이고, 루트 좌표계 기준으로 잰다. 민감도 은 네 항 중 압도적으로 크다. 그럴 만한 이유가 있다. 관절 각도의 오차는 운동학 사슬을 따라 누적된다. 고관절에서 몇 도 어긋난 것이 무릎, 발목을 거치며 증폭되어 발끝에서는 수십 센티미터의 차이가 된다. 그런데 지면과 실제로 접촉하는 건 발끝이다. 각도만 대충 맞고 발이 땅속에 파묻히거나 허공을 딛으면 시뮬레이션은 즉시 무너진다. 그래서 발과 손의 위치만큼은 따로, 아주 엄격하게 맞추라고 요구한다.

무게중심 항: 몸통이 어디에 있나

는 캐릭터 전체의 무게중심(center of mass) 위치다. 다른 항들이 모두 관절 단위의 국소적 오차를 보는 데 반해, 이 항은 몸 전체가 공간의 어디에 있는지를 본다. 관절 각도가 전부 맞고 발도 제자리인데 몸통 전체가 30cm 뒤에 있다면 그건 다른 동작이다. 백플립처럼 공중에서 몸이 통째로 이동하는 동작에서는 이 항이 궤적의 전역적 형태를 붙잡아 준다.

학습: PPO와 클리핑

보상이 정해졌으니 정책 를 최적화한다. 상태 에는 각 링크의 상대 위치·회전·선속도·각속도가 들어가고, 여기에 위상 변수 가 추가된다. 는 클립의 어느 지점을 재현할 차례인지 알려 주는 시계다. 이게 없으면 정책은 같은 자세에서 "지금이 도약 직전인지 착지 직후인지"를 구분할 수 없다. 행동 는 각 관절의 PD 컨트롤러에 넘길 목표 각도이고, 토크는 PD 게인이 계산한다.

최적화는 PPO의 클리핑 목적함수를 쓴다.

는 새 정책과 데이터를 모을 때 쓴 옛 정책의 확률 비율이다. 는 이점(advantage) 추정치로, "그 상황에서 평균적으로 기대되는 값보다 이 행동이 얼마나 더 좋았나"를 뜻한다. 이면 그 행동의 확률을 올리고 싶고, 이면 내리고 싶다. 문제는 욕심이다. 좋았던 행동의 확률을 무한정 올리면 정책이 한 번에 너무 멀리 튀어 망가진다. 밖으로 못 나가게 잘라내고, 이 잘린 쪽과 안 잘린 쪽 중 보수적인 값을 택하게 만든다. 결국 한 번의 업데이트가 정책을 옛 정책 근처에 붙들어 둔다.

진짜 열쇠는 두 개의 트릭이었다

여기까지는 "보상을 잘 짰다"는 이야기다. 그런데 이 보상만으로 백플립을 학습시키면 실패한다. 논문의 실질적 기여는 다음 두 가지에 있다.

애니 논문: 논문 — DeepMimic: 강화학습으로 모션 캡처를 물리 시뮬레이션에 옮기다 도식

참조 상태 초기화 (RSI)

보통의 강화학습 에피소드는 정해진 초기 상태에서 시작한다. 백플립이라면 웅크린 자세부터다. 그런데 캐릭터는 처음엔 아무것도 못 하므로 도약 직후에 넘어진다. 공중 회전이나 착지 구간의 보상은 한 번도 관측되지 않는다. 에이전트 입장에서 "성공적인 착지"란 존재하지 않는 세계다. 도약을 완벽히 마스터해야만 다음 구간을 볼 수 있는 이 순차적 의존성이 학습을 마비시킨다.

RSI는 이 순서를 통째로 없앤다. 매 에피소드를 시작할 때 위상 에서 균등하게 뽑고, 클립의 그 시점 자세와 속도로 캐릭터를 초기화한다. 그러면 착지 직전 상태에서 시작하는 에피소드가 처음부터 존재하고, 에이전트는 도약을 배우기 전에 착지를 배울 수 있다. 어려운 구간의 보상 신호가 학습 초기부터 흐른다. 논문의 어블레이션에서 RSI를 빼면 백플립은 아예 학습되지 않는다.

조기 종료 (ET)

반대 방향의 문제도 있다. 캐릭터가 넘어져 바닥에 누웠다고 하자. 시뮬레이션은 계속 돌고, 에이전트는 누운 채로 매 스텝 약간의 보상을 계속 받는다. 지수 함수는 아무리 틀려도 0에 점근할 뿐 음수가 되지 않으니까. 이런 스텝이 에피소드의 대부분을 채우면, 데이터셋은 "바닥에 누운 상태"로 오염되고 정책은 안전하게 넘어지는 법을 정교하게 배운다.

ET는 몸통이나 머리처럼 닿으면 안 되는 부위가 지면에 접촉하는 순간 에피소드를 끝내고 이후 보상을 0으로 만든다. 실패 상태의 가치가 명시적으로 0이 되므로, 넘어지는 것이 실제로 최악이 된다. 동시에 쓸모없는 롤아웃에 쓰이는 계산이 절약된다. 이것도 빼면 여러 동작이 무너진다.

남는 것

DeepMimic이 우아한 이유는, 어려운 문제를 정면으로 풀지 않았기 때문이다. "물리적으로 그럴듯한 백플립을 만드는 보상 함수"를 설계하는 대신, 백플립 클립을 가져와 차이를 재는 것으로 대체했다. 그리고 남은 진짜 병목이 탐색이었음을 정확히 짚어, RSI로 어려운 구간의 보상을 앞당겨 노출하고 ET로 나쁜 지역 최적해를 잘라냈다. 정교한 알고리즘 발명이 아니라, 학습 문제를 잘 세팅한 것이 결과를 만들었다.

한계도 분명하다. 클립 하나당 정책 하나를 학습해야 하고(논문 후반에서 멀티클립·스킬 선택으로 확장하긴 한다), 위상 변수 가 클립과 시뮬레이션을 시간축으로 강하게 묶어 두므로 캐릭터가 예상 밖의 외란을 만나면 스스로 타이밍을 재조정하기 어렵다. 그럼에도 "모션 캡처 + 모방 보상 + 물리 시뮬레이션"이라는 조합은 이후 물리 기반 캐릭터 애니메이션의 사실상 표준 레시피가 되었다.

출처

광고

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

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

리깅 도구 보기