
Speaking the Navigator's Language: Trajectory-Grounded Instruction Translation for Frozen Aerial VLN Agents라는 연구가 arXiv 식별자 2610.10635로 공개됐습니다. 이 연구는 짧고 의도 중심적인 사람의 지시를 얼린 공중 내비게이션 에이전트가 실행할 수 있는 말로 바꿔주는 Trajectory-Grounded Instruction Translator, 줄여서 TGIT를 제안합니다. 원문 논문 링크는 이 글의 제목 아래에 걸려 있습니다.
왜 이 논문을 끝까지 읽게 됐을까
안녕하세요, 패트릭입니다.
저는 이 논문을 처음 봤을 때 성공률 숫자보다 문제 설정에 눈이 갔습니다. 공중 시야 언어 내비게이션, 즉 Aerial VLN 에이전트는 대개 아주 자세하고 궤적에 맞춰 정렬된 명령으로 학습하는데요. 실제 사용자는 그렇게 말하지 않죠. 사용자는 그냥 건물 뒤로 돌아가서 빨간 지붕 집을 찾아줘 같은 식으로 짧게 말합니다. 학습할 때 본 말과 배치될 때 듣는 말이 다른 셈인데요. 그렇다면 이 간극을 메우는 일은 누구의 몫일까요.
제가 이 논문에서 가장 흥미롭게 본 부분은 답을 내비게이터를 고치는 쪽에서 찾지 않았다는 점입니다. 이미 잘 학습된 OpenFly 내비게이터는 그대로 얼려두고, 그 앞에 통역사 하나를 두는 선택을 했습니다. 언어를 바꾸는 쪽을 고친 것이죠. 생각해보면 사람 조직도 비슷하게 움직입니다. 현장 베테랑에게 말투를 바꾸라고 요구하기보다, 중간에서 말을 잘 풀어주는 코디네이터를 붙이는 편이 훨씬 빠를 때가 있죠. 그래서 이 논문은 구조보다 운영의 감각에 가깝게 읽혔습니다.

드론은 설명서를 읽고 사람은 쪽지를 건넨다
학습 데이터에 들어 있는 공중 내비게이션 명령을 상상해보시면 바로 감이 옵니다. 30미터 전진한 뒤 고도를 10미터로 낮추고, 흰색 창고를 오른쪽에 두고 좌회전하라는 식이죠. 궤적의 매 순간과 문장이 맞물려 있습니다. 그런데 아침에 급한 사용자가 드론을 띄우면서 저렇게 말하는 경우는 거의 없죠. 사용자는 편의점 뒤쪽으로 가봐 같은 한마디를 던지고, 나머지는 드론이 알아서 해주길 바랍니다.
이 차이가 숫자에서는 아주 차갑게 드러납니다. 얼린 OpenFly 내비게이터에 원래의 상세 명령을 주면 성공률이 31.03퍼센트였는데요. 같은 내비게이터에 짧은 의도 중심 명령을 주면 성공률이 11.33퍼센트까지 떨어집니다. 거의 3분의 1 토막이죠. 저는 이 숫자보다 그 뒤의 구조가 더 중요하다고 봅니다. 모델이 멍청해진 게 아니라, 모델이 배운 언어와 사용자가 쓰는 언어가 달라진 것이니까요.
그렇다면 왜 이런 간극이 생겼을까요. 이유는 학습 과정에 있습니다. 궤적에 정렬된 상세 명령은 감독 신호가 아주 풍부합니다. 어느 시점에 어디를 보고 어디로 틀어야 하는지가 문장 안에 녹아 있죠. 반면 사람의 짧은 말에는 의도는 있지만 궤적 정보가 없습니다. 목적지는 알겠는데 경로가 비어 있는 상태죠. 내비게이터 입장에서는 지도 없이 목적지만 받은 셈이라 길을 잃기 쉽습니다. 이 간극을 instruction gap이라고 부르는데요. 이름 그대로 가르친 말과 쓰는 말이 어긋난 상태입니다.
얼린 내비게이터 앞에 통역사를 세우는 발상
여기서 연구팀이 고른 해법이 재미있는데, 그 이유는 내비게이터를 다시 학습시키지 않기로 했기 때문입니다. 대신 가중치는 그대로 얼려두고, 입력 문장만 바꿔주는 TGIT라는 프런트엔드를 앞에 두죠. 그래서 사용자가 짧게 말하면, TGIT가 그 말을 내비게이터가 원래 잘 알아듣던 스타일의 상세 명령으로 풀어줍니다.
비유를 들면 동시통역 부스에 가까운데요. 연사는 편하게 자기 말로 이야기하는 동안, 청중은 익숙한 언어로 듣고, 그 사이에서 통역사가 문장을 늘리고 맥락을 채우죠. 그런데 통역이 서툴면 원래 말이 좋아도 전달이 안 되지만, 통역이 정확하면 연사도 청중도 각자 자기 방식을 유지한 채로 대화가 됩니다. 바로 그 자리에서 TGIT도 같은 역할을 하는데, 사용자는 짧게 말하는 습관을 유지하는 대신 내비게이터는 상세 명령에 최적화된 습관을 그대로 유지합니다.
저는 이 선택에서 운영의 감각을 느꼈습니다. 저희가 새로운 AI 아키텍처를 볼 때도 benchmark 숫자만 보지는 않고, 실제로 무엇이 바뀌었고 그 변화가 시스템에서 어떤 비용 구조를 만드는지를 함께 보는데요. 그런 눈으로 보면 얼린다는 결정은 비용 측면에서 의미가 큽니다. 대형 내비게이터를 매번 다시 학습시키는 일은 시간도 돈도 많이 들 뿐 아니라, 자칫 기존에 잘되던 상세 명령 성능까지 해칠 수 있기 때문입니다. 반면 앞에 가벼운 번역기를 두면 기존 성능을 지키면서 새로운 입력 분포만 따로 다룰 수 있고, 실패했을 때도 범인을 찾기 쉽죠. 번역이 잘못됐는지, 아니면 주행 자체가 잘못됐는지 층위가 나뉘니까요. 그렇다면 새로운 도시의 말투가 들어올 때마다 무엇부터 고치면 될까요. 통역사부터 손보면 되는 구조라는 점이 이 설계의 진짜 매력입니다.

