[Physical AI 강의] Part 5. VLA(Vision Language Action Models)

본 정리는 포항공과대학교 Physical AI 수업을 듣고 정리한 리뷰입니다. 틀린 내용이 있으면 댓글로 편안하게 말씀 부탁드립니다.
Part5에서는 VLA(Vision Language Action Models)에 대해서 정리해보고자 합니다. 자세한 수식보다는 사람들이 직관적으로 이해할 수 있고 VLA가 이 흐름대로 발전했구나 정도의 Overview 느낌으로 정리해봤습니다.

0. 로봇 제어가 왜 어려운가

사람은 "컵을 집어"라는 말을 들으면 자동으로 한다. 하지만 로봇 입장에서 이건 여러 단계의 어려운 문제다.

  • 인식: 카메라 픽셀 더미에서 "어느 게 컵인지" 알아야 한다.
  • 언어 이해: "집어"가 무슨 동작인지, "컵"이 어느 물체를 가리키는지 알아야 한다.
  • 제어: 팔의 각 관절을 몇 도씩 움직여야 손끝이 컵에 닿는지 계산해야 한다.

전통적으로 이 셋을 따로 만들었다. 비전 모듈, 언어 파서, 제어기를 각각 손으로 설계하고 이어 붙였다. 문제는 새 물체나 새 상황이 나오면 매번 다시 손봐야 한다는 점이다. VLA는 이 셋을 하나의 신경망으로 합쳐서, 데이터로부터 "본 것 + 들은 것 → 움직임"을 통째로 학습한다.


1. VLA란 무엇인가

입력 두 가지가 기본이다.

  • 시각 관측(visual observation): 카메라 이미지
  • 언어 지시(language instruction): "사과를 그릇에 담아"

여기에 깊이 센서, 로봇 관절 상태(proprioception) 같은 추가 센서가 더 들어갈 수 있다.

출력은 로봇 행동, 즉 제어 명령(control command)이다. 예를 들어 "팔을 x로 0.1m, y로 -0.2m 움직이고 그리퍼를 닫아라" 같은 것.

가장 단순한 구조는 이렇다. Vision Encoder가 이미지를 벡터로, Language Encoder가 언어를 벡터로 바꾸고, 이 둘을 Action Decoder가 받아서 행동을 만든다.

Embodied AI 안에서 VLA의 위치

로봇 지능(Embodied AI)은 보통 계층 구조로 본다.

  • Task Planner: 큰 지시를 받아 작은 단위로 쪼갠다. 입력은 사용자 지시("방 치워"), 출력은 subtask들("베개를 집어라", "접시를 싱크대에 놓아라").
  • Control Policy: subtask 하나를 받아 실제 움직임을 만든다. 입력은 state(현재 상황), 출력은 action.

VLA는 이 Control Policy 자리를 차지한다. 세분하면:

  • Generalized VLA: state와 instruction을 둘 다 받아 action을 낸다.
  • Large VLA: 거대한 VLM을 가져와 action을 예측하도록 적응시킨 것.

한 줄로 요약하면 VLA = "현재 장면 + 언어 명령 → 로봇 행동"을 하나의 모델로 처리하는 정책.


2. 핵심 배경: VLM이 뭐고 왜 VLA의 출발점인가

이 부분은 PPT에 명시돼 있지 않지만, 뒤의 RT-2·OpenVLA·π₀를 이해하려면 반드시 필요하다.

VLM(Vision-Language Model)은 이미지와 텍스트를 같이 이해하는 모델이다. GPT가 텍스트만 다룬다면, VLM은 사진을 보고 "이건 거리를 걷는 회색 당나귀다"라고 설명할 수 있다. VLM은 인터넷에서 긁어모은 수십억 장의 (이미지, 설명문) 쌍으로 학습돼서, "사과", "독일 국기", "왼쪽", "빨간 컵" 같은 방대한 개념을 이미 안다.

여기서 VLA의 핵심 전략이 나온다.

