월드 모델과 비디오 확산(World Models & Video Diffusion)

장면의 다음 몇 초를 예측하는 비디오 모델(video model)은 곧 월드 시뮬레이터(world simulator)입니다. 이 예측을 행동(action)으로 조건화(condition)하면 학습된 게임 엔진(learned game engine)이 됩니다.

유형: Learn + Build 언어: Python 선수 지식: Phase 4 Lesson 10(Diffusion), Phase 4 Lesson 12(Video Understanding), Phase 4 Lesson 23(DiT + Rectified Flow) 예상 시간: 약 75분

학습 목표

  • 순수 비디오 생성 모델(pure video generation model; Sora 2)과 행동 조건부 월드 모델(action-conditioned world model; Genie 3, DreamerV3)의 차이를 설명합니다.
  • 비디오 DiT(video DiT)를 설명합니다. 시공간 패치(spatio-temporal patch), 3D 위치 인코딩(3D position encoding), (T, H, W) 토큰(token) 전체에 걸친 결합 어텐션(joint attention)을 포함합니다.
  • 월드 모델이 로보틱스(robotics)에 어떻게 연결되는지 추적합니다. VLM이 계획하고(plans) → 비디오 모델이 시뮬레이션하며(simulates) → 역동역학 모델(inverse dynamics)이 행동을 내보내는(emits actions) 흐름입니다.
  • 사용 사례(use case)에 따라 Sora 2, Genie 3, Runway GWM-1 Worlds, Wan-Video, HunyuanVideo 중에서 골라냅니다. 창의 영상(creative video), 인터랙티브 시뮬레이션(interactive sim), 자율주행 영상 합성(autonomous-driving synthesis) 등이 후보 시나리오입니다.

문제

비디오 생성(video generation)과 월드 모델링(world modelling)은 2026년에 수렴했습니다. 일관된 1분짜리 영상을 생성할 수 있는 모델은 어떤 의미에서 세계가 움직이는 방식, 즉 물체 영속성(object permanence), 중력(gravity), 인과성(causality), 스타일(style)을 학습한 것입니다. 이 예측을 행동(walk left, open the door)으로 조건화하면, 비디오 모델은 게임 엔진과 주행 시뮬레이터, 로보틱스 환경을 대체할 수 있는 학습형 시뮬레이터(learnable simulator)가 됩니다.

이미 구체적인 변화가 진행 중입니다. Genie 3는 단일 이미지에서 플레이 가능한 환경(playable environment)을 생성합니다. Runway GWM-1 Worlds는 무한히 탐색 가능한 장면을 합성합니다. Sora 2는 동기화된 오디오(synchronised audio)와 모델링된 물리(modelled physics)를 갖춘 1분 길이 영상을 만듭니다. NVIDIA Cosmos-Drive, Wayve Gaia-2, Tesla DrivingWorld는 자율주행 차량(autonomous-vehicle) 학습 데이터를 위해 사실적인 주행 영상을 생성합니다. 월드 모델 패러다임은 로보틱스의 시뮬레이션-실세계 전이(sim-to-real)도 조용히 장악하고 있습니다.

이 레슨은 Phase 4의 "큰 그림" 레슨입니다. 이미지 생성, 비디오 이해(video understanding), 에이전트적 추론(agentic reasoning)을 주도적 연구가 향하는 아키텍처 패턴으로 연결합니다.

사전 테스트

2문제 · 이 강의를 시작하기 전에 얼마나 알고 있는지 확인해보세요

1.행동 조건부 월드 모델(action-conditioned world model; Genie 3)과 순수 비디오 생성 모델(pure video generation model; Sora 2)을 구분하는 아키텍처 차이는 무엇인가요?

2.비디오 트랜스포머(video transformer)에서 분할 어텐션(divided attention)은 무엇을 뜻하나요?

0/2 답변 완료

개념

월드 모델링의 세 가지 계열