이 방법은 파인튜닝도 아니고 예쁜 말 바꾸기도 아니다
TGIT를 처음 들으면 흔히 두 가지로 오해할 수 있습니다. 내비게이터를 살짝 파인튜닝하는 것과 같은 것 아니냐는 오해가 먼저 생기죠. 그리고 단순히 문장을 길게 늘려주는 paraphrase 아니냐는 의문도 따라옵니다. 그런데 두 추측 모두 빗나갑니다.
파인튜닝과의 차이는 분명합니다. 파인튜닝은 내비게이터 내부를 직접 만집니다. 그 과정에서 원래 잘 처리하던 상세 명령에 대한 성능이 흔들릴 수 있고, 학습 인프라와 데이터도 다시 필요하죠. TGIT는 내비게이터를 전혀 건드리지 않습니다. 입력 문장만 바꿔서 먹입니다. 내비게이터는 자기가 여전히 상세 명령을 받고 있다고 믿는 셈이죠. 그래서 기존 체크포인트를 그대로 제품에 두고, 번역기만 따로 버전업할 수 있습니다. 운영 관점에서 보면 이 분리는 상당히 큽니다. 밤사이 내비게이션 모델을 통째로 교체하지 않아도, 번역기만 고쳐서 다음 날 아침 비행에 반영할 수 있으니까요.
단순한 말 바꾸기와의 차이도 중요합니다. 문장 유사도만 높이는 번역기는 사람이 보기에는 매끈한 문장을 만듭니다. 그런데 내비게이터가 실제로 그 문장을 받고 길을 잘 찾는지는 별개 문제죠. 사람이 읽기 좋은 문장과 드론이 실행하기 좋은 문장은 다르니까요. TGIT는 텍스트가 예쁜지를 기준으로 배우지 않습니다. 번역된 문장을 받은 내비게이터가 실제 궤적에서 어떤 결과를 내는지를 기준으로 배웁니다. 실행 가능성이 곧 정답에 가까운 셈이죠.
약한 명령을 일부러 만들어내는 이유
그렇다면 번역기를 학습시킬 데이터는 어디서 올까요. 현실의 짧은 사용자 명령을 대규모로 모으기는 어렵습니다. 그래서 연구팀은 역발상을 씁니다. 원래의 상세 명령을 일부러 짧은 의도 중심 명령으로 되돌리는 것이죠. 이렇게 만든 짧은 명령을 Weak 명령이라고 부릅니다.
과정은 언어 모델을 이용한 스타일 변환에 가깝습니다. 사람이 직접 쓴 짧은 말의 예시를 몇 개 보여주고, 상세 명령을 같은 스타일의 짧은 명령으로 바꿔달라고 요청합니다. 예를 들어 사거리에서 우회전한 뒤 50미터 직진해서 파란 간판 건물 앞에 착륙하라는 문장이, 파란 간판 건물로 가줘 정도로 줄어듭니다. 정보가 일부러 소실되는 것이죠. 이렇게 짝지어진 상세 명령과 Weak 명령 쌍이 번역기 학습의 재료가 됩니다.
여기서 재미있는 질문이 생깁니다. 일부러 정보를 지운 Weak 명령을 내비게이터에게 주면 어떻게 될까요. 당연히 성능은 더 떨어집니다. 보고된 숫자는 15.27퍼센트인데요. 원래 상세 명령의 31.03퍼센트보다 훨씬 낮고, 실제 사람 명령의 11.33퍼센트보다는 조금 높은 수준입니다. 저는 이 중간값이 오히려 반갑게 느껴졌습니다. 인위적으로 만든 짧은 말이 실제 사람의 짧은 말과 비슷한 난이도 구간에 들어왔다는 신호니까요. 이 정도면 Weak 명령을 번역기 학습용으로 쓸 만하다는 판단이 섭니다. 실제 사용자 데이터를 대량으로 모으기 전에, 공장에서 찍어낸 연습 문제로 먼저 훈련하는 셈이죠.