로봇 데이터는 비싸고 적다. 연구실에서 로봇 팔을 직접 굴려 모은 데이터로는 세상의 모든 물체를 배울 수 없다. 반면 VLM은 인터넷 덕분에 이미 세상을 안다. 그러니 VLM을 가져와서, 그 위에 "행동을 출력하는 능력"만 붙이자.

이렇게 하면 로봇이 학습 중에 한 번도 본 적 없는 물체("Taylor Swift 사진", "Denver Nuggets 로고")가 나와도, VLM이 가진 인터넷 지식으로 그게 뭔지 알아채고 대응할 수 있다. 이 아이디어를 정면으로 구현한 게 뒤에 나올 RT-2다.


3. VLA 발전 타임라인 (큰 그림)

PPT의 타임라인은 대표 모델을 시간순으로 놓고, 각 모델이 처음 도입한 기술을 가로축에 붙였다.

CNN ────────── CLIPort
Transformer ── Gato, VIMA
실세계 스케일 /
VLM 백본 ───── RT-1, RT-2, RT-Series, RT-X, OpenVLA
Diffusion ──── Octo, RDT-1B
DiT, Flow매칭─ π₀
Latent action─ LAPA
Hierarchical ─ GR00T N1, π₀.₅

이 흐름의 핵심 축은 "행동을 어떻게 표현하고 생성하느냐"의 변화다.

  1. 처음엔 CNN으로 이미지에서 "어디를 집을지" 위치를 찍었다 (CLIPort).
  2. 다음엔 Transformer로 행동을 토큰 시퀀스로 다뤘다 (VIMA, RT-1).
  3. 그다음엔 인터넷 지식을 가진 VLM을 백본으로 썼다 (RT-2, OpenVLA).
  4. 최근엔 행동을 확률 분포에서 생성하는 방식(diffusion, flow matching)으로 갔다 (Octo, π₀).
  5.  "큰 지시 → 작은 지시 → 행동"으로 나누는 계층 구조로 발전했다 (GR00T N1, π₀.₅).

중간에 던지는 "Are they all perfect…?"라는 질문은 이 모델들의 예측이 흐릿하거나 틀릴 수 있다는 한계를 가리킨다. 이 한계가 나중에 World Model이라는 다른 접근으로 이어진다.


4. VLA 이전: predicates (논리 기호 방식)

VLA가 나오기 전엔 로봇 행동을 사람이 논리 규칙으로 직접 정의했다. 이걸 predicate(술어) 기반 plan이라고 한다.

pick-top, place-top 같은 action이 있고, 각각 세 부분으로 정의된다.

  • parameters: 어떤 물체에 적용되는가 
  • precondition: 이 행동을 하려면 무엇이 참이어야 하는가
  • effect: 행동 후 무엇이 바뀌는가

이 방식은 깔끔하지만 치명적 단점이 있다. 모든 규칙을 사람이 손으로 짜야 한다. 물체가 추가되거나 상황이 조금만 달라져도 새 규칙을 작성해야 하고, 현실의 복잡함(물체가 미끄럽다, 각도가 애매하다)을 다 기호로 적기는 불가능하다.

VLA의 출발점이 여기다. 규칙을 손으로 짜는 대신, 데이터에서 "관측 → 행동"을 직접 학습하자는 것.


5. CLIPort: What and Where 두 경로

CLIPort는 책상 위 물체를 집어 옮기는(pick-and-place) 작업을 한다. "align the rope from back right corner to back left corner", "pack the hexagon in the brown box" 같은 언어 지시를 받아 어디를 집고 어디에 놓을지를 정한다.

핵심 아이디어: 인식을 두 갈래로 나눈다

