CombatVLA: An Efficient Vision-Language-Action Model for Combat Tasks in 3D Action Role-Playing Game
May 11, 2026

- task
- Black Myth: Wukong 같은 3D 액션 RPG에서 실시간 전투 수행하기
- https://combatvla.github.io/
- 기존 연구의 한계
- 사람은 화면을 보고 판단하는데, 게임 내부 변수를 직접 읽는 방식
- 강화 학습의 한계
- 게임마다 보스마다 보상 함수를 새로 짜야 하는 방식 (예를 들어 체력 깎으면 +10, 맞으면 -5 이렇게)
- 한 게임 보스 깨려고 며칠~몆 주 학습
- VLM 기반 방식(Cradle, VARP)은 GPT-4o에 의존해서 추론 지연이 60~90초까지 나옴
- 실시간 전투엔 부적합
- CombatVLA 성능
- CUBench에서 GPT-4o, Qwen2.5-VL보다 점수 높음
- Cradle, VARP 대비 50배 빠름
- 인간 플레이어보다 성공률 높음


Action Tracker
- 액션 라벨이 달린 게임 데이터셋이 거의 없어서 직접 만듦
- 키보드/마우스 입력과 화면 캡처를 별도 스레드로 수집
- 타임스탬프로 정렬, 액션은 가장 가까운 미래 프레임에 매핑
- 게임 백그라운드에서 동작
- 어노테이터 6명이 2주간 200시간 분량 녹화
- 정제 후 25k 스크린샷 + 5k AoT
- 학습 95%, 검증 5%
Action-of-Thought (AoT)
- LLM은 다음 토큰을 예측하는 방식이라 출력이 길수록 느림
- Chain-of-Thought처럼 액션과 그 이유를 같이 출력하게 학습시키면 추론 능력이 좋아짐
- 그냥 "press space"만 학습시키면 왜 누르는지 이해 못 한 채 패턴 매칭만 함
- 출력 형식:
[action] <TRUNC> [explanation] <EOS> - action: 키보드/마우스 입력 (JSON)
- explanation: 적의 상태나 액션의 이유
- <TRUNC>: 저자들이 새로 정의한 토큰. 추론 시 여기서 잘라내서 속도 가속
- TRUNC 토큰의 핵심 트릭
- 학습할 땐 explanation이 있어야 추론 능력이 잘 학습됨
- 추론할 땐 explanation까지 다 출력하면 너무 느림
- 두 요구사항이 충돌하니까 학습은 풀버전, 추론은 잘라먹기로 처리
- AoT 평균 토큰 수 116.57 → Truncated AoT 43.10
- action을 앞에 두는 순서가 중요. 뒤에 두면 잘라먹을 수 없음
- 예시
{
"type": "keyboard",
"key": "space",
"action": "press"
}
<TRUNC>
"적이 공격하려고 한다. 게임 캐릭터는 회피해서 데미지를 피해야 한다."
<EOS>3단계 Progressive Learning


- vision encoder는 동결, language model만 full SFT
- Stage 1: Video-AoT
[action] [explanation] <EOS>(설명까지 학습)- 거시적 전투 환경 이해, 학습 안정화
- 3 epochs
- Stage 2: Frames-AoT
- 입력: 액션 직전 4프레임
- 출력: 단일 액션
- 시각 단서와 액션의 정확한 인과관계 학습
- 1 epoch
- Stage 3: Frames-Truncated-AoT
- 입력: 액션 직전 4프레임 (Stage 2와 동일)
- 출력: 단일 액션 +
<TRUNC> - 3 epochs
Adaptive Action-Weighted Loss
- TRUNC 도입하니까 추론 시 explanation이 생성 안 됨
- 학습 때 형성되던 reasoning 효과가 추론에선 사라짐
- 이해 성능이 약간 손상됨
- 이를 보완하려고 modality contrastive loss와 alignment loss 추가
- Modality Contrastive Loss (L_con)
- explanation 없이도 시각만 보고 액션이 떠오르도록 임베딩 공간을 직접 정렬
- 두 임베딩 사용
- 입력 vision 부분 끝의
<EOS>hidden state: 시각 정보 압축 벡터 - 출력 끝의 출력 끝의
<EOS>hidden state: 액션 정보 압축 벡터 - 예측-정답 일치(M=1)면 두 임베딩 cosine similarity 높이기 (pull)
- 불일치(M=0)면 멀어지게 (push)