궤적의 결과로 배우면 문장이 달라진다
이제 TGIT 학습의 진짜 맛을 볼 차례입니다. 일반 번역기라면 Weak 명령과 상세 명령 사이의 텍스트 유사도를 맞추는 데 집중할 겁니다. 단어가 얼마나 겹치는지, 문장이 얼마나 자연스러운지 같은 기준이죠. 그런데 TGIT는 한 걸음 더 나아갑니다. 번역된 문장을 얼린 내비게이터에게 실제로 먹여보고, 그 결과 궤적이 성공했는지를 함께 봅니다.
왜 이런 우회가 필요할까요. 내비게이터는 사람처럼 문장을 이해하지 않기 때문입니다. 내비게이터에게는 특정 표현이 특정 행동을 끌어내는 방아쇠처럼 작동합니다. 우회전한 뒤 고도를 낮추라는 말이 사람에게는 당연해 보여도, 내비게이터에게는 오른쪽에 흰색 창고를 두고라는 랜드마크 표현이 있어야 방아쇠가 당겨질 수 있죠. 텍스트 유사도만 보면 두 문장이 비슷해 보여도, 방아쇠가 빠지면 비행은 실패합니다. 그래서 번역의 정답은 사전에 있는 게 아니라 궤적 끝에 있습니다. 도착했으면 좋은 번역이고, 헤맸으면 나쁜 번역이죠.
저는 여기서 조금 멈칫했습니다. 궤적 결과를 기준으로 언어를 배운다는 발상이 언뜻 돌아가는 길처럼 보이니까요. 그런데 실제 시스템 관점에서 보면 다음 질문이 바로 생깁니다. 번역 품질은 누가 판정할 수 있을까요. 사람이 매번 읽고 점수를 주기에는 비행 시뮬레이션이 훨씬 싸고 빠릅니다. 시뮬레이터 안에서 드론을 날려보고 성공 여부를 바로 알 수 있죠. 이 자동 채점기가 있으니 번역기는 밤새 수천 번의 시행착오를 겪으며 내비게이터의 입맛을 익힐 수 있습니다. 일종의 오답 노트를 궤적 단위로 쓰는 셈인데요. 어떤 표현이 길을 잃게 만들고, 어떤 표현이 착륙까지 이끄는지를 몸으로 배우는 것이죠.
숫자가 말해주는 추락과 회복의 기록
자, 이제 숫자를 한 줄로 이어서 보겠습니다. 같은 얼린 OpenFly 내비게이터를 기준으로, 원래 상세 명령은 31.03퍼센트에서 시작합니다. 짧은 Weak 명령으로 바꾸면 15.27퍼센트까지 떨어지죠. 실제 사람이 쓴 명령은 여기서 더 떨어져 11.33퍼센트가 됩니다. instruction gap이 얼마나 매서운지 보여주는 내리막입니다.
그런데 Weak 명령으로 학습한 TGIT를 앞에 두면 이야기가 반전됩니다. Weak 입력에 대한 성공률이 37.93퍼센트까지 올라갑니다. 원래 상세 명령의 31.03퍼센트를 넘어선 수치인데요. 짧은 말을 번역해서 먹였는데, 처음부터 상세하게 말했을 때보다 더 잘 도착한다는 뜻입니다. 처음에는 저도 이 대목을 다시 읽었습니다. 번역이 원본을 이긴다는 게 직관에 잘 안 맞으니까요. 그런데 곰곰이 생각하면 이유가 보입니다. TGIT가 만드는 상세 명령은 평균적인 상세 명령보다 내비게이터 입맛에 더 잘 맞게 조정된 말일 수 있죠. 사람이 쓴 상세 설명보다, 내비게이터가 좋아하는 방아쇠 표현을 더 정확히 짚는 겁니다.
이 차이는 생각보다 중요합니다. 번역기가 단순히 잃어버린 정보를 복원하는 수준을 넘어, 내비게이터가 가장 잘 소화하는 형태로 정보를 재포장하고 있다는 뜻이니까요. 같은 목적지라도 어떤 랜드마크를 먼저 말하고, 어느 동작을 어느 순서로 풀어쓰는지가 성공을 가릅니다. TGIT는 궤적 성공을 통해 그 순서를 체득한 셈이죠. 그래서 번역이라는 이름보다 조정이라는 표현이 더 어울릴지도 모르겠습니다.