제목의 "What and Where"는 인간 뇌의 두 시각 경로에서 따온 것이다. 뇌는 "무엇인가(what, 측두엽 ventral 경로)"와 "어디인가(where, 두정엽 dorsal 경로)"를 다른 회로로 처리한다. CLIPort도 똑같이 나눴다.

  • Semantic(Ventral) 경로 — "무엇"
    • RGB 이미지를 입력받음
    • 얼어 있는(frozen) CLIP ResNet50을 통과
    • "파란 블록", "노란 상자" 같은 의미를 담당
    • frozen이란? 학습 중에 가중치를 업데이트하지 않고 그대로 쓴다는 뜻. CLIP이 이미 잘 배운 의미 지식을 망치지 않으려고 고정한다.
  • Spatial(Dorsal) 경로 — "어디"
    • RGB-D(색 + 깊이) 입력받음
    • 학습되지 않은(untrained) Transporter ResNet을 처음부터 학습
    • 픽셀 단위 정밀한 위치를 담당

두 경로를 합치는 법

언어 지시는 frozen CLIP Sentence Encoder를 통과해 1024차원 벡터가 된다. 이 언어 벡터로 두 경로를 융합한다. 두 경로 출력을 곱하고 합쳐서 **affordance map(H×W×1)**을 만든다.

affordance map이란? 이미지와 같은 크기의 히트맵인데, 각 픽셀 값이 "여기를 집어야/놓아야 하는 정도"를 나타낸다. 빨갛게 달아오른 곳이 정답 위치다.

  • Pick: affordance map에 softmax를 걸어 가장 높은 점을 집을 위치로 고른다.
  • Place: cross-correlation으로 놓을 위치를 정한다.

왜 굳이 나눴나

하나의 네트워크로 "무엇이고 동시에 어디인가"를 배우기는 어렵다. 의미 이해는 CLIP의 인터넷 지식을 그대로(frozen) 쓰는 게 유리하고, 공간 정밀도는 깊이 정보를 쓰는 별도 경로로 확보하는 게 유리하다. 역할을 분리해서 각자 잘하는 걸 맡긴 것이다.


6. CLIP 자체 깊이 이해하기

CLIPort가 의존하는 CLIP을 제대로 알아야 한다. CLIP은 VLA 전반에서 계속 등장하는 기반 기술이다.

CLIP이 푸는 문제

기존 이미지 분류기는 "개/고양이/자동차" 같은 고정된 라벨 목록 안에서만 분류할 수 있었다. 새 카테고리를 추가하려면 라벨 단 데이터를 새로 모아 다시 학습해야 했다. CLIP은 이걸 깬다. 이미지와 자유로운 텍스트를 같은 의미 공간에 매핑해서, 학습 때 본 적 없는 개념도 텍스트로 적기만 하면 인식한다.

학습 방법: 대조 학습 (Contrastive Learning)

대조 학습의 핵심은 "맞는 짝은 가깝게, 틀린 짝은 멀게"다.

(1) Contrastive pre-training

  • 배치에 N개의 (이미지, 캡션) 쌍을 넣는다.
  • Image Encoder가 이미지들을 I₁...Iₙ 벡터로, Text Encoder가 캡션들을 T₁...Tₙ 벡터로 바꾼다.
  • N×N 유사도 행렬을 만든다. 칸 (i,j)는 이미지 i와 캡션 j의 유사도(내적).
  • 학습 목표: 대각선(I₁·T₁, I₂·T₂, ...)은 올바른 짝이니 유사도를 높이고, 나머지 칸(틀린 짝)은 낮춘다.
  • 예: "Pepper the aussie pup"라는 캡션 벡터와 그 강아지 사진 벡터가 가까워지도록.

이 과정을 수십억 쌍에 대해 반복하면, 비슷한 의미의 이미지와 텍스트가 벡터 공간에서 서로 가까운 위치를 갖게 된다.

 

(2) 분류기 만들기 (zero-shot용)

  • 분류하고 싶은 라벨들(plane, car, dog, ...)을 "A photo of a {object}." 템플릿에 넣어 문장으로 만든다.
  • 이 문장들을 Text Encoder로 벡터화한다. → 이게 "분류 기준 벡터"가 된다.

