hello, robot

이번 인사이트의 재료는 두 편이에요. 난양공대 MARS Lab의 MARS Policy와 칭화대 IIIS(MARS Lab)의 SLAMFormer-∞예요. 하나는 모방학습 정책이고 하나는 단안 SLAM이라 층이 다른데, 나란히 놓으니 같은 동작이 보였어요. 둘 다 설계 시점에 하나의 값으로 박아 둔 전역 상수를 찾아내고, 그 상수를 실행 시점에 관측이 정하는 조건으로 바꿔요.

상수가 무엇이었는지는 서로 달라요. 정책 쪽은 행동을 만들기 시작하는 노이즈의 분산이었고, SLAM 쪽은 모든 예측이 기준으로 삼는 좌표 앵커였어요.

전 구간에 같은 분산을 걸면 양쪽 다 손해예요

분기점에서만 노이즈를 켜는 플로 매칭 정책 MARS의 출발점은 관찰이에요. 디퓨전·플로 매칭 정책이 여러 갈래의 시연을 다 담아내는 표현력은 모델 구조가 아니라 시작점이 확률적이라는 데서 와요. 다른 노이즈 샘플이 다른 적분 궤적을 타고 다른 행동에 도착하니까요. 그런데 그 노이즈의 분산은 모든 시점, 모든 행동 차원에 같은 값으로 걸려 있어요. 과제 대부분의 구간이 사실상 한 갈래인데도 전 구간이 같은 확률성의 비용을 내는 구조예요.

비용은 양쪽에서 나와요. 학습에서는 초기 분산을 키울수록 수렴이 느려지고 성공률이 떨어지는 게 분산 스윕으로 확인되고, 추론에서는 고품질 행동을 얻는 데 통상 9스텝 이상의 반복 적분이 필요해요. 반대편의 결정론적 정책은 빠르지만, 장애물 왼쪽과 오른쪽이 다 정답일 때 회귀 손실이 둘을 평균 내 장애물 한가운데로 보내요. 지금까지는 정책 단위로 한쪽을 골라야 했어요.

2D 내비게이션에서 전문가·생성 정책·결정론 정책·MARS의 궤적 비교
같은 내비게이션 과제를 네 방식이 푼 결과예요. 생성 정책은 두 갈래를 다 담지만 전 구간에서 디노이징 비용을 물고, 결정론 정책은 갈래를 평균 내 장애물로 향해요. MARS의 색은 구간별 멀티모달리티 정도인데, 분기점 근처에서만 밝아져요 (출처: Jia et al., MARS Policy 프로젝트 페이지)

MARS는 그 분산을 관측의 함수로 바꿔요. 관측을 받은 네트워크가 행동 차원별 가중치를 예측하고, 그 가중치가 출발점을 결정론적 이력과 가우시안 노이즈 사이에서 차원 단위로 섞어요. 추론 스텝 수도 같은 가중치에 비례시켜서, 한 갈래인 국면은 한 스텝으로 끝내고 분기 국면만 전체 스텝 예산을 써요. 노이즈의 양과 계산량이 하나의 신호에서 함께 배급되는 구조예요. 실기에서 성공률이 16.67% 오르면서 추론 지연이 83.20% 줄었는데, 절대값으로 추론 한 번에 약 5ms라 결정론 정책의 약 3ms에 근접하고 플로 매칭의 약 28ms보다 여섯 배쯤 빨라요. 표현력과 속도가 한 값에 묶여 있다가, 상수가 조건이 되는 순간 따로 풀린 거예요.

그 배분을 오래 지키는 힘도 상수 쪽보다 나아요. 시연 200개·400 에폭이 기본인 과제에서 시연을 50개로 줄이거나 800 에폭으로 과학습시켜도 두 파지 모드의 배분이 0.8 수준으로 유지되는데, 같은 조건의 플로 매칭 기준선은 모드가 무너져요. 필요한 곳에만 노이즈를 남기는 쪽이 노이즈를 전역에 걸어 둔 쪽보다 그 노이즈의 효과를 오래 지켜요.

첫 프레임에 좌표를 묶으면 거리가 한계가 돼요