처음 보는 사람의 말을 알아듣는다는 것
여기서 그다음 질문이 생깁니다. 공장에서 찍어낸 Weak 명령에는 잘 통하는 번역기가, 진짜 사람이 두서없이 쓴 말에도 통할까요. 학습 때 본 적 없는 말투, 줄임말, 생략이 난무하는 실제 입력 말이죠. 이 지점에서 논문이 준비한 시험이 제법 엄격합니다. 실제 사람 명령에 대해 번역기를 제로샷으로, 즉 추가 학습 없이 그대로 적용해보는 것이죠.
결과는 11.33퍼센트에서 32.51퍼센트로의 회복입니다. 거의 세 배에 가까운 반등인데요. 원래 상세 명령의 31.03퍼센트와 견줘도 손색이 없습니다. 저는 이 전이 결과를 Weak 명령 자체의 성공보다 더 눈여겨봤습니다. 합성 데이터로 배운 솜씨가 실제 데이터에서도 통했다는 뜻이니까요. 연습 문제집만 풀고 실전에 나갔는데 실전 점수가 오른 셈이죠.
왜 이런 전이가 가능했을까요. Weak 명령을 만드는 데 쓰인 사람 스타일 예시가 다리 역할을 했을 겁니다. 언어 모델이 상세 명령을 줄일 때 실제 사람의 말버릇을 흉내 냈고, 그 흉내 낸 분포 위에서 번역기가 단련됐죠. 완벽한 복제는 아니지만, 짧게 말할 때 사람들이 자주 저지르는 생략의 패턴은 담겼을 겁니다. 목적지만 말하고 경로를 생략한다거나, 랜드마크를 하나만 짚는다거나 하는 식이죠. 번역기는 그 빈칸을 메우는 연습을 이미 수천 번 한 상태라 처음 보는 사람의 말 앞에서도 크게 당황하지 않습니다.