(3) Zero-shot 예측

  • 새 이미지를 Image Encoder로 벡터화한다.
  • (2)에서 만든 텍스트 벡터들과 각각 유사도를 잰다.
  • 가장 가까운 텍스트가 예측 라벨. (예: "A photo of a dog."가 제일 가까우면 → 개)
  • 핵심: 학습 때 정확히 그 라벨을 본 적 없어도, 텍스트만 바꾸면 새 카테고리를 분류할 수 있다.

왜 VLA에 중요한가

CLIP은 이미지와 언어를 같은 벡터 공간에 놓는다. 그래서 "파란 블록"이라는 텍스트 벡터와 파란 블록 이미지 영역의 벡터가 가깝다. 로봇이 "파란 블록을 집어"라는 명령에서 화면 속 파란 블록을 찾아낼 수 있는 근거가 바로 이 정렬된 공간이다.


 

7. RT-1: 실세계 제어를 스케일로 풀기

RT-1(Robotic Transformer 1)은 "대량의 실제 로봇 데이터 + 트랜스포머"로 범용 제어를 시도한 모델이다. 입력은 instruction("Pick rice chips from top drawer and place on counter")과 카메라 이미지 여러 장, 출력은 action. 실시간 제어를 위해 3Hz(초당 3번)로 행동을 낸다.

처리 흐름: 이미지 → FiLM EfficientNet → TokenLearner → Transformer → 행동(Mode/Arm/Base)

FiLM: 언어로 비전 feature 조절하기

문제: 이미지에서 특징을 뽑는 비전 네트워크가 있는데, 같은 이미지라도 "rice chips를 집어"일 때와 "drawer를 닫아"일 때 주목해야 할 부분이 다르다. 언어가 비전 처리에 개입해야 한다.

FiLM(Feature-wise Linear Modulation)의 해법: 언어로부터 두 개의 숫자 γ(곱할 값), β(더할 값)를 만들어, 비전 feature에 affine 변환을 건다.

언어 입력 xᵢ로부터:

γ_{i,c} = f_c(xᵢ)      (곱셈 계수)
β_{i,c} = h_c(xᵢ)      (덧셈 계수)

비전 feature F에 적용:

FiLM(F | γ, β) = γ · F + β

직관: γ를 곱하면 특정 채널(feature)을 키우거나 줄일 수 있고, β를 더하면 활성화 수준을 이동시킬 수 있다. "rice chips"라는 단어가 칩에 반응하는 feature 채널의 γ를 크게 만들어, 비전 네트워크가 칩 영역에 더 반응하게 유도한다. f, h는 신경망 같은 임의 함수로 두면 된다.

EfficientNet은 효율 좋은 CNN 백본이고, 여기에 FiLM을 끼워서 언어 조건부 비전 처리를 한다.

Action tokenization: 연속 행동을 분류 문제로

로봇 행동은 연속값(팔을 0.137m 움직여)이라 직접 예측하기 까다롭다. RT-1은 각 행동 차원을 256개 bin으로 이산화한다.

행동 차원은 총 11개:

  • 팔 7개: x, y, z, roll, pitch, yaw, 그리퍼 개폐
  • 베이스 3개: x, y, yaw
  • 모드 1개: 팔 제어 / 베이스 제어 / 에피소드 종료 중 선택

각 차원의 값 범위를 256개 균등 구간으로 나누고, 실제 값을 그중 하나의 bin 번호로 바꾼다. 이렇게 하면 "연속값 회귀"가 "256지선다 분류"가 되어 트랜스포머가 다루기 쉬워진다.

TokenLearner: 토큰 줄여서 속도 올리기

트랜스포머는 토큰이 많을수록 느리다(attention 비용이 토큰 수의 제곱). RT-1은 사전학습된 FiLM-EfficientNet에서 나온 81개 visual token을 8개로 압축한다. 중요한 토큰 조합만 골라(soft-select) 다음 트랜스포머로 넘긴다. 81개를 다 처리하는 것보다 8개만 처리하면 훨씬 빨라져서 3Hz 실시간 제어가 가능해진다.


8. RT-2: 인터넷 지식을 행동으로 옮기다

