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

CombatVLA: An Efficient Vision-Language-Action Model for Combat Tasks in 3D Action Role-Playing Game
  • 기존 연구의 한계
    • 사람은 화면을 보고 판단하는데, 게임 내부 변수를 직접 읽는 방식
    • 강화 학습의 한계
      • 게임마다 보스마다 보상 함수를 새로 짜야 하는 방식 (예를 들어 체력 깎으면 +10, 맞으면 -5 이렇게)
      • 한 게임 보스 깨려고 며칠~몆 주 학습
    • VLM 기반 방식(Cradle, VARP)은 GPT-4o에 의존해서 추론 지연이 60~90초까지 나옴
      • 실시간 전투엔 부적합
  • CombatVLA 성능
    • notion image
    • CUBench에서 GPT-4o, Qwen2.5-VL보다 점수 높음
    • Cradle, VARP 대비 50배 빠름
    • 인간 플레이어보다 성공률 높음
notion image

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

notion image
notion image
  • 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: 액션 정보 압축 벡터
      notion image
    • 예측-정답 일치(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)
    • 매칭 실패 시 정답 액션 직접 학습
    • notion image
  • 종합
    • notion image
    • α는 액션 우선순위 가중치. α_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가지 카테고리 (단계가 올라갈수록 추상화 수준 높음)
    • notion image
    • 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 성능
    • notion image
    • CombatVLA가 평균 63.61로 모든 모델보다 좋음
    • Reasoning에서 Claude3.5-Sonnet 대비 +14.28점
    • 일반 벤치마크(MME, VideoMME, OCRBench)에서도 백본인 Qwen2.5-VL-3B와 비슷한 수준
      • - AoT 학습이 일반 능력을 손상시키지 않음
    • 흥미로운 점: GPT-4o는 Comprehension 1등인데 Reasoning은 약함
      • - 상황은 잘 보지만 뭘 해야 할지 결정 못 한다고 볼 수 있음
  • 추론 지연시간
    • notion image
    • Cradle 61.68초, VARP 90.23초, CombatVLA 1.85초
    • VARP 대비 50배 가속, 호출 비용은 1/10
  • 실전 태스크 (13개)
    • notion image
    • BMW 10개 + SSDT 3개
    • Easy는 인간과 비슷, Hard/Very Hard는 인간보다 높음
    • Zero-shot 일반화도 됨
      • - Task 1~8은 같은 게임 다른 적
        - Task 11~13은 다른 게임(SSDT)
    • 학습은 task 9, 10 (very hard 2개)에서만 했다고 함
  • Ablation
    • notion image
    • 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