다른 도시 다른 데이터에서도 통할까
좋은 연구는 자기 집 앞마당에서만 통하는 법을 내놓지 않죠. 그래서 저는 일반화 시험을 유심히 봤습니다. 연구팀은 학습에 쓰지 않은 OpenFly held-out 데이터에서 시험했고, 여기서 성공률이 4.95퍼센트에서 20.79퍼센트로 올랐습니다. 네 배가 넘는 회복인데요. 본 적 없는 지역과 궤적에서도 번역기가 길을 찾아줬다는 뜻입니다.
이어서 CityNav와 AirVLN이라는 다른 데이터셋에서도 회복이 보고됐습니다. 데이터셋이 바뀌면 카메라 시점, 도시 구조, 명령 문체까지 함께 바뀌는데요. 그럼에도 번역기가 도움이 됐다는 점은 시사하는 바가 큽니다. TGIT가 특정 도시의 지리를 외운 게 아니라, 내비게이터가 좋아하는 말의 결을 익혔다는 신호니까요. 어디를 가리키는지가 아니라 어떻게 말해야 움직이는지를 배운 것이죠.
물론 여기서는 조금 조심해서 읽을 필요가 있습니다. cross-dataset 회복이 있다고 해서 모든 도시와 모든 기체에서 똑같이 통한다고 단정할 수는 없습니다. 고도, 풍속, 장애물 밀도, 카메라 화각 같은 물리적 조건이 바뀌면 궤적 성공의 기준 자체가 달라지죠. 그럼에도 방향성은 분명합니다. 번역이라는 얇은 층이 내비게이터의 수명을 늘려줍니다. 새로운 도시가 생길 때마다 거대한 주행 모델을 다시 학습시키는 대신, 번역기만 그 도시의 말투에 맞춰 손보면 되니까요. 도시가 바뀔 때마다 통역사만 갈아 끼우는 셈이죠.

남는 질문과 앞으로 보고 싶은 장면
다 읽고 나면 자연스럽게 다음 장면이 궁금해집니다. 만약 번역기가 이렇게 말을 잘 풀어준다면, 그 다음 병목은 어디일까요. 제가 앞으로 보고 싶은 것은 세 가지입니다.
첫째는 실패의 책임 소재입니다. 번역이 잘못된 경우와 주행이 잘못된 경우를 자동으로 가르는 눈이 필요합니다. 지금은 최종 성공률이라는 하나의 숫자로 묶여 있는데요. 운영 현장에서는 둘을 구분해야 바로 고칠 수 있습니다. 번역은 멀쩡한데 드론이 바람에 밀렸다면 번역기를 고쳐봤자 소용없죠. 층별 진단 도구가 따라와야 이 구조가 제품으로 삽니다.
둘째는 실시간성입니다. 번역기는 비행 전에 한 번 일하고 마는 부품이 아닙니다. 사용자가 비행 중간에 오른쪽으로 조금 더 가봐 같은 말을 던지면 그때그때 다시 번역해야 하죠. 문장이 길어지면 토큰도 늘고 지연도 생기는데요. 공중에서는 1초의 머뭇거림이 그대로 표류로 이어집니다. 번역 품질과 지연 사이의 교환 관계를 측정한 표가 다음 연구에서는 꼭 나왔으면 합니다.
셋째는 사람 말의 진짜 분포입니다. Weak 명령은 영리한 연습 문제지만 어디까지나 연습 문제입니다. 실제 사용자는 오타를 내고, 말을 바꾸고, 애매한 지칭을 씁니다. 저기 그 건물 같은 말이죠. 이런 진짜 분포 앞에서는 번역기가 한 번 더 흔들릴 수 있습니다. 그래서 다음 단계는 실사용 로그를 번역기 학습 고리에 다시 넣는 일이라고 봅니다. 시뮬레이터에서 배운 입맛에 현장의 말맛을 덧입히는 것이죠.
그렇다면 사람의 역할은 무엇일까요. 저는 이 논문을 읽으며 통역의 미래를 생각했습니다. 사용자가 드론의 언어를 배울 필요가 없어진다는 점이 이 연구의 가장 인간적인 대목입니다. 사람은 계속 짧게 말하고, 기계가 그 짧음을 알아듣기 위해 노력하죠. 기술이 성숙해진다는 것은 결국 사람이 기계 말투를 외우지 않아도 되는 상태에 가까워진다는 뜻이니까요. 다음 비행에서는 저도 짧게 말해보고 싶습니다. 뒤에서 누군가 제 말을 내비게이터의 언어로 바꿔줄 것이라는 믿음을 갖고 말이죠.