RT-2의 한 문장 요약: RT-1과 같은 이산화 행동을 쓰되, 그걸 문자열(string)로 표현한다. 그러면 VLM을 그대로 로봇 데이터로 학습시킬 수 있다.

왜 문자열로 바꾸나 (가장 중요한 포인트)

VLM은 원래 텍스트를 입력받고 텍스트를 출력하는 모델이다. 만약 행동을 숫자 배열이 아니라 텍스트 토큰으로 표현하면, VLM 입장에서 "행동 예측"은 그냥 "또 다른 문장 생성"이 된다. 모델 구조를 전혀 바꿀 필요가 없다. 입력 공간도 출력 공간도 그대로. 덕분에 거대한 VLM의 인터넷 지식을 고스란히 가져와 로봇에 쓸 수 있다.

행동 문자열의 구성:

Terminate or continue | ΔPos X | ΔPos Y | ΔPos Z | ΔRot X | ΔRot Y | ΔRot Z | Gripper
  • 앞 3개: 위치 변화(positional change)
  • 다음 3개: 회전 변화(rotational change)
  • 예: ΔTranslation = [0.1, -0.2, 0], ΔRotation = [10°, 25°, -7°]

Co-Fine-Tune: 인터넷 데이터와 로봇 데이터를 섞어 학습

핵심 기법은 두 종류 데이터를 동시에 학습하는 것이다.

  • 인터넷 VQA 데이터: "Q: What is happening in the image? A: A grey donkey walks down the street."
  • 로봇 데이터: "Q: What should the robot do to <task>? A: ΔTranslation=..., ΔRotation=..."

둘을 섞어 학습하면, 로봇 행동을 배우면서도 VLM이 원래 갖고 있던 인터넷 지식이 사라지지 않는다(이걸 안 하면 로봇 데이터에 과적합되어 일반 지식을 잊어버린다 — catastrophic forgetting).

결과: 본 적 없는 것도 해낸다

"move banana to Germany", "move coke can to Taylor Swift", "pick land animal" 같은 명령을 수행한다. 로봇 학습 데이터엔 독일 국기도 Taylor Swift도 없다. 그런데도 VLM이 인터넷에서 배운 지식으로 "어느 게 독일 국기인지", "어느 사진이 Taylor Swift인지"를 알아채고 그쪽으로 물체를 옮긴다. 인터넷 지식이 물리적 행동으로 전이된 것이다.


9. Open X-Embodiment / RT-X: 데이터를 모으자

문제의식

각 연구실이 자기 로봇으로만 데이터를 모으면, 데이터가 작고 로봇마다 형식이 달라 서로 못 쓴다. 한 로봇용으로 학습한 모델이 다른 로봇에선 안 돌아간다.

해결: 공동 데이터셋

Open X-Embodiment는 전 세계 여러 기관 데이터를 한데 모았다.

  • 1M 에피소드
  • 311 scenes, 34개 연구실, 21개 기관
  • 22 embodiments (로봇 종류)
  • 527 skills (pour, stack, route 등)
  • 60 datasets
  • 1,798 attributes · 5,228 objects · 23,486 spatial relations

embodiment란? 로봇의 "몸체 종류". 팔이 하나인 로봇, 양팔 로봇, 바퀴 달린 로봇 등 물리적 형태가 다른 것들. 각 embodiment마다 행동 공간(움직일 수 있는 자유도)이 다르다.

모델: RT-1-X, RT-2-X

같은 통합 데이터로 두 모델을 만든다.

  • RT-1-X: FiLM EfficientNet + Transformer. 이미지·instruction → Discrete Action.
  • RT-2-X: ViT + LLM + De-Tokenizer. 이미지·instruction → Discrete Action.
    • ViT(Vision Transformer): 이미지를 패치로 쪼개 트랜스포머로 처리하는 비전 모델.
    • De-Tokenizer: 출력된 행동 토큰을 실제 연속 행동값으로 되돌리는 부분.