flowchart LR
    subgraph GEN["Pure video generation"]
        G1["Text / image prompt"] --> G2["Video DiT"] --> G3["Video frames"]
    end
    subgraph ACTION["Action-conditioned world model"]
        A1["Past frames + action"] --> A2["Latent-action video DiT"] --> A3["Next frames"]
        A3 --> A1
    end
    subgraph RL["World models for RL (DreamerV3)"]
        R1["State + action"] --> R2["Latent transition model"] --> R3["Next latent + reward"]
        R3 --> R1
    end

    style GEN fill:#dbeafe,stroke:#2563eb
    style ACTION fill:#fef3c7,stroke:#d97706
    style RL fill:#dcfce7,stroke:#16a34a
  • Sora 2는 프롬프트(prompt)로만 조건화하는 순수 비디오 생성입니다. 행동 인터페이스(action interface)가 없습니다. 롤아웃(rollout) 도중에 방향을 바꿀(steer) 수 없습니다.
  • Genie 3, GWM-1 Worlds, Mirage / Magica는 행동 조건부 월드 모델입니다. 관측된 영상에서 잠재 행동(latent action)을 추론하고, 미래 프레임 예측을 행동으로 조건화합니다. 인터랙티브(interactive)합니다. 사용자가 키를 누르거나 카메라를 움직이면 장면이 반응합니다.
  • DreamerV3와 고전적인 강화학습(RL) 월드 모델 계열은 명시적 행동 조건과 보상 신호(reward signal)를 사용해 잠재 공간(latent space)에서 예측합니다. 시각적인 결과물은 덜하지만, 표본 효율적인(sample-efficient) RL에 유용합니다.

비디오 DiT 아키텍처

Video latent:          (C, T, H, W)
Patchify (spatial):    grid of P_h x P_w patches per frame
Patchify (temporal):   group P_t frames into a temporal patch
Resulting tokens:      (T / P_t) * (H / P_h) * (W / P_w) tokens

위치 인코딩(position encoding)은 3D입니다. (t, h, w) 좌표마다 회전형(rotary) 또는 학습된 임베딩(learned embedding)을 둡니다. 어텐션(attention)은 다음 중 하나입니다.

  • Full joint(전체 결합): 모든 토큰이 모든 토큰을 주목(attend)합니다. 토큰 수 N에 대해 O(N^2)입니다. 긴 영상에는 너무 비쌉니다.
  • Divided(분할): 같은 공간 위치에서 시간 축으로 수행하는 시간 어텐션(temporal attention; (H*W) * T^2)과, 같은 시점에서 공간 축으로 수행하는 공간 어텐션(spatial attention; T * (H*W)^2)을 번갈아 수행합니다. TimeSformer와 대부분의 비디오 DiT가 사용합니다.
  • Window(윈도우): (t, h, w) 국소 윈도우(local window)를 사용합니다. Video Swin이 사용합니다.

2026년의 모든 비디오 확산 모델은 이 세 패턴 중 하나에 AdaLN 조건화(AdaLN conditioning; Lesson 23)와 정류 흐름(rectified flow)을 결합해 사용합니다.

행동 조건화: 잠재 행동 모델(latent action models)

Genie는 인접한 두 프레임 사이의 행동을 판별적으로(discriminatively) 예측해서 프레임마다 잠재 행동을 학습합니다. 디코더(decoder)는 명시적인 키보드 키가 아니라 추론된 잠재 행동에 조건화됩니다. 추론(inference) 단계에서는 사용자가 잠재 행동을 지정하거나, 새로운 사전 분포(prior)에서 표본을 뽑고, 모델은 그 행동과 일관된 다음 프레임을 생성합니다.

Sora는 행동 인터페이스를 완전히 건너뜁니다. 디코더는 과거 시공간 토큰(past spacetime token)에서 다음 시공간 토큰을 예측합니다. 프롬프트는 시작 조건을 정하지만, 생성 도중에 방향을 바꾸지는 않습니다.

물리적 그럴듯함(Physical plausibility)

Sora 2의 2026년 출시는 물리적 그럴듯함을 명시적으로 강조했습니다. 무게(weight), 균형(balance), 물체 영속성(object permanence), 인과(cause-and-effect)입니다. 팀은 손으로 평가한 그럴듯함 점수(hand-rated plausibility score)로 이를 측정했고, Sora 1에 비해 떨어뜨린 물체, 캐릭터 충돌(character collision), 의도된 실패(예: 점프 실패, a missed jump) 장면을 더 그럴듯하게 처리한다고 설명했습니다.

