inblog logo
|
kjyong

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

    바세린용자 (yongja)'s avatar
    바세린용자 (yongja)
    May 11, 2026
    CombatVLA: An Efficient Vision-Language-Action Model for Combat Tasks in 3D Action Role-Playing Game
    Contents
    Action TrackerAction-of-Thought (AoT)3단계 Progressive LearningAdaptive Action-Weighted LossAction Execution FrameworkCUBench실험 결과한계
    • task
      • Black Myth: Wukong 같은 3D 액션 RPG에서 실시간 전투 수행하기
      • https://combatvla.github.io/
    • 기존 연구의 한계
      • 사람은 화면을 보고 판단하는데, 게임 내부 변수를 직접 읽는 방식
      • 강화 학습의 한계
        • 게임마다 보스마다 보상 함수를 새로 짜야 하는 방식 (예를 들어 체력 깎으면 +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
    Contents
    Action TrackerAction-of-Thought (AoT)3단계 Progressive LearningAdaptive Action-Weighted LossAction Execution FrameworkCUBench실험 결과한계

    kjyong

    RSS·Powered by Inblog