출력 행동 형식은 로봇마다 다르다. 예: 어떤 로봇은 10Hz에서 Closed Gripper / Velocity / Z-Rot. Velocity, 다른 로봇은 3Hz에서 Gripper / Position Delta / Rotation Delta, 또 다른 로봇은 5Hz에서 Gripper / Position Delta / No Rotation. 한 모델이 이렇게 다른 행동 공간을 모두 다룬다.

핵심 결과

"Move apple near cloth", "Move apple on cloth", "Move apple between can and orange" 처럼 near/on/between이라는 미묘한 공간 관계 차이를 구분해 수행한다. 여러 로봇 데이터를 합쳐 학습하면, 단일 로봇 데이터만 쓸 때보다 이런 일반화 성능이 올라간다(데이터 다양성의 효과).


10. OpenVLA: 오픈소스 VLA

OpenVLA는 사전학습된 Prismatic-7B VLM을 fine-tuning해 만든 공개 모델이다. 세 부분으로 구성된다.

  1. Fused visual encoder: SigLIP과 DinoV2 두 백본을 합쳐 쓴다.
    • 왜 둘을 합치나? SigLIP은 언어와 정렬된 의미 정보(이게 사과다)에 강하고, DinoV2는 공간·기하 정보(이 물체의 경계와 위치)에 강하다. 둘을 합치면 "무엇이고 어디인지"를 모두 잘 잡는다. (CLIPort가 두 경로를 나눈 것과 비슷한 발상이 인코더 레벨에 들어간 셈.)
    • 이미지를 여러 개의 image patch embedding으로 바꾼다.
  2. Projector: visual encoder 출력을 LLM이 알아듣는 입력 공간으로 변환(차원 맞추기).
  3. Llama 2 7B 언어 백본: 토큰화된 행동을 예측. 이 토큰을 디코딩하면 로봇에서 바로 실행 가능한 연속 행동이 된다.

행동 이산화와 토크나이저 문제 (디테일한 실전 이슈)

RT-1 방식대로 각 행동 차원을 256개 bin으로 이산화한다. bin 너비는 학습 데이터 행동의 1번째~99번째 분위수(quantile) 사이를 균등 분할해 정한다.

왜 양 끝 1%를 자르나? 가끔 튀는 극단값(outlier)이 있으면, 그 값까지 포함하려고 bin 범위가 너무 넓어진다. 그러면 정상적인 행동 대부분이 가운데 몇 개 bin에 몰려 구분이 안 된다. 양 끝 1%를 버리면 대부분의 행동이 256개 bin에 골고루 퍼진다.

문제가 하나 있다. Llama 토크나이저는 fine-tuning 때 새로 넣을 수 있는 "special token"을 100개만 예약해뒀다. 그런데 행동 토큰은 256개가 필요하다. 부족하다.

해결책: Llama 어휘에서 가장 적게 쓰이는 256개 토큰(어휘 맨 끝 256개)을 행동 토큰으로 덮어쓴다. 거의 안 쓰이는 토큰이니 덮어써도 언어 능력에 거의 지장이 없다. 간단하지만 효과적인 트릭..


11. Diffusion Policy와 DDPM

π₀를 이해하려면 diffusion이 뭔지 알아야 한다. 이미지 생성 AI(Stable Diffusion 등)에서 쓰는 그 기술이다.

Diffusion의 직관

핵심 아이디어: "노이즈를 조금씩 걷어내면서 데이터를 만든다."

종이에 또렷한 그림이 있다고 하자. 여기에 노이즈를 조금씩 뿌리면 결국 완전한 잡음이 된다(forward). 그럼 반대로, 잡음에서 시작해 노이즈를 조금씩 걷어내면 그림이 복원될 것이다(reverse). 신경망에게 "이 단계에서 어떤 노이즈가 섞였는지" 맞추도록 학습시키면, 잡음에서 시작해 새 데이터를 생성할 수 있다.

로봇에 적용하면: "행동"을 생성 대상으로 본다. 잡음 행동에서 시작해 노이즈를 걷어내며 진짜 행동을 만든다.

왜 행동 생성에 diffusion을 쓰나