- 매칭 판단 기준
- 게임에서 한 순간 행동은 보통 여러 키 조합임
- 예: 체력 낮음 → {r, s, d} 동시 수행
- 액션마다 우선순위 다름 ("틀리면 얼마나 치명적인가" 기준)
- P = [r, 1, space, left, d, s, a, w, shift, right]
r(회복) 빼먹으면 → 캐릭터 사망d/s/a/w(이동) 틀려도 → 게임 진행에 큰 지장 없음- 단순 set 일치도로 평가하면 안 됨
- 정답 {r, s, d} vs 예측 {s, d, a} → 67% 일치로 보이지만, r 빼먹어서 실제론 사망
- 정답에서 가장 우선순위 높은 액션 c 하나만 뽑고, 그게 예측에 있는지로 binary 판단
- Alignment Loss (L_align)
- 매칭 실패 시 정답 액션 직접 학습

- 종합
- α는 액션 우선순위 가중치. α_i = 2^(k-i-1)을 [0.1, 1.0]으로 정규화
- r → 0.1000, right → 0.0100
- 희귀하지만 중요한 액션에 큰 가중치

Action Execution Framework
- VLM이 사람의 뇌, framework가 눈과 손 역할
- 입력: 실시간 게임 영상 (60FPS 이상)
- 처리 흐름
- 8 FPS로 녹화한 마지막 9프레임에서 3프레임 균등 샘플링
- 1008x560으로 리사이즈해서 CombatVLA에 입력
- 추론하는 동안 게임 일시정지 (추론 약 1.85초)
- 모델 출력에서 감지하면 즉시 멈추고 이전 토큰을 액션으로 변환
- pyautogui로 키보드/마우스 자동 실행
- 게임 재개
⇒ 진짜 실시간 플레이는 아님.
- 한 번 추론에 모델 호출 1번
- Cradle은 5번 (information gathering, self-reflection, task inference, skill curation, action planning)
- VARP는 10번
CUBench
- 전투 이해도 평가용 벤치마크. 914개 QA
- 능력별로 3가지 카테고리 (단계가 올라갈수록 추상화 수준 높음)
- Gathering (39.4%, 360개): 단일 이미지 + Yes/No
- 적 체력, 자기 체력, 비정상 상태 같은 단순 시각 정보 인식
- Comprehension (22.3%, 204개): 다중 이미지 + Yes/No
- 적의 공격 의도, stun 상태 같은 시간적 패턴 이해
- Reasoning (38.3%, 350개): 다중 이미지 + 3지선다 (회복/회피/공격)
- 종합 의사결정 능력

- 데이터 수집 과정
- Action Tracker로 200시간 게임 플레이 녹화 (어노테이터 6명, 2주)
- GPT-4o-0513이 정해진 프롬프트 템플릿으로 QA 자동 생성
- 어노테이터 10명이 수동 검수 + 교차 확인
- 품질 통과한 914개만 남김
- AoT 학습 데이터와는 분리해서 공정성 보장
실험 결과
- CUBench 성능
- CombatVLA가 평균 63.61로 모든 모델보다 좋음
- Reasoning에서 Claude3.5-Sonnet 대비 +14.28점
- 일반 벤치마크(MME, VideoMME, OCRBench)에서도 백본인 Qwen2.5-VL-3B와 비슷한 수준
- 흥미로운 점: GPT-4o는 Comprehension 1등인데 Reasoning은 약함

- AoT 학습이 일반 능력을 손상시키지 않음
- 상황은 잘 보지만 뭘 해야 할지 결정 못 한다고 볼 수 있음
- 추론 지연시간
- Cradle 61.68초, VARP 90.23초, CombatVLA 1.85초
- VARP 대비 50배 가속, 호출 비용은 1/10

- 실전 태스크 (13개)
- BMW 10개 + SSDT 3개
- Easy는 인간과 비슷, Hard/Very Hard는 인간보다 높음
- Zero-shot 일반화도 됨
- 학습은 task 9, 10 (very hard 2개)에서만 했다고 함

- Task 1~8은 같은 게임 다른 적
- Task 11~13은 다른 게임(SSDT)
- Ablation
- Stage 1만: 평균 57.27
- Stage 2까지: 61.43 (+4.16)
- Stage 3까지: 63.61, 추론 시간 3.73초 → 1.85초로 절반
- L_con 빼면 Reasoning 6.57점 폭락
- L_align 빼면 6.00점 폭락
- 두 손실이 TRUNC 도입으로 인한 손실 보완에 핵심

한계
- 태스크 정의가 단순함. VLA 분야가 발전 초기라 그런듯
- 테스트 게임이 BMW, SSDT 두 개뿐
- VLM/VLA 자체의 성능 향상 여지 있음
Share article