그럴듯함은 여전히 지배적인 실패 양식(failure mode)입니다. 2024-2025년에 화제가 된 스파게티 먹기, 유리잔으로 음료 마시기 영상은 모델이 지속적 물체 표현(persistent object representation)을 충분히 갖지 못했음을 보여줬습니다. 2026년 모델(Sora 2, Runway Gen-5, HunyuanVideo)은 이를 줄였지만 완전히 없애지는 못했습니다.

자율주행 월드 모델

주행용 월드 모델은 궤적(trajectory), 바운딩 박스(bounding box), 내비게이션 지도(navigation map)에 조건화된 사실적인 도로 장면을 생성합니다. 활용 사례는 다음과 같습니다.

  • Cosmos-Drive-Dreams(NVIDIA): RL 학습용으로 수 분 길이의 주행 영상을 만듭니다.
  • Gaia-2(Wayve): 정책 평가(policy evaluation)를 위한 궤적 조건부 장면 합성입니다.
  • DrivingWorld(Tesla): 다양한 날씨, 시간대(time-of-day), 교통 상황을 시뮬레이션합니다.
  • Vista(ByteDance): 반응형(reactive) 주행 장면 합성입니다.

이 모델들은 야간의 무단횡단 보행자, 빙판 교차로(icy intersection), 흔치 않은 차량 유형처럼 실제 수집에 수백만 마일이 필요한 코너 케이스(corner case) 데이터 수집을 대체합니다.

로보틱스 스택: VLM + 비디오 모델 + 역동역학(inverse dynamics)

떠오르는 세 구성 요소(three-component) 로보틱스 루프는 다음과 같습니다.

  1. VLM이 목표(예: pick up the red cup)를 파싱(parsing)하고 상위 수준 행동 시퀀스(high-level action sequence)를 계획합니다.
  2. 비디오 생성 모델이 각 행동을 실행했을 때 어떻게 보일지 시뮬레이션합니다. N 프레임 앞의 관측을 예측합니다.
  3. 역동역학 모델이 그 관측을 만들어 낼 구체적인 모터 명령(concrete motor command)을 추출합니다.

이는 보상 설계(reward shaping)와 표본 비효율적인 RL을 대체합니다. 월드 모델이 상상(imagination)을 담당하고, 역동역학이 구동(actuation) 루프를 닫습니다. Genie Envisioner가 하나의 구현체이며, 많은 연구 그룹이 이 구조로 수렴하고 있습니다.

평가

  • 시각 품질(Visual quality): FVD(Fréchet Video Distance), 사용자 평가.
  • 프롬프트 정합도(Prompt alignment): 프레임별 CLIPScore, VQA 방식 평가.
  • 물리적 그럴듯함(Physical plausibility): 벤치마크 모음에서의 손 평가(Sora 2 내부 벤치마크, VBench).
  • 조작 가능성(Controllability; 인터랙티브 월드 모델 한정): 행동 → 관측 일관성, 이전 상태로 되돌아갈 수 있는지.

2026년 모델 지형

ModelUseParametersOutputLicense
Sora 2text-to-video, audio1-min 1080p + audioAPI only
Runway Gen-5text/image-to-video10s clipsAPI
Runway GWM-1 Worldsinteractive worldinfinite 3D rolloutAPI
Genie 3interactive world from image11B+playable framesresearch preview
Wan-Video 2.1open text-to-video14Bhigh-quality clipsnon-commercial
HunyuanVideoopen text-to-video13B10s clipspermissive
Cosmos / Cosmos-Driveautonomous driving sim7-14Bdriving scenesNVIDIA open
Magica / Mirage 2AI-native game enginemodifiable worldsproduct

만들어 보기

Step 1: 영상용 3D 패치화(3D patchify)

import torch
import torch.nn as nn