로봇 행동에는 여러 정답이 있을 수 있다(컵을 왼쪽으로 돌아 잡든 오른쪽으로 돌아 잡든 다 정답). 단순 회귀(regression)는 이 여러 정답의 평균을 내버려서 어정쩡한 행동(둘 사이 어딘가, 실제론 실패)을 낸다. diffusion은 분포 자체를 학습해서 여러 정답 중 하나를 제대로 뽑아낼 수 있다.

Diffusion Policy의 세 가지 정책 표현 비교

  • (a) Explicit Policy: F_θ(o)로 행동을 직접 출력. Scalar regression, Mixture of Gaussians, Categorical 같은 표현.
  • (b) Implicit Policy: 에너지 함수 E_θ(o, a)를 정의하고, 에너지가 최소인 a를 argmin으로 탐색.
  • (c) Diffusion Policy: 에너지의 gradient ∇E(a)를 따라 a를 K번 갱신해 행동 생성.

입력은 Image Observation Sequence(O_t, ...)와 Robot Pose. ε_θ(O, A, k)가 Action Sequence A_t를 예측한다. 노이즈 가득한 A_t^K에서 시작해 점점 정제해 A_t^0(깨끗한 행동)에 도달. 구현은 CNN 기반(FiLM conditioning)과 Transformer 기반(Cross Attention) 두 가지.

여러 행동을 한 시퀀스(chunk)로 한 번에 예측하는 이유: 한 스텝씩 예측하면 오차가 누적되고 행동이 떨리기 쉽다. 묶어서 예측하면 더 매끄럽고 일관된 동작이 나온다.

DDPM 수식 (Denoising Diffusion Probabilistic Models)

Forward process — 데이터를 점진적으로 노이즈로:

q(x_t | x_{t-1}) = N(x_t; √(1−β_t)·x_{t-1}, β_t·I)

한 단계마다 β_t만큼 노이즈를 섞는다. Reparameterization trick으로 임의 시점 t의 노이즈 데이터를 한 번에 계산:

x_t = √(ᾱ_t)·x_0 + √(1−ᾱ_t)·ε

(x_0: 원본, ε: 표준 정규 노이즈, ᾱ_t: 누적 계수)

Backward process — 노이즈에서 데이터 복원:

p_θ(x_{t-1} | x_t) = N(x_{t-1}; μ_θ(x_t, t), Σ_θ(x_t, t))

실제로 모델은 평균 μ_θ를 직접 예측하지 않고, 현재 데이터에 섞인 노이즈 ε를 추정한다. (노이즈를 알면 원본을 역산할 수 있으니까.)

Loss:

L_simple = E[ ‖ ε − ε_θ(x_t, t) ‖² ]

"진짜 섞인 노이즈 ε"와 "모델이 추정한 노이즈 ε_θ"의 차이를 줄인다.


12. π₀: 첫 범용 정책 (Flow Matching 도입)

π₀(pi-zero)는 사전학습 VLM(SigLIP 400M + Gemma 2.6B) 위에 action expert를 붙인 구조다. π dataset과 인터넷 사전학습 데이터(OXE 포함)를 함께 쓴다.

처리: 이미지들이 ViT를 통과하고 "fold shirt" 같은 언어와 함께 VLM에 들어간다. action expert는 로봇 상태 q_t와 noise를 받아 action chunk a_t, a_{t+1}, ..., a_{t+H}를 낸다. 14 DoF 양팔, 18 DoF 모바일, 7/8 DoF 단일팔 등 서로 다른 매니퓰레이터를 한 모델이 제어한다.

DoF(Degree of Freedom): 자유도. 독립적으로 움직일 수 있는 축의 수. 14 DoF 양팔이면 양팔 합쳐 14개 축을 제어한다는 뜻.