첫 프레임 앵커를 버리고 17km를 재구성한 SLAMFormer-∞가 겨눈 상수는 좌표 기준이에요. DUSt3R에서 VGGT로 이어진 기하 파운데이션 모델은 여러 이미지에서 카메라 포즈와 밀집 기하를 한 번에 회귀하는데, 그 좌표계가 첫 프레임에 묶여 있어요. 첫 프레임이 앵커라는 건 모든 뷰가 유한한 어텐션 컨텍스트 안에서 그 앵커와 연결돼야 한다는 뜻이라, 시퀀스가 길어지면 정확도가 떨어지는 게 아니라 정식화 자체가 깨져요. 실제로 KITTI 전체 시퀀스를 통째로 넣으면 기존 모델들이 단일 RTX 4090에서 메모리 초과로 기록돼요.

우회로도 상수를 그대로 둔 채였어요. 시퀀스를 청크로 잘라 각각 재구성하고 포즈만 전역 정렬하는 쪽은 궤적은 맞아도 국소 기하가 다듬어지지 않은 채 이어 붙고, 전역 좌표를 통째로 학습하는 쪽은 장거리 성능이 학습 궤적 분포에 묶여요. SLAMFormer-∞는 앵커를 모델 밖으로 빼요. 이웃 키프레임의 이미지와 포즈를 메모리 조건으로 함께 입력해서, 그 조건이 현재 예측의 기준 좌표계와 스케일을 정의하게 해요. 기준이 첫 프레임이라는 상수에서 지금 이웃이라는 조건으로 바뀌니, 모델은 늘 유계인 국소 컨텍스트만 보면서도 예측이 전역 좌표로 이어 붙어요.

KITTI 시퀀스에서 SLAMFormer-∞가 온라인으로 지도를 쌓고 백엔드 갱신을 반복하는 시각화
KITTI 시퀀스의 온라인 재구성이에요. 지도가 쌓이는 동안 백엔드 최적화가 주기적으로 돌며 포즈와 포인트맵을 함께 갱신해요 (출처: Fang et al., SLAMFormer-∞ 프로젝트 페이지)

풀린 것은 여기서도 결합이에요. 컨텍스트 길이와 지도 크기가 앵커 하나에 묶여 있다가, 앵커가 조건이 되면서 국소 계산은 싸게 유지되고 전역 일관성은 포즈-기하 그래프 최적화가 따로 책임져요. 자체 수집한 17km·45분 도시 주행에서 일관된 지도를 유지하고, KITTI 전체 시퀀스 평균 궤적 오차가 26.358m에서 23.011m로, 재구성 정확도는 1.182에서 0.949로 좋아져요. 포즈만 정렬하는 백엔드로는 움직이지 않던 재구성 항목이 함께 최적화하니 움직였다는 게 요점이에요.

상수를 빼면 비용은 조건을 만드는 부품으로 옮겨가요

두 편을 겹치면 구조가 세 겹으로 같아요. 첫째, 문제는 상수의 값이 아니라 상수가 만드는 결합이었어요. 분산 상수는 표현력과 속도를 한 값에 묶었고, 앵커 상수는 컨텍스트와 거리를 묶었어요. 값을 잘 고르는 걸로는 결합이 안 풀리고, 상수를 조건으로 바꿔야 두 축이 따로 최적화돼요. 둘째, 조건화는 모델을 늘리지 않았어요. MARS는 가중치 신호 하나가 노이즈량과 스텝 수를 함께 배급하고, SLAMFormer-∞는 같은 가중치의 트랜스포머 하나가 조건 패턴만 바꿔 프론트엔드 추적과 국소 정제, 전역 최적화를 다 맡아요. 추론 지연을 정면에 둔 계보로 보면 정확도 대신 응답 지연을 택한 로봇 두뇌 Gemini Robotics-ER 2가 모델 선택으로 줄인 지연을 MARS는 같은 모델 안의 배급으로 줄인 셈이에요.

셋째가 이번 주에 가장 크게 남은 부분인데, 비용이 사라진 게 아니라 자리를 옮겼어요. MARS는 노이즈를 어디에 남길지 정하려고 데이터셋 전체에 이웃 구조를 세워 시연의 퍼짐을 미리 계산하는데, 그 구축 비용이 데이터셋 크기와 이웃 수에 비례해 무거워진다고 저자들이 한계 절에 적었어요. SLAMFormer-∞는 좌표를 조건으로 넘긴 대신 그 조건의 뼈대인 그래프 연결성을 프론트엔드와 루프 검출에서 받아 오는데, 그 품질은 데이터에서 배우지 않아요. 실내처럼 짧은 분포 안 시퀀스에서는 끝까지 학습으로 푸는 모델이 여전히 앞서는 것도 같은 대가예요(TUM에서 0.039 대 0.066). 떼어낸 상수는 공짜로 사라지지 않고, 그 상수를 대신 정해 주는 부품이 새로운 검증 대상이 돼요.