class VideoPatch3D(nn.Module):
    def __init__(self, in_channels=4, dim=64, patch_t=2, patch_h=2, patch_w=2):
        super().__init__()
        self.proj = nn.Conv3d(
            in_channels, dim,
            kernel_size=(patch_t, patch_h, patch_w),
            stride=(patch_t, patch_h, patch_w),
        )
        self.patch_t = patch_t
        self.patch_h = patch_h
        self.patch_w = patch_w

    def forward(self, x):
        # x: (N, C, T, H, W) 형태의 영상 잠재 표현(video latent)입니다.
        x = self.proj(x)
        n, c, t, h, w = x.shape
        tokens = x.reshape(n, c, t * h * w).transpose(1, 2)
        return tokens, (t, h, w)

커널(kernel)과 보폭(stride)이 같은 3D 컨볼루션(nn.Conv3d)은 시공간 패치화 모듈처럼 동작합니다. (T, H, W) -> (T/2, H/2, W/2) 토큰 격자(grid)가 됩니다.

Step 2: 3D 회전 위치 인코딩(3D rotary position encoding)

회전 위치 임베딩(Rotary Position Embeddings; RoPE)을 t, h, w 축에 각각 따로 적용합니다.

def rope_3d(tokens, t_dim, h_dim, w_dim, grid):
    """
    tokens: (N, T*H*W, D)
    grid: (T, H, W) sizes
    t_dim + h_dim + w_dim == D
    """
    T, H, W = grid
    n, seq, d = tokens.shape
    if t_dim + h_dim + w_dim != d:
        raise ValueError(f"t_dim+h_dim+w_dim ({t_dim}+{h_dim}+{w_dim})는 D={d}와 같아야 합니다.")
    assert seq == T * H * W
    t_idx = torch.arange(T, device=tokens.device).repeat_interleave(H * W)
    h_idx = torch.arange(H, device=tokens.device).repeat_interleave(W).repeat(T)
    w_idx = torch.arange(W, device=tokens.device).repeat(T * H)
    # 단순화한 형태: 채널을 주파수로 스케일합니다. 실제 RoPE는 채널 쌍을 회전시킵니다.
    freqs_t = torch.exp(-torch.log(torch.tensor(10000.0)) * torch.arange(t_dim // 2, device=tokens.device) / (t_dim // 2))
    freqs_h = torch.exp(-torch.log(torch.tensor(10000.0)) * torch.arange(h_dim // 2, device=tokens.device) / (h_dim // 2))
    freqs_w = torch.exp(-torch.log(torch.tensor(10000.0)) * torch.arange(w_dim // 2, device=tokens.device) / (w_dim // 2))
    emb_t = torch.cat([torch.sin(t_idx[:, None] * freqs_t), torch.cos(t_idx[:, None] * freqs_t)], dim=-1)
    emb_h = torch.cat([torch.sin(h_idx[:, None] * freqs_h), torch.cos(h_idx[:, None] * freqs_h)], dim=-1)
    emb_w = torch.cat([torch.sin(w_idx[:, None] * freqs_w), torch.cos(w_idx[:, None] * freqs_w)], dim=-1)
    return tokens + torch.cat([emb_t, emb_h, emb_w], dim=-1)

단순화한 덧셈 형태(additive form)입니다. 실제 RoPE는 주파수마다 짝지어진 채널을 회전시키지만, 담고 있는 위치 정보는 동일합니다.

Step 3: 분할 어텐션 블록(divided attention block)

class DividedAttentionBlock(nn.Module):
    def __init__(self, dim=64, heads=2):
        super().__init__()
        self.time_attn = nn.MultiheadAttention(dim, heads, batch_first=True)
        self.space_attn = nn.MultiheadAttention(dim, heads, batch_first=True)
        self.ln1 = nn.LayerNorm(dim)
        self.ln2 = nn.LayerNorm(dim)
        self.ln3 = nn.LayerNorm(dim)
        self.mlp = nn.Sequential(nn.Linear(dim, 4 * dim), nn.GELU(), nn.Linear(4 * dim, dim))

    def forward(self, x, grid):
        T, H, W = grid
        n, seq, d = x.shape
        # 시간 어텐션: 같은 (h, w) 위치에서 시간 축으로 주목
        xt = x.view(n, T, H * W, d).permute(0, 2, 1, 3).reshape(n * H * W, T, d)
        a, _ = self.time_attn(self.ln1(xt), self.ln1(xt), self.ln1(xt), need_weights=False)
        xt = (xt + a).reshape(n, H * W, T, d).permute(0, 2, 1, 3).reshape(n, seq, d)
        # 공간 어텐션: 같은 t에서 (h, w) 위치 축으로 주목
        xs = xt.view(n, T, H * W, d).reshape(n * T, H * W, d)
        a, _ = self.space_attn(self.ln2(xs), self.ln2(xs), self.ln2(xs), need_weights=False)
        xs = (xs + a).reshape(n, T, H * W, d).reshape(n, seq, d)
        xs = xs + self.mlp(self.ln3(xs))
        return xs

시간 어텐션은 각 공간 위치에서 시간 축으로 주목하고, 공간 어텐션은 각 프레임에서 공간 축으로 주목합니다. 하나의 O((THW)^2) 연산 대신 두 개의 O(T^2 + (HW)^2) 연산을 쓰는 셈입니다. 이것이 TimeSformer와 현대 비디오 DiT의 핵심입니다.

Step 4: 작은 비디오 DiT 조립

class TinyVideoDiT(nn.Module):
    def __init__(self, in_channels=4, dim=64, depth=2, heads=2):
        super().__init__()
        self.patch = VideoPatch3D(in_channels=in_channels, dim=dim, patch_t=2, patch_h=2, patch_w=2)
        self.blocks = nn.ModuleList([DividedAttentionBlock(dim, heads) for _ in range(depth)])
        self.out = nn.Linear(dim, in_channels * 2 * 2 * 2)

    def forward(self, x):
        tokens, grid = self.patch(x)
        for blk in self.blocks:
            tokens = blk(tokens, grid)
        return self.out(tokens), grid

실제로 동작하는 영상 생성기는 아니지만, 각 구성 요소의 형상(shape)이 올바르게 맞물리는지를 보여주는 구조 시연(structural demo)입니다.

Step 5: 형상(shape) 확인

vid = torch.randn(1, 4, 8, 16, 16)  # (N, C, T, H, W)
model = TinyVideoDiT()
out, grid = model(vid)
print(f"입력 shape  {tuple(vid.shape)}")
print(f"token grid  {grid}")
print(f"출력 shape  {tuple(out.shape)}")

패치화 이후 grid = (4, 8, 8)out = (1, 256, 32)이 나와야 합니다. 헤드(head)는 토큰별 시공간 패치로 사영(project)하고, 이 결과를 다시 영상으로 역패치화(un-patchify)할 준비를 마친 상태가 됩니다.

사용해보기

2026년의 운영 환경(production) 접근 패턴은 다음과 같습니다.

  • Sora 2 API(OpenAI): 텍스트-투-비디오(text-to-video)와 동기화된 오디오를 제공합니다. 가격은 프리미엄 수준입니다.
  • Runway Gen-5 / GWM-1(Runway): 이미지-투-비디오(image-to-video)와 인터랙티브 월드를 제공합니다.
  • Wan-Video 2.1 / HunyuanVideo: 오픈 소스 자체 호스팅(self-host)이 가능합니다.
  • Cosmos / Cosmos-Drive(NVIDIA): 공개 가중치 기반 주행 시뮬레이션입니다.
  • Genie 3: 연구용 프리뷰(research preview)로 접근 신청이 필요합니다.

인터랙티브 월드 모델 데모를 만든다면, 품질을 위해 Wan-Video에서 시작하고, 상호작용성을 위해 잠재 행동 어댑터(latent-action adapter)를 얹습니다. 자율주행 시뮬레이션이 목적이라면 Cosmos-Drive가 2026년 오픈 레퍼런스입니다.

로보틱스 현장에서 실제로 쓰이는 스택은 다음과 같습니다.

  1. 언어 목표 → VLM(Qwen3-VL) → 상위 수준 계획.
  2. 계획 → 잠재 행동 비디오 모델 → 상상된 롤아웃(imagined rollout).
  3. 롤아웃 → 역동역학 모델 → 저수준 행동(low-level actions).
  4. 실행된 행동 → 관측이 다시 1단계로 들어갑니다.

산출물 만들기

이 레슨에서는 다음 두 산출물을 만듭니다.

  • outputs/prompt-video-model-picker.md: 과제(task), 라이선스(license), 지연(latency)에 따라 Sora 2 / Runway / Wan / HunyuanVideo / Cosmos 중에서 골라 주는 프롬프트입니다.
  • outputs/skill-physical-plausibility-checks.md: 물체 영속성, 중력, 연속성(continuity) 같은 자동화된 점검(automated check)을 정의해서, 생성한 영상을 배포(shipping) 전에 확인하는 스킬(skill)입니다.

연습문제

  1. (쉬움) patch-t=2, patch-h=8, patch-w=8일 때 5초 길이 360p 영상의 토큰 개수를 계산합니다. 이 크기에서 어텐션 메모리가 얼마나 필요한지 추론합니다.
  2. (중간) 위 분할 어텐션 블록을 전체 결합 어텐션 블록(full joint attention block)으로 바꾸고, 형상과 파라미터 개수를 측정합니다. 실제 비디오 모델에 분할 어텐션이 필요한 이유를 설명합니다.
  3. (어려움) 최소한의 잠재 행동 비디오 모델을 만듭니다. 간단한 2D 게임의 (frame_t, action_t, frame_{t+1}) 세쌍(triple) 데이터셋을 사용해서, 행동 임베딩으로 조건화한 작은 비디오 DiT를 학습합니다. 행동이 달라지면 다음 프레임이 달라진다는 점을 보여 줍니다.

핵심 용어

용어흔한 설명실제 의미
월드 모델(World model)"학습된 시뮬레이터(Learned simulator)"상태와 행동이 주어졌을 때 미래 관측을 예측하는 모델
비디오 DiT(Video DiT)"시공간 트랜스포머(Spacetime transformer)"3D 패치화와 분할 어텐션을 갖춘 확산 트랜스포머(diffusion transformer)
잠재 행동(Latent action)"추론된 조작(Inferred control)"프레임 쌍에서 추론한 이산 또는 연속 행동 잠재. 다음 프레임 생성을 조건화한다
분할 어텐션(Divided attention)"시간 다음 공간(Time then space)"블록마다 시간 어텐션과 공간 어텐션을 나눠 O(N^2) 비용을 관리 가능한 수준으로 유지한다
물체 영속성(Object permanence)"물건은 그대로 존재한다(Things stay real)"비디오 모델이 학습해야 하는 장면 속성. 음식과 유리잔에서 전형적으로 실패한다
FVD"프레셰 비디오 거리(Fréchet Video Distance)"FID의 영상 버전. 핵심 시각 품질 지표
역동역학 모델(Inverse dynamics model)"관측에서 행동으로(Observations to actions)"(상태, 다음 상태)를 받아 둘을 연결하는 행동을 출력한다. 로보틱스 루프를 닫는다
Cosmos-Drive"NVIDIA 주행 시뮬레이터(NVIDIA driving sim)"RL과 평가를 위한 공개 가중치 자율주행 월드 모델

더 읽을거리

실습 코드

이 강의의 실습 코드 1개

main
Code

산출물

이 강의에서 생성된 프롬프트, 스킬, 코드 산출물 2개

skill-physical-plausibility-checks

Automated checks for object permanence, gravity, and continuity on any generated video before shipping

Skill
prompt-video-model-picker

Pick Sora 2 / Runway Gen-5 / Wan-Video / HunyuanVideo / Cosmos for a given task, license, and latency target

Prompt

확인 문제

3문제 · 모두 맞추면 완료 표시가 가능합니다

1.Sora 2의 2026년 출시는 향상된 물리적 그럴듯함(physical plausibility)을 강조했습니다. 이는 어떤 구체적인 실패 양식(failure mode)을 겨냥했나요?

2.떠오르는 로보틱스 스택(VLM + 비디오 생성 + 역동역학; inverse dynamics)에서 역동역학 모델은 무엇을 하나요?

3.자율주행(autonomous-driving) 팀은 Cosmos-Drive, Gaia-2, DrivingWorld 같은 월드 모델로 어떤 비용을 대체하나요?

0/3 답변 완료