action chunk의 각 행동 a_{t'}마다 대응 action token이 있고, 이걸 conditional flow matching loss로 supervise한다:

L^τ(θ) = E ‖ v_θ(A_t^τ, o_t) − u(A_t^τ | A_t) ‖²

배경: Flow Matching (DDPM의 개선판)

DDPM의 한계: 노이즈를 매 스텝 확률적으로 걷어내기 때문에, 노이즈→데이터로 가는 경로가 구불구불하고 비효율적이다. 깨끗한 결과를 얻으려면 수십~수백 스텝이 필요해 느리다.

Flow matching의 아이디어: 노이즈에서 목표로 가는 "속도(velocity)"를 직접 학습한다. 구불구불 돌아가지 말고, 직선으로 쭉 가자.

설정:

  • t = 0: 순수 Gaussian noise, x_0 ~ N(0, I)
  • t = 1: 목표 데이터(action chunk), x_1
  • 최적 경로(직선): x_t = (1−t)·x_0 + t·x_1

이 직선을 시간으로 미분하면 목표 속도가 나온다:

u_t(x | x_1) = d/dt x_t = x_1 − x_0

즉 목표 속도는 "노이즈에서 데이터를 향하는 방향"으로 일정하다.

Loss — 모델 속도 v_θ가 목표 속도(x_1 − x_0)를 맞추게:

L_FM = E[ ‖ v_θ(x_t, t) − (x_1 − x_0) ‖² ]

Inference — 랜덤 노이즈에서 시작해 속도를 따라 적분:

x_{t+Δt} = x_t + v_θ(x_t, t)·Δt

DDPM이 곡선 경로를 여러 번 밟는 것과 달리, flow matching은 직선 속도장을 따라가므로 적은 스텝으로 빠르게 행동을 생성한다. 실시간 로봇 제어에 유리하다.


13. GR00T N1: 휴머노이드용 파운데이션 모델 (System 1/2 구조)

GR00T N1은 휴머노이드 로봇용 foundation model이다. 인간 인지의 "빠른 직관(System 1) vs 느린 사고(System 2)" 이중 과정 이론에서 이름을 따왔다.

  • System 2 (Vision-Language Model) — 느리지만 똑똑
    • Image Observation을 인코딩한 Image Token + Language Instruction을 토큰화한 Text Token을 받는다.
    • 장면과 명령의 의미를 이해하는 부분.
  • System 1 (Diffusion Transformer) — 빠른 반사
    • VLM 출력 + Robot State(관절 위치/속도, 베이스 위치, EEF 포즈 등) + Noised Action을 받아 denoising으로 Motor Action을 낸다.
    • 빠른 저수준 제어 부분.

세부 구조:

  • Vision Encoder + Text Tokenizer → Eagle-2 VLM(사전학습 + frozen).
  • Robot State → State Encoder, Noised Action → Action Encoder.
  • 이 토큰들이 DiT Block(Cross-Attention + Self-Attention을 N번 반복)을 통과.
  • Action Decoder가 a_t, ..., a_{t+H-1} 출력. denoising은 K번 반복.

DiT(Diffusion Transformer): U-Net 대신 트랜스포머로 diffusion을 구현한 구조. 확장성이 좋아 대형 모델에 적합.

색 구분: State Encoder, Action Encoder, Action Decoder는 embodiment-specific module(로봇 종류마다 교체), Eagle-2 VLM은 frozen(공유). 로봇이 바뀌면 embodiment 모듈만 갈아끼우고 비싼 VLM은 그대로 재사용한다.

14. VLA 프로젝트를 하면서 느낀것 그리고 발전 방향

지금까지 VLA 모델들의 발전 과정들을 간략하게 공부해봤다. 사실 VLA 모델로 학습을 해보고 Task를 수행해 본 결과 Unseen Task를 어떻게 해결할 것인가? 그리고 Covariate Shift와 Compounding Error 문제를 어떻게 해결 할 것인가라고 생각한다. 

이러한 문제를 해결하기 위해

π₀.₅: Open-World 일반화,RECAP (π₀.₆)와 같은 VLA 모델들이 발전해서 나오고 있다. 해당 부분은 중요하다고 생각하니 추후에 따로 글을 만들고자 한다.

 

출처: 포항공과대학교 Physical AI 강의