제가 이번 주에 걷어낸 상수

같은 판단을 저는 학습 없는 자리에서 만났어요. 이번 주에 로봇팔로 뎁스 카메라 픽앤플레이스를 완주시키면서, 고장의 절반이 제가 설계 시점에 박아 둔 상수에서 나왔거든요.

가장 닮은 건 관절 보간 시간이에요. 구간마다 3초 고정으로 잡아 뒀더니 짧은 구간은 굼뜨고 긴 구간은 속도 제한에 눌려, 계획된 프로파일과 실제 속도가 구간마다 어긋나며 삐걱거렸어요. 보간 시간을 최대 관절 이동량에 비례하는 값(0.8초에서 5초 사이)으로 바꾸니 구간 연결이 일정한 흐름이 됐어요. 상수 하나가 이동량이라는 상황 변수의 함수가 된 것뿐인데, 궤적의 질이 갈렸어요. 완료 대기도 같았어요. 고정 6초 대기는 그리퍼 닫기가 끝나기 전에 팔을 들어올렸고, 시간 상수 대신 정착을 실측으로 확인하는 폴링으로 바꿔야 했어요.

반대 방향의 교훈도 있었어요. 서보 소손을 막겠다고 과부하 보호를 최대 토크의 60%를 0.5초 넘게 내면 진입하도록 박아 뒀는데, 중력을 이기며 천천히 도는 정상 이동이 정확히 그 조건을 밟아서 서보 여섯 개가 일제히 침묵하는 급사가 네 번 났어요. 공장값(80%·2초)으로 되돌리고서야 같은 이동이 문제없이 돌았어요. 임계라는 상수를 지울 수는 없지만, 그 값은 설계 시점의 직감이 아니라 정상 동작의 실측 분포를 먼저 재고 그 밖에 걸어야 한다는 게 남았어요.

다른 프로젝트에서도 같은 판단을 한 번 더 반복했어요. 해커톤에서 폰 뒷면의 관성 센서로 숏폼 스와이프를 잡을 때, 단발 충격 임계로는 손에 든 폰의 미세 동작이 분당 10개씩 오탐돼 임계값 하나로는 갈림길이 없었어요. 임계 자체를 이동 평균에 6σ를 더한 적응형으로 두고, 판정을 단발이 아니라 15초 창의 반복 리듬(간격 변동계수 0.9 미만)으로 올리니 쇼츠의 1.3~1.9초 간격만 남고 오탐이 사라졌어요. 상수를 조건으로 바꾸는 방법이 꼭 학습 네트워크일 필요는 없다는 걸 실기로 확인한 주였어요.

다음 한 주에 적용할 것

가져갈 형태를 하나로 좁히면 이거예요. 코드에 박힌 고정값을 볼 때마다 이 값이 묶고 있는 두 축이 무엇인지, 그리고 이 값이 정상 동작의 실측 분포 밖에 있는지를 물어요. 고정 대기 시간과 보호 임계, 판정 창 길이가 당장의 대상이에요. 그리고 상수를 조건으로 바꿀 때는 두 논문이 비용을 옮겨 받은 부품을 검증했듯, 조건을 만드는 쪽에 대조군을 먼저 붙여요. 조건 생성기가 틀리면 상수보다 진단이 어려워요. 상수는 언제나 같은 방식으로 틀리지만 조건은 상황마다 다르게 틀리니까요.

여기부터는 제 판단이에요. 설계 시점은 그 시스템에 대한 정보가 가장 적은 시점인데, 전역 상수는 대부분 그때 박혀요. 현업 로봇 스택의 튜닝 파라미터 상당수가 이 부류라서, 이번 두 편처럼 상수를 실행 시점 조건으로 옮기는 설계는 정책과 SLAM 밖에서도 계속 나올 것 같아요. 다만 두 편이 정직하게 적어 둔 대가도 같이 옮겨야 해요. 조건을 계산하는 부품의 비용과 그 부품이 틀렸을 때의 거동까지 설계에 들어와야, 상수를 뺀 자리가 새로운 고장 모드가 되지 않아요.


출처 — MARS Policy · SLAMFormer-∞ · 각 arXiv 비독점 배포 라이선스 · 그림·영상은 재료 글이 검증한 자산을 본문 논평 맥락에서 재사용했으며 저작권은 원저자에게 있어요.